kubernetes-给节点打标签

kubernetes-给节点打标签

​ 你可以约束一个 Pod 只能在特定的 Node(s) 上运行,或者优先运行在特定的节点上。有几种方法可以实现这点,推荐的方法都是用标签选择器(nodeSelector)来进行选择。通常这样的约束不是必须的,因为调度器将自动进行合理的放置(比如,将 pod 分散到节点上,而不是将 pod 放置在可用资源不足的节点上等等),但在某些情况下,你可以需要更多控制 pod 停靠的节点,例如,确保 pod 最终落在连接了 SSD 的机器上,或者将来自两个不同的服务且有大量通信的 pod 放置在同一个可用区。

给节点打上标签:

# kubectl label nodes <node_name> key1=val1 key2=val2
# kubectl label nodes 10.2.2.123 key1=val1
# kubectl label nodes 10.2.2.123 key2=val2
# kubectl label nodes 10.2.2.123 key1=val1 key2=val2

删除节点某个标签:

# kubectl label nodes <node_name> key1- key2-
# kubectl label nodes 10.2.2.123 key1-

查询节点已有的标签:

# kubectl get node --show-labels=true

NAME         STATUS                     ROLES                  AGE    VERSION   LABELS
10.2.2.120   Ready,SchedulingDisabled   master                 4d1h   v1.13.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=10.2.2.120,kubernetes.io/role=master
10.2.2.121   Ready                      metallb-speaker,node   4d1h   v1.13.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=10.2.2.121,kubernetes.io/role=node,node-role.kubernetes.io/metallb-speaker=true
10.2.2.122   Ready                      metallb-speaker,node   4d1h   v1.13.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=10.2.2.122,kubernetes.io/role=node,node-role.kubernetes.io/metallb-speaker=true
10.2.2.123   Ready                      node                   45m    v1.13.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,key1=val1,key2=val2,kubernetes.io/hostname=10.2.2.123,kubernetes.io/role=node

把pod部署到指定标签(key1=val1 key2=val2)的节点:

 $ cat nginx.yaml 
 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        key1: val1
        key2: val2
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

其他:

我们在生产环境上,也应该给每个node打上label,所有pod都应该调度到你设置的label上。