--
:
--
:
--
hugo-teek is loading...
发布策略(扩展)(仅收藏)
最后更新于:
发布策略

目录
[toc]
滚动更新
1apiVersion: apps/v1beta2
2kind: Deployment
3metadata:
4 name: nginx
5 labels:
6 app: nginx
7spec:
8 replicas: 1
9 selector:
10 matchLabels:
11 app: nginx
12 strategy:
13 type: RollingUpdate
14 rollingUpdate:
15 maxUnavailable: 1 ## 最多1个pod处于不可工作状态
16 maxSurge: 2 ## 升级时可以比预期多出2个pod
17 minReadySeconds: 5 ## 容器启动后等待5秒
蓝绿发布
创建新的部署,然后修改service的标签来将流量指向新的部署。
1[root@master b-g]# kubectl get pod
2NAME READY STATUS RESTARTS AGE
3nginxapp-1.19-bdb8dc6c4-2jfsw 1/1 Running 0 12m
4nginxapp-1.19-bdb8dc6c4-79qrh 1/1 Running 0 12m
5nginxapp-1.19-bdb8dc6c4-hbwkx 1/1 Running 0 12m
6nginxapp-1.20-786464458-4zh5t 1/1 Running 0 91s
7nginxapp-1.20-786464458-5bfwq 1/1 Running 0 91s
8nginxapp-1.20-786464458-fwgxb 1/1 Running 0 91s
v1.1.4-blue.yaml
1kind: Deployment
2apiVersion: apps/v1
3metadata:
4 labels:
5 k8s-app: devops4-ops-service
6 version: "1.1.4"
7 name: devops4-ops-service-blue
8 namespace: devops4
9spec:
10 replicas: 3
11 revisionHistoryLimit: 10
12 selector:
13 matchLabels:
14 k8s-app: devops4-ops-service
15 version: "1.1.4"
16 template:
17 metadata:
18 labels:
19 k8s-app: devops4-ops-service
20 version: "1.1.4"
21 namespace: devops4
22 name: devops4-ops-service
23 spec:
24 containers:
25 - name: devops4-ops-service
26 image: 192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.4-c6b176ad
27 imagePullPolicy: IfNotPresent
28 ports:
29 - containerPort: 8080
30 name: web
31 protocol: TCP
32 serviceAccountName: devops4-ops-service
33---
34apiVersion: v1
35kind: ServiceAccount
36metadata:
37 labels:
38 k8s-app: devops4-ops-service
39 name: devops4-ops-service
service.yaml
1apiVersion: v1
2kind: Namespace
3metadata:
4 name: devops4
5---
6apiVersion: networking.k8s.io/v1
7kind: Ingress
8metadata:
9 name: example-ingress
10 namespace: devops4
11spec:
12 rules:
13 - host: devops4.ops.service
14 http:
15 paths:
16 - pathType: Prefix
17 path: "/"
18 backend:
19 service:
20 name: devops4-ops-service
21 port:
22 number: 8080
23---
24kind: Service
25apiVersion: v1
26metadata:
27 labels:
28 k8s-app: devops4-ops-service
29 name: devops4-ops-service
30 namespace: devops4
31spec:
32 type: ClusterIP
33 ports:
34 - name: web
35 port: 8080
36 targetPort: 8080
37 selector:
38 k8s-app: devops4-ops-service
39 version: "1.1.4"
v1.1.5-green.yaml
1kind: Deployment
2apiVersion: apps/v1
3metadata:
4 labels:
5 k8s-app: devops4-ops-service
6 version: "1.1.5"
7 name: devops4-ops-service-green
8 namespace: devops4
9spec:
10 replicas: 3
11 revisionHistoryLimit: 10
12 selector:
13 matchLabels:
14 k8s-app: devops4-ops-service
15 version: "1.1.5"
16 template:
17 metadata:
18 labels:
19 k8s-app: devops4-ops-service
20 version: "1.1.5"
21 namespace: devops4
22 name: devops4-ops-service
23 spec:
24 containers:
25 - name: devops4-ops-service
26 image: 192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.5-bc630338
27 imagePullPolicy: IfNotPresent
28 ports:
29 - containerPort: 8080
30 name: web
31 protocol: TCP
32 serviceAccountName: devops4-ops-service
33---
34apiVersion: v1
35kind: ServiceAccount
36metadata:
37 labels:
38 k8s-app: devops4-ops-service
39 name: devops4-ops-service
启动busybox容器调试(废弃)
1kubectl run --restart=Never -it --image \
2 infoblox/dnstools dnstools
修改流量(service)
1kubectl patch svc devops4-ops-service -p '{"spec":{"selector":{"version": "1.1.5"}}}' -n devops4
测试验证
1curl http://devops4.ops.service/hello
灰度发布
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary
1.1.4
1apiVersion: v1
2kind: Namespace
3metadata:
4 name: devops4
5---
6apiVersion: networking.k8s.io/v1
7kind: Ingress
8metadata:
9 name: example-ingress-1-4
10 namespace: devops4
11spec:
12 rules:
13 - host: devops4.ops.service
14 http:
15 paths:
16 - pathType: Prefix
17 path: "/"
18 backend:
19 service:
20 name: devops4-ops-service-1-4
21 port:
22 number: 8080
23---
24kind: Deployment
25apiVersion: apps/v1
26metadata:
27 labels:
28 k8s-app: devops4-ops-service
29 name: devops4-ops-service-1-4
30 namespace: devops4
31spec:
32 replicas: 1
33 revisionHistoryLimit: 10
34 selector:
35 matchLabels:
36 k8s-app: devops4-ops-service
37 template:
38 metadata:
39 labels:
40 k8s-app: devops4-ops-service
41 namespace: devops4
42 name: devops4-ops-service
43 spec:
44 containers:
45 - name: devops4-ops-service
46 image: 192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.4-c6b176ad
47 imagePullPolicy: IfNotPresent
48 ports:
49 - containerPort: 8080
50 name: web
51 protocol: TCP
52 serviceAccountName: devops4-ops-service
53---
54apiVersion: v1
55kind: ServiceAccount
56metadata:
57 labels:
58 k8s-app: devops4-ops-service
59 name: devops4-ops-service
60 namespace: devops4
61---
62kind: Service
63apiVersion: v1
64metadata:
65 labels:
66 k8s-app: devops4-ops-service
67 name: devops4-ops-service-1-4
68 namespace: devops4
69spec:
70 type: ClusterIP
71 ports:
72 - name: web
73 port: 8080
74 targetPort: 8080
75 selector:
76 k8s-app: devops4-ops-service
1.1.5
1apiVersion: v1
2kind: Namespace
3metadata:
4 name: devops5
5---
6apiVersion: networking.k8s.io/v1
7kind: Ingress
8metadata:
9 name: example-ingress
10 namespace: devops5
11 annotations:
12 kubernetes.io/ingress.class: nginx
13 nginx.ingress.kubernetes.io/canary: "true"
14 nginx.ingress.kubernetes.io/canary-by-cookie: "from"
15spec:
16 rules:
17 - host: devops4.ops.service
18 http:
19 paths:
20 - pathType: Prefix
21 path: "/"
22 backend:
23 service:
24 name: devops4-ops-service-1-5
25 port:
26 number: 8080
27---
28kind: Deployment
29apiVersion: apps/v1
30metadata:
31 labels:
32 k8s-app: devops4-ops-service
33 name: devops4-ops-service
34 namespace: devops5
35spec:
36 replicas: 1
37 revisionHistoryLimit: 10
38 selector:
39 matchLabels:
40 k8s-app: devops4-ops-service
41 template:
42 metadata:
43 labels:
44 k8s-app: devops4-ops-service
45 namespace: devops5
46 name: devops4-ops-service
47 spec:
48 containers:
49 - name: devops4-ops-service
50 image: 192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.5-bc630338
51 imagePullPolicy: IfNotPresent
52 ports:
53 - containerPort: 8080
54 name: web
55 protocol: TCP
56 serviceAccountName: devops4-ops-service
57---
58apiVersion: v1
59kind: ServiceAccount
60metadata:
61 labels:
62 k8s-app: devops4-ops-service
63 name: devops4-ops-service
64 namespace: devops5
65---
66kind: Service
67apiVersion: v1
68metadata:
69 labels:
70 k8s-app: devops4-ops-service
71 name: devops4-ops-service-1-5
72 namespace: devops5
73spec:
74 type: ClusterIP
75 ports:
76 - name: web
77 port: 8080
78 targetPort: 8080
79 selector:
80 k8s-app: devops4-ops-service
创建资源:
1[root@zeyang-nuc-service canary]# kubectl get all -n devops4
2NAME READY STATUS RESTARTS AGE
3pod/devops4-ops-service-1-4-7f97cb665c-vcntl 1/1 Running 0 16m
4
5NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
6service/devops4-ops-service-1-4 ClusterIP 10.96.65.65 <none> 8080/TCP 16m
7
8NAME READY UP-TO-DATE AVAILABLE AGE
9deployment.apps/devops4-ops-service-1-4 1/1 1 1 16m
10
11NAME DESIRED CURRENT READY AGE
12replicaset.apps/devops4-ops-service-1-4-7f97cb665c 1 1 1 16m
13
14
15[root@zeyang-nuc-service canary]# kubectl get all -n devops5
16NAME READY STATUS RESTARTS AGE
17pod/devops4-ops-service-5fbfb57777-6hc62 1/1 Running 0 15m
18
19NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
20service/devops4-ops-service-1-5 ClusterIP 10.96.64.251 <none> 8080/TCP 15m
21
22NAME READY UP-TO-DATE AVAILABLE AGE
23deployment.apps/devops4-ops-service 1/1 1 1 15m
24
25NAME DESIRED CURRENT READY AGE
26replicaset.apps/devops4-ops-service-5fbfb57777 1 1 1 15m
测试:
1## 编辑hosts文件
2192.168.10.100 devops4.ops.service
3
4for i in {1..10};do curl devops4.ops.service/hello ;done
基于权重的发布
<1.19.0
1apiVersion: extensions/v1beta1
2kind: Ingress
3metadata:
4 name: example-ingress
5 namespace: devops4
6 annotations:
7 kubernetes.io/ingress.class: nginx
8 nginx.ingress.kubernetes.io/canary: "true"
9 nginx.ingress.kubernetes.io/canary-weight: "10"
10spec:
11 rules:
12 - host: devops4.ops.service
13 http:
14 paths:
15 - path: /
16 backend:
17 serviceName: devops4-ops-service
18 servicePort: 8080
>1.19.0
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: example-ingress
5 namespace: devops4
6 annotations:
7 kubernetes.io/ingress.class: nginx
8 nginx.ingress.kubernetes.io/canary: "true"
9 nginx.ingress.kubernetes.io/canary-weight: "10"
10spec:
11 rules:
12 - host: devops4.ops.service
13 http:
14 paths:
15 - pathType: Prefix
16 path: "/"
17 backend:
18 service:
19 name: devops4-ops-service
20 port:
21 number: 8080
Header报头流量分发
<1.19.0
1apiVersion: extensions/v1beta1
2kind: Ingress
3metadata:
4 name: example-ingress
5 namespace: devops4
6 annotations:
7 kubernetes.io/ingress.class: nginx
8 nginx.ingress.kubernetes.io/canary: "true"
9 nginx.ingress.kubernetes.io/canary-by-header: "Region"
10 nginx.ingress.kubernetes.io/canary-by-header-value: "bj"
11spec:
12 rules:
13 - host: devops4.ops.service
14 http:
15 paths:
16 - path: /
17 backend:
18 serviceName: devops4-ops-service
19 servicePort: 8080
>1.19.0
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: example-ingress
5 namespace: devops4
6 annotations:
7 kubernetes.io/ingress.class: nginx
8 nginx.ingress.kubernetes.io/canary: "true"
9 nginx.ingress.kubernetes.io/canary-by-header: "Region"
10 nginx.ingress.kubernetes.io/canary-by-header-value: "bj"
11spec:
12 rules:
13 - host: devops4.ops.service
14 http:
15 paths:
16 - pathType: Prefix
17 path: "/"
18 backend:
19 service:
20 name: devops4-ops-service
21 port:
22 number: 8080
1for i in {1..10};do curl -H "region: bj" devops4.ops.service/hello;done
根据cookie流量分发
<1.19.0
1apiVersion: extensions/v1beta1
2kind: Ingress
3metadata:
4 name: example-ingress
5 namespace: devops4
6 annotations:
7 kubernetes.io/ingress.class: nginx
8 nginx.ingress.kubernetes.io/canary: "true"
9 nginx.ingress.kubernetes.io/canary-by-cookie: "from"
10spec:
11 rules:
12 - host: devops4.ops.service
13 http:
14 paths:
15 - path: /
16 backend:
17 serviceName: devops4-ops-service
18 servicePort: 8080
>1.19.0
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: example-ingress
5 namespace: devops4
6 annotations:
7 kubernetes.io/ingress.class: nginx
8 nginx.ingress.kubernetes.io/canary: "true"
9 nginx.ingress.kubernetes.io/canary-by-cookie: "from"
10spec:
11 rules:
12 - host: devops4.ops.service
13 http:
14 paths:
15 - pathType: Prefix
16 path: "/"
17 backend:
18 service:
19 name: devops4-ops-service
20 port:
21 number: 8080
1[root@master ingress-gray]# curl devops4.ops.service/hello --cookie "from=always"
21.1.5
3[root@master ingress-gray]# curl devops4.ops.service/hello --cookie "from=a"
41.1.4
5[root@master ingress-gray]# curl devops4.ops.service/hello --cookie "from=a"
61.1.4
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

🍀 微信公众号 《云原生架构师实战》

🍀 个人博客站点
http://47.97.48.237/ (即将上线域名:onedayxyy.cn)

🍀 语雀
https://www.yuque.com/xyy-onlyone

🍀 csdn https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

🍀 知乎 https://www.zhihu.com/people/foryouone

最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!
📡
👤
作者:
余温Gueen
🌐
版权:
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
协议,转载请注明来自
余温Gueen Blog!
推荐使用微信支付

推荐使用支付宝
