发布策略(扩展)(仅收藏)
发布策略
目录
[toc]
滚动更新
yaml
apiVersion:apps/v1beta2kind:Deploymentmetadata:name:nginxlabels:app:nginxspec:replicas:1selector:matchLabels:app:nginxstrategy:type:RollingUpdaterollingUpdate:maxUnavailable:1## 最多1个pod处于不可工作状态maxSurge:2## 升级时可以比预期多出2个podminReadySeconds:5## 容器启动后等待5秒
蓝绿发布
创建新的部署,然后修改service的标签来将流量指向新的部署。
bash
[root@master b-g]# kubectl get podNAMEREADYSTATUSRESTARTSAGEnginxapp-1.19-bdb8dc6c4-2jfsw1/1Running012mnginxapp-1.19-bdb8dc6c4-79qrh1/1Running012mnginxapp-1.19-bdb8dc6c4-hbwkx1/1Running012mnginxapp-1.20-786464458-4zh5t1/1Running091snginxapp-1.20-786464458-5bfwq1/1Running091snginxapp-1.20-786464458-fwgxb1/1Running091s
v1.1.4-blue.yaml
yaml
kind:DeploymentapiVersion:apps/v1metadata:labels:k8s-app:devops4-ops-serviceversion:"1.1.4"name:devops4-ops-service-bluenamespace:devops4spec:replicas:3revisionHistoryLimit:10selector:matchLabels:k8s-app:devops4-ops-serviceversion:"1.1.4"template:metadata:labels:k8s-app:devops4-ops-serviceversion:"1.1.4"namespace:devops4name:devops4-ops-servicespec:containers:- name:devops4-ops-serviceimage:192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.4-c6b176adimagePullPolicy:IfNotPresentports:- containerPort:8080name:webprotocol:TCPserviceAccountName:devops4-ops-service---apiVersion:v1kind:ServiceAccountmetadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-service
service.yaml
yaml
apiVersion:v1kind:Namespacemetadata:name:devops4---apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:example-ingressnamespace:devops4spec:rules:- host:devops4.ops.servicehttp:paths:- pathType:Prefixpath:"/"backend:service:name:devops4-ops-serviceport:number:8080---kind:ServiceapiVersion:v1metadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-servicenamespace:devops4spec:type:ClusterIPports:- name:webport:8080targetPort:8080selector:k8s-app:devops4-ops-serviceversion:"1.1.4"
v1.1.5-green.yaml
yaml
kind:DeploymentapiVersion:apps/v1metadata:labels:k8s-app:devops4-ops-serviceversion:"1.1.5"name:devops4-ops-service-greennamespace:devops4spec:replicas:3revisionHistoryLimit:10selector:matchLabels:k8s-app:devops4-ops-serviceversion:"1.1.5"template:metadata:labels:k8s-app:devops4-ops-serviceversion:"1.1.5"namespace:devops4name:devops4-ops-servicespec:containers:- name:devops4-ops-serviceimage:192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.5-bc630338imagePullPolicy:IfNotPresentports:- containerPort:8080name:webprotocol:TCPserviceAccountName:devops4-ops-service---apiVersion:v1kind:ServiceAccountmetadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-service
启动busybox容器调试(废弃)
bash
kubectlrun--restart=Never-it--image\infoblox/dnstoolsdnstools
修改流量(service)
bash
kubectlpatchsvcdevops4-ops-service-p'{"spec":{"selector":{"version":"1.1.5"}}}'-ndevops4
测试验证
bash
curlhttp:kind:Namespacemetadata:name:devops4---apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:example-ingress-1-4namespace:devops4spec:rules:- host:devops4.ops.servicehttp:paths:- pathType:Prefixpath:"/"backend:service:name:devops4-ops-service-1-4port:number:8080---kind:DeploymentapiVersion:apps/v1metadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-service-1-4namespace:devops4spec:replicas:1revisionHistoryLimit:10selector:matchLabels:k8s-app:devops4-ops-servicetemplate:metadata:labels:k8s-app:devops4-ops-servicenamespace:devops4name:devops4-ops-servicespec:containers:- name:devops4-ops-serviceimage:192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.4-c6b176adimagePullPolicy:IfNotPresentports:- containerPort:8080name:webprotocol:TCPserviceAccountName:devops4-ops-service---apiVersion:v1kind:ServiceAccountmetadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-servicenamespace:devops4---kind:ServiceapiVersion:v1metadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-service-1-4namespace:devops4spec:type:ClusterIPports:- name:webport:8080targetPort:8080selector:k8s-app:devops4-ops-service
1.1.5
yaml
apiVersion:v1kind:Namespacemetadata:name:devops5---apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:example-ingressnamespace:devops5annotations:kubernetes.io/ingress.class:nginxnginx.ingress.kubernetes.io/canary:"true"nginx.ingress.kubernetes.io/canary-by-cookie:"from"spec:rules:- host:devops4.ops.servicehttp:paths:- pathType:Prefixpath:"/"backend:service:name:devops4-ops-service-1-5port:number:8080---kind:DeploymentapiVersion:apps/v1metadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-servicenamespace:devops5spec:replicas:1revisionHistoryLimit:10selector:matchLabels:k8s-app:devops4-ops-servicetemplate:metadata:labels:k8s-app:devops4-ops-servicenamespace:devops5name:devops4-ops-servicespec:containers:- name:devops4-ops-serviceimage:192.168.1.200:8088/devops4/devops4-ops-service:RELEASE-1.1.5-bc630338imagePullPolicy:IfNotPresentports:- containerPort:8080name:webprotocol:TCPserviceAccountName:devops4-ops-service---apiVersion:v1kind:ServiceAccountmetadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-servicenamespace:devops5---kind:ServiceapiVersion:v1metadata:labels:k8s-app:devops4-ops-servicename:devops4-ops-service-1-5namespace:devops5spec:type:ClusterIPports:- name:webport:8080targetPort:8080selector:k8s-app:devops4-ops-service
创建资源:
bash
[root@zeyang-nuc-service canary]# kubectl get all -n devops4NAMEREADYSTATUSRESTARTSAGEpod/devops4-ops-service-1-4-7f97cb665c-vcntl1/1Running016mNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S) AGEservice/devops4-ops-service-1-4ClusterIP10.96.65.65<none>8080/TCP16mNAMEREADYUP-TO-DATEAVAILABLEAGEdeployment.apps/devops4-ops-service-1-41/11116mNAMEDESIREDCURRENTREADYAGEreplicaset.apps/devops4-ops-service-1-4-7f97cb665c11116m[root@zeyang-nuc-service canary]# kubectl get all -n devops5NAMEREADYSTATUSRESTARTSAGEpod/devops4-ops-service-5fbfb57777-6hc621/1Running015mNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S) AGEservice/devops4-ops-service-1-5ClusterIP10.96.64.251<none>8080/TCP15mNAMEREADYUP-TO-DATEAVAILABLEAGEdeployment.apps/devops4-ops-service1/11115mNAMEDESIREDCURRENTREADYAGEreplicaset.apps/devops4-ops-service-5fbfb5777711115m
测试:
yaml
## 编辑hosts文件192.168.10.100 devops4.ops.servicefor i in {1..10};do curl devops4.ops.service/hello ;done
基于权重的发布
<1.19.0
yaml
apiVersion:extensions/v1beta1kind:Ingressmetadata:name:example-ingressnamespace:devops4annotations:kubernetes.io/ingress.class:nginxnginx.ingress.kubernetes.io/canary:"true"nginx.ingress.kubernetes.io/canary-weight:"10"spec:rules:- host:devops4.ops.servicehttp:paths:- path:/backend:serviceName:devops4-ops-serviceservicePort:8080
>1.19.0
yaml
apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:example-ingressnamespace:devops4annotations:kubernetes.io/ingress.class:nginxnginx.ingress.kubernetes.io/canary:"true"nginx.ingress.kubernetes.io/canary-weight:"10"spec:rules:- host:devops4.ops.servicehttp:paths:- pathType:Prefixpath:"/"backend:service:name:devops4-ops-serviceport:number:8080
Header报头流量分发
<1.19.0
yaml
apiVersion:extensions/v1beta1kind:Ingressmetadata:name:example-ingressnamespace:devops4annotations:kubernetes.io/ingress.class:nginxnginx.ingress.kubernetes.io/canary:"true"nginx.ingress.kubernetes.io/canary-by-header:"Region"nginx.ingress.kubernetes.io/canary-by-header-value:"bj"spec:rules:- host:devops4.ops.servicehttp:paths:- path:/backend:serviceName:devops4-ops-serviceservicePort:8080
>1.19.0
yaml
apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:example-ingressnamespace:devops4annotations:kubernetes.io/ingress.class:nginxnginx.ingress.kubernetes.io/canary:"true"nginx.ingress.kubernetes.io/canary-by-header:"Region"nginx.ingress.kubernetes.io/canary-by-header-value:"bj"spec:rules:- host:devops4.ops.servicehttp:paths:- pathType:Prefixpath:"/"backend:service:name:devops4-ops-serviceport:number:8080
bash
fori in{1..10};docurl -H "region:bj"devops4.ops.service/hello;done
根据cookie流量分发
<1.19.0
yaml
apiVersion:extensions/v1beta1kind:Ingressmetadata:name:example-ingressnamespace:devops4annotations:kubernetes.io/ingress.class:nginxnginx.ingress.kubernetes.io/canary:"true"nginx.ingress.kubernetes.io/canary-by-cookie:"from"spec:rules:- host:devops4.ops.servicehttp:paths:- path:/backend:serviceName:devops4-ops-serviceservicePort:8080
>1.19.0
yaml
apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:example-ingressnamespace:devops4annotations:kubernetes.io/ingress.class:nginxnginx.ingress.kubernetes.io/canary:"true"nginx.ingress.kubernetes.io/canary-by-cookie:"from"spec:rules:- host:devops4.ops.servicehttp:paths:- pathType:Prefixpath:"/"backend:service:name:devops4-ops-serviceport:number:8080
bash
[root@master ingress-gray]# curl devops4.ops.service/hello --cookie "from=always"1.1.5[root@master ingress-gray]# curl devops4.ops.service/hello --cookie "from=a"1.1.4[root@master ingress-gray]# curl devops4.ops.service/hello --cookie "from=a"1.1.4
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码 x2675263825 (舍得), qq:2675263825。
🍀 微信公众号 《云原生架构师实战》
🍀 个人博客站点
上次更新时间: