我有一个在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/

10-16 06:36