kubernetes 资源的label(标签)
一、简介
label是标签的意思,一对 key/value ,被关联到对象上,k8s中的资源对象大都可以打上标签,如Node、Pod、Service 等
一个资源可以绑定任意多个label,k8s 通过 Label 可实现多维度的资源分组管理,后续可通过 Label Selector 查询和筛选拥有某些 Label 的资源对象
二、Nodes添加删除label及使用
2.1、node节点ROLES属性(特殊标签)
在查看nodes信息时,ROLES标记了一些节点的身份属性,这个ROLES身份属性其实可以理解成给nodes节点打了个特殊标签。
#roles显示为node
[root@mayi-ops ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
uat-k8s-node1 Ready <none> 89m v1.18.8
uat-k8s-master01 Ready master 45h v1.18.6
#添加删除ROLES标记,命令使用格式:
kubectl label nodes 节点名字 node-role.kubernetes.io/ROLES属性名称=或-
最后面的=号表示在原来ROLES基础上再增加一个,-号就表示删除某个ROLES
//例如, 首次添加ROLES
[root@mayi-ops ~]# kubectl label nodes uat-k8s-node1 node-role.kubernetes.io/work=
[root@mayi-ops ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
uat-k8s-node1 Ready worker 89m v1.18.8
uat-k8s-master01 Ready master 45h v1.18.6
#增加ROLES
[root@mayi-ops ~]# kubectl label nodes uat-k8s-node1 node-role.kubernetes.io/work1=
[root@mayi-ops ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
uat-k8s-node1 Ready work,worker1 89m v1.18.8
uat-k8s-master01 Ready master 45h v1.18.6
#删除label
[root@mayi-ops ~]# kubectl lable node k8s-node1 node-role.kubernetes.io/work1-
[root@mayi-ops ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
uat-k8s-node1 Ready work 89m v1.18.8
uat-k8s-master01 Ready master 45h v1.18.6
2.2、Node添加label
# 查看所有node 标签
[root@mayi-ops ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
uat-k8s-master01 Ready master 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/master=
uat-k8s-node1 Ready work 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-node1,kubernetes.io/os=linux,kubernetes=true,node-role.kubernetes.io/work=
#添加标签
[root@mayi-ops ~]# kubectl label nodes node01 disktype=ssdnode
node/uat-k8s-node1 labeled
[root@mayi-ops ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
uat-k8s-master01 Ready master 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/master=
uat-k8s-node1 Ready work 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssdnode,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-node1,kubernetes.io/os=linux,kubernetes=true,node-role.kubernetes.io/work=
# 删除标签
[root@mayi-ops ~]# kubectl label nodes uat-k8s-node1 disktype-
node/uat-k8s-node1 labeled
[root@mayi-ops ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
uat-k8s-master01 Ready master 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/master=
uat-k8s-node1 Ready work 495d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=uat-k8s-node1,kubernetes.io/os=linux,kubernetes=true,node-role.kubernetes.io/work=
2.3、根据Node label标签调度pod
# 比如可以将Nginx或者Mysql调度到硬盘为SSD的机器上
[root@mayi-ops ~]# vim nginx.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
****labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
#选择标签
nodeSelector:
#key1: val1
#key2: val2
disktype: ssdnode
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: nginx
protocol: TCP
targetPort: 80
selector:
app: nginx #根据app标签关联pod
[root@mayi-ops ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-7bf8bf99d9-b4g5v 1/1 Running 0 38s 10.100.59.16 uat-k8s-node1 <none> <none>
三、Pod的label及使用
3.1、常用命令
# 查看pod的标签
[root@mayi-ops ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-7bf8bf99d9-b4g5v 1/1 Running 0 14m app=nginx,pod-template-hash=7bf8bf99d9
#指定标签查询资源
[root@mayi-ops ~]# kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-7bf8bf99d9-b4g5v 1/1 Running 0 13m
# 指定标签查询资源,并显示标签信息
[root@mayi-ops ~]# kubectl get pods -l app=nginx --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-7bf8bf99d9-b4g5v 1/1 Running 0 14m app=nginx,pod-template-hash=7bf8bf99d9
#根据label 查看pod,svc资源
[root@mayi-ops ~]# kubectl get pod,svc -l app=nginx
NAME READY STATUS RESTARTS AGE
pod/nginx-7bf8bf99d9-b4g5v 1/1 Running 0 22m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx ClusterIP 10.99.117.68 <none> 80/TCP 2m15s
#根据Label删除资源
[root@mayi-ops ~]# kubectl delete pod,svc -l app=nginx
pod "nginx-7bf8bf99d9-b4g5v" deleted
service "nginx" deleted
四、Service 标签使用
4.1、常用命令
# 查看指定service 选择的标签
[root@mayi-ops ~]# kubectl get service nginx --show-labels
#通过yaml 方式查看service选择的标签
[root@mayi-ops ~]# kubectl get service nginx -o yaml|grep -A 2 selector
selector:
app: nginx
sessionAffinity: None
请先 后发表评论~