node autoscaller

This commit is contained in:
Serge Logvinov
2022-10-23 17:28:28 +03:00
parent 52b0187e53
commit 7dfc6611a3
8 changed files with 253 additions and 13 deletions

0
exoscale/README.md Normal file
View File

View File

@@ -82,24 +82,55 @@ rules:
- list - list
- watch - watch
- update - update
- apiGroups:
- certificates.k8s.io
resources:
- certificatesigningrequests
verbs:
- list
- watch
- apiGroups:
- certificates.k8s.io
resources:
- certificatesigningrequests/approval
verbs:
- update
- apiGroups:
- certificates.k8s.io
resources:
- signers
resourceNames:
- kubernetes.io/kubelet-serving
verbs:
- approve
- apiGroups:
- ""
resources:
- endpoints
verbs:
- create
- get
- list
- watch
- update
--- ---
kind: ClusterRoleBinding kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
metadata: metadata:
name: system:cloud-controller-manager name: system:exoscale-cloud-controller-manager
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io
kind: ClusterRole kind: ClusterRole
name: system:cloud-controller-manager name: system:cloud-controller-manager
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: cloud-controller-manager name: exoscale-cloud-controller-manager
namespace: kube-system namespace: kube-system
--- ---
kind: RoleBinding kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
metadata: metadata:
name: system:cloud-controller-manager name: system:exoscale-cloud-controller-manager
namespace: kube-system namespace: kube-system
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io
@@ -107,7 +138,7 @@ roleRef:
name: extension-apiserver-authentication-reader name: extension-apiserver-authentication-reader
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: cloud-controller-manager name: exoscale-cloud-controller-manager
namespace: kube-system namespace: kube-system
--- ---
apiVersion: apps/v1 apiVersion: apps/v1
@@ -126,9 +157,7 @@ spec:
labels: labels:
app: exoscale-cloud-controller-manager app: exoscale-cloud-controller-manager
spec: spec:
dnsPolicy: Default serviceAccountName: exoscale-cloud-controller-manager
hostNetwork: true
serviceAccountName: cloud-controller-manager
nodeSelector: nodeSelector:
node-role.kubernetes.io/control-plane: "" node-role.kubernetes.io/control-plane: ""
tolerations: tolerations:
@@ -146,6 +175,12 @@ spec:
- --leader-elect=true - --leader-elect=true
- --allow-untagged-cloud - --allow-untagged-cloud
- --controllers=cloud-node,cloud-node-lifecycle - --controllers=cloud-node,cloud-node-lifecycle
# env:
# - name: EXOSCALE_SKS_AGENT_RUNNERS
# value: node-csr-validation
envFrom:
- secretRef:
name: exoscale-secret
resources: resources:
limits: limits:
cpu: 500m cpu: 500m
@@ -153,6 +188,3 @@ spec:
requests: requests:
cpu: 100m cpu: 100m
memory: 64Mi memory: 64Mi
envFrom:
- secretRef:
name: exoscale-secret

View File

