大连seo建站公司,上海平台网站建设费用,东莞自适应网站建设,wordpress伪静态winv1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx#xff0c;来测试灰度发布实现过程
一、方案#xff1a;使用ingress实现应用的灰度发布
1、服务端#xff1a;正常版本v1#xff0c;灰度升级版本v2
2、客户端#xff1a;带有请求头versionv2标识的请求访问版…v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx来测试灰度发布实现过程
一、方案使用ingress实现应用的灰度发布
1、服务端正常版本v1灰度升级版本v2
2、客户端带有请求头versionv2标识的请求访问版本v2其他的请求访问版本v1
3、待版本v2稳定后所有请求切换至版本v2停止版本v1删除原deployment,service,ingress 二、操作步骤
1、创建版本v1的deployment、service、ingress
nginx服务版本v1的deployment和service
nginx-v1.yml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1
spec:selector:matchLabels:app: nginx-v1replicas: 1template:metadata:labels:app: nginx-v1spec:containers:- name: nginximage: nginx:1.14.0ports:- containerPort: 80volumeMounts:- mountPath: /usr/share/nginx/htmlname: filevolumes:- name: filehostPath:path: /data/nginx-v1
---
apiVersion: v1
kind: Service
metadata:name: nginx-v1-svc labels:app: nginx-v1
spec:type: ClusterIP selector:app: nginx-v1ports:- port: 80targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-v1
spec:ingressClassName: nginxrules:- host: test.nginx.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-v1-svc port:number: 80
验证apifox 调用test.nginx.com当前所有请求都正常访问版本v1即1.14版本nginx 2、创建版本v2的deployment、service、ingress
nginx服务版本v2的deployment、service
nginx-v2.yml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v2
spec:selector:matchLabels:app: nginx-v2replicas: 1template:metadata:labels:app: nginx-v2spec:containers:- name: nginximage: nginx:1.20.0ports:- containerPort: 80volumeMounts:- mountPath: /usr/share/nginx/htmlname: filevolumes:- name: filehostPath:path: /data/nginx-v2
---
apiVersion: v1
kind: Service
metadata:name: nginx-v2-svc labels:app: nginx-v2
spec:type: ClusterIP selector:app: nginx-v2ports:- port: 80targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-v2annotations:nginx.ingress.kubernetes.io/canary: truenginx.ingress.kubernetes.io/canary-by-header: version #请求头keyversionnginx.ingress.kubernetes.io/canary-by-header-value: v2 #请求头valuev2
spec:ingressClassName: nginxrules:- host: test.nginx.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-v2-svc port:number: 80
nginx服务版本v2的ingress匹配请求头version2访问
验证postman调用test.nginx.com加了请求头versionv2的请求访问版本v2即1.20版nginx其他请求访问版本v1 三、方案使用k8s 配置 RollingUpdate 滚动更新实现应用的灰度发布
spec: replicas: 1 #运行容器的副本数修改这里可以快速修改分布式节点数量 progressDeadlineSeconds: 600 #在Deployment 在进度卡住6分钟后报告 minReadySeconds: 120 #Pod被认为是可用状态的最小秒数然后加入nacos 可用。默认是0 strategy: rollingUpdate: maxSurge: 1 #升级过程中激增Pod的最大数量 maxUnavailable: 0 #升级过程中不可用Pod的最大数量 type: RollingUpdate
apiVersion: v1
kind: Service
metadata:name: $IMG_NAMEnamespace: rz-dtlabels:app: $IMG_NAME
spec:type: NodePortports:- port: 8091nodePort: 31082 #service对外开放端口selector:app: $IMG_NAME
---
apiVersion: apps/v1
kind: Deployment #对象类型
metadata:name: $IMG_NAME #名称namespace: rz-dtlabels:app: $IMG_NAME #标注
spec:replicas: 1 #运行容器的副本数修改这里可以快速修改分布式节点数量progressDeadlineSeconds: 600 #在Deployment 在进度卡住6分钟后报告minReadySeconds: 120 #Pod被认为是可用状态的最小秒数然后加入nacos 可用。默认是0strategy:rollingUpdate:maxSurge: 1 #升级过程中激增Pod的最大数量maxUnavailable: 0 #升级过程中不可用Pod的最大数量type: RollingUpdateselector:matchLabels:app: $IMG_NAMEtemplate:metadata:labels:app: $IMG_NAMEspec:containers: #docker容器的配置- name: $IMG_NAMEenv:- name: aliyun_logs_catalinavalue: stdoutimage: rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/$IMG_NAME:$IMG_TAG # pull镜像的地址 ip:prot/dir/images:tagimagePullPolicy: Always #pull镜像时机#command: [java,-Dserver.port8055,-jar,/usr/local/cenobitor/k8s-springboot-demo.jar]ports:- containerPort: 8091 #容器对外开放端口,需与springboot配置文件一致volumeMounts:- name: time-configmountPath: /etc/localtimereadOnly: true- name: volume-logsmountPath: /logssubPath: logsresources:limits:cpu: 500mmemory: 1Girequests:cpu: 10mmemory: 50Mi#从私有仓库拉取镜像凭证imagePullSecrets:- name: rz-dt-miyue-vpcvolumes:- name: time-confighostPath:path: /usr/share/zoneinfo/Asia/Shanghai- name: volume-logspersistentVolumeClaim:claimName: rz-dt-nas-volume-claim