すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:OpenKruise を使用してクラウドネイティブアプリケーションをデプロイする

最終更新日:Nov 09, 2025

OpenKruise は、標準の Kubernetes 拡張コンポーネントです。ネイティブの Kubernetes を拡張して、アプリケーションコンテナー、サイドカー、およびイメージ配布の効率的な管理を提供します。このトピックでは、OpenKruise を使用してクラウドネイティブアプリケーションをデプロイする方法について説明します。

前提条件

ACK マネージドクラスターを作成済みであること。

背景情報

OpenKruise は、Alibaba Cloud によってオープンソース化されたクラウドネイティブアプリケーションの自動化エンジンです。Cloud Native Computing Foundation (CNCF) Sandbox に正式に参加しています。OpenKruise には、ステートレスアプリケーション、ステートフルアプリケーション、サイドカーコンテナー、およびデーモンアプリケーションをデプロイおよび管理するためのさまざまなカスタムワークロードが含まれています。また、In-place アップグレード、段階的リリース、ストリームリリース、構成の優先順位などの高度なデプロイメントポリシーも提供します。

コンポーネントアーキテクチャ

OpenKruise

OpenKruise は標準の Kubernetes 拡張機能であり、Kubernetes クラスターにネイティブにデプロイされます。これは、次の 3 つのコンポーネントで構成されています。

コンポーネント

説明

Kruise-manager

Kruise-manager は、コントローラーと Webhook を実行する中央コンポーネントです。kruise-system 名前空間にデプロイメントとしてデプロイされます。コントローラーと Webhook を使用して、In-place アップグレードやサイドカー管理などのコア機能を実装します。

Kruise-daemon

各ノードに DaemonSet としてデプロイされ、イメージのプリフェッチやコンテナーの再起動などの機能を提供します。

Kruise-Rollout

Kruise-Rollout は、Kubernetes に基づく標準の拡張コンポーネントです。完全な Rollout モデルの定義と実装が含まれています。アプリケーションのトラフィックやデプロイされたインスタンスと連携するカナリアリリース、ブルーグリーンデプロイメント、A/B テストリリースをサポートしています。また、シームレスなバイパス統合を提供し、さまざまな既存のワークロードと互換性があります。

使用上の注意

次のセクションでは、CloneSet、Advanced StatefulSet、Advanced DaemonSet などの一般的な OpenKruise コントローラーの機能について説明します。

表 1. 一般的なコントローラー

コントローラー

特徴

CloneSet

ステートレスアプリケーションを管理し、ネイティブの Kubernetes Deployment と同等です。詳細については、「CloneSet」をご参照ください。

その YAML ファイルのフィールドはデプロイメントと完全な互換性はありませんが、デプロイメントのすべての機能を提供し、より高度なポリシーを提供します。

Advanced StatefulSet

ステートフルアプリケーションを管理し、ネイティブの Kubernetes StatefulSet に匹敵します。詳細については、「Advanced StatefulSet」をご参照ください。

その YAML ファイルのフィールドは、ネイティブの StatefulSet と完全に互換性があります。apiVersionapps.kruise.io/v1alpha1 に変更するだけです。また、In-place アップグレードや並列リリースなどのリリース ポリシーを拡張するための optional フィールドも提供します。

Advanced DaemonSet

Advanced DaemonSet はデーモンアプリケーションを管理し、ネイティブの Kubernetes DaemonSet と同等です。詳細については、「Advanced DaemonSet」をご参照ください。

その YAML ファイルのフィールドは、ネイティブの DaemonSet と完全に互換性があります。apiVersionapps.kruise.io/v1alpha1 に変更するだけです。また、ホットアップグレード、段階的リリース、ノード ラベルに基づく段階的リリースなどのリリース ポリシーを拡張するための optional フィールドも提供します。

SidecarSet

SidecarSet コントローラーは、サイドカーコンテナーを独立して管理し、Pod にサイドカーコンテナーを挿入します。詳細については、「SidecarSet」をご参照ください。

別のカスタムリソース (CR) でサイドカーコンテナーとラベルセレクターを定義します。OpenKruise は、定義されたサイドカーコンテナーを、作成時にセレクターに一致するすべての Pod に挿入します。また、挿入されたサイドカーコンテナーの In-place アップグレードもサポートしています。

UnitedDeployment

異なるリージョンにある複数のサブワークロードを管理します。詳細については、「UnitedDeployment」をご参照ください。

現在、サブワークロードとして CloneSet、StatefulSet、および Advanced StatefulSet をサポートしています。単一の UnitedDeployment を使用して、異なるリージョンのサブワークロードのデプロイメントレプリカを定義できます。

次の表は、CloneSet、Advanced StatefulSet、および Advanced DaemonSet コントローラーの機能を、Kubernetes コミュニティの対応する機能と比較したものです。

表 2. コミュニティコントローラーとの機能比較

特徴

CloneSet vs. Deployment

Advanced StatefulSet vs. StatefulSet

Advanced DaemonSet vs. DaemonSet

CloneSet

Deployment

Advanced StatefulSet

StatefulSet

Advanced DaemonSet

DaemonSet

ストリームスケールアウト

对

错

错

错

对

错

ターゲット指定スケールイン

对

错

对

错

错

错

再作成アップグレード

对

对

对

对

对

对

In-place アップグレード

对

错

对

错

对

错

