k8s--pod控制器

打印 上一主题 下一主题

主题 696|帖子 696|积分 2088

1:控制器


  • 控制器接先容
    1、自主式Pod,直接创建出来的Pod,pod删除了就没有了
    2、控制器创建pod,通过控制器创建出来的pod,这种pod删除后,还会自动的重建
    3、作用
    1、pod控制器通过标签来管理一定命量的pod,创建多少的数目,如果pod出现了问题,计谋重启和重建Pod
1、replicaSet(rs)

1、创建的数目的pod可以或许正常的运行
  1. [root@master rs]# cat rs-num.yaml
  2. apiVersion: apps/v1
  3. kind: ReplicaSet
  4. metadata:
  5.   name: nginx-11
  6.   namespace: dev
  7. spec:
  8.   replicas: 3   #数量为3
  9.   selector:
  10.     matchLabels:
  11.       app: nginx-pod
  12.   template:
  13.     metadata:
  14.       name: nginx1
  15.       labels:
  16.         app: nginx-pod
  17.     spec:
  18.        containers:
  19.        - name: nginx
  20.          image: nginx:1.17.2
复制代码
2、扩缩容
  1. [root@master rs]# kubectl edit rs -n dev nginx-11  #使用edit来进行编辑即可
  2. replicaset.apps/nginx-11 edited
  3. [root@master rs]# kubectl get pod -n dev
  4. NAME             READY   STATUS    RESTARTS   AGE
  5. nginx-11-kvvpn   1/1     Running   0          4m39s
复制代码
3、镜像版本的升级
  1. [root@master rs]# kubectl get rs -n dev -o wide
  2. NAME        DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
  3. nginx-pod   3         3         3       32s   nxing        nginx:1.17.2   app=nginx-pod
  4. [root@master rs]# kubectl edit rs -n dev  nginx-pod
  5. replicaset.apps/nginx-pod edited
  6. [root@master rs]# kubectl get rs -n dev -o wide
  7. NAME        DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
  8. nginx-pod   3         3         3       52s   nxing        nginx:1.17.1   app=nginx-pod
  9. #删除里面的pod一个,之后再来创建的Pod就会是新的镜像的构成的
  10. Events:
  11.   Type    Reason     Age   From               Message
  12.   ----    ------     ----  ----               -------
  13.   Normal  Scheduled  18s   default-scheduler  Successfully assigned dev/nginx-pod-52hq5 to node1
  14.   Normal  Pulling    18s   kubelet            Pulling image "nginx:1.17.1"
  15.   Normal  Pulled     2s    kubelet            Successfully pulled image "nginx:1.17.1" in 16.375s (16.375s including waiting)
  16.   Normal  Created    2s    kubelet            Created container nxing
  17.   Normal  Started    2s    kubelet            Started container nxing
复制代码
2、deployment(deploy)


1、支持许多的rs的功能
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.    name: nginx
  5.    namespace: dev
  6. spec:
  7.   replicas: 3
  8.   selector:
  9.     matchLabels:
  10.        app: nginx-deploy
  11.   template:
  12.     metadata:
  13.       name: nginxde
  14.       labels:
  15.         app: nginx-deploy
  16.     spec:
  17.       containers:
  18.       - name: nginx
  19.         image: nginx:1.17.2
  20. [root@master deployment]# kubectl get pod -n dev
  21. NAME                   READY   STATUS    RESTARTS   AGE
  22. nginx-f6b7dbf7-27zq5   1/1     Running   0          7s
  23. nginx-f6b7dbf7-bm7vq   1/1     Running   0          7s
  24. nginx-f6b7dbf7-z75d5   1/1     Running   0          7s
  25. nginx-pod-52hq5        1/1     Running   0          10m
  26. nginx-pod-wsr2l        1/1     Running   0          12m
  27. nginx-pod-zmx5l        1/1     Running   0          12m
复制代码
2、重建更新

