如何在Kubernetes控制平面(主)节点上调度Pod
时间:2020-02-23 14:31:38 来源:igfitidea点击:
默认情况下,出于安全原因,Kubernetes集群不会在控制平面节点上调度Pod。建议我们保持这种方式,但是对于测试环境,我们可能希望在控制平面节点上安排Pod以最大程度地利用资源。
如果我们希望能够在Kubernetes控制平面节点上调度Pod,则需要在主节点上删除污点。
kubectl taint nodes --all node-role.kubernetes.io/master
输出将类似于:
node/k8smaster01.theitroad.local 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。
在Kubernetes控制平面节点上测试Pod调度
我有一个包含三个工作程序节点和一个控制平面节点的群集。
$kubectl get nodes NAME STATUS ROLES AGE VERSION k8smaster01.theitroad.local Ready master 12h v1.17.0 k8snode01.theitroad.local Ready <none> 12h v1.17.0 k8snode02.theitroad.local Ready <none> 12h v1.17.0 k8snode03.theitroad.local Ready <none> 9h v1.17.0
创建一个演示名称空间:
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
检查是否将Pod调度到控制节点平面。
$kubectl get pods -n demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-675bf5bc87-666jg 1/1 Running 0 17m 192.168.213.131 k8snode01.theitroad.local nginx-675bf5bc87-mc6px 1/1 Running 0 17m 192.168.94.13 k8smaster01.theitroad.local nginx-675bf5bc87-v5q87 1/1 Running 0 17m 192.168.144.129 k8snode03.theitroad.local nginx-675bf5bc87-vctqm 1/1 Running 0 17m 192.168.101.195 k8snode02.theitroad.local nginx-675bf5bc87-w5pmh 1/1 Running 0 17m 192.168.213.130 k8snode01.theitroad.local
我们可以看到主节点中有一个pod。确认服务已启动。
$kubectl get svc -n demo NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service NodePort 10.96.184.67 <none> 80:31098/TCP 21m
由于使用的是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.