方案實(shí)現(xiàn)方式:
RollingUpdate 滾動(dòng)更新機(jī)制
當(dāng)某個(gè)服務(wù)需要升級(jí)時(shí),傳統(tǒng)的做法是,先將要更新的服務(wù)下線,業(yè)務(wù)停止后再更新版本和配置,然后重新啟動(dòng)服務(wù)。
如果業(yè)務(wù)集群規(guī)模較大時(shí),這個(gè)工作就變成了一個(gè)挑戰(zhàn),而且全部停止了服務(wù),再逐步升級(jí)的方式會(huì)導(dǎo)致服務(wù)較長(zhǎng)時(shí)間不可用。
針對(duì)這個(gè)問題,k8s提供了滾動(dòng)更新(rolling-update)的方式來解決上述問題。
滾動(dòng)更新是針對(duì)pod來操作的,它通過一次只更新一小部分副本,成功后,再更新更多的副本,最終完成所有副本的更新。
滾動(dòng)更新的最大的好處是零停機(jī),整個(gè)更新過程始終有副本在運(yùn)行,從而保證了服務(wù)的連續(xù)性文章來源:http://www.zghlxwxcb.cn/news/detail-821427.html
spec:
replicas: 5
minReadySeconds: 120 #Pod被認(rèn)為是可用狀態(tài)的最小秒數(shù),應(yīng)用啟動(dòng)并注冊(cè)nacos延遲時(shí)間。默認(rèn)是0
selector:
matchLabels:
run: httpservice
strategy:
rollingUpdate:
#指定更新時(shí)最大擴(kuò)展的pod數(shù)
maxSurge: 2
#指定可接受的不可用pod數(shù)
maxUnavailable: 1
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpservice-deployment
spec:
replicas: 5
minReadySeconds: 120 #Pod被認(rèn)為是可用狀態(tài)的最小秒數(shù),應(yīng)用啟動(dòng)并注冊(cè)nacos延遲時(shí)間。默認(rèn)是0
selector:
matchLabels:
run: httpservice
strategy:
rollingUpdate:
#指定更新時(shí)最大擴(kuò)展的pod數(shù)
maxSurge: 2
#指定可接受的不可用pod數(shù)
maxUnavailable: 1
template:
metadata:
labels:
run: httpservice
spec:
containers:
- name: http-service
image: httpd:2.4.33
ports:
- containerPort: 80
?文章來源地址http://www.zghlxwxcb.cn/news/detail-821427.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對(duì)外開放端口
selector:
app: $IMG_NAME
---
apiVersion: apps/v1
kind: Deployment #對(duì)象類型
metadata:
name: $IMG_NAME #名稱
namespace: rz-dt
labels:
app: $IMG_NAME #標(biāo)注
spec:
replicas: 1 #運(yùn)行容器的副本數(shù),修改這里可以快速修改分布式節(jié)點(diǎn)數(shù)量
progressDeadlineSeconds: 600 #在Deployment 在進(jìn)度卡住6分鐘后報(bào)告
minReadySeconds: 120 #Pod被認(rèn)為是可用狀態(tài)的最小秒數(shù)。默認(rèn)是0
strategy:
rollingUpdate:
maxSurge: 1 #升級(jí)過程中激增Pod的最大數(shù)量
maxUnavailable: 0 #升級(jí)過程中不可用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鏡像時(shí)機(jī),
#command: ["java","-Dserver.port=8055","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"]
ports:
- containerPort: 8091 #容器對(duì)外開放端口,需與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 配置 RollingUpdate 滾動(dòng)更新實(shí)現(xiàn)應(yīng)用的灰度發(fā)布的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!