简介
此文主要讲述如何将Pod分配到指定Node节点
备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。
给Node添加标签
1、查看当前集权中,所有node的标签
# kubectl get nodes --show-labels
输出结果如下:
NAME STATUS ROLES AGE VERSION LABELS
k8s-master01 Ready master 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-master02 Ready master 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master02,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-master03 Ready master 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master03,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node01 Ready <none> 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux
k8s-node02 Ready <none> 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux
k8s-node03 Ready <none> 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node03,kubernetes.io/os=linux
k8s-node04 Ready <none> 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node04,kubernetes.io/os=linux
2、选择一个node节点,打上labels
# kubectl label nodes k8s-node04 disktype=ssd
3、查看node上的标签
# kubectl get nodes k8s-node04 --show-labels
输出如下:
NAME STATUS ROLES AGE VERSION LABELS
k8s-node04 Ready <none> 25d v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node04,kubernetes.io/os=linux
从上输出结果中看出,k8s-node04
节点的labels
打上了disktype=ssd
标签
创建一个调度到指定Node的Pod
此Pod配置文件描述了具有节点选择器(磁盘类型为ssd)的Pod。 这意味着,将在具有disktype = ssd
标签的节点上调度Pod。文件:pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
创建Pod
# kubectl apply -f /root/k8s-example/pods/pod-nginx.yaml
查看Pod详情
# kubectl get pods -o wide
从输出结果看,该Pod已被调度到指定的k8s-node04
上
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 107s 100.88.217.86 k8s-node04 <none> <none>
创建一个调度到指定Node的Pod
也可以用nodeName
选择调度到指定Node节点上。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeName: k8s-node1
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
总结
1、Pod调度到指定Node上有两种方法:
- node打上labels,通过
nodeSelect
调度到含有指定lables
的Node上 - 用
nodeName
指定Node的名称。