@@ -0,0 +1,164 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
name: cluster-autoscaler
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-autoscaler
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
rules:
- apiGroups: [""]
resources: ["events", "endpoints"]
verbs: ["create", "patch"]
- apiGroups: [""]
resources: ["pods/eviction"]
verbs: ["create"]
- apiGroups: [""]
resources: ["pods/status"]
verbs: ["update"]
- apiGroups: [""]
resources: ["endpoints"]
resourceNames: ["cluster-autoscaler"]
verbs: ["get", "update"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["watch", "list", "get", "update"]
- apiGroups: [""]
resources:
- "namespaces"
- "pods"
- "services"
- "replicationcontrollers"
- "persistentvolumeclaims"
- "persistentvolumes"
verbs: ["watch", "list", "get"]
- apiGroups: ["extensions"]
resources: ["replicasets", "daemonsets"]
verbs: ["watch", "list", "get"]
- apiGroups: ["policy"]
resources: ["poddisruptionbudgets"]
verbs: ["watch", "list"]
- apiGroups: ["apps"]
resources: ["statefulsets", "replicasets", "daemonsets"]
verbs: ["watch", "list", "get"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses", "csinodes", "csistoragecapacities", "csidrivers"]
verbs: ["get", "list", "watch"]
- apiGroups: ["batch"]
resources: ["jobs", "cronjobs"]
verbs: ["watch", "list", "get"]
- apiGroups: ["coordination.k8s.io"]
resources: ["leases"]
verbs: ["create"]
- apiGroups: ["coordination.k8s.io"]
resourceNames: ["cluster-autoscaler"]
resources: ["leases"]
verbs: ["get", "update"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: cluster-autoscaler
namespace: kube-system
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create","list","watch"]
- apiGroups: [""]
resources: ["configmaps"]
resourceNames:
- "cluster-autoscaler-status"
- "cluster-autoscaler-priority-expander"
verbs: ["delete", "get", "update", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-autoscaler
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-autoscaler
subjects:
- kind: ServiceAccount
name: cluster-autoscaler
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cluster-autoscaler
namespace: kube-system
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: cluster-autoscaler
subjects:
- kind: ServiceAccount
name: cluster-autoscaler
namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: cluster-autoscaler
name: cluster-autoscaler
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: cluster-autoscaler
template:
metadata:
labels:
app: cluster-autoscaler
spec:
nodeSelector:
node-role.kubernetes.io/master: ""
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
operator: Exists
serviceAccountName: cluster-autoscaler
containers:
- image: k8s.gcr.io/autoscaling/cluster-autoscaler:v1.25.0
imagePullPolicy: IfNotPresent
name: cluster-autoscaler
command:
- ./cluster-autoscaler
- --v=3
- --logtostderr=true
- --cloud-provider=exoscale
envFrom:
- secretRef:
name: exoscale-secret
resources:
limits:
cpu: 100m
memory: 300Mi
requests:
cpu: 100m
memory: 300Mi

View File

@@ -83,6 +83,9 @@ spec:
valueFrom: valueFrom:
fieldRef: fieldRef:
fieldPath: metadata.namespace fieldPath: metadata.namespace
securityContext:
seccompProfile:
type: RuntimeDefault
volumes: volumes:
- name: config-volume - name: config-volume
configMap: configMap:

View File

@@ -0,0 +1,40 @@
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: overprovisioning
value: -1
globalDefault: false
description: "Priority class used by overprovisioning."
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: overprovisioning
namespace: default
spec:
replicas: 1
selector:
matchLabels:
run: overprovisioning
template:
metadata:
labels:
run: overprovisioning
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- topologyKey: kubernetes.io/hostname
labelSelector:
matchExpressions:
- key: run
operator: In
values:
- overprovisioning
priorityClassName: overprovisioning
containers:
- name: reserve-resources
image: k8s.gcr.io/pause
resources:
requests:
cpu: "700m"

View File

@@ -25,6 +25,6 @@ resource "exoscale_instance_pool" "web" {
labels = merge(var.tags, { type = "web" }) labels = merge(var.tags, { type = "web" })
lifecycle { lifecycle {
ignore_changes = [user_data, labels] ignore_changes = [size, user_data, labels]
} }
} }

View File

@@ -19,7 +19,7 @@ resource "exoscale_instance_pool" "worker" {
labels = merge(var.tags, { type = "worker" }) labels = merge(var.tags, { type = "worker" })
lifecycle { lifecycle {
ignore_changes = [user_data, labels] ignore_changes = [size, user_data, labels]
} }
} }

View File

@@ -68,7 +68,6 @@ cluster:
warn-version: latest warn-version: latest
exemptions: exemptions:
namespaces: namespaces:
- kube-system
- ingress-nginx - ingress-nginx
- local-path-provisioner - local-path-provisioner
runtimeClasses: [] runtimeClasses: []
@@ -99,6 +98,8 @@ cluster:
externalCloudProvider: externalCloudProvider:
enabled: true enabled: true
manifests: manifests:
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/exoscale-cloud-controller-manager.yaml
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/exoscale-cluster-autoscaler.yaml
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/metrics-server.yaml - https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/metrics-server.yaml
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/local-path-storage.yaml - https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/local-path-storage.yaml
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/coredns-local.yaml - https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/exoscale/deployments/coredns-local.yaml