基于k3s集群学习Deployment和ReplicaSet
2022-12-19 11:01:24

Deployment是对ReplicaSet和Pod更高级的抽象。

它使Pod拥有多副本,自愈,扩缩容、滚动升级等能力

ReplicaSet(副本集)是一个Pod的集合。

它可以设置运行Pod的数量,确保任何时间都有指定数量的 Pod 副本在运行。

通常我们不直接使用ReplicaSet,而是在Deployment中声明。

创建Deployment

  • 第一种方法是通过命令行创建
    1
    2
    3
    # 创建deployment,部署3个运行nginx的Pod 
    # nginx-deployment是deployment的name --image是指定容器镜像
    kubectl create deployment nginx-deployment --image=nginx:1.22 --replicas=3
  • 第二种方法是通过yaml文件创建,示例文件如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    apiVersion: apps/v1
    kind: Deployment # 类型deployment
    metadata:
    name: nginx-deployment # deployment的name
    labels: # lables标签 键值对
    app: nginx
    spec:
    replicas: 3 # 副本数量 创建三个pod副本
    selector: # 定义 Deployment 如何查找要管理的 Pod
    matchLabels: # 匹配lables标签 :app=nginx的pod
    app: nginx
    template:
    metadata:
    labels:
    app: nginx # 声明lables标签
    spec:
    containers:
    - name: nginx # 容器名称
    image: nginx:1.22 #容器镜像
    ports:
    - containerPort: 80
    执行命令
    1
    kubectl apply -f deployment-nginx.yaml

管理Deployement

  • 查看deployment
    1
    2
    3
    kubectl get deployments
    NAME READY UP-TO-DATE AVAILABLE AGE
    nginx-deployment 3/3 3 3 14h
    在检查集群中的 Deployment 时,所显示的字段有:

NAME 列出了namespace中 Deployment 的名称。
READY 显示应用程序的可用的“副本”数。显示的模式是“就绪个数/期望个数”。
UP-TO-DATE 显示为了达到期望状态已经更新的副本数。
AVAILABLE 显示应用可供用户使用的副本数。
AGE 显示应用程序运行的时间

  • 查看指定deployment

    1
    kubectl get deployment/nginx-deployment  [-owide]
  • 查看 Deployment 上线状态

    1
    2
    3
    kubectl rollout status deployment/nginx-deployment
    #输出
    deployment "nginx-deployment" successfully rolled out
  • 查看 Deployment 创建的 ReplicaSet

    1
    2
    3
    kubectl get rs
    NAME DESIRED CURRENT READY AGE
    nginx-deployment-79b458c974 3 3 3 14h

    ReplicaSet 输出中包含以下字段:

NAME 列出namespace中 ReplicaSet 的名称;
DESIRED 显示应用的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态
CURRENT 显示当前运行状态中的副本个数;
READY 显示应用中有多少副本可以为用户提供服务;
AGE 显示应用已经运行的时间长度。

  • 查看每个pod生成的标签
    1
    2
    3
    4
    5
    kubectl get pods --show-labels
    NAME READY STATUS RESTARTS AGE LABELS
    nginx-deployment-79b458c974-6drv6 1/1 Running 0 14h app=nginx-deployment,pod-template-hash=79b458c974
    nginx-deployment-79b458c974-l4b6s 1/1 Running 0 11h app=nginx-deployment,pod-template-hash=79b458c974
    nginx-deployment-79b458c974-4jbn2 1/1 Running 0 7h15m app=nginx-deployment,pod-template-hash=79b458c974

扩容缩放

  • 手动缩放

    1
    2
    #将副本数量调整为5
    kubectl scale deployment/nginx-deployment --replicas=5
  • 自动缩放

自动缩放通过增加和减少副本的数量,以保持所有 Pod 的平均 CPU 利用率不超过 75%。
自动伸缩需要声明Pod的资源限制,同时使用 Metrics Server 服务(K3s默认已安装)。

1
2
#自动缩放
kubectl autoscale deployment/nginx-auto --min=3 --max=10 --cpu-percent=75

滚动更新

  • 更新nginx镜像
    1
    2
    #更新容器镜像
    kubectl set image deployment/nginx-deployment nginx=nginx:1.23
  • 查看更新过程
    1
    2
    #查看过程
    kubectl get rs --watch

版本回滚

  • 查看历史版本

    1
    2
    #查看历史版本
    kubectl rollout history deployment/nginx-deployment
  • 查看指定版本的信息

    1
    kubectl rollout history deployment/nginx-deployment --revision=2
  • 回滚到历史版本

    1
    kubectl rollout undo deployment/nginx-deployment --to-revision=2