先决条件:
最新稳定值为1.14 *或1.15 *的GKE
标记的节点池,由Deployment Manager创建
在RWO模式下需要持久性卷的应用程序
每个应用程序部署都不同,应与其他应用程序同时运行,并应在每1个节点1个pod中运行。
每个吊舱没有副本,应该支持滚动更新(按舵机)。
设计:
集群和节点池的部署管理器模板,
节点池带有标签,每个节点具有相同的标签(初始创建后)
每个部署到新名称空间的新应用,什么都有唯一的服务地址
每个新版本都可以基于节点标签(可以在安装或更新应用期间由kubectl更改节点标签)来进行“新安装”或“更新现有版本”
问题:
如果从浏览器控制台界面创建了群集,那将正常工作。如果集群是通过GCP部署创建的,则错误(即使在未连接驱动器的情况下,也在k8s文档的nginx模板上进行了节点亲和性测试)
Warning FailedScheduling 17s (x2 over 17s) default-scheduler 0/2 nodes are available: 2 node(s) didn't match node selector.
Normal NotTriggerScaleUp 14s cluster-autoscaler pod didn't trigger scale-up (it wouldn't fit if a new node is added): 2 node(s) didn't match node selector
出什么问题了?部署管理器会创建不良标签?
affinity used:
# affinity:
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: node/nodeisbusy
# operator: NotIn
# values:
# - busy
答案 0 :(得分:1)
GCP提供了两种方法来控制仅限于一个节点池或一组节点的部署。
下面将解释#1方法-nodeselector
和tolerations
的组合以实现对部署以及自动缩放的限制。
这里是一个例子:
让我们说一个集群cluster-x
可用。
我们说它包含两个节点池
project-a-node-pool
-配置为自动缩放1到2个节点。project-b-node-pool
-配置为自动缩放1到3个节点。 project-a-node-pool
中的每个节点都将包含标签。默认情况下已配置。
cloud.google.com/gke-nodepool:project-a-node-pool
project-b-node-pool
中的每个节点都将包含标签。默认情况下已配置。
cloud.google.com/gke-nodepool:project-b-node-pool
将Taints添加到每个节点池。作为示例命令:
gcloud容器节点池创建项目节点池--cluster cluster-x
--node-taints project = a:NoExecute
gcloud容器节点池创建project-b-node-pool --cluster cluster-x
--node-taints project = b:NoExecute
Snapshot of Taints configured for project-a-node-pool
将与tolerations
匹配的taint
添加到部署YAML文件中。
tolerations:
- key: "project"
operator: "Equal"
value: "a" (or "b")
effect: "NoExecute"
尝试进行新的部署,并根据异味/公差对检查每个部署是否都在进行。值为toleration
为a
的部署应转到project-a-node-pool
。值为toleration
为b
的部署应转到project-b-node-pool
。
一旦在任何一个节点池中达到足够的内存/ cpu请求,较新的部署都应触发该节点池中的自动扩展。
答案 1 :(得分:0)
感谢您链接到Google支持错误跟踪器,最好直接询问他们。
关于节点的标签-确保它们具有标签。如果标签是由Deployment Manager创建的,则该标签不适用于调度程序。