重建更新
  1. #一次更新所有的镜像
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5.    name: nginx
  6.    namespace: dev
  7. spec:
  8.   replicas: 3
  9.   strategy:
  10.     type: Recreate
  11.   selector:
  12.     matchLabels:
  13.        app: nginx-deploy
  14.   template:
  15.     metadata:
  16.       name: nginxde
  17.       labels:
  18.         app: nginx-deploy
  19.     spec:
  20.       containers:
  21.       - name: nginx
  22.         image: nginx:1.17.2
  23. [root@master ~]# kubectl get pod -n dev
  24. NAME                   READY   STATUS    RESTARTS   AGE
  25. nginx-f6b7dbf7-b8z6q   1/1     Running   0          5s
  26. nginx-f6b7dbf7-hvpww   1/1     Running   0          5s
  27. nginx-f6b7dbf7-qrztz   1/1     Running   0          5s
  28. #更新镜像版本
  29. [root@master ~]# kubectl set image -n dev deployment/nginx nginx=nginx:1.17.1
  30. deployment.apps/nginx image updated
  31. [root@master ~]# kubectl get deployments.apps  -n dev -o wide
  32. NAME    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
  33. nginx   3/3     3            3           5m29s   nginx        nginx:1.17.1   app=nginx-deploy
  34. #里面的pod里面的镜像也全部更新了
  35. [root@master ~]# kubectl get pod -n dev
  36. NAME                    READY   STATUS    RESTARTS   AGE
  37. nginx-d8d99f5bb-7zk9w   1/1     Running   0          3m6s
  38. nginx-d8d99f5bb-mmrfp   1/1     Running   0          3m6s
  39. nginx-d8d99f5bb-p485m   1/1     Running   0          3m6s
复制代码
3、滚动更新
  1. #先更新一部分
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5.    name: nginx
  6.    namespace: dev
  7. spec:
  8.   replicas: 3
  9.   strategy:
  10.     type: RollingUpdate   #滚动更新
  11.     rollingUpdate:
  12.       maxSurge: 25%
  13.       maxUnavailable: 25%
  14.   selector:
  15.     matchLabels:
  16.        app: nginx-deploy
  17.   template:
  18.     metadata:
  19.       name: nginxde
  20.       labels:
  21.         app: nginx-deploy
  22.     spec:
  23.       containers:
  24.       - name: nginx
  25.         image: nginx:1.17.2
  26. #更新镜像
  27. [root@master deployment]# kubectl set image -n dev deploy/nginx nginx=nginx:1.17.1
  28. deployment.apps/nginx image updated
  29. [root@master deployment]# kubectl get deployments.apps  -n dev -o wide
  30. NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
  31. nginx   3/3     3            3           17m   nginx        nginx    app=nginx-deploy
复制代码
4、扩缩容
  1. #命令来进行编辑
  2. [root@master ~]# kubectl scale -n dev deployment/nginx  --replicas=5
  3. deployment.apps/nginx scaled
  4. [root@master ~]# kubectl get pod -n dev
  5. NAME                   READY   STATUS    RESTARTS   AGE
  6. nginx-f6b7dbf7-7vfhn   1/1     Running   0          10h
  7. nginx-f6b7dbf7-d5chw   1/1     Running   0          5s
  8. nginx-f6b7dbf7-fbflf   1/1     Running   0          5s
  9. nginx-f6b7dbf7-hnnnz   1/1     Running   0          10h
  10. nginx-f6b7dbf7-nssr7   1/1     Running   0          10h
  11. #edit也可以进行编辑,用法与之前的rs一样
复制代码
5、版本回退
  1. 1、deploy镜像升级的话,会创建一个新的rs,里面再来创建pod,老的rs的pod删除掉
  2. 2、留老rs的作用就是版本回退
复制代码
  1. [root@master deployment]# kubectl create -f deploy.yaml --record  #记录
  2. Flag --record has been deprecated, --record will be removed in the future
  3. deployment.apps/nginx created
  4. #编辑里面的版本
  5. [root@master deployment]# kubectl edit -n dev deployments.apps/nginx
  6. deployment.apps/nginx edited
  7. #显示升级的状态
  8. [root@master deployment]# kubectl rollout history  -n dev  deployment/nginx
  9. deployment.apps/nginx
  10. REVISION  CHANGE-CAUSE
  11. 1         kubectl create --filename=deploy.yaml --record=true
  12. 2         kubectl create --filename=deploy.yaml --record=true
  13. #回退到上一个版本,不指定的话,默认是回退到上一个版本
  14. [root@master deployment]# kubectl rollout undo -n dev deployment/nginx  --to-revision 1
  15. deployment.apps/nginx rolled back
  16. #rs也会回退到上一个rs里面
  17. [root@master deployment]# kubectl get rs -n dev
  18. NAME              DESIRED   CURRENT   READY   AGE
  19. nginx-d8d99f5bb   0         0         0       3m29s
  20. nginx-f6b7dbf7    3         3         3       5m29s
  21. [root@master deployment]# kubectl get deployments.apps  -n dev -o wide
  22. NAME    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES         SELECTOR
  23. nginx   3/3     3            3           5m37s   nginx        nginx:1.17.2   app=nginx-deploy
复制代码
6、金丝雀发布
  1. 1、支持在更新的过程控制,暂停,继续更新等操作
  2. 在更新的过程,先将一部分更新应用,测试一下,发个请求,好的话,就全部更新,不是好的话,就回退版本
