Container Service for Kubernetes(ACK)ProクラスターがService Mesh(ASM)インスタンスに接続されている場合、動的リソースオーバーコミットモードが有効になっていると、Deploymentに挿入されたサイドカープロキシは、クラスターのリソース使用率を向上させるために動的にオーバーコミットできるリソースをサポートします。このトピックでは、サイドカープロキシで動的にオーバーコミットできるACKリソースを構成する方法について説明します。
前提条件
ACK Pro クラスタが作成されていること。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
説明動的にオーバーコミットできるリソースの設定は、ACK Pro クラスタでのみサポートされています。
ACK Pro クラスタで動的リソースオーバーコミット機能が有効になっていること。詳細については、「動的リソースオーバーコミットを有効にする」をご参照ください。
ACK Pro クラスタが、バージョン 1.16 以降の ASM インスタンスに追加されていること。詳細については、「ASM インスタンスにクラスタを追加する」をご参照ください。
動的リソースオーバーコミット機能の概要
Kubernetes では、kubelet は、Pod の Quality of Service (QoS) クラスに基づいて、ノード上の Pod によって使用されるリソースを管理します。たとえば、kubelet は Out of Memory (OOM) の優先順位を制御します。Pod の QoS クラスは、Guaranteed、Burstable、または BestEffort のいずれかになります。Pod の QoS クラスは、Pod に設定されている CPU とメモリリソースの requests と limits によって異なります。
ack-koordinator はリソースを動的にオーバーコミットできます。ack-koordinator はノードの負荷をリアルタイムで監視し、ポッドに割り当てられているものの使用されていないリソースをスケジュールします。動的にオーバーコミットできるリソースと通常のリソースを区別するために、ack-koordinator は バッチ 優先度を、batch-cpu および batch-memory を含む、動的にオーバーコミットできるリソースに割り当てます。詳細については、動的リソースオーバーコミットの有効化 をご参照ください。
手順
ack-slo-config ConfigMap をデプロイします。
以下の内容を含む configmap.yaml という名前のファイルを作成します。
ConfigMap の設定項目を変更することで、リソースを柔軟に管理できます。設定項目の詳細については、「動的リソースオーバーコミットを有効にする」をご参照ください。
apiVersion: v1 kind: ConfigMap metadata: name: ack-slo-config namespace: kube-system data: colocation-config: | { "enable": true, "metricAggregateDurationSeconds": 60, "cpuReclaimThresholdPercent": 60, "memoryReclaimThresholdPercent": 70, "memoryCalculatePolicy": "usage" }
kube-system ネームスペースに ack-slo-config ConfigMap が存在するかどうかを確認します。
ack-slo-config ConfigMap が存在する場合は、kubectl patch コマンドを実行して ConfigMap を更新できます。これにより、ConfigMap の他の設定が変更されるのを防ぎます。
kubectl patch cm -n kube-system ack-slo-config --patch "$(cat configmap.yaml)"
ack-slo-config ConfigMap が存在しない場合は、次のコマンドを実行して ack-slo-config という名前の ConfigMap を作成します。
kubectl apply -f configmap.yaml
次のコマンドを実行して、現在のバッチリソースの合計量をクエリします。
# $nodeName をクエリするノードの名前に置き換えます。 kubectl get node $nodeName -o yaml
予期される出力:
#Node status: allocatable: # 単位:ミリコア。次の例では、50 コアを割り当てることができます。 kubernetes.io/batch-cpu: 50000 # 単位:バイト。次の例では、50 GB のメモリを割り当てることができます。 kubernetes.io/batch-memory: 53687091200
サイドカープロキシで動的にオーバーコミットできるリソースを設定します。
挿入されたサイドカープロキシコンテナと istio-init コンテナに対して、動的にオーバーコミットできる ACK リソースを設定できます。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[グローバル] タブの [サイドカープロキシ設定] ページで、[リソース設定] をクリックし、[サイドカープロキシに動的にオーバーコミットできる ACK リソースを設定する] を選択し、関連パラメータを設定してから、ページの下部にある [設定の更新] をクリックします。
[リソース制限] と [必要なリソース] は、同じ値または異なる値に設定できます。ワークロードタイプに基づいて [リソース制限] と [必要なリソース] を設定することをお勧めします。
ワークロードの QoS クラスが Guaranteed の場合は、両方を同じ値に設定することをお勧めします。
他のタイプの Pod を使用する場合は、[必要なリソース] の値を [リソース制限] の値よりも小さくしておくことをお勧めします。この設定要件は、通常のリソースにも適用されます。
設定例:
設定項目
子設定項目
説明
[挿入されたサイドカープロキシのリソースを設定する (ACK 動的オーバーコミットリソース)]
[リソース制限]
この例では、[CPU] を 2000 ミリコア、[メモリ] を 2048 MiB に設定します。
[必要なリソース]
この例では、[CPU] を 200 ミリコア、[メモリ] を 256 MiB に設定します。
[istio-init コンテナのリソースを設定する (ACK 動的オーバーコミットリソース)]
[リソース制限]
この例では、[CPU] を 1000 ミリコア、[メモリ] を 1024 MiB に設定します。
[必要なリソース]
この例では、[CPU] を 100 ミリコア、[メモリ] を 128 MiB に設定します。
アプリケーションをデプロイし、バッチリソースを申請します。
以下の内容を含む demo.yaml という名前のファイルを作成します。
次の YAML ファイルは、Deployment を作成し、バッチリソースを申請します。Pod にラベルを追加して Pod の QoS クラスを指定し、requests フィールドと limits フィールドにバッチリソースを指定します。これにより、Pod は動的にオーバーコミットできるリソースを使用できます。
apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: replicas: 1 selector: matchLabels: app: sleep template: metadata: labels: app: sleep # 必須。Pod の QoS クラスを BestEffort に設定します。 koordinator.sh/qosClass: "BE" spec: terminationGracePeriodSeconds: 0 containers: - name: sleep image: curlimages/curl command: ["/bin/sleep", "infinity"] imagePullPolicy: IfNotPresent resources: requests: # 単位:ミリコア。次の例では、CPU リクエストは 1 コアに設定されています。 kubernetes.io/batch-cpu: "1k" # 単位:バイト。次の例では、メモリリクエストは 1 GB に設定されています。 kubernetes.io/batch-memory: "1Gi" limits: kubernetes.io/batch-cpu: "1k" kubernetes.io/batch-memory: "1Gi"
次のコマンドを実行して、demo.yaml をテストアプリケーションとしてデプロイします。
kubectl apply -f demo.yaml
オプション: BestEffort Pod のリソース制限が有効になっているかどうかを確認します。
アプリケーションをデプロイしてバッチリソースを申請した後、Pod のリソース制限が有効になっているかどうかを確認できます。詳細については、「動的リソースオーバーコミットを有効にする」をご参照ください。
Pod が存在するノードにログインし、次のコマンドを実行して CPU 制限を確認します。
cat /sys/fs/cgroup/cpu,cpuacct/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/cpu.cfs_quota_us
予期される出力:
# cgroup の CPU 制限は 1 コアに設定されています。 100000
Pod が存在するノードにログインし、次のコマンドを実行してメモリ制限を確認します。
cat /sys/fs/cgroup/memory/kubepods.slice/kubepods-besteffort.slice/kubepods-besteffort-pod****.slice/cri-containerd-****.scope/memory.limit_in_bytes
予期される出力:
# cgroup のメモリ制限は 1 GB に設定されています。 1073741824