b-一文读懂Kubernetes部署战略-b (bci原文)
在这篇文章中,咱们将深化钻研Kubees部署概念和一些经常出现战略,了解每种战略的优缺陷。适合的部署战略使咱们能够在颁布运行程序时最大限制地缩小停机时期、增强客户体验并提高牢靠性。
什么是Kubernetes部署战略?
Kubernetes部署是一种申明性语句,理论在YAML文件中性能,用于定义运行程序生命周期以及如何治理对该运行程序的更新。
当将运行程序部署到K8s集群时,所选用的部署战略将选择如何将运行程序从旧版本更新到新版本。某些战略或许会造成停机时期,而其余战略则或许引入测试概念并准许用户剖析。本文将引见两种罕用的基本K8s部署战略:
以下战略被以为是初级部署战略,由于可以以多种方式控制流量的流向:
K8s经常使用滚动更新战略作为自动战略,但在某些状况下或许不实用。让咱们具体讨论每种战略!
1.从新创立部署(RecreateDeployment)
从新创立部署会中断一切的Pod,并用新版本的Pod交流它们。这在旧版本和新版本的运行程序不能同时运转的状况下很有用。经常使用此战略发生的停机时期取决于运行程序封锁和启动所需的时期。由于齐全交流,运行程序形态也会齐全更新。
示例如下,type=Recreate示意为从新创立
spec:replicas:10strategy:type:Recreate
2.滚动更新部署(RollingDeployment)
滚动更新是K8s的自动部署方式,旨在缩小集群的停机时期。滚动更新会将运转旧版本运行程序的Pod逐渐交流为新版本,而无需停机。
为了成功这一点,要经常使用就绪探针(Readinessprobes)
就绪探针监督运行程序何时变为可用形态。假设探针失败,流量将不会发送到该Pod。这些探针用于须要在就绪之前口头局部初始化步骤的运行程序,比如数据库链接、缓存数据初始化,运行的颁布注册等操作。
一旦就绪探针检测到新版本运行程序可用,旧版本运行程序将被删除。假设发生疑问,可以中止部署并回滚到上一个版本,防止整个集群的停机时期。由于每个Pod一一交流,关于较大的集群,部署须要必定的时期。假设在另一个部署成功之前触发了新的部署,版本将更新为新部署中指定的版本,并且尚未部署成功的先前部署版本将被疏忽。
触发滚动更新部署的条件是Pod规范中的某些更改,例如更新Pod的镜像、环境变量或标签。可以经常使用命令kubectlsetimage来更新Pod镜像。
yaml文件的Spec:->strategy:局部可以经常使用两个参数来细化部署:maxSurge和maxUnavailable。这两个参数可以指定为百分比或相对数值。当经常使用水平Pod智能缩放时,应经常使用百分比。
例如,上方的性能要求有10个正本,最多同时创立3个正本,准许在部署时期有1个正本无法用:
spec:replicas:10strategy:type:RollingUpdaterollingUpdate:maxSurge:3maxUnavailable:1
3.蓝/绿部署(Blue/GreenDeployment)
蓝/绿部署触及将新的运行程序版本(绿色)与旧版本(蓝色)一同部署。经过服务选用器对象作为负载平衡器,当新运行程序(绿色)经过测试和验证后,将流量疏导到新运行程序而不是旧运行程序。蓝/绿部署或许会形成老本参与,由于在部署时期须要启动两倍数量的运行程序资源。
为了成功这一点,咱们须要设置一个在部署之前的服务。例如,关于名为web-的运行程序的v1.0.0版本的蓝色部署,yaml文件中的服务选用器局部或许如下所示:
kind:Servicemetadata:name:web-app-01labels:app:web-appselector:app:web-appversion:v1.0.0
蓝色web-app的部署如下:
kind:Deploymentmetadata:name:web-app-01spec:template:metadata:labels:app:web-appversion:"v1.0.0"
当咱们想要将流量疏导到运行程序的新(绿色)版本时,咱们更新manifest文件以指向新版本v2.0.0。
kind:Servicemetadata:name:web-app-02labels:app:web-appselector:app:web-appversion:v2.0.0
绿色运行程序的部署如下:
kind:Deploymentmetadata:name:web-app-02spec:template:metadata:labels:app:web-appversion:"v2.0.0"
4.影子部署(ShadowDeployment)
金丝雀与影子部署一词可以调换经常使用。
影子部署是一种战略,其中新版本的运行程序与现有的消费版本一同部署,关键用于监控和测试目的。在影子部署中,用户流量不会被动路由到新版本。这关于测试新性能的消费负载特意有用。
这种技术比拟复杂,须要不凡要求,尤其是进口流量。例如,有一个商品,您想调用支付服务启动影子测试,最终或许会让客户为他们的订单支付两次,所以复杂性比拟高
5.金丝雀部署(CanaryDeployments)
金丝雀部署可用于让一局部用户测试运行程序的新版本,或许在对新版本的性能性没有齐全信念时经常使用。新版本的一个正本与旧版本一同颁布,其中旧版本运行程序为大局部用户提供服务,而新版本运行程序为一小局部测试用户提供服务。假设新部署成功,则将其逐渐裁减到更多用户。
例如,在一个具备100个运转的Pod的K8s集群中,有95个运转着运行程序的v1.0.0版本,而有5个运转着新的v2.0.0版本。95%的用户将被路由到旧版本,而5%的用户将被路由到新版本。为此,咱们经常使用并行的两个部署,可以区分启动裁减。
旧运行程序的yaml文件中的spec局部或许如下所示:
spec:replicas:95
新运行程序的yaml文件中的spec局部或许如下所示:
spec:replicas:5
在上方的示例中,运转100个Pod或许是不实际践的。更好的方法是经常使用负载平衡器,如、HAProxy或Traefik,或许经常使用相似Istio、HashicorpConsul或Linkrd的服务网格,他们可以提供对流量的更好控制。
6.A/B部署
与金丝雀部署相似,经常使用A/B部署,咱们可以基于一些指标参数(理论是HTTP标头或cookie等)定位给定的用户,并依据权重在不同版本之间调配流量。这种技术被宽泛用于测试某个特定性能的转化率,而后选用转化率最高的版本启动最终部署。
这种方法理论基于搜集的用户行为数据,并用于做出更好的业务决策。在A/B测试时期,用户理论不会原告知新性能,以便启动实在的测试,并可以比拟经常使用旧版本和新版本的用户之间的体验。由于额外的测试期和用户体验剖析,经常使用A/B部署启动部署速度或许会较慢。
可以经常使用Istio和Flagger智能化启动A/B部署。
总结
在本文中,咱们讨论了6种经常出现的K8s部署战略。在选择如何部署或更新您的运行程序时,如何经常使用这些战略,以及经常使用哪些工具来成功每种战略是十分关键的。
初级Kubernetes技术如何学习?
一、初级1. 了解Kubernetes 基础架构与核心组件功能2. 了解Docker基本概念和用法3. 理解Docker与Kubernetes的基本关系4. 能够安装、部署与配置 Kubernetes 集群5. 熟练使用 kubectl 命令操作各种 Kubernetes 资源对象,了解基本概念和使用方法6. 能够在 Kubernetes 上部署、运行、管理工作负载并了解其调度算法7. 能够使用 Service、Ingress 等访问工作负载8. 深入理解Pod相关的配置及使用9. 了解Kubernetes生态相关工具及其作用二、中级1. 理解Kubernetes的资源管理,资源分配、优先级、QoS等2. 能够使用 Flannel、Calico、Macvlan 等常用 CNI 插件配置集群网络3. 能够排查 Kubernetes 集群系统组件、网络、日志、监控告警与存储的故障4. 能够使用 EFK 搭建容器日志系统5. 能够使用 Prometheus、AlertManager 等搭建容器监控告警系统6. 能够配置应用使用持久性存储并了解 Ceph、NFS、GlusterFS 等常见存储工作原理7. 应用生命周期管理8. 理解Kubernetes容器调度的基本流程和使用方法9. Kubernetes集群日常维护10. 理解并使用Kubernetes的用户认证及授权体系(RBAC)11. 理解弹性伸缩(HPA)的基本原理三、高级1. 理解Kubernets核心组件的工作原理,并能够进行问题定位及提供解决方案2. 掌握Kubernetes的admission 控制器,audit,镜像gc,Pod驱赶行为等相关工作原理3. 可以扩展和定制Kubernetes调度器4. 能够用 Operator/CRD 对 Kubernetes 作定制化开发5. 理解 Kubernetes 多可用区/多集群管理模式6. 灵活掌握Kubernetes的扩展机制,可以按需定制,包括CNI、CSI、Ingress、自定义控制器等扩展定制7. 可以解决日志、监控等核心组件的问题定位以及进行性能调优四、专家1. 能够对 Kubernetes 集群、操作系统、镜像、应用做安全加固2. 能够排查 Linux 内核、Docker 容器运行时故障3. 能够基于 Kubernetes、Jenkins等工具构建云原生DevOps方案4. 理解Kubernetes生态主要工具的作用及优缺点,可以在不同场景下灵活运用相关工具并确定最 佳实施方案5. 具备对大规模集群支持的相关经验,包括架构设计、性能调优等稳定性保障6. 理解Kubernetes社区运作模式,能够为社区提供PR7. 理解Kubernetes各组件源代码,并能排查、分析相关问题作为国内领 先的全栈云原生技术服务提供商,时速云特别推出了Kubernetes培训课程,对于刚接触Kubernetes技术、企业计划使用容器及Kubernetes集群、以及计划考取CKA证书的人群会是一个不错的选择。
云原生|Kubernetes技术架构
Kubernetes核心组件
Controller Manager主要提供了一个分发事件的能力,而不同的Controller只需要注册对应的Handler来等待接受和处理事件。 在Controller Manager的帮助下, Controller的逻辑可以做的非常纯粹,只需要实现相应的EventHandler即可,以Deployment controller为例。
Kubernetes default scheduler的特点:基于队列的调度器;一次调度一个Pod;调度时刻全局最优。
云计算批量计算面临的挑战:1、作业管理缺失;2、调度策略局限;3、领域计算框架支持不足;4、资源规划复用、异构计算支持不足
与临时存储相比,持久化存储的优势:
引入PV/SC之后带来更大的效益:
pv/pvc适合在资源管理比较严格的场景
pvc绑定pv的流程
无论在资源管控严格还是资源管控敏捷的场景,资源管理员都希望通过创建K8S的存储接口来管理容器存储资源 K8S通过存储声明(PVC)、存储类(SC)和存储插件(driver)联合工作,满足用户一键式定义,创建存储。
CSI架构:部署简单、功能强大、扩展灵活、容器存储接口的标准
无状态工作负载(deployment)更新
容器健康检查使用 liveness probe (工作负载存活探针)和 readiness probe (工作负载业务探针)。 Kubernetes支持如下三种探测机制:
弹性伸缩是根据业务需求和策略,经济地自动调整弹性计算资源的管理服务。包括 工作负载弹性收缩 和 节点弹性收缩 。
云原生应用特点:
云原生可观测性
目前,Prometheus已经成为云原生监控领域的事实标准
Kubernetes本身并没有用户管理能力,无法像操作Pod一样,通过API的方式创建/删除一个用户实例,也无法在etcd中找到用户对应的存储对象 在Kubernetes的访问控制流程中,用户模型是通过请求方的访问控制凭证(如Kubectl使用的kube-config中的证书、Pod中引入的ServerAccount)产生
认证
鉴权
Istio架构分层主要分为:控制面Istiod(Pilot Citadel Galley Sidecar-Injector)和数据面(Envoy Pilot-Agent)
Sidecar基本介绍
流量治理基本API
简化服务治理配置:熔断、降级,超时,重试,A/B测试,金丝雀发布,基于权重的流量切分,故障检测与恢复
Istio提供以下可观测能力(非侵入):
课程链接:打卡链接:
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。