リソース計画
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 に
requests
とlimits
を設定する - AKS クラスターで "リソース クォータ" を使用する
実際に設計する際に、机上の設計も重要ですが、十分なテストを行うことも大事になりますので、しっかりテストしておきましょう。
コメント