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のデプロイ
ACKコンソールにログインします。
ACKコンソールの左側のナビゲーションウィンドウで、 を選択します。
[マーケットプレイス] ページで、[アプリカタログ] タブをクリックします。 ack-kubernetes-elastic-workloadを見つけてクリックします。
ack-kubernetes-elastic-workloadページで、[デプロイ] をクリックします。
[デプロイ] ウィザードで、クラスターと名前空間を選択し、[次へ] をクリックします。
[パラメーター] ウィザードページでパラメーターを設定し、[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は、ワークロードに侵入することなく外部プラグインとしてデプロイされます。
通常、エラスティックワークロードの設定には、次の部分が含まれます。
SourceTarget: ソースワークロードのタイプ、およびレプリケートされたポッドの最大数と最小数を定義します。
elasticUnit: エラスティックユニットのスケジューリングポリシーを定義する配列。 複数のエラスティックユニットのスケジューリングポリシーを定義するには、テンプレートに示す順序で関連パラメーターを指定します。
この例では、ソースワークロードにプロビジョニングされたレプリケートポッドの数は2から4の範囲です。 エラスティックワークロードに2〜4個のレプリケートされたポッドがある場合、すべてのポッドがソースワークロードにスケジュールされます。 エラスティックワークロードに4個を超えるポッドが含まれている場合、残りのポッドはvirtual-kubeletエラスティックユニットにスケジュールされます。 レプリケーション済みポッドは、label、annotation、nodeSelector、affinity、tolerationパラメーターなど、virtual-kubeletのスケジューリングポリシーに基づいてスケジュールされます。
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は、ソースワークロードとエラスティックユニットにスケジュールされたレプリケートされたポッドも調整します。 これにより、特定のポッドに優先順位を付けることができます。