复制代码
  1. #更新然后立刻暂停
  2. [root@master deployment]# kubectl set  image -n dev deploy/nginx nginx=nginx:1.17.1 && kubectl rollout  pause deployment  -n dev nginx
  3. deployment.apps/nginx image updated
  4. deployment.apps/nginx paused
  5. #查看当前升级的状态
  6. [root@master deployment]# kubectl rollout  status deployment  -n dev
  7. Waiting for deployment "nginx" rollout to finish: 1 out of 3 new replicas have been updated...
  8. [root@master deployment]# kubectl get rs -n dev
  9. NAME              DESIRED   CURRENT   READY   AGE
  10. nginx-d8d99f5bb   1         1         1       11m
  11. nginx-f6b7dbf7    3         3         3       13m
  12. #发送一个请求
  13. [root@master deployment]# curl 10.244.1.46:80
  14. <!DOCTYPE html>
  15. <html>
  16. <head>
  17. <title>Welcome to nginx!</title>
  18. </head>
  19. <body>
  20. <h1>Welcome to nginx!</h1>
  21. <p>If you see this page, the nginx web server is successfully installed and
  22. working. Further configuration is required.</p>
  23. <p>For online documentation and support please refer to
  24. <a target="_blank" href="http://nginx.org/">nginx.org</a>.<br/>
  25. Commercial support is available at
  26. <a target="_blank" href="http://nginx.com/">nginx.com</a>.</p>
  27. <p><em>Thank you for using nginx.</em></p>
  28. </body>
  29. </html>
  30. #持续更新
  31. ##取消暂停更新
  32. [root@master deployment]# kubectl rollout resume -n dev deployment/nginx
  33. deployment.apps/nginx resumed
  34. [root@master deployment]# kubectl get pod -n dev
  35. NAME                    READY   STATUS        RESTARTS   AGE
  36. nginx-d8d99f5bb-9gj4t   1/1     Running       0          3s
  37. nginx-d8d99f5bb-fjhk6   1/1     Running       0          3m50s
  38. nginx-d8d99f5bb-sll2t   1/1     Running       0          2s
  39. nginx-f6b7dbf7-fl8b7    0/1     Terminating   0          11m
  40. [root@master deployment]# kubectl rollout status -n dev deployment/nginx
  41. deployment "nginx" successfully rolled out
  42. [root@master deployment]# kubectl get pod -n dev
  43. NAME                    READY   STATUS    RESTARTS   AGE
  44. nginx-d8d99f5bb-9gj4t   1/1     Running   0          22s
  45. nginx-d8d99f5bb-fjhk6   1/1     Running   0          4m9s
  46. nginx-d8d99f5bb-sll2t   1/1     Running   0          21s
  47. [root@master deployment]# kubectl get rs -n dev
  48. NAME              DESIRED   CURRENT   READY   AGE
  49. nginx-d8d99f5bb   3         3         3       15m
  50. nginx-f6b7dbf7    0         0         0       17m
复制代码
3、hpa

  1. 1、主要就是自动的扩缩容,获取了每一个pod的利用率,与pod上面的hpa定义的指标进行比较,如果超过的话,就自动的扩容,当访问量减少的话,会删除增加的pod
  2. 2、通过监控pod负载均衡的情况,实现pod数量扩缩容
复制代码
1、安装检测软件
  1. #安装一个监控的软件metries-server
  2. [root@master deployment]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
  3. #手动拉取这个国内的镜像
  4. [root@master deployment]# ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3
  5. #修改这2行
  6.         - --kubelet-insecure-tls
  7.         image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3
  8. #这个便是那个pod提供监控负载均衡的软件
  9. [root@master deployment]# kubectl get pod -n kube-system metrics-server-6779c94dff-tjv8f
  10. NAME                              READY   STATUS    RESTARTS   AGE
  11. metrics-server-6779c94dff-tjv8f   1/1     Running   0          58s
  12. #查看资源的使用情况
  13. [root@master deployment]# kubectl top node
  14. NAME               CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
  15. master.novalocal   225m         3%     1061Mi          6%        
  16. node1              51m          0%     617Mi           3%        
  17. node2              47m          0%     576Mi           3%   
  18. [root@master deployment]# kubectl top pod -n dev
  19. NAME                    CPU(cores)   MEMORY(bytes)   
  20. nginx-d8d99f5bb-9gj4t   0m           1Mi            
  21. nginx-d8d99f5bb-fjhk6   0m           1Mi            
  22. nginx-d8d99f5bb-sll2t   0m           1Mi  
复制代码
2、测试hpa
  1. #先创建一个deploy,再来创建一个hpa
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5.    name: nginx
  6.    namespace: dev
  7. spec:
  8.   replicas: 3
  9.   strategy:
  10.     type: RollingUpdate
  11.     rollingUpdate:
  12.       maxSurge: 25%
  13.       maxUnavailable: 25%
  14.   selector:
  15.     matchLabels:
  16.        app: nginx-deploy
  17.   template:
  18.     metadata:
  19.       name: nginxde
  20.       labels:
  21.         app: nginx-deploy
  22.     spec:
  23.       containers:
  24.       - name: nginx
  25.         image: nginx:1.17.2
  26.         resources:   #必须要有资源的限定,才能做
  27.           requests:
  28.             cpu: 100m
  29. #创建一个hpa控制器
  30. [root@master deployment]# cat hpa.yaml
  31. apiVersion: autoscaling/v2
  32. kind: HorizontalPodAutoscaler
  33. metadata:
  34.    name: hpanginx
  35.    namespace: dev
  36. spec:
  37.   scaleTargetRef:  #控制的deploy控制器
  38.     apiVersion: apps/v1
  39.     kind: deploy
  40.     name: nginx
  41.   minReplicas: 1  #最小Pod数量
  42.   maxReplicas: 10 #最大pod数量
  43.   metrics:   #定义伸缩规则
  44.   - type: Resource   #伸缩类型是资源
  45.     resource:
  46.       name: cpu  #要伸缩的资源是cpu
  47.       target:
  48.         type: Utilization  #目标类型是利用率
  49.         averageUtilization: 3   #cpu的平均利用率是3%
  50. #查看hpa信息
  51. [root@master deployment]# kubectl get hpa -n dev
  52. NAME       REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
  53. hpanginx   Deployment/nginx   0%/30%    1         10        3          94s
  54. #暴露端口,进行压力测试
  55. [root@master deployment]# kubectl expose deployment nginx --type=NodePort --port=80 -n dev
  56. service/nginx exposed
  57. [root@master deployment]# kubectl get svc -n dev
  58. NAME    TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
  59. nginx   NodePort   10.96.20.47   <none>        80:30528/TCP   4s
  60. #循环脚本
  61. [root@master deployment]# cat curl.sh
  62. while `true`
  63. do
  64.   curl 10.104.43.43:30528 &> /dev/null
  65. done
  66. #观察hpa,pod
  67. [root@master deployment]# kubectl get hpa -n dev -w
  68. NAME       REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
  69. hpanginx   Deployment/nginx   3%/3%     1         10        2          19s
  70. hpanginx   Deployment/nginx   0%/3%     1         10        2          30s
  71. hpanginx   Deployment/nginx   10%/3%    1         10        2          45s
  72. hpanginx   Deployment/nginx   20%/3%    1         10        4          60s
  73. hpanginx   Deployment/nginx   10%/3%    1         10        8          75s
  74. hpanginx   Deployment/nginx   2%/3%     1         10        10         90s
  75. hpanginx   Deployment/nginx   0%/3%     1         10        10         105s
  76. [root@master ~]#
  77. [root@master ~]# kubectl get pod -n dev -w
  78. NAME                     READY   STATUS    RESTARTS   AGE
  79. nginx-5bf8cbdf5d-bv24r   1/1     Running   0          3m43s
  80. nginx-5bf8cbdf5d-v7vnx   1/1     Running   0          9m51s
  81. nginx-5bf8cbdf5d-hfd9w   0/1     Pending   0          0s
  82. nginx-5bf8cbdf5d-xmlr9   0/1     Pending   0          0s
  83. nginx-5bf8cbdf5d-hfd9w   0/1     Pending   0          0s
  84. nginx-5bf8cbdf5d-xmlr9   0/1     Pending   0          0s
  85. nginx-5bf8cbdf5d-hfd9w   0/1     ContainerCreating   0          0s
  86. nginx-5bf8cbdf5d-xmlr9   0/1     ContainerCreating   0          0s
  87. nginx-5bf8cbdf5d-hfd9w   1/1     Running             0          1s
  88. nginx-5bf8cbdf5d-xmlr9   1/1     Running             0          2s
  89. #当访问量减少时,pod会自动的减少,需要一定的时间
  90. [root@master ~]# kubectl get pod -n dev
  91. NAME                     READY   STATUS    RESTARTS   AGE
  92. nginx-5bf8cbdf5d-7258w   1/1     Running   0          2m6s
  93. nginx-5bf8cbdf5d-bv24r   1/1     Running   0          6m27s
  94. nginx-5bf8cbdf5d-h2hq9   1/1     Running   0          2m6s
  95. nginx-5bf8cbdf5d-hfd9w   1/1     Running   0          2m21s
  96. nginx-5bf8cbdf5d-ncjq4   1/1     Running   0          111s
  97. nginx-5bf8cbdf5d-t2glk   1/1     Running   0          2m6s
  98. nginx-5bf8cbdf5d-tlcn9   1/1     Running   0          2m6s
  99. nginx-5bf8cbdf5d-v7vnx   1/1     Running   0          12m
