ingress rollingUpdate 踩坑记录
发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,网上很多文档都说deployment 配置readiness就可以实现无损rolling update,事实真的是这样吗?最近我们在生产环境发现一个现象,当deployment 定义的 replica
千家信息网最后更新 2024年10月02日ingress rollingUpdate 踩坑记录
网上很多文档都说deployment 配置readiness就可以实现无损rolling update,事实真的是这样吗?
最近我们在生产环境发现一个现象,当deployment 定义的 replicas 实例数只有1个的时候,执行rollingupdate 会有坑
按照官方文档的说明,deployment 执行rollingupdate 在启动时会先拉起新版本pod再干掉旧版本的pod,逐步将所有pod 升级成新版本
但实际测试过程中发现,执行rollingupdate 时,旧replicas 中的pod 立马会被干掉一个,如所示:
rollingupdate 前:
root@ubuntu:~ # kubectl get rsNAME DESIRED CURRENT READY AGEwebtest-static-test-com-56678f6856 1 1 1 50m
rollingupdate 中:
root@ubuntu:~ # kubectl get rsNAME DESIRED CURRENT READY AGEwebtest-static-test-com-56678f6856 0 0 0 50mwebtest-static-test-com-7d785c987 1 1 0 25m
执行rollingupdate 时,deployment 会创建一个新的rs,随即将旧rs 中的pod 干掉
可以看到这里不管新旧pod READY 的字段都是0,这里会有问题,执行rollingupdate 如果新版本服务启动比较慢(例如tomcat),那这段时间服务都不可用
rollingupdate 后:
root@ubuntu:~ # kubectl get rsNAME DESIRED CURRENT READY AGEwebtest-static-test-com-56678f6856 1 1 1 50mwebtest-static-test-com-7d785c987 0 0 0 25m
从另外一个终端每隔1s 发起一次curl 请求,可以看到升级期间服务中断:
root@ubuntu: ~ # for i in {0..99};do curl http://webtest-static.test.com/index.html ;echo;sleep 1;doneThis is server01 - Version - 2This is server01 - Version - 2503 Service Temporarily Unavailable 503 Service Temporarily Unavailable
nginx/1.15.8 503 Service Temporarily Unavailable 503 Service Temporarily Unavailable
nginx/1.15.8 ... ... This is server01 - Version - 3This is server01 - Version - 3
当实例数(replicas 数) > 1 时,rollingupdate 过程中服务不会中断
附:deployment yaml
apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: webtest-static-test-comspec: strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 replicas: 1 template: metadata: labels: app: webtest-static-test-com domain: webtest-static.test.com version: v1 spec: imagePullSecrets: - name: registry.cn-hangzhou.aliyuncs.com containers: - name: webtest-static-sysop-duowan-com image: registry.cn-hangzhou.aliyuncs.com/test/webtest_static:2.6 command: ["/bin/bash","/data/scripts/run.sh"] - name: DLC-WEBTEST--WEBTEST1 value: "true" ports: - containerPort: 80 readinessProbe: exec: command: - curl - http://webtest-static.test.com/index.html - -x - "127.0.0.1:80" initialDelaySeconds: 20 periodSeconds: 5 successThreshold: 1---apiVersion: v1kind: Servicemetadata: name: webtest1-svc labels: app: webtest-static-test-com test: test1spec: ports: - port: 80 targetPort: 80 protocol: TCP name: http selector: app: webtest-static-test-com
服务
实例
文档
过程
升级
事实
会创
只有
字段
官方
实际
新旧
时候
时间
版本
环境
现象
终端
问题
测试
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖南省 网络安全应急预案
33岁学习网络技术
大疆农业管理平台服务器中断
小p数据库怎么打开
数据库及其应用试题
寻求农场游戏软件开发
尚婕网络技术有限公司
火山抖音服务器几点升级完毕
网络安全中的信息是什么
软件开发师的发展路径
软件开发项目的时间管理
无线网络安全性低是什么意思
美国软件开发程序员证书
数据库中分离之后怎么删掉
数据库员工每月工资
2022年数据库系统工程师考试
江西施工审批管控软件开发平台
徐州信息网络技术
阿里adb数据库语法1726
重庆联想服务器服务商
网络安全每一季度的测试卷
鑫泽网络技术公司吉祥棋牌
网络安全知识绘画手抄报
服务器管理记录表
明日方舟干员数据库下载
bt软件开发平台
软件开发外包合同审核
软件开发代名词
电子温州古籍数据库
数据库技术数据视图