car*_*ray 8 google-cloud-platform kubernetes google-kubernetes-engine
我在GKE k8s 1.9.4上有一个多区域测试设置。每个群集都具有:
kubemcisystem(1vCPU / 2GB RAM)frontend(2vCPU / 2GB RAM)backend(1vCPU / 600Mb RAM)所以这样的东西prometheus-operator,prometheus-server,custom-metrics-api-server并kube-state-metrics连接到一个节点system的标签。
前端和后端Pod分别连接到带有frontend和backend标签的节点(单个Pod到单个节点),请参阅podantiaffinity。
自动缩放backend或frontend缩小容器后,它们的节点将保持不变,因为似乎来自kube-system命名空间的容器(即)heapster。这会导致以下情况:带有frontend/ backend标签的节点在缩减规模后仍保持活动状态,即使没有后端或前端吊舱也是如此。
问题是:如何避免kube-system在节点上创建用于服务应用程序的Pod(如果这确实是理智的,并且可能的话)?
猜猜,我应该对backend和frontend节点使用污点和容差,但是如何将其与HPA和群集内节点自动缩放器结合使用?
似乎污点和容忍度可以解决问题。
创建一个带有默认节点池的集群(用于监控和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 模板中添加nodeAffinity和tolerations部分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)
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |