ingress rollingUpdate 踩坑记录
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,网上很多文档都说deployment 配置readiness就可以实现无损rolling update,事实真的是这样吗?最近我们在生产环境发现一个现象,当deployment 定义的 replica
千家信息网最后更新 2025年02月22日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安全错误
数据库的锁怎样保障安全
svn服务器安全设置
中学网络安全保障制度
网络安全防护检测技术
银行网络安全设计方案pdf下载
国美互联网科技
笔记本改服务器
软件开发进展缓慢原因
数据库安全子系统定义
学习网络技术的方法
rest多维数据库
sql 向数据库中添加字段
rfid车载卡数据库
富民第三方软件开发市场报价
无锡特殊网络技术销售厂家
软件开发能报二建吗
博世软件开发怎么样
江西软件开发那个学校
容器云网络技术
富顺租房网络安全
吉林网络技术服务供应商家
个体户行业可以写软件开发吗
wpf 最适合什么数据库
信工所网络安全
湖南省网络技术学院
网络安全大赛英语
软件开发cg
网络技术安全风险
网络服务器安全构建
网络安全检查报告清单
学编程可以学数据库吗