為什麼我會關注 OpenKruise v1.6?
在日常維運 Kubernetes 叢集的過程中,我一直在尋找能讓應用部署與管理更順暢的工具。OpenKruise 是由阿里雲開源、目前在 CNCF 孵化的 Kubernetes 應用自動化管理套件,它補足了原生 Kubernetes 在進階工作負載管理上的不少空缺。2024 年 3 月釋出的 v1.6 版本帶來了幾項讓我覺得值得分享的更新,這篇就來聊聊我的觀察。

OpenKruise 整體架構圖(圖片來源:OpenKruise 官方文件)
升級前必讀:三個重要異動
先講幾個升級前一定要注意的事:
| 項目 | 說明 |
|---|---|
| Kubernetes 版本要求提高 | v1.6 起要求 Kubernetes >= 1.18。若關閉 Kruise-Daemon(featureGates="KruiseDaemon=false"),仍可在 K8s 1.16/1.17 上安裝 |
| Leader 選舉改用 leases | 如果目前跑的是 1.3.0 或更早版本,請先升到 1.4 或 1.5,再升 1.6,避免 Multiple Leader 問題 |
| kube-system 命名空間排除 | 為避免循環依賴,SidecarSet、WorkloadSpread、PodUnavailableBudget 等 webhook 相關功能不再作用於 kube-system 下的資源 |
多域管理能力的實質強化
我自己在實務上遇過的場景是:同一個叢集裡跑著 x86 和 arm 兩種架構的節點,或者需要把 Pod 分散到不同可用區做災備。OpenKruise 的 WorkloadSpread 就是為了解決這類多域部署需求而生的。
常見的使用場景包含:
| 場景 | 說明 |
|---|---|
| 分時彈性 | 週期性高峰的業務,定時擴容到彈性資源池,高峰過後再縮掉 |
| 多架構算力 | 叢集同時包含 x86 和 arm 節點,需要依照比例分配 |
| 多機房容災 | Pod 同時部署到多個 AZ 可用區進行災備 |
修復滾動升級破壞 subset 比例的問題
這次更新修了一個在實際使用中很容易踩到的坑:當 Deployment 或 CloneSet 做滾動升級且設定 maxSurge > 0 時,會先擴再縮。在這個過程中,新 Pod 被分配到錯誤的 subset,導致 x86 和 arm 之間的副本比例被打亂。
v1.6 的做法是在分配 subset pod 時同時考慮 pod version,從而保持正確比例。如果你在正式環境用了 WorkloadSpread,強烈建議升級到 1.6。
鏡像預熱支援 Always 策略
OpenKruise 的鏡像預熱功能可以提前把 Base 或業務鏡像拉到節點上,在業務需要快速擴容時省下不少時間。不過過去有個限制:如果節點上已經有相同 Tag 的鏡像,就不會重新拉取,這對 latest Tag 這類「Tag 不變但內容變了」的場景就不適用了。
v1.6 新增了 imagePullPolicy: Always 策略來解決這個問題。搭配 completionPolicy.type: Never 還可以做到常態化預熱,例如每天凌晨自動跑一次預熱,有新節點加入也會自動觸發。
apiVersion: apps.kruise.io/v1alpha1
kind: ImagePullJob
metadata:
name: job-with-base
spec:
image: base:latest
imagePullPolicy: Always
parallelism: 10
completionPolicy:
type: Never
pullPolicy:
backoffLimit: 3
timeoutSeconds: 300

OpenKruise InPlace Update 工作流程(圖片來源:OpenKruise 官方文件)
防級聯刪除新增 Service 與 Ingress 保護
為了提升叢集安全性,OpenKruise 對 CRD、Namespace、Deployment 等資源提供了防級聯刪除能力。這次 v1.6 把 Service 和 Ingress 也加入保護範圍了。設定方式很直覺,加上 label 就好:
apiVersion: v1
kind: Service
metadata:
labels:
policy.kruise.io/delete-protection: Always
name: test-web
目前策略只支援 Always,意思是會攔截所有針對該資源的刪除操作,除非你先移除這個 label。
未來版本規劃
OpenKruise 團隊也公布了接下來的路線圖,我覺得有幾個值得期待的方向:
| 版本 | 重點特性 |
|---|---|
| v1.7 | CloneSet / Advanced StatefulSet 支援 PVC 原地變配、API 升級至 v1beta1、新增 Liveness Probe 特性 |
| v1.8 | SidecarSet 支援 K8s 1.28 Sidecar Containers、元件最小化部署方案 |
| v1.9 | CloneSet / Advanced StatefulSet 支援資源原地 VPA |
小結
OpenKruise v1.6 整體來說是一個穩健的版本,特別是 WorkloadSpread 的 subset 比例修復和鏡像預熱 Always 策略,對有在用這些功能的團隊來說是必升的。如果你的叢集有多域部署需求,或者正在找比原生 Deployment 更強大的工作負載管理方案,OpenKruise 值得一試。
相關資源:

發佈留言