问题描述
当修改 Pod label 使其与 Deployment 不相符,集群有什么变化?
答案
当修改 Pod label 后,deployment 会发现自己少了一个 Pod,于是会重新启动一个新的Pod,并标记为自己的 label。修改标签 Pod 仍会存在。
如下图所示,我们使用一个 deployment 部署了两个Pods,并标记为 app=ai
。
我们修改第一 pod 的 标签为 app=a2
后,deployment 会发现自己少了一个pod,于是会创建一个新的 pod,如第三行所示。
Label 基础知识与常用命令
命令一:获取 Pods 的 label
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labelex 1/1 Running 0 10m env=development
命令二:使用 label 过滤 pods
$ kubectl get pods --selector app=ai
# 或 kubectl get pods -l app=ai
NAME READY STATUS RESTARTS AGE
ai-deployment-566d5f6c99-gzqmw 1/1 Running 0 2d13h
ai-deployment-566d5f6c99-wrkkb 1/1 Running 0 2d12h
刷选多个标签值
$ kubectl get pods -l 'app in (ai,a2)' --show-labels
NAME READY STATUS RESTARTS AGE LABELS
ai-deployment-566d5f6c99-8kn9c 1/1 Running 0 2d13h app=a2,name=tc,pod-template-hash=566d5f6c99
ai-deployment-566d5f6c99-gzqmw 1/1 Running 0 2d13h app=ai,pod-template-hash=566d5f6c99
ai-deployment-566d5f6c99-wrkkb 1/1 Running 0 2d12h app=ai,pod-template-hash=566d5f6c99
命令三:添加 label
# Update pod 'foo' with the label 'unhealthy' and the value 'true'.
kubectl label pods foo unhealthy=true
命名四:删除 label
# Update pod 'foo' by removing a label named 'bar' if it exists.
# Does not require the --overwrite flag.
kubectl label pods foo bar-
命令五:修改已有的 label
# Update pod 'foo' with the label 'status' and the value 'unhealthy', overwriting any existing value.
kubectl label --overwrite pods foo status=unhealthy
上述命令,均可以通过 kubectl label --help
和 kubectl get pods --help
查询到。