关于蓝绿发布、灰度以及滚动发布的记录
蓝绿发布项目逻辑上分为AB组,在项目升级时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。
当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。
最后,B组也升级完成,负载均衡重新接入B组,此时,AB组版本都已经升级完成,并且都对外提供服务。
特点
如果出问题,影响范围较大;
发布策略简单;
用户无感知,平滑过渡;
升级/回滚速度快。
缺点
需要准备正常业务使用资源的两倍以上服务器,防止升级期间单组无法承载业务突发;
短时间内浪费一定资源成本;
基础设施无改动,增大升级稳定性。
蓝绿发布在早期物理服务器时代,还是比较昂贵的,由于云计算普及,成本也大大降低。
灰度发布灰度发布只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。
特点
保证整体系统稳定性,在初始灰度的时候就可以发现、调整问题,影响范围可控;
新功能逐步评估性能,稳定性和健康状况,如果出问题影响范围很小,相对用户体验也少;
用户无感知,平滑过渡。
缺点 ...
k8s service 笔记
Service 简介 通过Deployment来创建一组Pod来提供具有高可用性的服务。虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
Pod IP仅仅是集群内可见的虚拟IP,外部无法访问。
Pod IP会随着Pod的销毁而消失,当Deployment对Pod进行动态伸缩时,Pod IP可能随时随地都会变化。
在实际应用中,如果通过Nginx配置后端服务地址的话,由于 Pod ip 会出现变动,每次都需要手动修改配置文件,不方便。当然也可以使用ZooKeeper或者ETCD等注册中心工具,实现服务的自动注册与发现,动态更新配置即可。
因此,Kubernetes中的Service对象就是解决以上问题的实现服务发现核心关键。
Service能够提供负载均衡的能力,但是在使用上有以下限制。只提供 4 层负载均衡能力,而没有 7 层功能,但有时我们可能需要更多的匹配规则来转发请求,这点上 4 层负载均衡是不支持的
代理 kube-proxy 一个Kubernetes的Service是一种抽象,它定 ...
k8s中控制器详解
常见Pod控制器
ReplicaSet:适合无状态的服务部署用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。ReplicaSet主要三个组件组成:(1)用户期望的pod副本数量(2)标签选择器,判断哪个pod归自己管理(3)当现存的pod数量不足,会根据pod资源模板进行新建帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的控制器,而是使用Deployment。
deployment:适合无状态的服务部署工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
StatefullSet:适合有状态的服务部署。需要学完存储卷后进行系统学习。
DaemonSet:一次部署,所有的node节点都会部署,例如一些典型的应用场景:
运行集群存储 daemon,例如在每个Node上运行 glusterd、ceph
在每个Node上运行日志收集 daemon,例如 fluentd、 logstash
在每个Node上运行监控 daemon,例如 ...
k8s中pod生命周期详解
Pod阶段 使用kubectl get pods命令获取到的结果中,STATUS被称之为phase(个人理解为阶段,不过网上很多翻译为相位,相位的解释跟波有关,可自行百度)。 当然也可以通过kubectl explain pod.status命令来查看Pod状态的枚举值,Pod的状态定义在 PodStatus 对象中,其中有一个phase字段。 无论是手动创建还是通过控制器创建Pod,Pod对象总是应该处于其生命进程中以下几个阶段phase之一:
挂起(Pending):apiserver创建了pod资源对象并存入etcd中,但是还没有被调度器调度到合适的节点或者镜像正在下载中;
运行中(Running):Pod已经被调度至某节点,并且所有容器都已经被kubelet创建完成。至少有一个容器正在运行,或者正处于启动或重启状态;
成功(Succeeded):Pod中的所有容器都被成功终止,并且不会再重启;
失败(Failed):Pod中的所有容器都已终止了,但至少有一个容器是因为终止失败,容器以非0状态退出或者被系统终止; ...
k8s中pod简介
简介 Pod是kubernetes集群能够调度的最小单元,Pod是容器的封装,这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。
为什么不直接调度container 如果调度的基本单元就是容器,对于一个非常简单的应用可以直接被调度使用,没有什么问题,但是实际的很多应用程序是由多个进程组成的,如果都部署到一个容器中,由于Docker管理的进程是pid=1的主进程,其他进程没办法进行管理了,而且一个容器最好只干一件事情,所以在真实的环境中不会使用这种方式。 如果将程序拆分成很多容器进行部署,就可能出现一个应用下面的关联的容器被调度到了不同的节点上,无法实现本地通信。 所以通过Pod将这些容器绑定在一起,并将他们作为一个整体进行管理,这样就可以保证这些容器始终在同一个节点上面,这也就是Pod设计的初衷。
原理 在同一个Pod中的容器是共用了存 ...
安全组与防火墙
安全组与防火墙的区别很多人分不清楚OpenStack中安全组(security group)和防火墙(firewall)的区别,因为二者都是做网络访问控制的,并且都是基于iptables实现的。
其实二者的区别还是比较大的:
security group主要是做主机防护的,换句话说安全组是和虚拟机的port相关联,安全组是针对每一个port做网络访问控制,所以它更像是一个主机防火墙。而firewall是针对一个VPC网络的,它针对的是整个VPC的网络控制,通常是在路由做策略。因此security group在计算节点的tap设备上做,而firewall在网络节点的router上做。
相对于传统网络模型,security group其实就是类似于操作系统内部自己配置的防火墙,而firewall则是旁挂在路由器用于控制整个局域网网络流量的防火墙。
security group定义的是允许通过的规则集合,即规则的动作就是ACCEPT。换句话说定义的是白名单规则,因此如果虚拟机关联的是一个空规则安全组,则虚拟机既出不去也进不来。并且由于都是白名单规则,因此安全组规则顺序是无所谓的,而且一个虚 ...
OpenStack负载均衡Octavia简介
什么是负载均衡负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
负载均衡的作用对多台服务器进行流量分发的服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。
提高可用性和访问速度在单个可用区或多个可用区内的多个目标之间自动分配流量。
运行状况检查检测无法正常运行的目标、停止向它们发送流量,然后将负载分散到剩余的正常运行的目标上。
安全性功能创建和管理与负载均衡器关联的安全组,以提供更多联网和安全选项。
TLS 终止提供集成化证书管理和 SSL/TLS 解密,可以灵活地集中管理负载均衡器的 SSL 设置,并从应用程序上卸载 CPU 密集型工作。
负载均衡分类
软负载均衡
软件实现负载均衡
硬负载均衡
硬件设备
四层/七层负载均衡
二层的就是基于MAC地址,二层负载均衡会通过一个虚拟MAC地址接受请求,然后再分配到真实的MAC地址。
三层负载就是通过一个虚拟IP地址,然后再 ...



