我使用generic install scripts在裸机上在CoreOS上设置Kubernetes。它使用Kubernetes版本1.5.4运行当前稳定版本1298.6.0。
我们希望拥有一个高度可用的主设置,但我们目前没有足够的硬件专门用三台服务器作为Kubernetes主设备,所以我希望能够允许要在Kubernetes master上安排的用户pod。我在/etc/systemd/system/kubelet.service中设置了--register-schedulable = true,但它仍然显示为SchedulingDisabled。
我尝试添加设置以将节点包含为worker,包括将worker TLS证书添加到/ etc / kubernetes / ssl,将这些设置添加到kubelet.service,添加/etc/kubernetes/worker-kubeconfig.yaml指向这些证书,并将该信息添加到/etc/kubernetes/manifests/kube-proxy.yaml。我使用现有节点作为添加内容的模板。这在master的主机名下注册了另一个节点,然后它和原始主节点都显示为NotReady,SchedulingDisabled。
This question表示主节点上的调度窗口应该是可能的,但我几乎找不到任何关于该主题的内容。
答案 0 :(得分:25)
如果您使用的是Kubernetes 1.7及以上版本:
kubectl taint node mymasternode node-role.kubernetes.io/master:NoSchedule-
答案 1 :(得分:4)
首先,获取母版的名称
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-
答案 2 :(得分:3)
我不知道为什么主节点显示为NotReady
;它不应该。尝试执行kubectl describe node mymasternode
以查找。
SchedulingDisabled
是因为主节点被污染并带有dedicated=master:NoSchedule
对所有主人执行此命令以消除污点:
kubectl taint nodes mymasternode dedicated-
要理解为何有效,请阅读taints and tolerations。
答案 3 :(得分:1)
适用于在AWS上使用kops的任何人。我想在主服务器上启用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
答案 4 :(得分:1)
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
此答案是Victor G,Aryak Sengupta等人的其他SO答案的组合。
答案 5 :(得分:0)
使用以下命令取消所有母版的污染
kubectl taint nodes --all node-role.kubernetes.io/master-
答案 6 :(得分:0)
另一种列出节点中所有污点并取消污点的方法。
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
答案 7 :(得分:0)
由于Openshift 4.x CoreO是直接集成在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
答案 8 :(得分:0)
答案是
kubectl taint nodes --all node-role.kubernetes.io/master-