From 6d8ca8d39c9e0b9428f4d905af01e695907d983e Mon Sep 17 00:00:00 2001 From: GuyTempleton Date: Tue, 13 Aug 2019 07:26:55 +0100 Subject: [PATCH] Use Cluster Proportional Autoscaler for CoreDNS 1.12+ Follow the example of Kube-DNS for scaling the CoreDNS deployment by use of a cluster proportional autoscaler --- .../k8s-1.12.yaml.template | 96 ++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/upup/models/cloudup/resources/addons/coredns.addons.k8s.io/k8s-1.12.yaml.template b/upup/models/cloudup/resources/addons/coredns.addons.k8s.io/k8s-1.12.yaml.template index e4bc5b458b61e..714b180c608a1 100644 --- a/upup/models/cloudup/resources/addons/coredns.addons.k8s.io/k8s-1.12.yaml.template +++ b/upup/models/cloudup/resources/addons/coredns.addons.k8s.io/k8s-1.12.yaml.template @@ -77,6 +77,48 @@ data: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: coredns-autoscaler + namespace: kube-system + labels: + k8s-addon: coredns.addons.k8s.io + k8s-app: coredns-autoscaler + kubernetes.io/cluster-service: "true" +spec: + selector: + matchLabels: + k8s-app: coredns-autoscaler + template: + metadata: + labels: + k8s-app: coredns-autoscaler + annotations: + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + containers: + - name: autoscaler + image: k8s.gcr.io/cluster-proportional-autoscaler-{{Arch}}:1.4.0 + resources: + requests: + cpu: "20m" + memory: "10Mi" + command: + - /cluster-proportional-autoscaler + - --namespace=kube-system + - --configmap=coredns-autoscaler + - --target=Deployment/coredns + # When cluster is using large nodes(with more cores), "coresPerReplica" should dominate. + # If using small nodes, "nodesPerReplica" should dominate. + - --default-params={"linear":{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}} + - --logtostderr=true + - --v=2 + tolerations: + - key: "CriticalAddonsOnly" + operator: "Exists" + serviceAccountName: coredns-autoscaler +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: coredns namespace: kube-system @@ -85,11 +127,11 @@ metadata: k8s-addon: coredns.addons.k8s.io kubernetes.io/cluster-service: "true" spec: - replicas: 2 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 + maxSurge: 10% selector: matchLabels: k8s-app: kube-dns @@ -203,6 +245,58 @@ spec: --- + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: coredns-autoscaler + namespace: kube-system + labels: + k8s-addon: coredns.addons.k8s.io + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + k8s-addon: coredns.addons.k8s.io + name: coredns-autoscaler +rules: + - apiGroups: [""] + resources: ["nodes"] + verbs: ["list","watch"] + - apiGroups: [""] + resources: ["replicationcontrollers/scale"] + verbs: ["get", "update"] + - apiGroups: ["extensions", "apps"] + resources: ["deployments/scale", "replicasets/scale"] + verbs: ["get", "update"] +# Remove the configmaps rule once below issue is fixed: +# kubernetes-incubator/cluster-proportional-autoscaler#16 + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "create"] + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + k8s-addon: coredns.addons.k8s.io + name: coredns-autoscaler +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: coredns-autoscaler +subjects: +- kind: ServiceAccount + name: coredns-autoscaler + namespace: kube-system + +--- + apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata: