zoukankan      html  css  js  c++  java
  • Kubernetes中利用Kubectl set 让Deployment更新镜像

    问题描述

    我的deployment有单个pod,我的自定义docker镜像如下:

    containers:  
      - name: mycontainer    
        image: myimage:latest
    

    在开发过程中,我想推送新的最新版本并更新Deployment。无法明确定义tag/version并为每个构建增加它,并且无法找到如何做到这一点:

    kubectl set image deployment/my-deployment mycontainer=myimage:1.9.1
    

    问题回答

    配置标签更新触发Deployment更新

    您可以使用grace period(例如30秒或更长时间,根据容器启动时间和镜像大小)配置您的pod,并设置“imagePullPolicy:”Always“。并使用kubectl delete pod pod_name。将创建一个新容器并且最新镜像自动下载,然后旧容器终止。

    例子:

    spec:  
      terminationGracePeriodSeconds: 30  
      containers:  
      - name: my_container    
        image: my_image:latest    
        imagePullPolicy: "Always"
    

    我目前正在使用Jenkins进行自动构建和打镜像标签,它看起来像这样:

    kubectl --user="kube-user" --server="https://kubemaster.example.com"  --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
    

    Kubectl set 命令设置触发Deployment更新

    另一个技巧是最初运行:

    kubectl set image deployment/my-deployment mycontainer=myimage:latest
    

    然后:

    kubectl set image deployment/my-deployment mycontainer=myimage
    

    它实际上会触发滚动更新,但请确保您还有imagePullPolicy:“Always”设置。

    我发现的另一个技巧是,您不必更改镜像名称,更改将触发滚动更新的字段的值,例如terminationGracePeriodSeconds。您可以使用kubectl编辑部署your_deployment或kubectl apply -f your_deployment.yaml或使用如下补丁:

    kubectl patch deployment your_deployment -p   '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
    

    只需确保始终更改数值。

    使用kubectl rollout 命令也可以让pod 优雅滚动重启

    kubectl rollout restart deployment xxxx
    

    使用这条命令将重新启动对应的资源。

    参考:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#rollout

  • 相关阅读:
    Mysql(11)_Mysql权限与安全
    Mysql(10)_存储过程与流程控制
    Java(43)_AWT事件处理挂关闭生效
    6.实现合同测试用例
    6.测试库优化
    5.案例回顾及编写测试用例
    4.测试案例实现代码库与测试用例V2.0
    3.测试案例实现代码库与测试用例
    markdown语法学习
    1.faker批量随机造数据
  • 原文地址:https://www.cnblogs.com/Serverlessops/p/13409009.html
Copyright © 2011-2022 走看看