node标签设置后,pod可以根据要求让pod调度到想要的节点上运行,或者不在某节点运行。或者确保pod调度到具有高性能(比如ssd的机器)的节点山上。

展示节点标签

  1. [root@k8s-master01 springboot-mysql]# kubectl get node --show-labels=true
  2. NAME STATUS ROLES AGE VERSION LABELS
  3. k8s-master01 Ready master 28d v1.17.3 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=
  4. k8s-node01 Ready <none> 28d v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux
  5. k8s-node02 Ready <none> 19h v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux
  6. k8s-node03 NotReady <none> 19h v1.17.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node03,kubernetes.io/os=linux

添加节点标签

kubectl label nodes k8s-node01 area=bejing
kubectl label nodes k8s-node02 area=shanghai

查看标签

[root@k8s-master01 springboot-mysql]# kubectl get node --show-labels=true
NAME           STATUS     ROLES    AGE   VERSION   LABELS
k8s-master01   Ready      master   28d   v1.17.3   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-node01     Ready      <none>   28d   v1.17.3   area=bejing,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>   19h   v1.17.3   area=shanghai,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     NotReady   <none>   19h   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node03,kubernetes.io/os=linux

把pod调度到指定标签

启动一个deployment副本数为2,让pod调度到node1

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-select-node1
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        node: node1
      containers:
      - name: nginx-select-node1
        image: nginx:latest
        ports:
        - containerPort: 80

参考文献

k8s-节点打标签