k8s入门_label标签、nodeSelector


什么是label

Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node, RC(ReplicationController)/RS(ReplicaSet)等。
一个资源如果需要找到其它关联的资源比如rc匹配pod、deployment匹配rs都是通过selector选择对应的lable达到关联其它对象的目的。

k8s对象的label在资源的metadata定义,例如之前学习过的deplyment定义文件

 

标签的增删改查

label查询

#查询某一类资源或者指定某个资源查询其label信息
[root@k8s-01 ~]# kubectl get deployment --show-labels
NAME              READY   UP-TO-DATE   AVAILABLE   AGE     LABELS
nginx-d           3/3     3            3           2d21h   app=nginx
wordpress         1/1     1            1           49d     app=wordpress,tier=frontend
wordpress-mysql   1/1     1            1           49d     app=wordpress,tier=mysql
You have new mail in /var/spool/mail/root
[root@k8s-01 ~]# kubectl get deployment nginx-d --show-labels
NAME      READY   UP-TO-DATE   AVAILABLE   AGE     LABELS
nginx-d   3/3     3            3           2d21h   app=nginx

[root@k8s-01 ~]# kubectl get pods --show-labels              
NAME                               READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-659bf7c684-22nc8           1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684
nginx-d-659bf7c684-9l9jk           1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684
nginx-d-659bf7c684-tmtkl           1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684
wordpress-69c467c658-r7c45         1/1     Running   11         49d     app=wordpress,pod-template-hash=69c467c658,tier=frontend-pod
wordpress-mysql-6c696cddc9-r6dvx   1/1     Running   15         42d     app=wordpress,pod-template-hash=6c696cddc9,tier=mysql-pod
[root@k8s-01 ~]# kubectl get pods nginx-d-659bf7c684-22nc8 --show-labels
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-659bf7c684-22nc8   1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684

label的增加  删除  修改

#指定对象label的添加和删除,添加使用key=value,删除keu-,修改key=value --overwrite
[root@k8s-01 ~]# kubectl get pods nginx-d-659bf7c684-22nc8 --show-labels
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-659bf7c684-22nc8   1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684
[root@k8s-01 ~]# 
[root@k8s-01 ~]# kubectl label pods nginx-d-659bf7c684-22nc8 test=label
pod/nginx-d-659bf7c684-22nc8 labeled
[root@k8s-01 ~]# kubectl get pods nginx-d-659bf7c684-22nc8 --show-labels
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-659bf7c684-22nc8   1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684,test=label
[root@k8s-01 ~]# kubectl label pods nginx-d-659bf7c684-22nc8 test-
pod/nginx-d-659bf7c684-22nc8 labeled
[root@k8s-01 ~]# kubectl get pods nginx-d-659bf7c684-22nc8 --show-labels
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-659bf7c684-22nc8   1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684
[root@k8s-01 ~]# kubectl label pods nginx-d-659bf7c684-22nc8 test=label1
pod/nginx-d-659bf7c684-22nc8 labeled
[root@k8s-01 ~]# kubectl get pods nginx-d-659bf7c684-22nc8 --show-labels
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-659bf7c684-22nc8   1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684,test=label1
[root@k8s-01 ~]# kubectl label pods nginx-d-659bf7c684-22nc8 test=label2 
error: 'test' already has a value (label1), and --overwrite is false
[root@k8s-01 ~]# kubectl label pods nginx-d-659bf7c684-22nc8 test=label2 --overwrite
pod/nginx-d-659bf7c684-22nc8 labeled
[root@k8s-01 ~]# kubectl get pods nginx-d-659bf7c684-22nc8 --show-labels 
NAME                       READY   STATUS    RESTARTS   AGE     LABELS
nginx-d-659bf7c684-22nc8   1/1     Running   1          2d20h   app=nginx,pod-template-hash=659bf7c684,test=label2

一般建议k8s对象的label在定义文件中进行定义和修改

 

nodeselector

nodeselector是pod的专有的选择器,在资源定义文件中可以指定pod在哪些node节点上创建。不配置该参数的话k8s会根据自身算法选择相应的node来部署pod

不配置nodeselector情况下pod的分布,如果有多个node则pod一定分布在多个pod上。

[root@k8s-01 ~]# kubectl get deployment -o wide
NAME              READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES       SELECTOR
nginx-d           3/3     3            3           2d21h   nginx        nginx:1.18   app=nginx
[root@k8s-01 ~]# kubectl get pod -o wide|grep nginx-d
nginx-d-659bf7c684-22nc8           1/1     Running   1          2d21h   10.244.2.52   k8s-03   <none>           <none>
nginx-d-659bf7c684-9l9jk           1/1     Running   1          2d21h   10.244.2.53   k8s-03   <none>           <none>
nginx-d-659bf7c684-tmtkl           1/1     Running   1          2d21h   10.244.1.71   k8s-02   <none>           <none>

查询环境node信息,给node打上label

[root@k8s-01 ~]# kubectl get nodes --show-labels
NAME     STATUS   ROLES    AGE   VERSION   LABELS
k8s-01   Ready    master   61d   v1.15.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-01,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-02   Ready    <none>   61d   v1.15.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-02,kubernetes.io/os=linux
k8s-03   Ready    <none>   61d   v1.15.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-03,kubernetes.io/os=linux
[root@k8s-01 ~]# kubectl label nodes k8s-02  selectortest=k8s-02
node/k8s-02 labeled
[root@k8s-01 ~]# kubectl get nodes --show-labels                
NAME     STATUS   ROLES    AGE   VERSION   LABELS
k8s-01   Ready    master   61d   v1.15.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-01,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-02   Ready    <none>   61d   v1.15.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-02,kubernetes.io/os=linux,selectortest=k8s-02
k8s-03   Ready    <none>   61d   v1.15.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-03,kubernetes.io/os=linux

deployment定义文件中pod部分使用nodeselector指定node创建Pod

#pod对象定义中指定nodeSelector后pod调度的效果
[root@k8s-01 ~]# kubectl get deployment
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
wordpress         1/1     1            1           49d
wordpress-mysql   1/1     1            1           49d
[root@k8s-01 ~]# kubectl get deployment|grep nginx
[root@k8s-01 ~]# kubectl create -f deployment_demo.yml 
deployment.apps/nginx-d created
[root@k8s-01 ~]# kubectl get deployment|grep nginx     
nginx-d           0/3     3            0           3s
[root@k8s-01 ~]# kubectl get pods -o wide|grep nginx-d
nginx-d-8668fb97b9-7tw25           1/1     Running             0          43s   10.244.1.75   k8s-02   <none>           <none>
nginx-d-8668fb97b9-9hfmb           1/1     Running             0          43s   10.244.1.74   k8s-02   <none>           <none>
nginx-d-8668fb97b9-vlzgt           0/1     ContainerCreating   0          43s   <none>        k8s-02   <none>           <none>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM