hugo-teek is loading...

发布策略(扩展)(仅收藏)

最后更新于:

发布策略

image-20230921083321559

目录

[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。

image-20230107215114763

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

image-20230107215126971

🍀 个人博客站点

http://47.97.48.237/ (即将上线域名:onedayxyy.cn)

image-20230917111843405

🍀 语雀

https://www.yuque.com/xyy-onlyone

image-20230912072007284

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

image-20230107215149885

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

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

推荐使用微信支付
微信支付二维码
推荐使用支付宝
支付宝二维码
最新文章

文档导航