复制代码
4、daemonset(ds)

  1. 每个node节点上面都有一个pod,可以运用于监控使用,日志收集等作用
复制代码
  1. #网络插件的就是这种类型的,每一个node节点上面都有一个pod,提供网络服务
  2. [root@master deployment]# cat daemonset.yaml
  3. apiVersion: apps/v1
  4. kind: DaemonSet
  5. metadata:
  6.   name: nginx-daemon
  7.   namespace: dev
  8. spec:
  9.   selector:  #匹配的标签
  10.     matchLabels:
  11.       app: nginx-daemon
  12.   template:
  13.     metadata:
  14.       name: nginx-dd
  15.       labels:
  16.         app: nginx-daemon
  17.     spec:
  18.       containers:
  19.         - name: nginx
  20.           image: nginx:1.17.1
  21. #每个节点上面都有一个pod
  22. [root@master deployment]# kubectl get pod -o wide -n dev
  23. NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
  24. nginx-5bf8cbdf5d-v7vnx   1/1     Running   0          20m   10.244.2.41   node2   <none>           <none>
  25. nginx-daemon-4v4gf       1/1     Running   0          16s   10.244.1.56   node1   <none>           <none>
  26. nginx-daemon-vt25q       1/1     Running   0          16s   10.244.2.46   node2   <none>           <none>
复制代码
5、job
  1. 1、用于负责处理一次性任务,一次性任务,结束后就没有了
  2. 2、重启策略不能设置为always,一但结束后,又要进行重启,不符合
  3. onfailure,
  4. never
复制代码
  1. apiVersion: batch/v1
  2. kind: Job
  3. metadata:
  4.   name: nginxjob
  5.   namespace: dev
  6. spec:
  7.   manualSelector: true
  8.   completions: 6  #一共有6个Pod
  9.   parallelism: 3   #每轮执行3个(并发的执行)
  10.   selector:
  11.     matchLabels:
  12.       app: job
  13.   template:
  14.     metadata:
  15.       name: job1
  16.       labels:
  17.         app: job
  18.     spec:
  19.       restartPolicy: Never
  20.       containers:
  21.         - name: busybox
  22.           image: busybox:1.30
  23.           command: ["/bin/sh","-c","for i in 1 2 3 4 5 6 7;do echo $i;sleep 5;done"]
  24. [root@master deployment]# kubectl get pod -n dev
  25. NAME                     READY   STATUS      RESTARTS   AGE
  26. nginx-5bf8cbdf5d-v7vnx   1/1     Running     0          30m
  27. nginx-daemon-4v4gf       1/1     Running     0          10m
  28. nginx-daemon-vt25q       1/1     Running     0          10m
  29. nginxjob-2cpwh           0/1     Completed   0          63s
  30. nginxjob-7xtdd           0/1     Completed   0          63s
  31. nginxjob-c52fk           0/1     Completed   0          63s
  32. nginxjob-k2r74           1/1     Running     0          25s
  33. nginxjob-szlzd           1/1     Running     0          25s
  34. nginxjob-zr8d2           1/1     Running     0          25s
  35. [root@master deployment]# kubectl get job -n dev
  36. NAME       COMPLETIONS   DURATION   AGE
  37. nginxjob   3/6           70s        70s
复制代码
6、cronjob
  1. #周期性的执行job任务
复制代码
  1. [root@master deployment]# cat cronjob.yaml
  2. apiVersion: batch/v1
  3. kind: CronJob
  4. metadata:
  5.   name: pcjob
  6.   namespace: dev
  7.   labels:
  8.     app: job2
  9. spec:
  10.   schedule: "*/1 * * * *"
  11.   jobTemplate:
  12.     metadata:
  13.       name: job2
  14.       labels:
  15.         app: job2
  16.     spec:
  17.       template:
  18.         spec:
  19.           restartPolicy: Never
  20.           containers:
  21.           - name: busybox
  22.             image: busybox:1.30
  23.             command: ["/bin/sh","-c","for i in 1 2 3 4 5 6 7;do echo $i;sleep 5;done"]
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表