• 如何使用 Kubectl 优雅的滚动更新应用


    Kubernetes 中的 Pod 通常应该是 "Running" 状态,然而有时候我们需要针对正在运行的 Pod 调度到其它的节点或是基于其它特殊的原因,将正常运行的 Pod 进行重启。Pod 的重启方式也有不少,比如常见删除正在运行的 Pod 让其创建新的 Pod 实例(单个 Pod 无法直接使用该方式)。以下罗列出几种常见的方式仅供备忘:

    奇妙的Linux世界
    这里是 Linux 爱好者的聚集地,不仅有各种硬核干货文章和新奇内容​推荐,还常常有福利红包等你来领哟。快快加入我们,一起愉快玩耍吧!
    221篇原创内容

    方法1:滚动重启方法[推荐]

    自 Kubernetes 1.15 版本就开始支持滚动重启部署。这是 Kubernetes 中最快的重启机制,因为它是新增的。下面给出的命令会一个一个地关闭并重新启动部署中的每个 Pod。

    $ kubectl rollout restart deployment nginx-deploy

    提示:由于大多数容器仍在运行,因此整个过程是纵享丝滑--无感知的。

    方法2:环境变量方法

    这种方式就是给运行的容器分配一个新的环境变量,来强制 Pod 重新启动。例如: 增加一个容器部署日期(实际可能未使用到该变量)

    $ kubectl set env deployment nginx-deploy DEPLOY_DATE="$(date)"

    提示:在上面的场景中,使用了set env 修改了环境变量,deployment [deployment name] 选择了你的 deployment,DEPLOY DATE="$(date)" 修改了deployment date 并导致pod 更新。这种方式也是无感知的。

    方法3:副本扩/缩容

    当副本数量设置为 0 时,Kubernetes 会消除它不再需要的副本。设置大于 0 后,Kubernetes 会生成新的副本。

    $ kubectl scale --replicas=0 deployment nginx-deploy
    $ kubectl scale --replicas=N deployment nginx-deploy

    以上方式会中断业务,我们也可以使用不中断业务的方式来重启应用。比如记录当前的 Pod 副本数量,使用 scale --replicas 命令来分配一个大于当前的副本数值的值,使用 kubectl delete pod 方式删除旧 Pod,最后将使用scale --replicas 还原成正常的副本数量。

    提示:不建议使用这种方式来重启应用。

    结论

    Kubernetes 是一个非常牛X的编排系统,然而只要是系统,就一定会出现问题。当出现问题时,可以利用上述 3 种方式快速安全地让您的应用程序恢复并运行,而不会影响用户体验。

  • 相关阅读:
    《计算机图形学-基于3D图形开发技术》读书笔记
    【转】OpenGL和D3D 矩阵对比
    【转】D3D中详细拾取操作
    根据点坐标改变字体显示位置
    静态常量和常量在类中的初始化
    MFC单文档中使用D3D9
    单文档切换OpenGL视图
    超大地形的处理 (Terrain Visualization)【转自知乎】
    又出现这种问题。。。
    属性
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16336423.html
Copyright © 2020-2023  润新知