段階的リリース

对

错

对

对

对

错

利用可能な数量

对

对

对

错

对

对

最大サージ

对

对

错

错

对

错

優先度と分散ポリシーによるリリース順序のカスタマイズ

对

错

对

错

对

错

フックによる Pod ライフサイクルの管理

对

错

错

错

错

错

OpenKruise のインストール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

  3. [アドオン] ページで、[アプリケーション] タブをクリックします。[ack-kruise] セクションで、[インストール] をクリックします。

    [Ack-kruise のインストール] ダイアログボックスで、コンポーネント情報を確認し、[OK] をクリックします。

CloneSet を使用してステートレスアプリケーションをデプロイする

  1. CloneSet を作成します。

    1. cloneset.yaml ファイルを作成します。

      apiVersion: apps.kruise.io/v1alpha1
      kind: CloneSet
      metadata:
        name: demo-clone
      spec:
        replicas: 5
        selector:
          matchLabels:
            app: guestbook
        template: # Pod テンプレートの構造は 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     # 可能な場合は In-place 法を使用してアップグレードします。それ以外の場合は、再作成法を使用します。
          maxUnavailable: 20%        # リリース中、最大 20% の Pod が利用不可になる可能性があります。
          inPlaceUpdateStrategy:
            gracePeriodSeconds: 3    # In-place アップグレード前の NotReady 状態の Pod の猶予期間。
      • type: アップグレードポリシーを指定します。次のアップグレードメソッドがサポートされています:

        • ReCreate: コントローラーは古い Pod と PersistentVolumeClaim (PVC) を削除し、新しいバージョンで新しいものを作成します。

        • InPlaceIfPossible: コントローラーはまず Pod の In-place アップグレードを試みます。In-place アップグレードが失敗した場合、コントローラーは Pod を再作成します。

        • InPlaceOnly: コントローラーは In-place アップグレードのみを実行します。

      • maxUnavailable: リリース中に利用できなくなる可能性のある Pod の最大数。値は絶対数またはパーセンテージです。

      • gracePeriodSeconds: In-place アップグレードが実行される前の NotReady 状態の Pod の猶予期間 (秒)。

    2. cloneset.yaml ファイルを ACK クラスターに適用します。

      kubectl create -f cloneset.yaml

      予想される出力:

      cloneset.apps.kruise.io/demo-clone created
  2. 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
  3. CloneSet を確認します。

    kubectl get clone

    予想される出力:

    NAME         DESIRED   UPDATED   UPDATED_READY   READY   TOTAL   AGE
    demo-clone   5         5         5               5       5       46s
    • DESIRED: 目的の Pod 数 (spec.replicas)。

    • UPDATED: 最新バージョンに更新された Pod の数 (status.updatedReplicas)。

    • UPDATED_READY: 最新バージョンに更新された利用可能な Pod の数 (status.updatedReadyReplicas)。

    • READY: 利用可能な Pod の総数 (status.readyReplicas)。

    • TOTAL: 実際の Pod の総数 (status.replicas)。

Advanced StatefulSet を使用してステートフルアプリケーションをデプロイする

  1. Advanced StatefulSet を作成します。

    1. statefulset.yaml ファイルを作成します。

      apiVersion: apps.kruise.io/v1alpha1
      kind: StatefulSet
      metadata:
        name: demo-asts
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: guestbook-sts
        podManagementPolicy: Parallel
        template: # Pod テンプレートの構造は、ネイティブの StatefulSet のものと同一です。
          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   # 可能な場合は In-place 法を使用してアップグレードします。それ以外の場合は、再作成法を使用します。
            maxUnavailable: 20%                  # リリース中、最大 20% の Pod が利用不可になる可能性があります。
            inPlaceUpdateStrategy:
              gracePeriodSeconds: 3              # In-place アップグレード前の NotReady 状態の Pod の猶予期間。
      • type: Pod のアップグレードポリシーを指定します。次のアップグレードメソッドがサポートされています。

        • ReCreate: コントローラーは古い Pod と PVC を削除し、新しいバージョンで新しいものを作成します。

        • InPlaceIfPossible: コントローラーはまず Pod の In-place アップグレードを試みます。In-place アップグレードが失敗した場合、コントローラーは Pod を再作成します。

        • InPlaceOnly: コントローラーは In-place アップグレードのみを実行します。

      • maxUnavailable: リリース中に利用できなくなる可能性のある Pod の最大数。値は絶対数またはパーセンテージです。

      • gracePeriodSeconds: In-place アップグレードが実行される前の NotReady 状態の Pod の猶予期間 (秒)。

    2. statefulset.yaml ファイルを ACK クラスターに適用します。

       kubectl create -f statefulset.yaml

      予想される出力:

      statefulset.apps.kruise.io/demo-asts created
  2. Pod のステータスを確認します。

    kubectl get pod

    予想される出力:

    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. Advanced StatefulSet を確認します。

    kubectl get asts

    予想される出力:

    NAME        DESIRED   CURRENT   UPDATED   READY   AGE
    demo-asts   3         3         3         3       3h30m
    • DESIRED: 目的の Pod 数 (spec.replicas)。

    • UPDATED: 最新バージョンの Pod の数 (status.updatedReplicas)。

    • READY: 準備完了の Pod の総数 (status.readyReplicas)。

    • TOTAL: Pod の総数 (status.replicas)。