标签
标签是一种简单却又功能强大的kubernetes特性,不仅可以组织pod,也可以组织所有其他的kubernetes资源,标签是可以附加到资源的任意键值对,用以选择具有该确切标签的资源,只要标签的key在资源内是唯一的,一个资源便可以拥有多个标签。
示例
创建pod时指定标签
# cat kubia.yml
apiVersion: v1
kind: Pod
metadata:
name: kubia-manual-v2
labels:
creation_method: manual
env: prod
spec:
containers:
- image: luksa/kubia
name: kubia
ports:
- containerPort: 8080
protocol: TCP
启动pod kubectl create -f .
查看标签
# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
kubia-manual-v2 1/1 Running 0 43m creation_method=manual,env=prod
将标签显示在列中
# kubectl get pod -L env,creation_method
NAME READY STATUS RESTARTS AGE ENV CREATION_METHOD
kubia-manual-v2 1/1 Running 0 45m prod manual
# kubectl label pod kubia-manual-v2 env=test --overwrite
pod/kubia-manual-v2 labeled
查看修改后的标签
# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
kubia-manual-v2 1/1 Running 0 46m creation_method=manual,env=test
# kubectl label pod kubia-manual-v2 create_time=2019
pod/kubia-manual-v2 labeled
查看新创建的标签
# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
kubia-manual-v2 1/1 Running 0 48m create_time=2019,creation_method=manual,env=test
# kubectl get pod -l env=dev
NAME READY STATUS RESTARTS AGE
producer-consumer 2/2 Running 4 16d
列出所有包含env值的pod
# kubectl get pod -l env
NAME READY STATUS RESTARTS AGE
kubia-manual-v2 1/1 Running 0 52m
producer-consumer 2/2 Running 4 16d
列出不包含某标签值的pod
# kubectl get pod -l '!create_time'
NAME READY STATUS RESTARTS AGE
producer-consumer 2/2 Running 4 16d
列出某个标签不包含某值的pod
# kubectl get pod -l env!=test
NAME READY STATUS RESTARTS AGE
producer-consumer 2/2 Running 4 16d
或者
v# kubectl get pod -l 'env notin (prod,dev)'
NAME READY STATUS RESTARTS AGE
kubia-manual-v2 1/1 Running 0 58m
列出某个标签包含某个值的pod
# kubectl get pod -l 'env in (test,dev)'
NAME READY STATUS RESTARTS AGE
kubia-manual-v2 1/1 Running 0 59m
producer-consumer 2/2 Running 4 16d
以上是或的关系,env这个标签或者为test,或者为dev
也可以设置多个条件来列出pod
# kubectl get pod -l 'env in (test,dev)',create_time=2019
NAME READY STATUS RESTARTS AGE
kubia-manual-v2 1/1 Running 0 62m
如果我们没有给node节点设置label,那么pod会由k8s进行调度,如果我们想让某一些pod运行到指定的nodes节点上时,标签选择器就可以派上用场了。 首先给node节点创建标签
# kubectl label node node1 server=backend
node/node1 labeled
查看node节点的标签
# kubectl get nodes -l server
NAME STATUS ROLES AGE VERSION
node1 Ready <none> 18d v1.15.3
将pod调度到指定节点
# cat nginx-backend.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-backend
spec:
nodeSelector:
server: 'backend'
containers:
- image: nginx:latest
name: nginx-backend
ports:
- containerPort: 80
protocol: TCP
启动pod kubectl create -f nginx-backend.yml
查看pod是否运行在指定节点
# kubectl get pod -o wide | grep nginx-backend
nginx-backend 1/1 Running 0 3m31s 192.168.166.151 node1 <none> <none>
当我们想删除一组带有指定标签的pod时
kubectl delete pod -l env=test