GKE kubernetes kube系统资源nodeAffinity

car*_*ray 8 google-cloud-platform kubernetes google-kubernetes-engine

我在GKE k8s 1.9.4上有一个多区域测试设置。每个群集都具有:

  • 一个入口,配置有 kubemci
  • 3个具有不同节点标签的节点池:
    • 默认池system(1vCPU / 2GB RAM)
    • 前端池frontend(2vCPU / 2GB RAM)
    • 后端池backend(1vCPU / 600Mb RAM)
  • 通过自定义指标进行缩放的HPA

所以这样的东西prometheus-operatorprometheus-servercustom-metrics-api-serverkube-state-metrics连接到一个节点system的标签。

前端和后端Pod分别连接到带有frontendbackend标签的节点(单个Pod到单个节点),请参阅podantiaffinity

自动缩放backendfrontend缩小容器后,它们的节点将保持不变,因为似乎来自kube-system命名空间的容器(即)heapster。这会导致以下情况:带有frontend/ backend标签的节点在缩减规模后仍保持活动状态,即使没有后端或前端吊舱也是如此。

问题是:如何避免kube-system在节点上创建用于服务应用程序的Pod(如果这确实是理智的,并且可能的话)?

猜猜,我应该对backendfrontend节点使用污点和容差,但是如何将其与HPA和群集内节点自动缩放器结合使用?

car*_*ray 6

似乎污点和容忍度可以解决问题

创建一个带有默认节点池的集群(用于监控和kube-system):

gcloud container --project "my-project-id" clusters create "app-europe" \
  --zone "europe-west1-b" --username="admin" --cluster-version "1.9.4-gke.1" --machine-type "custom-2-4096" \
  --image-type "COS" --disk-size "10" --num-nodes "1" --network "default" --enable-cloud-logging --enable-cloud-monitoring \
  --maintenance-window "01:00" --node-labels=region=europe-west1,role=system
Run Code Online (Sandbox Code Playgroud)

为您的应用程序创建节点池:

gcloud container --project "my-project-id" node-pools create "frontend" \
      --cluster "app-europe" --zone "europe-west1-b" --machine-type "custom-2-2048" --image-type "COS" \
      --disk-size "10" --node-labels=region=europe-west1,role=frontend \
      --node-taints app=frontend:NoSchedule \
      --enable-autoscaling --num-nodes "1" --min-nodes="1" --max-nodes="3"
Run Code Online (Sandbox Code Playgroud)

然后在部署清单中的 pods 模板中添加nodeAffinitytolerations部分spec

  tolerations:
  - key: "app"
    operator: "Equal"
    value: "frontend"
    effect: "NoSchedule"
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: beta.kubernetes.io/instance-type
            operator: In
            values:
            - custom-2-2048
        - matchExpressions:
          - key: role
            operator: In
            values:
            - frontend
Run Code Online (Sandbox Code Playgroud)