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

Container Service for Kubernetes:ack-kubernetes-elastic-workloadのインストール (メンテナンス中止)

最終更新日:Dec 10, 2024

ack-kubernetes-elastic-workloadを使用して、エラスティックワークロードを作成できます。 ack-kubernetes-elastic-workloadコンポーネントは、Kubernetesワークロードを監視し、エラスティックユニットの事前定義されたスケジューリングポリシーに基づいてワークロードをレプリケートおよび生成します。 エラスティックワークロード内のレプリケートされたポッドの数がしきい値を超える場合、ソースワークロードおよびエラスティックユニットにスケジュールされたレプリケートされたポッドの数が調整されます。 このトピックでは、Container Service for kubernetes (ack) クラスターにACK-Kubernetes-elastic-workloadをインストールして使用する方法について説明します。

重要

Elastic Workloadは非アクティブな開発ステータスです。 代わりにUnitedDeploymentを使用することを推奨します。 詳細については、「ACKクラスターでのUnitedDeploymentコントローラーの使用」をご参照ください。

前提条件

  • ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。

  • 作成されたACKクラスターがACKサーバーレスクラスターでない場合は、クラスターにack-virtual-nodeをデプロイする必要があります。 ack-virtual-node v2.0.0.102-045a06eb4-aliyun以降のバージョンを使用する必要があります。 詳細については、「ACKクラスターでのElastic Container Instanceの使用」をご参照ください。

制限事項

ack-kubernetes-elastic-workloadはOpenKruiseワークロードをサポートしていません。 UnitedDeploymentコントローラーの使用を推奨します。

ack-kubernetes-elastic-workloadのデプロイ

  1. ACKコンソールにログインします。

  2. ACKコンソールの左側のナビゲーションウィンドウで、[Marketplace] > [アプリカタログ] を選択します。

  3. [マーケットプレイス] ページで、[アプリカタログ] タブをクリックします。 ack-kubernetes-elastic-workloadを見つけてクリックします。

  4. ack-kubernetes-elastic-workloadページで、[デプロイ] をクリックします。

  5. [デプロイ] ウィザードで、クラスターと名前空間を選択し、[次へ] をクリックします。

  6. [パラメーター] ウィザードページでパラメーターを設定し、[OK] をクリックします。

    ack-kubernetes-elastic-workloadをデプロイしたら、クラスターの詳細ページに移動します。 左側のナビゲーションウィンドウで、[アプリケーション] > [ヘルム] を選択します。 ack-kubernetes-elastic-workloadがクラスターにデプロイされていることがわかります。

エラスティックワークロードの使用

Kubernetesを使用してポッドをスケジュールし、ポッドのライフサイクルを管理する場合、次の問題を解決する必要があります。

  • レプリケートされたポッドの数がしきい値に達したときにポッドスケジューリングポリシーを変更する方法。

  • Kubernetesがポッドのライフサイクルを管理する際に、特定のポッドに優先順位を付ける方法。

エラスティックワークロードを使用して、上記の問題を解決できます。

次のテンプレートに基づいて配置を使用してアプリケーションを作成します。

apiVersion: apps/v1 #1.8.0以前のバージョンではapps/v1beta1を使用
kind: 配置
メタデータ:
  name: nginx-deployment-basic
  labels:
    アプリ: nginx
spec:
  レプリカ:2
  セレクタ:
    matchLabels:
      アプリ:nginx
  テンプレート:
    metadata:
      labels:
        アプリ:nginx
    仕様:
    # nodeSelector:
    # env: テストチーム
      containers:
      - name: nginx
        image: nginx:1.7.9
        ポート:
        - containerPort: 80
        resources:
          limits:
            cpu: "500m" 

デプロイメントのエラスティックワークロードを作成します。

# エラスティックワークロードを定義します。 
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: ElasticWorkload
メタデータ:
  名前: elasticworkload-sample
spec:
  sourceTarget:
    name: nginx-deployment-basic
    kind: Deployment
    apiVersion: apps/v1
    分: 2
    max: 4
 レプリカ: 6
 elasticUnit:
 -name: virtual-kubelet
   labels:
     alibabacloud.com/eci: "true"
  # min: 0エラスティックユニットごとに、レプリケートされるポッドの最大数と最小数を指定できます。
  # max: 10 

上記のテンプレートは、展開用のエラスティックワークロードを作成する方法を示しています。 水平ポッドオートスケーラー (HPA) と同様に、ack-kubernetes-elastic-workloadは、ワークロードに侵入することなく外部プラグインとしてデプロイされます。

通常、エラスティックワークロードの設定には、次の部分が含まれます。

  1. SourceTarget: ソースワークロードのタイプ、およびレプリケートされたポッドの最大数と最小数を定義します。

  2. elasticUnit: エラスティックユニットのスケジューリングポリシーを定義する配列。 複数のエラスティックユニットのスケジューリングポリシーを定義するには、テンプレートに示す順序で関連パラメーターを指定します。

この例では、ソースワークロードにプロビジョニングされたレプリケートポッドの数は2から4の範囲です。 エラスティックワークロードに2〜4個のレプリケートされたポッドがある場合、すべてのポッドがソースワークロードにスケジュールされます。 エラスティックワークロードに4個を超えるポッドが含まれている場合、残りのポッドはvirtual-kubeletエラスティックユニットにスケジュールされます。 レプリケーション済みポッドは、label、annotation、nodeSelector、affinity、tolerationパラメーターなど、virtual-kubeletのスケジューリングポリシーに基づいてスケジュールされます。 Scheduling

