k8s deploy资源更新与检查
在k8s的资源对象中deployment类型的资源对象几乎是我们在集群运维中打交道最多的了,手动修改的话很方便命令也简单。但是如果想把这些操作放到脚本中形成自动化的过程就得想其他的方法了。
下面介绍两个命令,直接在命令行修改deployment的镜像
# kubectl set -n namespaceName image deployment nginx nginx=registry.ctwifi.cn:5000/web/nginx:1.20 # kubectl patch -n namespaceName deployment nginx --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image":"registry.ctwifi.cn:5000/web/nginx:1.17"}]}}}}'
kubectl set 和 kubectl patch命令都可以直接对deployment对象做更新
kubectl patch命令的其他用法
# 添加和删除nodeSelector标签 kubectl patch deployment -n dev $i -p '{"spec":{"template":{"spec":{"nodeSelector":{"environment":"informal"}}}}}' kubectl patch deployment -n dev $i --type=json -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/env"}]'
那我们修改之后deployment有没有正常启动呢,需要一个脚本来监控deployment在修改之后的状态
#!/bin/bash # 设置Deployment名称和命名空间 deployment_name="your-deployment" namespace="your-namespace" # 检查Deployment是否处于"RollingUpdate"状态 check_status() { kubectl get deployment "$deployment_name" -n "$namespace" -o jsonpath='{.status.conditions[?(@.type=="Progressing")].reason}' } # 循环检查Deployment状态,直到出现错误或者更新成功 while true; do status=$(check_status) if [[ $status == "ProgressDeadlineExceeded" ]]; then echo "Deployment更新失败!" break elif [[ $status != "ReplicaSetUpdated" ]]; then echo "Deployment正在更新中..." sleep 10 else echo "Deployment更新成功!" break fi done
这样才算完全
参考连接:https://blog.csdn.net/qq_31977125/article/details/103142906
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了