Kubernetes----Deployment控制器
作者:redrose2100   类别:    日期:2022-05-23 13:46:24    阅读:1053 次   消耗积分:0 分

一、Deployment控制器

1.1 Deployment控制器简介

Deployment控制器并不是直接管理Pod,而是通过管理ReplicaSet来间接管理Pod,即Deployment管理ReplicaSet,ReplicaSet管理Pod,所以Deployment比ReplicaSet功能更加强大

Deployment控制器主要功能又如下几个:

  • 支持ReplicaSet所有功能
  • 支持发布的停止、继续
  • 支持版本滚动升级和版本回退

1.2 Deployment的资源清单文件

deployment资源清单文件如下:

  1. apiVersion: apps/v1 # 版本号
  2. kind: Deployment # 类型
  3. metadata: # 元数据
  4. name: # rs名称
  5. namespace: # 所属命名空间
  6. labels: # 标签
  7. controller: deploy
  8. spec: # 详情描述
  9. replicas: 3 # 副本数量
  10. revisionHistoryLimit: 3 # 保留历史版本,默认是10
  11. paused: false # 暂停部署,默认是false
  12. progressDeadlineSeconds: 600 # 部署超时时间,默认是600s
  13. strategy: # 策略
  14. type: RollingUpdate # 滚动更新策略
  15. rollingUpdate: # 滚动更新
  16. maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
  17. maxUnavailable: 30% # 最大不可用状态的Pod的最大值,可以为百分比,也可以为整数
  18. selector: # 选择器,通过它指定该控制器管理哪些pod
  19. matchLabels: # Label匹配规则
  20. app: nginx-pod
  21. matchExpressions: # Expressions匹配规则
  22. - {key: app, operator: In, values: [nginx-pod]}
  23. template: # 模板,当副本数量不足时,会根据下面的模板创建Pod副本
  24. metadata:
  25. labels:
  26. app: nginx-pod
  27. spec:
  28. containers:
  29. - name: nginx
  30. image: nginx:1.17.1
  31. ports:
  32. - containerPort: 80

二、Deployment控制器实例演示

编写pc_deployment.yaml文件,内容如下:

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: dev
  5. ---
  6. apiVersion: apps/v1
  7. kind: Deployment
  8. metadata:
  9. name: pc-deployment
  10. namespace: dev
  11. spec:
  12. replicas: 3
  13. selector:
  14. matchLabels:
  15. app: nginx-pod
  16. template:
  17. metadata:
  18. labels:
  19. app: nginx-pod
  20. spec:
  21. containers:
  22. - name: nginx
  23. image: nginx:1.17.1

使用如下命令创建资源,其中—record参数,用于记录每次的版本变化

  1. [root@master pod_controller]# kubectl apply -f pc_deployment.yaml --record=true
  2. namespace/dev created
  3. deployment.apps/pc-deployment created
  4. [root@master pod_controller]#

通过如下命令可以查看创建结果

  1. [root@master pod_controller]# kubectl get deploy,pod -n dev -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. deployment.apps/pc-deployment 3/3 3 3 119s nginx nginx:1.17.1 app=nginx-pod
  4. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  5. pod/pc-deployment-5d9c9b97bb-9rxz6 1/1 Running 0 119s 10.244.1.29 node1 <none> <none>
  6. pod/pc-deployment-5d9c9b97bb-bg9zn 1/1 Running 0 119s 10.244.1.28 node1 <none> <none>
  7. pod/pc-deployment-5d9c9b97bb-nfn9f 1/1 Running 0 119s 10.244.2.54 node2 <none> <none>
  8. [root@master pod_controller]#

如下,可以查看到deployment,ReplicaSet,Pod详细信息

  1. [root@master pod_controller]# kubectl get deploy,rs,pod -n dev -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. deployment.apps/pc-deployment 3/3 3 3 3m56s nginx nginx:1.17.1 app=nginx-pod
  4. NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
  5. replicaset.apps/pc-deployment-5d9c9b97bb 3 3 3 3m56s nginx nginx:1.17.1 app=nginx-pod,pod-template-hash=5d9c9b97bb
  6. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  7. pod/pc-deployment-5d9c9b97bb-9rxz6 1/1 Running 0 3m56s 10.244.1.29 node1 <none> <none>
  8. pod/pc-deployment-5d9c9b97bb-bg9zn 1/1 Running 0 3m56s 10.244.1.28 node1 <none> <none>
  9. pod/pc-deployment-5d9c9b97bb-nfn9f 1/1 Running 0 3m56s 10.244.2.54 node2 <none> <none>
  10. [root@master pod_controller]#

