标签(Label)和注解(Annotation)
标签
yaml
apiVersion: v1 # 描述遵循 V1 版本的 API
kind: Pod # 描述一个 pod
metadata: # 用于描述名称、命名空间、标签等其他容器信息
name: kubia # pod 的名称
labels: # 创建多个 label
creation_mode: manual
env: prod
spec: # pod 内容的实际说明,pod 的容器、卷和其他数据
containers:
- image: xiaokexiang/kubia # 创建容器需要的镜像
name: kubia # 容器的名称
ports:
- containerPort: 8080 # 应用监听的端口号
protocol: TCP # 应用监听的协议shell
# 查看 label 标签
kubectl get pods --show-labels
# 查看 creation_mode、env 两个标签
kubectl get pods -L creation_mode,env
# 给 pod 添加 label -> version: v1
kubectl label pod kubia version=v1
# 给已有的 pod 修改标签
kubectl label pod kubia env=dev --overwrite
# 列出 env 标签有值的 pod
kubectl get pods -L env -l env
# 列出 env 标签值为 dev 的 pod
kubectl get pods -L env -l env=dev
# 列出符合多个 label 标签条件的 pod
kubectl get pods -L env -l env=dev,creation_mode=manual
# 列出不包含 env 标签的 pod
kubectl get pods -L env -l '!env'
# 列出 env 标签值不为 dev 的 pod(包含不存在 env 标签的值)
kubectl get pods -L env -l 'env!=dev'
# 列出 env 值 in (prod,dev) 的数据
kubectl get pods -L env -l 'env in (prod,dev)'
# 列出 env 值 not in (prod,dev) 的数据
kubectl get pods -L env -l 'env not in (prod,dev)'
# 删除指定标签的 pod
kubectl delete pod -l env=dev基于 Label 的 Pod 调度
shell
# 给 node 添加 label -> gpu=true
kubectl label node k8s-node1 gpu=true
# 查看 gpu=true 的 node
kubectl get node -L gpu -l gpu=trueyaml
apiVersion: v1 # 描述遵循 V1 版本的 API
kind: Pod # 描述一个 pod
metadata: # 用于描述名称、命名空间、标签等其他容器信息
name: kubia-gpu # pod 的名称
labels:
creation_mode: manual
env: prod
spec: # pod 内容的实际说明,pod 的容器、卷和其他数据
nodeSelector:
gpu: "true" # 只将 pod 部署到 gpu=true 的 node 上
containers:
- image: xiaokexiang/kubia # 创建容器需要的镜像
name: kubia # 容器的名称
ports:
- containerPort: 8080 # 应用监听的端口号
protocol: TCP # 应用监听的协议注解
相比 label 而言,annotation 不是为了保存标识信息而存在的,不能像 label 一样进行分组。主要是为了给 API 或 Pod 添加说明,且可以容纳更多的信息。
shell
# 给 pod 添加注解
kubectl annotate pod kubia test/annotation="hello world"
# 查看 pod 的注解
kubectl describe pod kubia
🎈🎈