美文网首页
【k8s】deployment

【k8s】deployment

作者: 不务正业的coder | 来源:发表于2021-05-19 15:40 被阅读0次

    kube-controller-manager 控制器的一种,期望pod达到预期的状态。

    for {
      实际状态 := 获取集群中对象X的实际状态(Actual State)
      期望状态 := 获取集群中对象X的期望状态(Desired State)
      if 实际状态 == 期望状态{
        什么都不做
      } else {
        执行编排动作,将实际状态调整为期望状态
      }
    }
    

    其它的控制器类型有:

    $ cd kubernetes/pkg/controller/
    $ ls -d */              
    deployment/             job/                    podautoscaler/          
    cloud/                  disruption/             namespace/              
    replicaset/             serviceaccount/         volume/
    cronjob/                garbagecollector/       nodelifecycle/          replication/            statefulset/            daemon/
    ...
    

    示例说明

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    
    1. Deployment 控制器从 Etcd 中获取到所有携带了“app: nginx”标签的 Pod,然后统计它们的数量,这就是实际状态;

    2. Deployment 对象的 Replicas 字段的值就是期望状态;

    3. Deployment 控制器将两个状态做比较,然后根据比较结果,确定是创建 Pod,还是删除已有的 Pod

    可以看到,一个 Kubernetes 对象的主要编排逻辑,实际上是在第三步的“对比”阶段完成的。


    image.png

    Deployment,与 ReplicaSet,以及 Pod 的关系

    image.png

    手动操作指令

    $ kubectl scale deployment nginx-deployment --replicas=4
    deployment.apps/nginx-deployment scaled
    

    滚动更新

    $ kubectl rollout status deployment/nginx-deployment
    Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
    deployment.apps/nginx-deployment successfully rolled out
    
    NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3         3         3            3           20s
    

    此时,你可以尝试查看一下这个 Deployment 所控制的 ReplicaSet:

    $ kubectl get rs
    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-3167673210   3         3         3       20s
    

    如上所示,在用户提交了一个 Deployment 对象后,Deployment Controller 就会立即创建一个 Pod 副本个数为 3 的 ReplicaSet。这个 ReplicaSet 的名字,则是由 Deployment 的名字和一个随机字符串共同组成。

    相关文章

      网友评论

          本文标题:【k8s】deployment

          本文链接:https://www.haomeiwen.com/subject/bbmejltx.html