我对k8s中的跑步者吊舱的吊舱调度有1个问题。正如我所看到的,在不同的工作期间,它会创建类似pod-xxxx-project-xxxx-concurrent的容器,并且该容器会动态创建。如何仅为此Pod(runner-xxxx-project-xxxx-concurrent)而不是Runner-gitlab-runner部署配置调度(nodeSelector)?
答案 0 :(得分:1)
首先,根据您安装主节点的方式,它们通常具有污点node-role.kubernetes.io/master:NoSchedule
,以避免调度吊舱。
$ kubectl describe nodes node1
Name: node1
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/hostname=node1
node-role.kubernetes.io/master=
Annotations: node.alpha.kubernetes.io/ttl=0
volumes.kubernetes.io/controller-managed-attach-detach=true
Taints: node-role.kubernetes.io/master:NoSchedule
因此,如果您的kubernetes安装符合要求,则无需使用nodeSelector
来设置将要安排Pod的节点(通常是一种不好的做法)。
第一个解决方案是在安装期间未完成的情况下污染主节点,使其不进行调度:
kubectl taint nodes node1 node-role.kubernetes.io/master:NoSchedule-
第二个解决方案:将标签设置为节点以使用nodeSelector
kubectl label nodes node1 gitlab-runner=true
并使用nodeSelector
向调度程序指示您想要带有特定标签的节点:
spec:
containers:
- [...]
nodeSelector:
gitlab-runner: "true"
如@Nicolas-pepinster所述,您可以在gitlab-runner(see doc)的[runners.kubernetes]
部分中设置标签。