應用原地升級
更新時間 2023-11-01 15:30:43
最近更新時間: 2023-11-01 15:30:43
分享文章
本節介紹了:使用 cube-openkruise 使用應用原地升級的用戶指南。
使用 cube-openkruise 使用應用原地升級
OpenKruise是基于Kubernetes的一個標準擴展組件,可以配合原生Kubernetes使用,高效管理應用容器、Sidecar及鏡像分發等功能。本文介紹如何使用OpenKruise部署云原生應用。
前提條件
已安裝Kubernetes托管版集群,且集群版本不低于1.23。
背景信息
OpenKruise包含了多種自定義Workload,用于無狀態應用、有狀態應用、Sidecar容器、Daemon應用等部署管理,提供了原地升級等擴展策略。
使用說明
OpenKruise包含CloneSet、Advanced StatefulSet、Advanced DaemonSet等控制器。常用控制器說明如下:
| 控制器 | 功能 |
|---|---|
| CloneSet | 管理無狀態應用,對標Kubernetes原生Deployment。關于CloneSet的詳細介紹,請參見Cloneset。資源(YAML)的字段與Deployment不完全兼容,但功能上全覆蓋,并提供比Deployment更豐富的策略。 |
| Advanced StatefulSet | 管理有狀態應用,對標Kubernetes原生StatefulSet。關于Advanced StatefulSet的詳細介紹,請參見Advanced StatefulSet。資源(YAML)字段與原生StatefulSet完全兼容,只需要把apiVersion改為apps.kruise.io/v1alpha1,另外提供了optional字段來擴展發布策略(原地升級、并行發布等) |
| Advanced DaemonSet | 管理Daemon應用,對標Kubernetes原生DaemonSet。關于Advanced DaemonSet的詳細介紹,請參見Advanced DaemonSet。資源(YAML)字段與原生DaemonSet完全兼容,只需要把apiVersion改為apps.kruise.io/v1alpha1,另外提供了optional字段來擴展發布策略(熱升級、灰度、按Node標簽灰度等 |
| SidecarSet | 獨立管理Sidecar容器和注入。關于SidecarSet的詳細介紹,請參見SidecarSet。在獨立CR中定義Sidecar容器和Label Selector,OpenKruise會在所有符合Selector條件的Pod創建時注入定義好的Sidecar容器,并支持對已注入Sidecar容器做原地升級 |
| UnitedDeployment | 管理不同區域下的多個Sub Workload,關于UnitedDeployment的詳細介紹,請參見UnitedDeployment。目前支持將CloneSet、StatefulSet、Advanced StatefulSet作為Sub Workload,您可以用一個UnitedDeployment來定義不同區域中的Sub Workload部署Replicas。 |
安裝 OpenKruise
1、在集群的菜單“插件”-“插件市場”中安裝cube-openkruise插件。
2、使用CloneSet部署無狀態應用并原地升級,第一步:創建CloneSet。
kubectl apply -f -<<eof
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
name: demo-clone
spec:
replicas: 5
selector:
matchLabels:
app: guestbook
template: #Pod template和Deployment的結構完全一致。
metadata:
labels:
app: guestbook
spec:
containers:
- name: guestbook
image: nginx:1.24.0
env:
- name: test
value: foo
updateStrategy:
type: InPlaceIfPossible #盡量使用原地升級,否則重建升級。
maxUnavailable: 20% #發布過程最多20%不可用。
inPlaceUpdateStrategy:
gracePeriodSeconds: 3 #每個Pod原地升級前Not Ready優雅等待時間。
eof
第二步:執行以下命令,查看Pod運行狀態。
kubectl get pod
NAME READY STATUS RESTARTS AGE
demo-clone-5b9kl 1/1 Running 0 3s
demo-clone-6xjdg 1/1 Running 0 3s
demo-clone-bvmdj 1/1 Running 0 3s
demo-clone-dm22s 1/1 Running 0 3s
demo-clone-rbpg9 1/1 Running 0 3s
第三步:執行以下命令,查看CloneSet。
kubectl get clone
NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE
demo-clone 5 5 5 5 5 46s
第四步:原地升級。
kubectl patch cloneset demo-clone --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"nginx:1.25.2"}]'
第五步:查看升級 Pod。
kubectl get pod
# pod 的名字沒變,鏡像已經更新