[英]Allow scheduling of pods on Kubernetes master?
我使用通用安装脚本在裸机上的 CoreOS 上设置了 Kubernetes。 它运行当前的稳定版本 1298.6.0,Kubernetes 版本为 1.5.4。
我们希望有一个高度可用的 master 设置,但我们目前没有足够的硬件来专用三台服务器来仅作为 Kubernetes master 服务,所以我希望能够允许用户 pod 被安排在Kubernetes 大师。 我在 /etc/systemd/system/kubelet.service 中设置了 --register-schedulable=true 但它仍然显示为 SchedulingDisabled。
我尝试添加设置以将节点包含为工作人员,包括将工作人员 TLS 证书添加到 /etc/kubernetes/ssl,将这些设置添加到 kubelet.service,添加指向那些的 /etc/kubernetes/worker-kubeconfig.yaml certs,并将该信息添加到 /etc/kubernetes/manifests/kube-proxy.yaml。 我使用我现有的节点作为添加内容的模板。 这在主节点的主机名下注册了另一个节点,然后它和原始主节点都显示为 NotReady,SchedulingDisabled。
这个问题表明应该可以在主节点上调度 pod,但我几乎找不到关于这个主题的任何其他内容。
如果您使用的是 Kubernetes 1.7 及更高版本:
kubectl taint node mymasternode node-role.kubernetes.io/master:NoSchedule-
使用以下命令清除所有主控
kubectl taint nodes --all node-role.kubernetes.io/master-
一、获取master的名字
kubectl get nodes
NAME STATUS ROLES AGE VERSION
yasin Ready master 11d v1.13.4
我们可以看到有一个名为yasin
的节点,角色是master
。 如果我们想将它用作工人,我们应该运行
kubectl taint nodes yasin node-role.kubernetes.io/master-
对于在 AWS 上使用 kops 的任何人。 我想在 master 上启用 Pod 调度。
$ kubectl get nodes -owide
给了我这个输出:
NAME STATUS
...
...
ip-1**-**-**-***.********.compute.internal Ready node
ip-1**-**-**-***.********.master.internal Ready,SchedulingDisabled master
^^^^^^^^^^^^^^^^^^
ip-1**-**-**-***.********.compute.internal Ready node
...
...
和$ kubectl describe nodes ip-1**-**-**-***.********.master.internal
:
...
...
Taints: <none>
Unschedulable: true
... ^^^^
...
使用以下命令修补主节点:
$ kubectl patch node MASTER_NAME -p "{\"spec\":{\"unschedulable\":false}}"
为我工作,现在启用了 Pod 的调度。
参考: https ://github.com/kubernetes/kops/issues/639#issuecomment-287015882
我不知道为什么主节点显示为NotReady
; 它不应该。 尝试执行kubectl describe node mymasternode
来找出答案。
SchedulingDisabled
是因为主节点被dedicated=master:NoSchedule
污染
对所有主人执行此命令以删除污点:
kubectl taint nodes mymasternode dedicated-
要了解为什么这有效,请阅读taints 和 tolerations 。
kubectl taint node --all node-role.kubernetes.io/master:NoSchedule-
kubectl describe node | egrep -i taint
Taints: <none>
kubectl run -it busybox-$RANDOM --image=busybox --restart=Never -- date
这个答案是其他 SO 答案的组合,来自 Victor G、Aryak Sengupta 和其他人。
kubernetes 官方文档: node-role-kubernetes-io-master
所以对于 +v1.20 版本,解决方案是:
kubectl taint node <master-node> node-role.kubernetes.io/control-plane:NoSchedule- kubectl taint node <master-node> node-role.kubernetes.io/master:NoSchedule-
另一种列出节点中所有污点并清除受污染节点的方法。
root@lab-a:~# kubectl get nodes -o json | jq ".items[]|{name:.metadata.name, taints:.spec.taints}"
{
"name": "lab-a",
"taints": null
}
{
"name": "lab-b",
"taints": [
{
"effect": "NoSchedule",
"key": "node-role.kubernetes.io/master"
}
]
}
lab-a 没有任何污点。 所以我们不污染lab-b:
root@lab-a:~# k taint node lab-b node-role.kubernetes.io/master:NoSchedule-
node/lab-b untainted
在 ubuntu 中安装 jq: apt-get install jq
由于 Openshift 4.x CoreOs 直接集成在 Kubernetes 配置中(您可以通过这种方式使所有 master 可调度
# edit the field spec.mastersSchedulable to set a value true
$ oc patch schedulers.config.openshift.io cluster --type json \
-p '[{"op": "add", "path": "/spec/mastersSchedulable", "value": true}]'
或使用
oc edit schedulers.config.openshift.io cluster
并编辑该字段
spec:
mastersSchedulable: true
答案是
kubectl taint nodes --all node-role.kubernetes.io/master-
根据: https ://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#control-plane-node-isolation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.