在某些特殊情況下,需要將某些服務固定在一臺宿主機上, k8s可以使用label給node節點打上標籤來滿足這種需求。
1、添加Label
# 語法
kubectl label nodes <node-name> <label-key>=<label-value>
# 查看現有node及label
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master,node-role.kubernetes.io/master=
node01 Ready <none> 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node01
node02 Ready <none> 6d19h v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node02
# 添加一個key爲env和value爲dev的label
[root@master ~]# kubectl label nodes dev env=dev
node/node01 labeled
# 查看是否被添加
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master,node-role.kubernetes.io/master=
node01 Ready <none> 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=dev,kubernetes.io/hostname=node01
2、刪除Label
# 語法
kubectl label nodes <node-name> <label-key>-
# 刪除key爲disktype的label
[root@master ~]# kubectl label nodes dev env-
node/node01 labeled
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master,node-role.kubernetes.io/master=
node01 Ready <none> 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node01
node02 Ready <none> 6d19h v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node02
3、修改Label
#語法: 需要加上--overwrite參數:
kubectl label nodes <node-name> <label-key>=<label-value> --overwrite
[root@master ~]# kubectl label nodes dev env=dev
node/node01 labeled
[root@master ~]# kubectl label nodes dev env=test --overwrite
node/node01 labeled
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=master,node-role.kubernetes.io/master=
node01 Ready <none> 54d v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=test,kubernetes.io/hostname=node01
node02 Ready <none> 6d19h v1.13.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node02
4、Pod選擇Label
apiVersion: apps/v1
kind: Deployment
metadata:
name: openailab-application-gateway
namespace: oas-dev
labels:
name: openailab-application-gateway
spec:
replicas: 1
selector:
matchLabels:
name: openailab-application-gateway
template:
metadata:
labels:
name: openailab-application-gateway
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env
operator: In
values:
- dev
containers:
- name: openailab-application-gateway
image: 10.12.1.202:8088/oascloud/openailab-application-gateway:latest
command: ["sh","-c","java -server -Xms256m -Xmx2048m -Djava.io.tmpdir=/var/tmp -Duser.timezone=Asia/Shanghai -jar openailab-application-gateway-*.jar --server.port=30003 --spring.profiles.active=remote"]
ports:
- containerPort: 30003
到此 標籤選擇器(Label)介紹完成。