v1是1.14.0版本nginx ,實操時候升級到v2是1.20.0版本nginx,來測試灰度發(fā)布實現(xiàn)過程
一、方案:使用ingress實現(xiàn)應(yīng)用的灰度發(fā)布
1、服務(wù)端:正常版本v1,灰度升級版本v2
2、客戶端:帶有請求頭version=v2標識的請求訪問版本v2,其他的請求訪問版本v1
3、待版本v2穩(wěn)定后,所有請求切換至版本v2,停止版本v1(刪除原deployment,service,ingress)
二、操作步驟
1、創(chuàng)建版本v1的deployment、service、ingress
nginx服務(wù)版本v1的deployment和service
nginx-v1.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-v1
spec:
selector:
matchLabels:
app: nginx-v1
replicas: 1
template:
metadata:
labels:
app: nginx-v1
spec:
containers:
- name: nginx
image: nginx:1.14.0
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: file
volumes:
- name: file
hostPath:
path: /data/nginx-v1
---
apiVersion: v1
kind: Service
metadata:
name: nginx-v1-svc
labels:
app: nginx-v1
spec:
type: ClusterIP
selector:
app: nginx-v1
ports:
- port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-v1
spec:
ingressClassName: nginx
rules:
- host: test.nginx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-v1-svc
port:
number: 80
驗證:apifox 調(diào)用test.nginx.com,當前所有請求都正常訪問版本v1,即1.14版本nginx
2、創(chuàng)建版本v2的deployment、service、ingress
nginx服務(wù)版本v2的deployment、service
nginx-v2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-v2
spec:
selector:
matchLabels:
app: nginx-v2
replicas: 1
template:
metadata:
labels:
app: nginx-v2
spec:
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: file
volumes:
- name: file
hostPath:
path: /data/nginx-v2
---
apiVersion: v1
kind: Service
metadata:
name: nginx-v2-svc
labels:
app: nginx-v2
spec:
type: ClusterIP
selector:
app: nginx-v2
ports:
- port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-v2
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "version" #請求頭key=version
nginx.ingress.kubernetes.io/canary-by-header-value: "v2" #請求頭value=v2
spec:
ingressClassName: nginx
rules:
- host: test.nginx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-v2-svc
port:
number: 80
nginx服務(wù)版本v2的ingress,匹配請求頭version=2訪問
驗證:postman調(diào)用test.nginx.com,加了請求頭version=v2的請求訪問版本v2,即1.20版nginx,其他請求訪問版本v1
三、方案:使用k8s 配置 RollingUpdate 滾動更新實現(xiàn)應(yīng)用的灰度發(fā)布文章來源:http://www.zghlxwxcb.cn/news/detail-819894.html
spec:
? replicas: 1 #運行容器的副本數(shù),修改這里可以快速修改分布式節(jié)點數(shù)量
? progressDeadlineSeconds: 600 #在Deployment 在進度卡住6分鐘后報告
? minReadySeconds: 120 #Pod被認為是可用狀態(tài)的最小秒數(shù),然后加入nacos 可用。默認是0
? strategy:
? ? rollingUpdate:
? ? ? maxSurge: 1 #升級過程中激增Pod的最大數(shù)量
? ? ? maxUnavailable: 0 #升級過程中不可用Pod的最大數(shù)量
? ? type: RollingUpdate文章來源地址http://www.zghlxwxcb.cn/news/detail-819894.html
apiVersion: v1
kind: Service
metadata:
name: $IMG_NAME
namespace: rz-dt
labels:
app: $IMG_NAME
spec:
type: NodePort
ports:
- port: 8091
nodePort: 31082 #service對外開放端口
selector:
app: $IMG_NAME
---
apiVersion: apps/v1
kind: Deployment #對象類型
metadata:
name: $IMG_NAME #名稱
namespace: rz-dt
labels:
app: $IMG_NAME #標注
spec:
replicas: 1 #運行容器的副本數(shù),修改這里可以快速修改分布式節(jié)點數(shù)量
progressDeadlineSeconds: 600 #在Deployment 在進度卡住6分鐘后報告
minReadySeconds: 120 #Pod被認為是可用狀態(tài)的最小秒數(shù),然后加入nacos 可用。默認是0
strategy:
rollingUpdate:
maxSurge: 1 #升級過程中激增Pod的最大數(shù)量
maxUnavailable: 0 #升級過程中不可用Pod的最大數(shù)量
type: RollingUpdate
selector:
matchLabels:
app: $IMG_NAME
template:
metadata:
labels:
app: $IMG_NAME
spec:
containers: #docker容器的配置
- name: $IMG_NAME
env:
- name: aliyun_logs_catalina
value: stdout
image: rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/$IMG_NAME:$IMG_TAG # pull鏡像的地址 ip:prot/dir/images:tag
imagePullPolicy: Always #pull鏡像時機,
#command: ["java","-Dserver.port=8055","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"]
ports:
- containerPort: 8091 #容器對外開放端口,需與springboot配置文件一致
volumeMounts:
- name: time-config
mountPath: /etc/localtime
readOnly: true
- name: volume-logs
mountPath: /logs
subPath: logs
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 10m
memory: 50Mi
#從私有倉庫拉取鏡像憑證
imagePullSecrets:
- name: rz-dt-miyue-vpc
volumes:
- name: time-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- name: volume-logs
persistentVolumeClaim:
claimName: rz-dt-nas-volume-claim
到了這里,關(guān)于k8s使用ingress實現(xiàn)應(yīng)用的灰度發(fā)布升級的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!