我有一个在GKE上启用了自动配置的Kubernetes集群。
gcloud beta container clusters create "some-name" --zone "us-central1-a" \
--no-enable-basic-auth --cluster-version "1.13.11-gke.14" \
--machine-type "n1-standard-1" --image-type "COS" \
--disk-type "pd-standard" --disk-size "100" \
--metadata disable-legacy-endpoints=true \
--scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \
--num-nodes "1" --enable-stackdriver-kubernetes --enable-ip-alias \
--network "projects/default-project/global/networks/default" \
--subnetwork "projects/default-project/regions/us-central1/subnetworks/default" \
--default-max-pods-per-node "110" \
--enable-autoscaling --min-nodes "0" --max-nodes "8" \
--addons HorizontalPodAutoscaling,KubernetesDashboard \
--enable-autoupgrade --enable-autorepair \
--enable-autoprovisioning --min-cpu 1 --max-cpu 40 --min-memory 1 --max-memory 64
我运行了一个不适用于现有节点(具有1个CPU)的部署。
kubectl run say-lol --image ubuntu:18.04 --requests cpu=4 -- bash -c 'echo lolol && sleep 30'
自动配置器正确检测到需要一个新的节点池,并创建了一个新集群并开始运行新部署。 但是,在不再需要它之后无法将其删除。
kubectl delete deployment say-lol
在所有 pod 都走完之后,新群集已经闲置了20多个小时。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-some-name-default-pool-5003d6ff-pd1p Ready <none> 21h v1.13.11-gke.14
gke-some-name-nap-n1-highcpu-8--585d94be-vbxw Ready <none> 21h v1.13.11-gke.14
$ kubectl get deployments
No resources found in default namespace.
$ kubectl get events
No resources found in default namespace.
为什么不清理昂贵的节点池?
最佳答案
我在两个集群上进行繁殖,发现罪魁祸首与kube-dns pods 高度相关。在集群1上,对于按比例放大的节点,没有kube-dns pod,并且在删除say-lol
后发生了按比例缩小。在群集2上,由于kube-dns pod,辅助节点未按比例缩小。
跟随此doc/How to set PDBs to enable CA to move kube-system pods?
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: kube-dns-pdb
namespace: kube-system
spec:
maxUnavailable: 1
selector:
matchLabels:
k8s-app: kube-dns
我创建了一个pdb以允许kube-dns pod中断,从而允许缩小规模。您可以通过运行检查是否允许中断
kubectl get pdb -n kube-system
为了使流程正常运行,允许的中断应该具有非零值。
NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE
kube-dns-pdb N/A 1 1 28m
关于kubernetes - 自动配置的节点池未清除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58961472/