• 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 这样的一个控制器,实际上都是由上半部分的控制器定义(包括期望状态),加上下半部分的被控制对象的模板组成的

  • 相关阅读:
    篇(18)-Asp.Net Core入门实战-文章管理之文章内容管理(下拉框二级结构递归)
    架构设计师论文案例和知识点
    ChatGPT的问世给哪些行业带来了冲击?
    js逆向-5-字体反爬
    使用magic-api构建迅速开发平台的成功案例分享
    Rust编程中的共享状态并发执行
    XSS game -xss学习
    【单元测试】--基础知识
    Effective C++ 阅读笔记 02:构造/析构/赋值运算
    libusb系列-006-Qt下使用libusb1.0.9源码
  • 原文地址:https://www.cnblogs.com/chuandao/p/16168614.html