# RKE2 調整 coredns pod 數量 * rke2-coredns-autoscaler 是負責計算與調整 coredns pod 數量,因此如果手動調整 coredns deployment 是沒有用的,會被 rke2-coredns-autoscaler 強制改回來。 * 調整 coredns 最少 pod 數量,但須注意 coredns 有定義 pod anti-affinity rules ,意思就是每個節點上只能有一個 coredns pod,如果 pod 數量超過節點數會導致 coredns pending ``` apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: rke2-coredns namespace: kube-system spec: valuesContent: |- autoscaler: min: 5 ``` ## autoscaler 調整 coredns pod 數量計算方式 * coresPerReplica: 叢集內有幾個 CPU 核心就需要一個 CoreDNS Pod。 * nodesPerReplica: 每個 CoreDNS Pod 預計服務的節點數量。 ``` replicas = max( ceil( cores * 1/coresPerReplica ) , ceil( nodes * 1/nodesPerReplica ) ) replicas = min(replicas, max) replicas = max(replicas, min) ``` * 預設 `coresPerReplica` 為 256 和 `nodesPerReplica` 為 16,代表 - 每 256 個 CPU 核心需要一個 CoreDNS Pod。 - 每 16 個節點需要一個 CoreDNS Pod。 * 以下設定調整為每 1 個節點需要 1 個 coredns ``` apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: rke2-coredns namespace: kube-system spec: valuesContent: |- autoscaler: nodesPerReplica: 1 ``` * 我的環境有 5 個節點因此長出了 5 個 coredns pod ``` $ kubectl -n kube-system top po -l k8s-app=kube-dns NAME CPU(cores) MEMORY(bytes) rke2-coredns-rke2-coredns-7b9f897775-4s4ch 3m 25Mi rke2-coredns-rke2-coredns-7b9f897775-6ksgq 3m 26Mi rke2-coredns-rke2-coredns-7b9f897775-hjgw4 3m 42Mi rke2-coredns-rke2-coredns-7b9f897775-j8xd7 3m 20Mi rke2-coredns-rke2-coredns-7b9f897775-rf5nv 3m 29Mi ``` * 以下設定為叢集內每 6 個 cpu 需要一個 coredns ``` apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: rke2-coredns namespace: kube-system spec: valuesContent: |- autoscaler: coresPerReplica: 6 ``` * 我的叢集總共有 24 個 cpu,因此會長出 4 個 coredns pod ![image](https://hackmd.io/_uploads/S13rxolbJe.png) ``` $ kubectl -n kube-system top po -l k8s-app=kube-dns NAME CPU(cores) MEMORY(bytes) rke2-coredns-rke2-coredns-7b9f897775-6ksgq 3m 26Mi rke2-coredns-rke2-coredns-7b9f897775-hjgw4 5m 42Mi rke2-coredns-rke2-coredns-7b9f897775-j8xd7 3m 20Mi rke2-coredns-rke2-coredns-7b9f897775-rf5nv 3m 32Mi ``` ## 參考 https://github.com/kubernetes-sigs/cluster-proportional-autoscaler#linear-mode