下面我将播放一段视频,介绍Kubernetes中的蓝/绿色部署。他们有一个简单的示例,其中一个部署名为 blue-nginx,另一个部署名为 green-nginx。
蓝色部署通过名为 bgnginx 的服务公开。要将通信量从蓝色部署传输到绿色部署,请删除该服务,然后通过具有相同名称的服务公开绿色部署。此操作通过以下一行程序完成:kubectl delete svc bgnginx; kubectl expose deploy green-nginx --port=80 --name=bgnginx
显然,这是成功的。然而,我想知道为什么他们不直接使用kubectl edit
来更改服务中的标签,而不是删除并重新创建它。如果我编辑 bgnginx 并将 .metadata.labels.app & .spec.selector.app 设置为 green-nginx,它会实现同样的事情。
删除并重新创建服务是否有好处,或者只是编辑它是否安全?
2条答案
按热度按时间58wvjzkj1#
是的,您可以按照
kubectl edit svc
并编辑标签和选择器。这很好,但是建议使用YAML和其他选项,因为kubectl编辑是容易出错方法。您可能会遇到缩进问题。
删除并重新创建服务是否有好处,或者只是编辑它是否安全?
它更多的是关于遵循最佳实践,并且如果管理的话,您可以方便地使用YAML声明文件进行版本控制。
jjjwad0x2#
kubectl edit
的问题是它需要人来操作文本编辑器,这有点效率低下,而且偶尔也会出错。我怀疑您的文章希望您首先执行
kubectl delete
服务的原因是,如果kubectl expose
命令已经存在,那么它将失败,但是正如@HarshManvar在their answer中建议的那样,更好的方法是将实际的YAML文件签入到源代码控制中您应该能够使用
kubectl apply -f service.yaml
将其部署到集群中,或者使用一个工具自动执行此操作。这里的问题是,您仍然必须编辑YAML文件(或者原则上可以使用
sed
来编辑),并且交换部署将导致额外的提交。在Helm中,我可以用三个独立的Helm版本来设置:您的应用程序的“蓝色”和“绿色”副本,以及仅包含服务的单独顶级版本。
您可以使用其他模板工具(如ytt)或覆盖层(如Kustomize)执行类似的操作。服务的
selectors:
不必匹配其自己的元数据,您可以创建一个与应用程序的两个副本匹配的服务,可能用于金丝雀模式而不是蓝/绿色部署。