最新回答
- 2021-1-31 #
相关问题
- Kubernetes:如何从另一个服务/容器扩展部署?kubernetesdeployment2021-01-04 03:23
- docker:即使容器摘要相同,即使指定了不同的图像标签,也请禁用Kubernetes Pod更新dockerkubernetesdeployment2021-01-04 03:25
- kubernetes:有什么办法可以找到部署Pod的AD?kubernetesdeploymentgooglekubernetesengine2021-01-04 02:23
- 没有相关部署的Kubernetes Pod的生产用途是什么?kubernetesdeployment2021-01-04 02:26
图像参考和清单
Kubernetes管理部署,例如 每当您的
kind: Deployment
使用滚动部署策略 清单已更改。主要问题是,每个图像都使用same标签名.这意味着你的
kind: Deployment
清单更新时清单未未更新,因为清单没有变化,所以Kubernetes不会启动新的滚动部署。一个好的做法是,每次推送图像时都使用唯一的图像标签,然后更新
kind: Deployment
清单使用这个新的图像标签名称,因此Kubernetes会自动触发新的滚动部署。可以将某些图像注册表配置为使用"不可变标签名称",这意味着您被强制执行,始终为每个构建的图像使用唯一的标签名称.或者,您可以在
kind: Deployment
中使用完整的图像摘要 清单,这样即使标签名称相同(Image Digest是内容的哈希),您也可以拥有唯一的图像引用。总结:
Use unique image tag names for every build
Update the
kind: Deployment
带有新标签名称的清单保持
kind: Deployment
清单(以及其他yaml清单)在版本控制中,例如 Git参考图片时,请在清单中使用完整的图片摘要
过程与自动化可以通过几种不同的方式来更新清单并将其应用于集群,但是建议在每次更改之后,始终将更新的清单存储在Git存储库中,然后再将其应用于集群.这样,您可以很好地跟踪已更改的内容,并且如果出现故障,更容易返回到工作版本。
通过上述必要的步骤,另一个重要的实践是为此使用automation.在对Git存储库进行每次更改之后,最好触发一个自动化流程来完成工作,最好不要执行任何手动步骤.从历史上看,Jenkins一直是实现此目的的流行工具,但是它具有悠久的历史,并且在容器环境中不能很好地运行.我现在建议使用GitHub Actions,Google Cloud Build之类的工具或Kubernetes集群中的现代系统(如Tekton Pipelines)
使用Tekton构建和部署管道如果您选择在Kubernetes集群中使用Tekton,则可以按以下方式构建项目:
Git将代码更改推送到代码存储库
Tekton触发器从Git系统接收事件并启动新的
PipelineRun
.Tekton管道包含git-clone,构建代码,运行测试以及构建和推送映像的步骤.结果是图像摘要或标签.然后,您在管道中有最后一个任务,如果所有先前任务都成功,则更新
kind: Deployment
使用新的图片摘要和git-push到清单的回购清单中。触发了将清单应用到群集的部署管道(可能使用选择的部署策略,滚动部署或逐步部署或Canary部署)
Book recommendations
Kubernetes Up & Running 2nd edition (from 2019) - it contains a new chapter: 18. Organizing Your Application 描述了如何使用清单和版本控制来管理部署。
连续交付-关于如何使用构建和部署管道和自动化的经典书籍。
替代品在Kubernetes上进行部署可以不使用声明性清单,而可以使用命令式命令进行,而无需任何版本控制的更改,但这是非常不受欢迎的>在专业环境中.尽管自动管道需要花费一些时间来设置和配置,但以声明性和可复制的方式执行此操作很重要。