默认情况下,出于安全原因, Kubernetes 集群不会在主节点上调度 pod。
建议保持这种方式,但对于测试环境,可能希望在主节点上调度 Pod 以最大限度地利用资源。
如果希望能够在 Kubernetes 主节点上调度 pod,则需要移除主节点上的一个污点(taint)。
查看节点信息:
$ kubectl describe nodes k8s-master-01 | grep Taint Taints: node-role.kubernetes.io/master:NoSchedule
主节点(master)属性中node-role.kubernetes.io/master:NoSchedule表示主节点不调度pod。
通过如下命令调整:
$ kubectl taint nodes --all node-role.kubernetes.io/master- node/k8s-master-01 untainted taint "node-role.kubernetes.io/master" not found taint "node-role.kubernetes.io/master" not found taint "node-role.kubernetes.io/master" not found
这将从具有它的任何节点(包括主节点)中删除 node-role.kubernetes.io/master 污点,这意味着调度程序将能够在任何地方调度 pod。
示例集群有一个包含三个工作节点和一个主节点的集群。
$ kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME k8s-master-01 Ready control-plane,master 4h20m v1.23.2 192.168.1.140新建命名空间testUbuntu 20.04.3 LTS 5.4.0-96-generic containerd://1.4.12 k8s-worker-01 Ready 3h28m v1.23.2 192.168.1.141 Ubuntu 20.04.3 LTS 5.4.0-96-generic containerd://1.4.12 k8s-worker-02 Ready 3h20m v1.23.2 192.168.1.142 Ubuntu 20.04.3 LTS 5.4.0-96-generic containerd://1.4.12 k8s-worker-03 Ready 153m v1.23.2 192.168.1.143 Ubuntu 20.04.3 LTS 5.4.0-96-generic containerd://1.4.12
kubectl create namespace test部署应用
将创建一个包含 4 个副本的部署。
tee nginx-deployment.yaml<部署应用:
kubectl apply -f nginx-deployment.yaml检查是否有 Pod 调度到主节点$ kubectl get pods -n test -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-59d7db4f6f-cvbbf 1/1 Running 0 2m49s 10.244.118.69 k8s-worker-02nginx-59d7db4f6f-fpt4v 1/1 Running 0 2m49s 10.244.36.196 k8s-worker-01 nginx-59d7db4f6f-sql95 1/1 Running 0 2m49s 10.244.151.135 k8s-master-01 nginx-59d7db4f6f-v85wd 1/1 Running 0 2m49s 10.244.7.129 k8s-worker-03 可以看到主节点中有一个 pod在运行。
确认服务是否已上线$ kubectl get svc -n test NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-test-service NodePort 10.98.13.21080:32001/TCP 3m14s 由于使用的是 NodePort,通过http://<任意节点IP>:32001访问。
$ curl 192.168.1.140:32001 $ curl 192.168.1.141:32001 $ curl 192.168.1.142:32001 $ curl 192.168.1.143:32001清理示例Welcome to nginx! Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
$ kubectl delete -f nginx-deployment.yaml deployment.apps "nginx" deleted service "nginx-service" deleted $ kubectl get pods,svc -n test No resources found in test namespace. $ kubectl delete ns test namespace "test" deleted



