全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan OpenKruise untuk menerapkan aplikasi cloud-native

更新时间:Nov 11, 2025

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

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 apiVersion menjadi apps.kruise.io/v1alpha1. Komponen ini juga menyediakan bidang optional untuk memperluas kebijakan rilis, seperti hot upgrade dan rilis paralel.

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 apiVersion menjadi apps.kruise.io/v1alpha1. Komponen ini juga menyediakan bidang optional untuk memperluas kebijakan rilis, seperti hot upgrade, rilis bertahap, dan rilis bertahap berdasarkan label node.

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

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.

  3. 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

  1. Buat CloneSet.

    1. 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.

    2. Terapkan file cloneset.yaml ke kluster ACK.

      kubectl create -f cloneset.yaml

      Output yang diharapkan:

      cloneset.apps.kruise.io/demo-clone created
  2. Periksa status Pod.

    kubectl get pod

    Output 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          3s
  3. Periksa CloneSet.

    kubectl get clone

    Output yang diharapkan:

    NAME         DESIRED   UPDATED   UPDATED_READY   READY   TOTAL   AGE
    demo-clone   5         5         5               5       5       46s
    • DESIRED: 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

  1. Buat Advanced StatefulSet.

    1. 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.

    2. Terapkan file statefulset.yaml ke kluster ACK.

       kubectl create -f statefulset.yaml

      Output yang diharapkan:

      statefulset.apps.kruise.io/demo-asts created
  2. Periksa status Pod.

    kubectl get pod

    Output 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          3h29m
  3. Periksa Advanced StatefulSet.

    kubectl get asts

    Output yang diharapkan:

    NAME        DESIRED   CURRENT   UPDATED   READY   AGE
    demo-asts   3         3         3         3       3h30m
    • DESIRED: 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).