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上。