当前位置:  首页>> 技术小册>> Kubernets合辑5-Pod控制器

特别需要注意,文档中的方式只能说是接近蓝绿部署的效果,其实并不是真正的蓝绿部署,在更新的过程中,并不是所有的 Pod 都是同时切换到新版本的,尤其是在前端应用中,可能出现页面资源显示异常。

要想达到真正的蓝绿部署需要借助工具或者脚本实现:

  1. 要求:
  2. 1. 不同版本的Deployment名称不同,比如 <appname>-<version>
  3. 2. 不同版本的Service名称相同,<appname>-svc
  4. 3. DeploymentPod 标签选择器需要带上版本 version 标签
  5. 4. Service 需要使用 version 标签选择特定版本的 Pod
  6. 流程
  7. 1. 如果不存在旧版本Deployment,就正常部署 Deloyment Service
  8. 2. 如果存在旧版本的Service,则获取旧版本的 version 变量,用于后续删除旧版本的 Deployment
  9. 3. 部署新版本的Deployment,并等待 Deployment Ready
  10. 4. 当新版本的 Deployment 全部Ready,就更新 Service 的标签选择器的 version,指向新版本的 Pod,然后删除旧版本的 Deployment
  11. 5. 如果新版本 Deployment 在指定时间内未就绪,那么更新终止并通知运维更新失败

base_resource/deployment/nginx-v1.13.yaml:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deploy
  5. namespace: app
  6. spec:
  7. replicas: 5
  8. selector:
  9. matchLabels:
  10. app: nginx
  11. release: stable
  12. tier: slb
  13. partition: website
  14. strategy:
  15. rollingUpdate:
  16. # 最大浪涌数量为5
  17. maxSurge: 5
  18. maxUnavailable: 0
  19. template:
  20. metadata:
  21. labels:
  22. app: nginx
  23. release: stable
  24. tier: slb
  25. partition: website
  26. # 修改版本信息,用于查看当前版本
  27. version: v1.13
  28. spec:
  29. containers:
  30. - name: nginx-pod
  31. # 修改镜像
  32. image: harbor.od.com/public/nginx:v1.13
  33. lifecycle:
  34. postStart:
  35. exec:
  36. command:
  37. - /bin/bash
  38. - -c
  39. - "echo 'health check ok!' > /usr/share/nginx/html/health.html"
  40. readinessProbe:
  41. initialDelaySeconds: 5
  42. httpGet:
  43. port: 80
  44. path: /health.html
  45. livenessProbe:
  46. initialDelaySeconds: 10
  47. periodSeconds: 5
  48. httpGet:
  49. port: 80
  50. path: /health.html
  1. [root@hdss7-21 ~]# kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.13.yaml --record=true
  2. [root@hdss7-21 ~]# kubectl rollout history deployment nginx-deploy -n app
  3. REVISION CHANGE-CAUSE
  4. 1 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.12.yaml --record=true
  5. 2 kubectl apply --filename=http://k8s-yaml.od.com/base_resource/deployment/nginx-v1.13.yaml --record=true
  6. [root@hdss7-21 ~]# kubectl get rs -n app -l tier=slb -L version # 多个ReplicaSet对应不同版本
  7. NAME DESIRED CURRENT READY AGE VERSION
  8. nginx-deploy-5597c8b45 0 0 0 10m v1.12
  9. nginx-deploy-6bd88df699 5 5 5 9m31s v1.13
  1. # 升级过程中的状态变化:
  2. [root@hdss7-21 ~]# kubectl rollout status deployment nginx-deploy -n app
  3. Waiting for deployment "nginx-deploy" rollout to finish: 5 old replicas are pending termination...
  4. Waiting for deployment "nginx-deploy" rollout to finish: 5 old replicas are pending termination...
  5. Waiting for deployment "nginx-deploy" rollout to finish: 5 old replicas are pending termination...
  6. Waiting for deployment "nginx-deploy" rollout to finish: 4 old replicas are pending termination...
  7. Waiting for deployment "nginx-deploy" rollout to finish: 4 old replicas are pending termination...
  8. Waiting for deployment "nginx-deploy" rollout to finish: 4 old replicas are pending termination...
  9. Waiting for deployment "nginx-deploy" rollout to finish: 3 old replicas are pending termination...
  10. Waiting for deployment "nginx-deploy" rollout to finish: 3 old replicas are pending termination...
  11. Waiting for deployment "nginx-deploy" rollout to finish: 3 old replicas are pending termination...
  12. Waiting for deployment "nginx-deploy" rollout to finish: 2 old replicas are pending termination...
  13. Waiting for deployment "nginx-deploy" rollout to finish: 2 old replicas are pending termination...
  14. Waiting for deployment "nginx-deploy" rollout to finish: 2 old replicas are pending termination...
  15. Waiting for deployment "nginx-deploy" rollout to finish: 1 old replicas are pending termination...
  16. Waiting for deployment "nginx-deploy" rollout to finish: 1 old replicas are pending termination...
  17. deployment "nginx-deploy" successfully rolled out
  18. [root@hdss7-21 ~]# kubectl get pod -n app -l partition=website -L version -w
  19. NAME READY STATUS RESTARTS AGE VERSION
  20. nginx-deploy-5597c8b45-t5plt 1/1 Running 0 19s v1.12
  21. nginx-deploy-5597c8b45-tcq69 1/1 Running 0 19s v1.12
  22. nginx-deploy-5597c8b45-vdjxg 1/1 Running 0 19s v1.12
  23. nginx-deploy-5597c8b45-vqn9x 1/1 Running 0 19s v1.12
  24. nginx-deploy-5597c8b45-zl6qr 1/1 Running 0 19s v1.12
  25. ---- 立刻创建5个新版本podPending调度中
  26. nginx-deploy-6bd88df699-242fr 0/1 Pending 0 0s v1.13
  27. nginx-deploy-6bd88df699-242fr 0/1 Pending 0 0s v1.13
  28. nginx-deploy-6bd88df699-8pmdg 0/1 Pending 0 0s v1.13
  29. nginx-deploy-6bd88df699-4kj8z 0/1 Pending 0 0s v1.13
  30. nginx-deploy-6bd88df699-n7x6n 0/1 Pending 0 0s v1.13
  31. nginx-deploy-6bd88df699-8pmdg 0/1 Pending 0 0s v1.13
  32. nginx-deploy-6bd88df699-4kj8z 0/1 Pending 0 0s v1.13
  33. nginx-deploy-6bd88df699-8j85n 0/1 Pending 0 0s v1.13
  34. nginx-deploy-6bd88df699-n7x6n 0/1 Pending 0 0s v1.13
  35. nginx-deploy-6bd88df699-8j85n 0/1 Pending 0 0s v1.13
  36. ---- 创建pod
  37. nginx-deploy-6bd88df699-242fr 0/1 ContainerCreating 0 0s v1.13
  38. nginx-deploy-6bd88df699-8pmdg 0/1 ContainerCreating 0 0s v1.13
  39. nginx-deploy-6bd88df699-4kj8z 0/1 ContainerCreating 0 0s v1.13
  40. nginx-deploy-6bd88df699-n7x6n 0/1 ContainerCreating 0 0s v1.13
  41. nginx-deploy-6bd88df699-8j85n 0/1 ContainerCreating 0 0s v1.13
  42. ---- 启动pod
  43. nginx-deploy-6bd88df699-242fr 0/1 Running 0 1s v1.13
  44. nginx-deploy-6bd88df699-8j85n 0/1 Running 0 1s v1.13
  45. nginx-deploy-6bd88df699-4kj8z 0/1 Running 0 1s v1.13
  46. nginx-deploy-6bd88df699-n7x6n 0/1 Running 0 1s v1.13
  47. nginx-deploy-6bd88df699-8pmdg 0/1 Running 0 1s v1.13
  48. ---- Pod逐个就绪,且替换旧版本的pod
  49. nginx-deploy-6bd88df699-242fr 1/1 Running 0 6s v1.13
  50. nginx-deploy-5597c8b45-t5plt 1/1 Terminating 0 50s v1.12
  51. nginx-deploy-6bd88df699-8j85n 1/1 Running 0 7s v1.13
  52. nginx-deploy-5597c8b45-vdjxg 1/1 Terminating 0 51s v1.12
  53. nginx-deploy-5597c8b45-t5plt 0/1 Terminating 0 51s v1.12
  54. nginx-deploy-5597c8b45-t5plt 0/1 Terminating 0 51s v1.12
  55. nginx-deploy-6bd88df699-4kj8z 1/1 Running 0 7s v1.13
  56. nginx-deploy-5597c8b45-zl6qr 1/1 Terminating 0 51s v1.12
  57. nginx-deploy-5597c8b45-vdjxg 0/1 Terminating 0 52s v1.12
  58. nginx-deploy-5597c8b45-vdjxg 0/1 Terminating 0 52s v1.12
  59. nginx-deploy-5597c8b45-zl6qr 0/1 Terminating 0 53s v1.12
  60. nginx-deploy-5597c8b45-t5plt 0/1 Terminating 0 54s v1.12
  61. nginx-deploy-5597c8b45-t5plt 0/1 Terminating 0 54s v1.12
  62. nginx-deploy-5597c8b45-zl6qr 0/1 Terminating 0 56s v1.12
  63. nginx-deploy-5597c8b45-zl6qr 0/1 Terminating 0 56s v1.12
  64. nginx-deploy-6bd88df699-n7x6n 1/1 Running 0 13s v1.13
  65. nginx-deploy-5597c8b45-tcq69 1/1 Terminating 0 57s v1.12
  66. nginx-deploy-5597c8b45-tcq69 0/1 Terminating 0 58s v1.12
  67. nginx-deploy-5597c8b45-tcq69 0/1 Terminating 0 59s v1.12
  68. nginx-deploy-6bd88df699-8pmdg 1/1 Running 0 15s v1.13
  69. nginx-deploy-5597c8b45-vqn9x 1/1 Terminating 0 59s v1.12
  70. nginx-deploy-5597c8b45-vqn9x 0/1 Terminating 0 60s v1.12
  71. nginx-deploy-5597c8b45-vqn9x 0/1 Terminating 0 61s v1.12
  72. nginx-deploy-5597c8b45-vqn9x 0/1 Terminating 0 61s v1.12
  73. nginx-deploy-5597c8b45-vdjxg 0/1 Terminating 0 64s v1.12
  74. nginx-deploy-5597c8b45-vdjxg 0/1 Terminating 0 64s v1.12
  75. nginx-deploy-5597c8b45-tcq69 0/1 Terminating 0 64s v1.12
  76. nginx-deploy-5597c8b45-tcq69 0/1 Terminating 0 64s v1.12

该分类下的相关小册推荐: