zoukankan      html  css  js  c++  java
  • kubernetes-Deployment

    1 Deployment介绍

    1.1 相关术语

    Pod:每个Pod是一个或一组紧密相关的容器,每个Pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序,是K8S调度的基本单位。
    ReplicationController:简称RC,旨在创建和管理一个Pod的多个副本(replicas)。当Pod副本数少于指定数目,RC就会启动运行新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本。
    ReplicaSet:是新一代的RC,其相比于RC,Pod选择器的表达能力更强,其选择器可匹配缺少某个标签或特定标签名的Pod。
    Deployment:是一种更高阶的资源,用于部署应用程序并以声明的方式升级应用。当创建一个Deployment时,ReplicaSet资源会随之创建,ReplicaSet是新一代的ReplicationController,并推荐使用它替代ReplicationController来复制和管理Pod,在使用Deployment时,实际的Pod是由Deployment的ReplicaSet创建和管理的。

    1.2 Deployment的使用机制

    使用Deployment机制

    2 Deployment使用

    2.1 Deployment生命周期

    1、创建deployment
    $ kubectl create -f xxx.yaml
    2、查看当前运行的deployment
    $ kubectl get deployment
    3、更新deployment
    $ kubectl edit deployment/deployment_name
    4、删除deployment
    $ kubectl delete deployment deployment_name

    3 Deployment更新

    3.1 更新策略

      在Deployment中,可以通过spec.strategy指定Pod更新的策略,目前支持:Recreate(重建)和RollingUpdate(滚动更新),默认是RollingUpdate。
    Recreate:设置spec.strategy.type=Recreate,更新方式为:Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod。
    RollingUpdate:设置spec.strategy.type=RollingUpdate,更新方式为:Deployment会以滚动的方式来渐变性的更新Pod,即Pod新版本的递增,旧版本的递减的一个过程。

    3.2 滚动更新

    3.2.1 概念

    “滚动”,给人的是一种“圆”的印象,持续,不中断的意思,类似于“持续交付”的理念。RollingUpdate策略指一次仅更新一个Pod,并且逐个更新,而不是一次性将所有的服务都关闭,避免业务中断。

    3.2.2 原理

    滚动更新流程
    1)初始创建Deployment,系统创建了一个ReplicaSet,并按照用户的需求创建了3个Pod副本;
    2)当更新Deployment时,系统创建一个新的ReplicaSet,并将其副本数量扩展到1,然后将旧的ReplicaSet缩减为2;
    3)系统继续按照相同的更新策略对新旧两个ReplicaSet进行逐个调整。
    4)最后,新的ReplicaSet运行了3个新版本的Pod副本,旧的ReplicaSet副本数量则缩减为0。

    4 Deployment回滚

    4.1 概念

    回滚:通过滚动升级的策略可以平滑的升级Deployment,若升级出现问题,需要最快且最好的方式回退到上一次能够提供正常工作的版本。为此K8S提供了回滚机制。
    revision:更新应用时,K8S都会记录当前的版次,即为revision,当升级出现问题时,可通过回滚到某个特定的revision,默认配置下,K8S只会保留最近的几个revision,可以通过Deployment配置文件中的spec.revisionHistoryLimit属性增加revision数量。
    更新或回滚:每次更新或回滚时,revision都会自增1,回滚可以看作是一次更新,是一次更新为原版本的操作。

    4.2 kubectl使用

    1、查看修订版本记录
    $ kubectl rollout history deployment deployment_name
    2、查看某个历史记录的详细信息
    $ kubectl rollout history deployment deployment_name --revision=2
    其中--revision表示指定修订版本;
    3、回滚到上一个版本
    $ kubectl rollout undo deployment deployment_name
    4、回滚到指定版本
    $ kubectl rollout undo deployment deployment_name --to-revision=2
    其中,--to-revision表示回滚到指定的修订版本。

    4.3 API使用

    POST

    /apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback
    如:
    curl -k -H 'Authorization: Bearer token_xxxx' -H 'Content-Type:application/json' -X POST -d '{
        "kind": "DeploymentRollback",
        "apiVersion": "extensions/v1beta1",
        "name": "deployment_name",
        "rollbackTo": {
            "revision": 2
        }
    }' https://localhost:6443/apis/extensions/v1beta1/namespaces/default/deployments/deployment_name/rollback
    

    其中:name和rollbackTo.revision为必须字段,name为资源名称,rollbackTo.revision为回退的版本,若要回退上一个版本,即为0。

  • 相关阅读:
    vue 中的单元测试
    redux-学习总结
    React-学习总结
    vuecli 中 chainWebpack 的常用操作
    常用 vue-config.js 配置
    JavaScript 中的 MVC、MVP、MVVM
    日常工作中 @vue/cli 需要关注的一些配置
    Electron 构建超时问题
    JSBridge 原理与封装
    Three.js 之相机
  • 原文地址:https://www.cnblogs.com/Andya/p/12416094.html
Copyright © 2011-2022 走看看