当前位置: 首页 > 科技观察

Kubernetes先进的部署策略集

时间:2023-03-15 09:18:47 科技观察

在现代应用技术领域,容器编排平台为基于微服务的应用简化基础设施配置,通过模块化实现高效的工作负载管理。Kubernetes作为一个广泛采用的支持多种部署资源的平台,以CI/CD流水线的形式方便了各种应用程序的大规模部署和管理。虽然Kubernetes提供滚动更新作为默认部署策略,但某些用例需要非常规方法来部署或更新集群中的服务。下面,我们将基于对基本Kubernetes部署概念的回顾,深入探讨各种高级Kubernetes部署策略、它们的优缺点以及它们的用例。Kubernetes的部署理念在部署过程中,集群管理员可以自定义应用程序的生命周期和执行更新的方式。另一方面,Kubernetes通常使用部署资源以声明的方式更新各种应用程序。它的自动化部署方法实现并维护每个集群对象和应用程序所需的状态。此外,其后端可以在无需人工干预的情况下以安全且可重复的方式执行应用程序更新。换句话说,部署Kubernetes可以帮助集群管理员实现:部署单个pod或副本集更新一组pod或副本集回滚到早期版本暂停或继续部署容器化应用程序的更新过程,以及如何更新将应对持续交付的挑战。Kubernetes对象虽然Kubernetes可以使用多种工作负载资源对象作为持久实体来管理集群的状态,但是KubernetesAPI通常使用Deployment(部署)、ReplicaSet(副本集)、StatefulSet(有状态集)和DaemonSet(守护程序集)四种资源,用于对应用程序进行声明性更新。下面我们来详细了解一下这四种资源的特性:Deployment作为Kubernetes资源,Deployment可以用来定义和标识应用程序所需的状态。集群管理员为了部署controller,在Deployment的YAML文件中描述期望的状态,并据此逐步将实际状态改变为期望状态。为了保证高可用性,DeploymentController也会通过持续监控按需用健康的集群节点和Pod替换故障的集群节点和Pod。ReplicaSetReplicaSet可以用来维护一定数量的pod,保证它们的高可用。ReplicaSet的manifest文件会包含以下字段:用于标识属于某个set的podselector。通过replicas的数量,表示集合中应该有多少个pod。通过一个pod模板,它显示了新的pod应该创建哪些数据。满足副本集的条件。StatefulSetStatefulSet对象可以管理有状态应用程序中的pod部署和扩展。该资源将基于相同的容器规范管理pod,并保证整组pod的唯一性和有序排列。StatefulSet的持久性pod标识符允许集群管理员将他们的工作负载附加到高度可用的持久性存储卷。DaemonSetDaemonSet通过确保一组节点正在运行pod的副本来协助维护应用程序部署。DaemonSet资源主要用于管理各个agent的部署和生命周期,例如:daemonprocessnodesmonitordaemonprocessnodemonitoringofeachclusterstorageagentlogoneachnode你也可以使用链接--https://kubernetes有关各种Kubernetes工作负载资源的更详细列表,请参阅.io/docs/concepts/workloads/controllers/。使用deployments更新Kubernetesdeployments提供了一种可预测的方式来启动和停止pod。有了这些资源,我们可以轻松地以自主和迭代的方式实施部署、回滚更改和管理软件发布周期。目前,Kubernetes通过提供多种部署策略来实现更小、更频繁的更新,并为应用程序提供以下优势:通过更快的客户反馈、更好的功能优化、缩短上市时间以及提高DevOps团队生产力默认情况下,滚动更新由Kubernetes可以作为其标准部署策略,一次性用新版本替换旧pod,以避免集群停机。此外,Kubernetes还支持各种高级部署策略,包括蓝绿部署、金丝雀部署和A/B部署,具体取决于目标和功能类型。下面,让我们详细讨论这些策略的特点、优缺点。结合Kubernetes部署的高级策略部署配置和路由功能,可以方便发布团队在提交完整版本前,在实时生产环境中测试新功能的有效性。为此,开发者可以利用Kubernetes支持的高级部署策略来精确控制特定版本的质量。当然,采用哪种Kubernetes部署方式来发布应用更新和新功能取决于实际用例和工作量。蓝绿部署在蓝绿策略中,应用程序的新旧实例同时部署。在用户继续访问现有版本(蓝色)的同时,站点可靠性工程师(SRE)和QA团队可以使用相同数量的新版本(绿色)实例。一旦QA团队确认绿色版本已通过所有测试要求,用户将被重定向到新版本。这通常是通过更新负载均衡服务选择器字段中的版本标签来实现的。通常,当开发人员希望避免版本控制问题时,蓝绿部署效果很好。使用蓝绿部署策略假设应用程序的第一个版本是v1.0.0,可用的第二个版本是v2.0.0。然后下面的代码段指向服务的第一个版本:apiVersion:v1kind:Servicemetadata:name:darwin-service-aspec:type:LoadBalancerselector:app:nginxversion:v1.0.0ports:-name:httpport:80targetPort:80以下是指向第二个版本的服务:apiVersion:v1kind:Servicemetadata:name:darwin-service-bspec:type:LoadBalancerselector:app:nginxversion:v2.0.0ports:-name:httpport:80targetPort:http一旦我们完成了必要的测试并批准了第二个版本,指向第一个服务的选择器需要更改为v2.0.0:apiVersion:v1kind:Servicemetadata:name:darwin-service-aspec:type:LoadBalancerselector:app:nginxversion:v2.0.0ports:-name:httpport:80targetPort:http如果应用程序的新版本按预期工作,则可以“推出”v1.0.0。金丝雀部署在金丝雀策略中,部分用户会被路由到托管新版本的pod。这个用户群会逐渐增加,而连接到旧版本的群体会相应减少。此策略可用于比较一组用户使用这两个版本的体验。如果没有检测到错误,我们就可以将新版本推送给留在旧版本上的用户。使用金丝雀部署策略原生Kubernetes金丝雀部署过程包括以下步骤:1.通过以下方式部署运行版本1所需的副本:部署第一个应用程序:$kubectlapply-fdarwin-v1.yaml将其扩展到所需的规模副本数:$kubectlscale--replicas=9deploydarwin-v12。部署版本2的实例:$kubectlapply-fdarwin-v2.yaml3。测试版本2是否已成功部署:$service=$(minikubeservicedarwin--url)$whilesleep0.1;卷曲“$服务”;完成4。如果部署成功,缩放版本2的实例数:$kubectlscale--replicas=10deploydarwin-v25。一旦所有副本都在线,您就可以“优雅地”删除版本1:$kubectldeletedeploydarwin-v1A/B部署通过A/B部署,管理员可以将特定的用户子集路由到/或以新版本为条件。此类部署主要用于衡量用户群对某些新功能的反应。A/B部署有时被称为“暗启动”,因为用户不知道他们在测试期间已经获得了新功能。使用A/B部署策略以下是如何在Istio服务网格上执行A/B测试的示例。这将有助于使用流量权重来推出不同的版本:1.假设Istio已经安装在集群上,那么我们首先需要部署两个版本的应用程序:$kubectlapply-fdarwin-v1.yaml-fdarwin-v2.yaml2。然后,我们可以通过Istio网关发布两个版本,并使用以下命令将请求匹配到第一个服务:$kubectlapply-f./gateway.yaml-f./virtualservice.yaml3。然后,我们可以使用下面的命令来根据权重应用Istio的VirtualService规则:$kubectlapply-f./virtualservice-weight.yaml它将在版本之间以1:10的比例分配流量的权重。为了转移流量的权重,我们可以编辑每个服务的权重,然后通过KubernetesCLI更新VirtualService规则。每种高级部署策略适用的地方由于Kubernetes用例因可用性要求、预算限制、可用资源和其他考虑因素而异,因此目前没有一种放之四海而皆准的部署策略。当您选择部署策略时,您需要考虑下表:Kubernetes部署策略比较总结Kubernetes管理员可以通过各种部署资源更新Pod、回滚到早期版本或通过建立高效的版本控制系统来扩展基础架构。通过管理不同版本的应用程序来满足不断增长的工作负载并最大限度地减少停机时间。上面介绍的各种Kubernetes高级部署策略可以在一定程度上方便管理员将流量和请求路由到特定的版本,从而处理真实测试环境中的各种错误。同时,这些策略也经常被用来在管理员和开发人员完全提交变更之前验证新功能是否可以按照原计划运行,并实现各种具有足够回滚选项的松散耦合服务。实现应用程序更新和功能的快速交付。当然,具体如何选择还要看你的实际应用环境,参考上面的对照表进行选择。其他参考资源使用kubectl创建部署Kubernetes的各种部署用例Kubernetes部署生命周期的不同状态译者介绍JulianChen,51CTO社区编辑,拥有十余年IT项目经验实施经验,善于管控内外部资源和风险,注重传播网络与信息安全知识和经验;持续以博客文章、专题和翻译的形式分享前沿技术和新知识;经常以线上线下等方式开展信息安全培训和讲座。原标题:AdvancedKubernetesDeploymentStrategies,作者:SudipSengupta