Kubernetes之给节点打标签
LiuSw Lv6

Kubernetes之给节点打标签

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

给节点打上标签:

1
2
3
4
5
6
7
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

删除节点某个标签:

1
2
3
kubectl label nodes <node_name> key1- key2-

kubectl label nodes 10.2.2.123 key1-

查询节点已有的标签:

1
2
3
4
5
6
7
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)的节点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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:

 评论