Kubernetes -重新配置服务以指向新部署(蓝色/绿色)

yzuktlbb  于 2023-03-01  发布在  Kubernetes
关注(0)|答案(2)|浏览(127)

下面我将播放一段视频,介绍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,它会实现同样的事情。
删除并重新创建服务是否有好处,或者只是编辑它是否安全?

58wvjzkj

58wvjzkj1#

是的,您可以按照kubectl edit svc并编辑标签和选择器
这很好,但是建议使用YAML和其他选项,因为kubectl编辑容易出错方法。您可能会遇到缩进问题。
删除并重新创建服务是否有好处,或者只是编辑它是否安全?
它更多的是关于遵循最佳实践,并且如果管理的话,您可以方便地使用YAML声明文件进行版本控制。

jjjwad0x

jjjwad0x2#

kubectl edit的问题是它需要人来操作文本编辑器,这有点效率低下,而且偶尔也会出错。
我怀疑您的文章希望您首先执行kubectl delete服务的原因是,如果kubectl expose命令已经存在,那么它将失败,但是正如@HarshManvar在their answer中建议的那样,更好的方法是将实际的YAML文件签入到源代码控制中

apiVersion: v1
kind: Service
metadata:
  name: myapp
  labels:
    app.kubernetes.io/name: myapp
spec:
  selector:
    app.kubernetes.io/name: myapp
    example.com/deployment: blue

您应该能够使用kubectl apply -f service.yaml将其部署到集群中,或者使用一个工具自动执行此操作。
这里的问题是,您仍然必须编辑YAML文件(或者原则上可以使用sed来编辑),并且交换部署将导致额外的提交。

spec:
  selector:
    app.kubernetes.io/name: myapp
    example.com/deployment: {{ .Values.color }}

在Helm中,我可以用三个独立的Helm版本来设置:您的应用程序的“蓝色”和“绿色”副本,以及仅包含服务的单独顶级版本。

helm install myapp-blue ./myapp
# do some isolated validation
helm upgrade myapp-router ./router --set color=blue
# do some more validation
helm uninstall myapp-green

您可以使用其他模板工具(如ytt)或覆盖层(如Kustomize)执行类似的操作。服务的selectors:不必匹配其自己的元数据,您可以创建一个与应用程序的两个副本匹配的服务,可能用于金丝雀模式而不是蓝/绿色部署。

相关问题