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

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

作者: 天草二十六_简村人 | 来源:发表于2022-12-05 14:38 被阅读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。

  • deployment-xxx.yml 每次部署,k8s会将pod的标签重置。在上一步手动新增的serviceName标签,会被下面的部署脚本替换为app标签。

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
  • 第一步,撤销2个灰度节点


    image.png
  • 从下图中可以看出,它的健康状态为空,没有找到对应的pod节点。


    image.png
  • 而在应用监控中,也没有任何流量请求进来。

  • 第二步,修改service的标签,保持和pod的标签一致。

spec:
  selector:
    app: cloud-xxx-service
  • 接着观察slb的健康状态,现在变成了“未打开”状态,正在检测后端服务


    image.png
  • 几分钟后,观察到,状态恢复为“正常”了。


    image.png

五、总结

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

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

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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/exxifdtx.html