k8s readinessProbe+preStop使应用更新时用户无感知

网友投稿 353 2022-09-12

k8s readinessProbe+preStop使应用更新时用户无感知

背景

在K8s部署多副本时候,使用nacos作为服务注册和发现中心,而在多副本应用更新的过程中会出现应用已经停止,但是nacos服务却扔然将流量转发给已经停止的应用,导致报错。

解决办法

1、想办法让应用停止前发送通知给nacos,告诉他应用即将停止,叫nacos不要再转发给他,在这里就使用脚本实现,具体脚本如下:

#!/bin/sh Token=$(curl -s --location --request POST '--form 'username=nacos' --form 'password=nacos'|awk -F "accessToken" '{print $2}'|awk -F ":" '{print $2}'|awk -F '"' '{print $2}') curl -X PUT "http://nacos:8848/nacos/v1/ns/instance?accessToken=${Token}&serviceName=apaas-gateway-provider&groupName=apaas&namespaceId=apaas-srm-huami-dev&ip=${MY_POD_IP}&clusterName=DEFAULT&port=5100&ephemeral=true&weight=1&enabled=1"

说明:此处的MY_POD_IP变量是由deployment的env属性中的status.podIP字段传入的,如下:

containers: - env: - name: MY_POD_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.podIP

2、将以上脚本上传到pod持久化存储的目录,在deployment的preStop的hook执行,如下:

lifecycle: preStop: exec: command: - /home/logs/service_offline_nacos.sh

3、光添加preStop还不够,因为虽然应用在关闭前通知nacos注销应用自身,但是在更新新的应用后当应用更新完但是还不能提供服务的时候svc就会认为应用已经Running,就会将流量转发给他,此时仍然会报错,所以需要添加探针,如下:可读性探针:

readinessProbe: tcpSocket: port: 5100 initialDelaySeconds: 60

最好再添加个存活性检测探针:

livenessProbe: tcpSocket: port: 5100 initialDelaySeconds: 60

PS: initialDelaySeconds没有加上之前会导致应用重启,因为应用还没有完全启动完探针就开始探测了,他认为5100端口没有起来就调用重启任务了。

完整配置如下:

apiVersion: apps/v1 kind: Deployment metadata: name: gateway namespace: test spec: replicas: 2 selector: matchLabels: app: gateway template: metadata: labels: app: gateway spec: containers: - env: - name: MY_POD_IP valueFrom: fieldRef: apiVersion: v1 fieldPath: status.podIP image: harbor.xxx.com/xxx/gateway:2022-03-25-14-53 imagePullPolicy: Always lifecycle: preStop: exec: command: - /home/logs/service_offline_nacos.sh livenessProbe: tcpSocket: port: 5100 initialDelaySeconds: 60 name: gateway ports: - containerPort: 5100 protocol: TCP readinessProbe: tcpSocket: port: 5100 initialDelaySeconds: 60 volumeMounts: - mountPath: /home/logs name: data dnsPolicy: ClusterFirst imagePullSecrets: - name: registry-pull-secret volumes: - name: data persistentVolumeClaim: claimName: gateway-pvc

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:生生不息,持续增长!小米营销亮相BDGF 2021!
下一篇:Kubeadm 部署k8s集群
相关文章

 发表评论

暂时没有评论,来抢沙发吧~