Disruption (Consolidation)
Karpenterは、中断(Disruption)の対象となるノードを自動的に検出し、必要に応じて代替ノードをスピンアップします。これは3つの異なる理由で発生します:
- 期限切れ(Expiration):デフォルトでは、Karpenterは720時間(30日)後にインスタンスを自動的に期限切れにし、リサイクルを強制することでノードを最新の状態に保ちます。
- ドリフト(Drift):Karpenterは設定の変更(
NodePoolやEC2NodeClassなど)を検出して必要な変更を適用します。 - 統合(Consolidation):コスト効率の良いコンピューティングを運用するための重要な機能であり、Karpenterはクラスターのコンピューティングを継続的に最適化します。たとえば、ワークロードが十分に活用されていないコンピューティングインスタンス上で実行されている場合、それらを少ないインスタンスに統合します。
Disruptionは、NodePoolのdisruptionブロックを通じて設定されます。以下に示すのは、すでに私たちのNodePoolに構成されているポリシーです。
~/environment/eks-workshop/modules/autoscaling/compute/karpenter/nodepool/nodepool.yaml
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
template:
metadata:
labels:
type: karpenter
spec:
requirements:
- key: "karpenter.sh/capacity-type"
operator: In
values: ["on-demand"]
- key: "node.kubernetes.io/instance-type"
operator: In
values: ["c5.large", "m5.large", "r5.large", "m5.xlarge"]
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: default
expireAfter: 72h
limits:
cpu: "1000"
memory: 1000Gi
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 1m