我正在尝试学习 k8s,而且我碰巧可以访问 OpenStack 云,所以我决定尝试在其上安装 k8s,如下所示本维基到目前为止,
我能够初始化集群、安装 weave CNI、连接外部工作器并安装 OpenStack 云控制器管理器。根据上述 Wiki,现在我应该等待 kube-system 命名空间中的所有 pod 运行。我被困住了核心域名豆荚虽然...他们不会从待办的状态。
从 pod 的描述中我可以看到我的问题是掌握节点仍然有以下污点:
node-role.kubernetes.io/master:NoSchedule
当我检查节点的状态时,一切似乎正常:
ubuntu@master-node-01:~$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master-node-01 Ready master 10h v1.17.0 10.99.53.6 <none> Ubuntu 18.04.5 LTS 4.15.0-143-generic docker://20.10.2
worker-node-01 Ready <none> 10h v1.17.0 10.99.53.5 <none> Ubuntu 18.04.5 LTS 4.15.0-143-generic docker://20.10.2
所有 pod(coredns 除外)运行良好:
ubuntu@master-node-01:~$ kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-6955765f44-g2jnm 0/1 Pending 0 10h <none> <none> <none> <none>
kube-system coredns-6955765f44-wj7xb 0/1 Pending 0 10h <none> <none> <none> <none>
kube-system etcd-master-node-01 1/1 Running 0 11h 10.99.53.6 master-node-01 <none> <none>
kube-system kube-apiserver-master-node-01 1/1 Running 0 11h 10.99.53.6 master-node-01 <none> <none>
kube-system kube-controller-manager-master-node-01 1/1 Running 0 11h 10.99.53.6 master-node-01 <none> <none>
kube-system kube-proxy-8s8r9 1/1 Running 0 10h 10.99.53.5 worker-node-01 <none> <none>
kube-system kube-proxy-vtgnz 1/1 Running 0 10h 10.99.53.6 master-node-01 <none> <none>
kube-system kube-scheduler-master-node-01 1/1 Running 0 11h 10.99.53.6 master-node-01 <none> <none>
kube-system openstack-cloud-controller-manager-dtczj 1/1 Running 0 10h 10.99.53.6 master-node-01 <none> <none>
kube-system weave-net-2z5n7 2/2 Running 2 10h 10.99.53.5 worker-node-01 <none> <none>
kube-system weave-net-tm9p4 2/2 Running 1 10h 10.99.53.6 master-node-01 <none> <none>
我在 pod 的日志中发现任何可疑的东西。
我正在使用的 OpenStack 没有安装 Octavia(Wiki 说它需要设置 LB,但我的问题似乎与此无关)。
如果这里有人能帮我找到调查(并最终解决)这个问题的方法,我将不胜感激。谢谢。
答案1
看起来问题taints
。您可以尝试用以下几种方法解决该问题:
- 消除污点:
kubectl taint nodes $(hostname) node-role.kubernetes.io/master:NoSchedule-
- 编辑节点配置并注释掉污点部分:
kubectl edit node <node_name>
评论后您需要更新节点。
- 在主节点上进行调度而不删除污点:
apiVersion: extensions/v1beta1
kind: Deployment
...
spec:
...
spec:
...
tolerations:
- key: "node-role.kubernetes.io/master"
effect: "NoSchedule"
operator: "Exists"
- 这文档说这个解决方案也应该有效:
kubectl taint nodes $(kubectl get nodes --selector=node-role.kubernetes.io/master | awk 'FNR==2{print $1}') node-role.kubernetes.io/master-