Kubernetes實戰(十五)-標籤選擇器(Label)

在某些特殊情況下,需要將某些服務固定在一臺宿主機上, 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)介紹完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章