• k8s入门之Deployment(五)


    Deployment控制器通常用来部署无状态的应用,这样可以在任意的节点上扩容或者删除,而不用考虑数据的问题,它可以管理pod对象。

    一、多副本

    1.使用命令行方式创建Deployment

    在dev名称空间下创建3个副本的nginx pod

    kubectl create deployment nginx --image=nginx --replicas=3 -n dev
    

    监控创建进度

    kubectl get deploy -n dev -w
    

    可以看到副本可用数量从0变到3

    2.查看Deployment的描述

    kubectl describe deploy nginx -n dev
    

    可以看到NewReplicaSet的名称为nginx-6799fc88d8

    3.查看Deployment管理的pod

    kubectl get pod -n dev -owide --show-labels
    

    可以看到Name列是ReplicaSet的名称加上一串6位的随机字符串,每个pod都有自己独立的IP。由于只有2台worker节点,其中2个pod被调度到了同一台节点worker02,另一个pod被调度到了worker01。

    4.删除Deployment

    kubectl delete deploy nginx -n dev
    

    删除Deployment,会把其管理的pod一起删除

    5.使用yaml文件创建Deployment

    (1)新建dp-nginx.yaml文件,并输入以下内容

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx
      namespace: dev
    spec:
      replicas: 3
      selector:
        # Deployment会匹配与这里设置的相同标签内容的pod
        matchLabels:
          app: nginx
      # pod的模板描述
      template:
        metadata:
          #定义pod的标签
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx
            name: nginx
    

    (2)创建Deployment对象

    kubectl apply -f dp-nginx.yaml
    

    查看创建的结果

    二、扩缩容

    1.通过命令行扩容

    先通过命令自动监听pod的变化

    kubectl get pod -n dev -owide -w
    

    再开启一个新的bash会话,通过以下命令扩容(增加副本数量:由3个变成5个)

    kubectl scale --replicas=5 deploy/nginx -n dev
    

    在监听bash窗口可以看到扩容过程

    2.通过命令行缩容

    先通过命令自动监听pod的变化

    kubectl get pod -n dev -owide -w
    

    再开启一个新的bash会话,通过命令缩容(减少副本数量:由5个变成2个)

    kubectl scale --replicas=2 deploy/nginx -n dev
    

    在监听bash窗口可以看到缩容过程

    3.通过yaml文件扩缩容

    kubectl edit deployment nginx -n dev
    

    定位到replicase参数所在行,然后修改它的值

    三、自愈&故障转移

    1.自愈

    手动删除某个pod,或者某个pod异常挂掉,k8s会自动创建一个新的pod。

    先通过命令自动监听pod的变化

    kubectl get pod -n dev -owide -w
    

    再开启一个新的bash会话,手动删除一个pod

    kubectl scale --replicas=2 deploy/nginx -n dev
    

    在监听bash窗口可以看到创建过程

    2.故障转移

    对worker02关机,k8s需要5分钟(可配置)才能感知从而启动自愈功能。

    通过命令自动监听pod的变化

    kubectl get pod -n dev -owide -w
    

    大概等了5分钟左右的时间,可以看到worker01上启动了2个新的pod。

    这个时候如果重新启动worker02,部署在它上面的2个旧pod会立马删除。

    四、滚动更新

    1.更改镜像版本

    把nginx的镜像版本改为1.20

    kubectl edit deploy nginx -n dev
    # image: nginx:1.20
    

    查看滚动更新状态

    kubectl rollout status deploy nginx -n dev
    

    监听pod的创建过程

    kubectl get pod -n dev -owide -w
    

    查看新创建的pod描述,确实更新成了新的镜像版本

    2.回滚

    (1)查看更新历史记录

    kubectl rollout history deploy nginx -n dev
    

    (2)查看某个指定版本的历史记录详情

    kubectl rollout history deploy nginx -n dev --revision=2
    

    (3)回滚到上次的版本

    kubectl rollout undo deploy nginx -n dev
    

    回滚完成之后,查看新pod的描述,发现nginx镜像的版本是最新的

    (4)回滚到指定的版本

    kubectl rollout undo deploy nginx -n dev --to-revision=2
    

    五、总结

    类似 Deployment 这样的一个控制器,实际上都是由上半部分的控制器定义(包括期望状态),加上下半部分的被控制对象的模板组成的

  • 相关阅读:
    DDD(领域驱动设计)
    【git命令】
    mac下安装nodejs跟vscode
    SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
    穿越数字边疆:出海策略中的技术纬度探究
    6轮面试阿里Android开发offer,薪资却从21k降到17k,在逗我?
    HTML标签
    刷爆 LeetCode 双周赛 100,单方面宣布第一题最难
    kaggle竞赛实战8——其他方案之XGBOOST及NLP特征优化
    web安全学习笔记(12)
  • 原文地址:https://www.cnblogs.com/chuandao/p/16168614.html