默认情况下,出于安全原因,您的Kubernetes集群不会在控制平面节点上调度Pods,建议您保持这种方式,但是对于测试环境,您可能希望在控制平面节点上调度Pods以最大程度地利用资源。
先决操作 如果您希望能够在Kubernetes控制平面节点上调度Pods,则需要在主节点上删除taint: kubectl taint nodes --all node-role.kubernetes.io/master- 参考:安装及使用kubectl、kubectx和kubens轻松管理多个Kubernetes集群。 输出将类似于: node/k8smaster01.computingforgeeks.com 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 taint,这意味着调度程序将能够在任何地方调度Pods。
在Kubernetes控制平面节点上测试Pods调度 我有一个包含三个工作程序节点和一个控制平面节点的群集: $ kubectl get nodes
创建一个演示名称空间: kubectl create namespace demo 将创建具有5个副本的部署: $ vim nginx-deployment.yaml 它具有以下数据: --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: demo labels: app: nginx color: green spec: replicas: 5 selector: matchLabels: app: nginx template: metadata: labels: app: nginx color: green spec: containers: - name: nginx image: nginx:latest imagePullPolicy: IfNotPresent ports: - name: http protocol: TCP containerPort: 80 resources: limits: cpu: "200m" memory: "256Mi" requests: cpu: 100m memory: 128Mi --- apiVersion: v1 kind: Service metadata: annotations: name: nginx-demo-service namespace: demo spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: nginx sessionAffinity: None type: NodePort 应用: $ kubectl apply -f nginx-deployment.yaml 检查是否将Pods调度到控制节点平面: $ kubectl get pods -n demo -o wide
我们可以看到主节点中有一个pods,确认服务已启动: $ kubectl get svc -n demo
由于我们正在使用NodePort,因此我们应该能够在31098端口上的任何群集节点IP上访问服务:
现在,我们可以做一下清理: $ kubectl delete -f nginx-deployment.yaml deployment.apps "nginx" deleted service "nginx-service" deleted $ kubectl get pods,svc -n demo No resources found in demo namespace. 注:这就是如何在Kubernetes控制平面节点上调度Pods的全部内容。
相关主题 |