広告

AKS のリソース予約について

Kubernetes 勉強

リソース計画

AKS では、ノード リソースを使用して、クラスターの一部としてノードを機能させることができます。
クラスタのリソースは「ユーザー Pod」と「リソース予約」で計画する必要があります。

「ユーザーポッド」は、yaml ファイルで定義可能で、Pod を計画する際に、設計が必要です。

「リソース予約」については、この記事で一緒に学習していきたいと思います。

ノードの割り当てできるリソース確認

以下のコマンドで、指定のノードに対して、ノードの割り当てできるリソース確認できます。

# ノードの割り当てできるリソース確認
kubectl describe node <NODE_NAME>

出力は以下のような内容を確認できます。

...
  Namespace                   Name                                      CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                                      ------------  ----------  ---------------  -------------  ---
  gatekeeper-system           gatekeeper-audit-5c96c9b6d6-wmmwb         100m (5%)     2 (105%)    256Mi (4%)       3Gi (57%)      17h
  gatekeeper-system           gatekeeper-controller-7c4c5b8667-n7d54    100m (5%)     2 (105%)    256Mi (4%)       2Gi (38%)      17h
  gatekeeper-system           gatekeeper-controller-7c4c5b8667-x74c7    100m (5%)     2 (105%)    256Mi (4%)       2Gi (38%)      17h
  kube-system                 azure-ip-masq-agent-p48qm                 100m (5%)     500m (26%)  50Mi (0%)        250Mi (4%)     17h
  kube-system                 azure-policy-dfd9d48cd-vd942              30m (1%)      100m (5%)   50Mi (0%)        200Mi (3%)     17h
  kube-system                 azure-policy-webhook-84884d989b-75gnp     30m (1%)      100m (5%)   50Mi (0%)        200Mi (3%)     17h
  kube-system                 coredns-845757d86-fgb4t                   100m (5%)     3 (157%)    70Mi (1%)        500Mi (9%)     17h
  kube-system                 coredns-845757d86-mm7qv                   100m (5%)     3 (157%)    70Mi (1%)        500Mi (9%)     17h
  kube-system                 coredns-autoscaler-5f85dc856b-bctp5       20m (1%)      200m (10%)  10Mi (0%)        500Mi (9%)     17h
  kube-system                 csi-azuredisk-node-2x2cj                  30m (1%)      0 (0%)      60Mi (1%)        400Mi (7%)     17h
  kube-system                 csi-azurefile-node-q968d                  30m (1%)      0 (0%)      60Mi (1%)        500Mi (9%)     17h
  kube-system                 konnectivity-agent-7df5fdd799-9xdnb       20m (1%)      100m (5%)   20Mi (0%)        128Mi (2%)     17h
  kube-system                 konnectivity-agent-7df5fdd799-dkhn5       20m (1%)      100m (5%)   20Mi (0%)        128Mi (2%)     17h
  kube-system                 kube-proxy-6mcw4                          100m (5%)     0 (0%)      0 (0%)           0 (0%)         17h
  kube-system                 metrics-server-774f99dbf4-n95lc           44m (2%)      1 (52%)     55Mi (1%)        2000Mi (37%)   17h
  kube-system                 omsagent-gxdrg                            150m (7%)     1 (52%)     550Mi (10%)      1774Mi (33%)   17h
  kube-system                 omsagent-rs-6b9fd8bc99-c74k9              150m (7%)     1 (52%)     250Mi (4%)       1Gi (19%)      17h
  scenario03                  s03-deployment-6775864c4f-gncsx           500m (26%)    500m (26%)  1000Mi (18%)     1000Mi (18%)   3m54s
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource                       Requests      Limits
  --------                       --------      ------
  cpu                            1724m (90%)   16600m (873%)
  memory                         3083Mi (57%)  16272Mi (303%)
  ephemeral-storage              0 (0%)        0 (0%)
  hugepages-1Gi                  0 (0%)        0 (0%)
  hugepages-2Mi                  0 (0%)        0 (0%)
  attachable-volumes-azure-disk  0             0
...

リソース予約

ノードのパフォーマンスと機能を維持するために、AKS では各ノード上でリソースを予約します。
ノードでリソース数が増えると、ユーザーがデプロイするポッドの管理の必要性が高くなるため、リソース予約も増大します。
※ Container Insights (OMS) などの AKS アドオンを使用すると、追加のノード リソースが消費されます。

リソース予約の種類

リソースの予約は以下 2 種類あります。

  • 予約 CPU = kube 予約

    • ノードの種類とクラスター構成に依存
    • 追加の機能が実行されている場合は、割り当て可能な CPU が少なくなることがある
  • 予約メモリ = kubelet デーモン + kubelet デーモンの回帰率

    • kubelet デーモン:少なくとも 750 Mi(0.75 GB) のメモリ
    • kubelet デーモンが適切に機能するための予約されているメモリの回帰率 (kube-reserved)
  • kube 予約(ミリコア):

ノード上の CPU コア数 1 2 4 8 16 32 64
Kube 予約 (ミリコア) 60 100 140 180 260 420 740

※ 1 コア = 1000 ミリコア

  • kubelet デーモン回帰率計算:
    • ノード メモリが 0~4 GB:メモリx25%
    • ノード メモリが 4~8 GB:(4x25%)+(メモリ-4)x20%
    • ノード メモリが 8~16 GB:(4x25%)+(4x20%)+(メモリ-8)x10%
    • ノード メモリが 16~112 GB:(4x25%)+(4x20%)+(8x10%)+(メモリ-16)x6%
    • ノード メモリが 112~ GB:(4x25%)+(4x20%)+(8x10%)+(96x6%)+(メモリ-112)x2%

最後に

リソースの計画は kubernetes において、大事な設計ポイントになります。

Pod リソースの制御について、ベストプラクティスとして、以下の方法を併用することをお勧めしています。

  • yaml ですべての Pod に requestslimits を設定する
  • AKS クラスターで "リソース クォータ" を使用する

実際に設計する際に、机上の設計も重要ですが、十分なテストを行うことも大事になりますので、しっかりテストしておきましょう。

参考情報

コメント

タイトルとURLをコピーしました