label 和 annotation
label
label的作用:方便识别和选择,就像我们把一个商品打上标签一样。
label作用范围: node pod deployment service resources
常见标签规范:
版本标签:"release":"stable","release":"canary","release":"beta"。
环境标签:"environment":"dev","environment":"qa","environment":"production"
应⽤标签:"app":"ui","app":"as","app":"pc","app":"sc"。
架构层级标签:"tier":"frontend","tier":"backend","tier":"cache"。
分区标签:"partition":"customerA","partition":"customerB"。
品控级别标签:"track":"daily","track":"weekly"
示例一:给node 添加label
kubectl label node hdss7-22.host.com disktype=ssd --overwrite
kubectl label node hdss7-22.host.com disktype-
# 给node打上master角色标签
kubectl label node allinone kubernetes.io/role=master --overwrite
kubectl label node allinone node-role.kubernetes.io/master="" --overwrite
# 给node打上node角色标签
kubectl label node allinone kubernetes.io/role=node --overwrite
kubectl label node allinone node-role.kubernetes.io/node='' --overwrite
# 添加其他标签
kubectl label node allinone node-role.kubernetes.io/aa=''
示例二:给pod 添加label
kubectl run test1 --image=alpine --labels=env=pro -- sleep 1000
kubectl label pod test1 tier=frontend
按照label查询资源
kubectl get pod --show-labels
# 展示key为tier的pod 标签
kubectl get pod -L tier
#
kubectl get pods -l env=pro,tier=frontend
kubectl get pods -l 'env in (production),tier in (frontend)'
kubectl get pods -l 'env in (production, qa)'
kubectl get pods -l 'env,environment notin (frontend)'
annotation
annotation 和label功能类似,在开源插件中常常看到annotation的妙用。
示例一:记录声明式文件
kubectl run test2 --image=alpine --restart=Never --save-config -- sleep 100
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"kind":"Pod","apiVersion":"v1","metadata":{"name":"test2","creationTimestamp":null,"labels":{"run":"test2"}},"spec":{"containers":[{"name":"test2","image":"alpine","args":["sleep","100"],"resources":{}}],"restartPolicy":"Never","dnsPolicy":"ClusterFirst"},"status":{}}
示例二:记录陈述式命令
#Flag --record has been deprecated, --record will be removed in the future
kubectl run test3 --image=alpine --restart=Never --record
apiVersion: v1
kind: Pod
metadata:
annotations:
kubernetes.io/change-cause: kubectl run test3 --image=alpine --restart=Never --record=true
示例三:指定默认的sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
示例四:在ing-ng中的应用
annotations:
kubernetes.io/ingress.class: "nginx"
添加annotation
kubectl annotate pod test1 describe="this is a test annotation"