OpenKruise adalah komponen ekstensi standar Kubernetes yang memperluas fungsionalitas Kubernetes asli untuk menyediakan manajemen efisien terhadap kontainer aplikasi, kontainer sidecar, dan distribusi citra. Topik ini menjelaskan cara menggunakan OpenKruise untuk menerapkan aplikasi cloud-native.
Prasyarat
Anda telah membuat ACK managed cluster.
Informasi latar belakang
OpenKruise adalah mesin otomatisasi aplikasi cloud-native open-source dari Alibaba Cloud yang secara resmi telah bergabung ke dalam Cloud Native Computing Foundation (CNCF) Sandbox. OpenKruise mencakup berbagai beban kerja kustom untuk menerapkan dan mengelola aplikasi tanpa status, aplikasi stateful, kontainer sidecar, dan aplikasi daemon. Selain itu, OpenKruise menyediakan kebijakan penerapan lanjutan, seperti hot upgrade, rilis bertahap, aliran rilis, dan prioritas konfigurasi.
Arsitektur komponen

OpenKruise merupakan ekstensi standar Kubernetes yang diterapkan secara native di kluster Kubernetes dan terdiri dari tiga komponen berikut.
Komponen | Deskripsi |
Kruise-manager | Kruise-manager adalah komponen pusat yang menjalankan controller dan webhook. Komponen ini diterapkan sebagai deployment di namespace kruise-system. Komponen ini menggunakan controller dan webhook untuk mengimplementasikan fitur inti seperti hot upgrade dan manajemen sidecar. |
Kruise-daemon | Komponen ini diterapkan sebagai DaemonSet pada setiap node untuk menyediakan fitur seperti pra-ambil citra dan restart kontainer. |
Kruise-Rollout | Kruise-Rollout adalah komponen ekstensi standar berbasis Kubernetes. Komponen ini mencakup definisi dan implementasi model Rollout yang lengkap. Komponen ini mendukung rilis canary, penyebaran biru-hijau, dan rilis Pengujian A/B yang berkoordinasi dengan lalu lintas aplikasi dan instans yang diterapkan. Komponen ini juga menyediakan integrasi bypass yang mulus serta kompatibel dengan berbagai beban kerja yang sudah ada. |
Catatan penggunaan
Bagian berikut menjelaskan fitur-fitur controller OpenKruise umum, seperti CloneSet, Advanced StatefulSet, dan Advanced DaemonSet.
Tabel 1. Controller umum
Controller | Fitur |
CloneSet | Mengelola aplikasi tanpa status dan setara dengan Deployment Kubernetes asli. Untuk informasi selengkapnya, lihat CloneSet. Bidang-bidang dalam file YAML-nya tidak sepenuhnya kompatibel dengan deployment, tetapi menyediakan semua fitur deployment dan menawarkan kebijakan lanjutan lainnya. |
Advanced StatefulSet | Mengelola aplikasi berstatus dan sebanding dengan StatefulSet Kubernetes asli. Untuk informasi selengkapnya, lihat Advanced StatefulSet. Bidang-bidang dalam file YAML-nya sepenuhnya kompatibel dengan StatefulSet asli. Cukup ubah |
Advanced DaemonSet | Advanced DaemonSet mengelola aplikasi daemon dan setara dengan DaemonSet Kubernetes asli. Untuk informasi selengkapnya, lihat Advanced DaemonSet. Bidang-bidang dalam file YAML-nya sepenuhnya kompatibel dengan DaemonSet asli. Cukup ubah |
SidecarSet | Controller SidecarSet mengelola kontainer sidecar secara independen dan menyuntikkan kontainer sidecar ke dalam Pod. Untuk informasi selengkapnya, lihat SidecarSet. Definisikan kontainer sidecar dan pemilih label dalam resource kustom (CR) terpisah. OpenKruise kemudian akan menyuntikkan kontainer sidecar yang telah ditentukan ke semua Pod yang sesuai dengan pemilih tersebut saat Pod dibuat. Komponen ini juga mendukung hot upgrade untuk kontainer sidecar yang disuntikkan. |
UnitedDeployment | Mengelola beberapa Sub Workload di wilayah berbeda. Untuk informasi selengkapnya, lihat UnitedDeployment. Saat ini mendukung CloneSet, StatefulSet, dan Advanced StatefulSet sebagai sub-beban kerja. Anda dapat menggunakan satu UnitedDeployment untuk menentukan replika penerapan sub-beban kerja di wilayah berbeda. |
Tabel berikut membandingkan fitur-fitur controller CloneSet, Advanced StatefulSet, dan Advanced DaemonSet dengan padanan mereka di komunitas Kubernetes.
Tabel 2. Perbandingan fitur dengan controller komunitas
Fitur | CloneSet vs. Deployment | Advanced StatefulSet vs. StatefulSet | Advanced DaemonSet vs. DaemonSet | |||
CloneSet | Deployment | Advanced StatefulSet | StatefulSet | Advanced DaemonSet | DaemonSet | |
Stream scale-out |
|
|
|
|
|
|
Targeted scale-in |
|
|
|
|
|
|
Recreate upgrade |
|
|
|
|
|
|
In-place upgrade |
|
|
|
|
|
|
Phased release |
|
|
|
|
|
|
Available quantity |
|
|
|
|
|
|
Max surge |
|
|
|
|
|
|
Customize release order with priority and scatter policies |
|
|
|
|
|
|
Manage pod lifecycle with hooks |
|
|
|
|
|
|
Pasang OpenKruise
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Di halaman Add-ons, klik tab Applications. Di bagian ack-kruise, klik Install.
Di kotak dialog Install Ack-kruise, konfirmasi informasi komponen dan klik OK.
Gunakan CloneSet untuk menerapkan aplikasi tanpa status
Buat CloneSet.
Buat file cloneset.yaml.
apiVersion: apps.kruise.io/v1alpha1 kind: CloneSet metadata: name: demo-clone spec: replicas: 5 selector: matchLabels: app: guestbook template: # Struktur templat pod identik dengan Deployment. metadata: labels: app: guestbook spec: containers: - name: guestbook image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2 env: - name: test value: foo updateStrategy: type: InPlaceIfPossible # Gunakan metode in-place untuk upgrade jika memungkinkan. Jika tidak, gunakan metode recreate. maxUnavailable: 20% # Selama rilis, maksimal 20% Pod boleh tidak tersedia. inPlaceUpdateStrategy: gracePeriodSeconds: 3 # Waktu tunggu graceful untuk Pod dalam status NotReady sebelum dilakukan hot upgrade.type: Menentukan kebijakan upgrade. Metode upgrade berikut didukung:
ReCreate: Controller menghapus Pod lama dan PersistentVolumeClaims (PVC) lalu membuat yang baru dengan versi terbaru.
InPlaceIfPossible: Controller pertama-tama mencoba melakukan hot upgrade pada Pod. Jika gagal, controller akan membuat ulang Pod.
InPlaceOnly: Pengontrol hanya melakukan peningkatan di tempat.
maxUnavailable: Jumlah maksimum Pod yang boleh tidak tersedia selama rilis. Nilainya bisa berupa angka absolut atau persentase.
gracePeriodSeconds: Periode tenggang dalam detik untuk Pod dalam status NotReady sebelum dilakukan hot upgrade.
Terapkan file cloneset.yaml ke kluster ACK.
kubectl create -f cloneset.yamlOutput yang diharapkan:
cloneset.apps.kruise.io/demo-clone created
Periksa status Pod.
kubectl get podOutput yang diharapkan:
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 3sPeriksa CloneSet.
kubectl get cloneOutput yang diharapkan:
NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE demo-clone 5 5 5 5 5 46sDESIRED: Jumlah Pod yang diinginkan (spec.replicas).
UPDATED: Jumlah Pod yang telah diperbarui ke versi terbaru (status.updatedReplicas).
UPDATED_READY: Jumlah Pod yang tersedia dan telah diperbarui ke versi terbaru (status.updatedReadyReplicas).
READY: Jumlah total Pod yang tersedia (status.readyReplicas).
TOTAL: Jumlah total Pod aktual (status.replicas).
Gunakan Advanced StatefulSet untuk menerapkan aplikasi berstatus
Buat Advanced StatefulSet.
Buat file statefulset.yaml.
apiVersion: apps.kruise.io/v1alpha1 kind: StatefulSet metadata: name: demo-asts spec: replicas: 3 selector: matchLabels: app: guestbook-sts podManagementPolicy: Parallel template: # Struktur templat pod identik dengan StatefulSet asli. metadata: labels: app: guestbook-sts spec: containers: - name: guestbook image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2 env: - name: test value: foo readinessGates: - conditionType: InPlaceUpdateReady updateStrategy: type: RollingUpdate rollingUpdate: podUpdatePolicy: InPlaceIfPossible # Gunakan metode in-place untuk upgrade jika memungkinkan. Jika tidak, gunakan metode recreate. maxUnavailable: 20% # Selama rilis, maksimal 20% Pod boleh tidak tersedia. inPlaceUpdateStrategy: gracePeriodSeconds: 3 # Waktu tunggu graceful untuk Pod dalam status NotReady sebelum dilakukan hot upgrade.type: Menentukan kebijakan upgrade Pod. Metode upgrade berikut didukung.
ReCreate: Controller menghapus Pod lama dan PVC lalu membuat yang baru dengan versi terbaru.
InPlaceIfPossible: Controller pertama-tama mencoba melakukan hot upgrade pada Pod. Jika gagal, controller akan membuat ulang Pod.
InPlaceOnly: Controller hanya melakukan hot upgrade.
maxUnavailable: Jumlah maksimum Pod yang boleh tidak tersedia selama rilis. Nilainya bisa berupa angka absolut atau persentase.
gracePeriodSeconds: Periode tenggang dalam detik untuk Pod dalam status NotReady sebelum dilakukan hot upgrade.
Terapkan file statefulset.yaml ke kluster ACK.
kubectl create -f statefulset.yamlOutput yang diharapkan:
statefulset.apps.kruise.io/demo-asts created
Periksa status Pod.
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE demo-asts-0 1/1 Running 0 3h29m demo-asts-1 1/1 Running 0 3h29m demo-asts-2 1/1 Running 0 3h29mPeriksa Advanced StatefulSet.
kubectl get astsOutput yang diharapkan:
NAME DESIRED CURRENT UPDATED READY AGE demo-asts 3 3 3 3 3h30mDESIRED: Jumlah Pod yang diinginkan (spec.replicas).
UPDATED: Jumlah Pod pada versi terbaru (status.updatedReplicas).
READY: Jumlah total Pod yang siap (status.readyReplicas).
TOTAL: Jumlah total Pod (status.replicas).