三、Deployment控制器实现扩缩容

3.1 通过修改配置文件扩缩容

如下,将pod数量扩容到6个

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: dev
  5. ---
  6. apiVersion: apps/v1
  7. kind: Deployment
  8. metadata:
  9. name: pc-deployment
  10. namespace: dev
  11. spec:
  12. replicas: 6
  13. selector:
  14. matchLabels:
  15. app: nginx-pod
  16. template:
  17. metadata:
  18. labels:
  19. app: nginx-pod
  20. spec:
  21. containers:
  22. - name: nginx
  23. image: nginx:1.17.1

然后使用如下命令扩容

  1. [root@master pod_controller]# kubectl apply -f pc_deployment.yaml
  2. namespace/dev configured
  3. deployment.apps/pc-deployment configured
  4. [root@master pod_controller]#

通过如下命令可以查询到此时已经有6个pod在运行了

  1. [root@master pod_controller]# kubectl get deploy,rs,pod -n dev -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. deployment.apps/pc-deployment 6/6 6 6 28m nginx nginx:1.17.1 app=nginx-pod
  4. NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
  5. replicaset.apps/pc-deployment-5d9c9b97bb 6 6 6 28m nginx nginx:1.17.1 app=nginx-pod,pod-template-hash=5d9c9b97bb
  6. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  7. pod/pc-deployment-5d9c9b97bb-2bjlb 1/1 Running 0 30s 10.244.1.30 node1 <none> <none>
  8. pod/pc-deployment-5d9c9b97bb-4sg8r 1/1 Running 0 30s 10.244.2.56 node2 <none> <none>
  9. pod/pc-deployment-5d9c9b97bb-9rxz6 1/1 Running 0 28m 10.244.1.29 node1 <none> <none>
  10. pod/pc-deployment-5d9c9b97bb-bg9zn 1/1 Running 0 28m 10.244.1.28 node1 <none> <none>
  11. pod/pc-deployment-5d9c9b97bb-nfn9f 1/1 Running 0 28m 10.244.2.54 node2 <none> <none>
  12. pod/pc-deployment-5d9c9b97bb-vs4zf 1/1 Running 0 30s 10.244.2.55 node2 <none> <none>
  13. [root@master pod_controller]#

3.2 通过命令进行扩缩容

通过如下命令可以将deployment缩容到3个pod

  1. [root@master pod_controller]# kubectl scale deploy pc-deployment --replicas=3 -n dev
  2. deployment.apps/pc-deployment scaled
  3. [root@master pod_controller]#

如下,可以查询到缩容结果

  1. [root@master pod_controller]# kubectl get deploy,rs,pod -n dev -o wide
  2. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  3. deployment.apps/pc-deployment 3/3 3 3 30m nginx nginx:1.17.1 app=nginx-pod
  4. NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
  5. replicaset.apps/pc-deployment-5d9c9b97bb 3 3 3 30m nginx nginx:1.17.1 app=nginx-pod,pod-template-hash=5d9c9b97bb
  6. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  7. pod/pc-deployment-5d9c9b97bb-9rxz6 1/1 Running 0 30m 10.244.1.29 node1 <none> <none>
  8. pod/pc-deployment-5d9c9b97bb-bg9zn 1/1 Running 0 30m 10.244.1.28 node1 <none> <none>
  9. pod/pc-deployment-5d9c9b97bb-nfn9f 1/1 Running 0 30m 10.244.2.54 node2 <none> <none>
  10. [root@master pod_controller]#
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/271
个人成就
  • 博客总数: 613 
  • 阅读总量: 658056 
  • 2022年 : 371 篇 
  • 2023年 : 211 篇 
  • 2024年 : 31 篇 
  • 2025年 : 0 篇 
测试开发技术全栈公众号
DevOps技术交流微信群