k8s在一次发布过程中由于label标签不对而出现的问题

2022-12-05  本文已影响0人  天草二十六_简村人

一、背景

云课堂服务需要调整gc参数,为了对比调整的效果,将6个jvm节点分为两组:一组是4个正常节点,另一组是2个灰度节点。

两个pod的服务名称不同,但是标签相同。

在service的实现上,取自Pod的标签,包括了正常组和灰度组。示意图见下:


image.png

详细配置见第二项。

有一点值得注意的是,阿里云k8s控制台所做的修改配置,会在下一次部署的时候,被yml内容所覆盖。这也是我们这次出现问题的原因之一。

二、配置

在阿里云k8s容器的控制台,修改了它的标签,由默认的app修改为serviceName。

1、正常节点的Deployment

spec:
  progressDeadlineSeconds: 600
  replicas: 4
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      serviceName: cloud-xxx-service

2、灰度节点的Deployment

spec:
  progressDeadlineSeconds: 600
  replicas: 4
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      serviceName: cloud-xxx-service

3、Service服务

spec:
  selector:
    serviceName: cloud-xxx-service

三、默认的配置

注意,在部署yml中,使用的标签默认都是app。另外在发布的时候,只更新deployment-xxx.yml,并不是每次去更新service-xxx.yml。

1、Deployment

spec:
  progressDeadlineSeconds: 600
  replicas: 6
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: cloud-xxx-service

2、Service

并没有更新,仍旧是上次的标签。

spec:
  selector:
    serviceName: cloud-xxx-service

四、service的实现是SLB

image.png
spec:
  selector:
    app: cloud-xxx-service

五、总结

本次的问题原因有二:
1、发布的标签,默认是app,为了支持灰度,更换了标签为serviceName。影响点除了Deployment外,还有Service。每次部署的时候,只更新了Deployment,而不更新Service。最后导致标签不一致,SLB找不到后端服务。

2、更改标签,一定要更新在.yml文件,否则会导致你在阿里云k8s控制台所做的修改被覆盖。

解决办法:
1、Deployment和Service一起部署,保持标签的一致性。
2、在修改阿里云k8s控制台的设置时,务必及时更新.yml文件内容。

上一篇 下一篇

猜你喜欢

热点阅读