• k8s控制器之Deployment第二弹之创建Deployment


    下面的yaml文件nginx-deployment.yaml 创建了一个deployment,并且该deployment 将创建一个有 3 个 nginx Pod 副本的 ReplicaSet(副本集)。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 将创建一个名为 nginx-deployment 的 Deployment(部署),名称由 .metadata.name 字段指定
    • 该 Deployment 将创建 3 个 Pod 副本,副本数量由 .spec.replicas 字段指定
    • .spec.selector 字段指定了 Deployment 如何找到由它管理的 Pod。此案例中,我们使用了 Pod template 中定义的一个标签(app: nginx)。对于极少数的情况,这个字段也可以定义更加复杂的规则
    • .template字段包含了如下字段:
      • .template.metadata.labels 字段,指定了 Pod 的标签(app: nginx)
      • .template.spec.containers[].image 字段,表明该 Pod 运行一个容器 nginx:1.7.9
      • .template.spec.containers[].name 字段,表明该容器的名字是 nginx

    创建该Deployment

    1、执行命令创建Deployment
    kubectl apply -f nginx-deployment.yaml
    
    • 1

    可以为该命令增加–record 选项,此时 kubectl 会将 kubectl apply -f nginx-deployment.yaml --record 写入 Deployment 的 annotation(注解) kubernetes.io/change-cause 中。这样,您在将来就可以回顾某一个 Deployment 版本变化的原因。

    2、执行命令 kubectl get deployments 检查 Deployment 的创建情况

    如果我们立即查看

    kubectl get deployment
    
    • 1

    输出结果:

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   0/3     3            0           10s
    
    • 1
    • 2

    字段含义:

    字段名称说明
    NAMEDeployment 名字
    DESIREDDeployment 期望的 Pod 副本数,即 Deployment 中 .spec.replicas 字段指定的数值。该数值是“期望”值
    CURRENT当前有多少个 Pod 副本数在运行
    UP-TO-DATEDeployment 中,符合当前 Pod Template 定义的 Pod 数量
    AVAILABLE当前对用户可用的 Pod 副本数
    AGEDeployment 部署以来到现在的时长

    可以看到Deployment 还在创建中

    3、查看 Deployment 的发布状态(rollout status)

    执行命令 kubectl rollout status deployment.v1.apps/nginx-deployment

    kubectl rollout status deployment.v1.apps/nginx-deployment
    
    • 1

    输出结果:

    Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
    deployment.apps/nginx-deployment successfully rolled out
    
    • 1
    • 2
    4、等待一段时间再查看
    kubectl get deployments
    
    • 1

    输出结果:

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   3/3     3            3           8m37s
    
    • 1
    • 2

    此时该 Deployment 已经完成了 3 个 Pod 副本的创建,并且所有的副本都是 UP-TO-DATE 和 AVAILABEL

    5、查看该 Deployment 创建的 ReplicaSet(rs)
     kubectl get rs 
    
    • 1

    输出结果

    NAME                          DESIRED   CURRENT   READY   AGE
    nginx-deployment-84df99548d   3         3         3       10m
    
    • 1
    • 2
    6、查看pod标签
    kubectl get pods --show-labels
    
    • 1

    输出结果:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    nginx-deployment-84df99548d-dhpq6   1/1     Running   0          12m   app=nginx,pod-template-hash=84df99548d
    nginx-deployment-84df99548d-wrhkc   1/1     Running   0          12m   app=nginx,pod-template-hash=84df99548d
    nginx-deployment-84df99548d-xmff9   1/1     Running   0          12m   app=nginx,pod-template-hash=84df99548d
    
    • 1
    • 2
    • 3
    • 4

    Deployment 创建的 ReplicaSet(副本集)确保集群中有 3 个 nginx Pod。

    您必须为 Deployment 中的 .spec.selector.template.metadata.labels 定义一个合适的标签(这个例子中的标签是 app: nginx)。请不要使用与任何其他控制器(其他 Deployment / StatefulSet 等)相同的 .spec.selector.template.metadata.labels。否则可能发生冲突,并产生不可预见的行为。

    Pod-template-hash 标签

    pod-template-hash 标签是 Deployment 创建 ReplicaSet 时添加到 ReplicaSet 上的,ReplicaSet 进而将此标签添加到 Pod 上。这个标签用于区分 Deployment 中哪个 ReplicaSet 创建了哪些 Pod。该标签的值是 .spec.template 的 hash 值。

    不要修改这个标签

  • 相关阅读:
    图像灰度映射方案对比总结
    入坑KeePass(四)KeePass通过坚果云WebDav同步方法
    海康摄像头通过stm32叠加字符串
    STM32F4学习笔记读取芯片UID和MAC地址
    如何免费获取CDH集群技术支持
    Html飞机大战(十七): 优化移动端
    0day是什么,有哪些有影响力的0day漏洞
    时域分析瞬时自相关算法、频域分析复倒频分析法、调制域分析过零检测算法以及时频分析小波换算法matlab仿真
    卷积运算与卷积核DLC
    JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
  • 原文地址:https://blog.csdn.net/Tiger_lin1/article/details/130814233