ack-kubernetes-elastic-workloadを使用して、エラスティックワークロードを作成できます。 ack-kubernetes-elastic-workloadコンポーネントは、Kubernetesワークロードを監視し、エラスティックユニットの事前定義されたスケジューリングポリシーに基づいてワークロードをレプリケートおよび生成します。 エラスティックワークロード内のレプリケートされたポッドの数がしきい値を超える場合、ソースワークロードおよびエラスティックユニットにスケジュールされたレプリケートされたポッドの数が調整されます。

上記のテンプレートを使用してエラスティックワークロードをデプロイした後、次のコマンドを実行してエラスティックワークロードのステータスを照会できます。 出力の [Status] セクションの [Desired Replicas] フィールドの値は、エラスティックユニットにスケジュールされているレプリケートされたポッドの数を示します。

次のコマンドを実行して、エラスティックワークロードのステータスを照会します。

kubectl describe ew elasticworkload-sample# kubectl get elasticworkload

期待される出力:

名: elasticworkload-sample
名前空間: デフォルト
ラベル: <none>
注釈: <none>
APIバージョン: autoscaling.alibabacloud.com/v1beta1
種類: ElasticWorkload
メタデータ:
 作成タイムスタンプ: 2021-04-30T06:58:03Z
 世代: 2
 リソースバージョン: 1126368056
 Self Link: /api s/autoscaling.alibabacloud.com/v1beta1/namespaces/default/elasticworkloads/elasticworkload-sample
 UID: a465de9e-1253-4cbe-8cd5-98393393e990
仕様:
 弾性ユニット:
  Labels:
   alibabacloud.com/eci: true
  名前: virtual-kubelet
 レプリカ: 6
 ソースターゲット:
  APIバージョン: apps/v1
  種類: 展開
  マックス: 4
  分: 2
  名前: nginx-deployment-basic
ステータス:
 Elastic Unitsステータス:
  希望するレプリカ: 2
  名前: nginx-deployment-basic-unit-virtual-kubelet
  更新タイムスタンプ: 2021-04-30T06:58:03Z
 レプリカ: 6
 セレクター: app=nginx
 ソースターゲット:
  APIバージョン: apps/v1
  希望するレプリカ: 4
  種類: 展開
  名前: nginx-deployment-basic
  更新タイムスタンプ: 2021-04-30T06:58:03Z
イベント:
 メッセージからタイプ理由年齢
 ----  ------         ----         ----       -------
 ElasticWorkloadUnit nginx-deployment-basic-unit-virtual-kubelet 110 ElasticWorkload
 通常のElasticWorkloadUpdate 110 (x2 over 110s) ElasticWorkload ElasticWorkload update
 通常のUnitUpdate 110 ElasticWorkload ElasticWorkloadUnit virtual-kubeletが更新され
ました

前述のテンプレートを使用してエラスティックワークロードをデプロイした後、次のコマンドを実行してポッドのステータスを照会できます。 また、各デプロイのレプリケートされたポッドの数がスケジューリングポリシーに準拠していることもわかります。

次のコマンドを実行して、ポッドのステータスを照会します。

kubectl get pod -o wide

期待される出力:

NAME READY STATUS RESTARTS AGE IPノードNOMINATED NOMINATED NODE READINESS GATES
nginx-deployment-basic-769f84b5cf-hdmlw 1/1実行中0 46m 172.26.240.69 cn-hangzhou.10.1.84.111 <none> <none>
nginx-deployment-basic-769f84b5cf-lmd99 1/1実行中0 46m 172.26.240.6 cn-hangzhou.10.1.84.112 <none> <none>
nginx-deployment-basic-769f84b5cf-nbp5c 1/1実行中0 30m 172.26.240.75 cn-hangzhou.10.1.84.111 <none> <none>
nginx-deployment-basic-769f84b5cf-scj68 1/1実行中0 30m 172.26.240.11 cn-hangzhou.10.1.84.112 <none> <none>
nginx-deployment-basic-unit-virtual-kubelet-594f86b5c9-8z876 1/1実行0 10m 10.1.84.119 virtual-kubelet-cn-hangzhou-i <none> <none>
nginx-deployment-basic-unit-virtual-kubelet-594f86b5c9-drxvq 1/1実行0 10m 10.1.84.118 virtual-kubelet-cn-hangzhou-i <none> <none> 

上の図に示すように、HPAをack-kubernetes-elastic-workloadと一緒に使用して、エラスティックワークロードをスケーリングすることもできます。 KubernetesワークロードがHPAによってスケーリングされている場合、ack-kubernetes-elastic-workloadは、各エラスティックユニットにスケジュールされるレプリケートされたポッドの数を調整します。 たとえば、HPAがエラスティックワークロード内の複製ポッドの数を6から4に減らす場合、ack-kubernetes-elastic-workloadは、ソースワークロード内の複製ポッドの数を減らす代わりに、エラスティックユニットの複製ポッドを減らすことが好ましい。

apiVersion: 自動スケーリング /v2beta2
種類: HorizontalPodAutoscaler
メタデータ:
  名前: elastic-workload-demo
  namespace: デフォルト
spec:
  scaleTargetRef:
    apiVersion: autoscaling.alibabacloud.com/v1beta1
    kind: ElasticWorkload
    名前: elasticworkload-sample
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      ターゲット:
        タイプ: Utilization
        averageUtilization: 50 
説明

ack-kubernetes-elastic-workloadは、ソースのデプロイメントを複製し、スケジューリングポリシーを上書きすることで、デプロイメントを作成します。 これにより、スケジューリングポリシーを管理できます。 ack-kubernetes-elastic-workloadは、ソースワークロードとエラスティックユニットにスケジュールされたレプリケートされたポッドも調整します。 これにより、特定のポッドに優先順位を付けることができます。