Kubectl 命令列出 Kubernetes 中部署的 pod

问题描述 投票:0回答:3

有没有办法使用

kubectl
仅列出属于某个部署的 Pod? 目前,我这样做是为了获取 pod:

kubectl get pods| grep hello

但是,当我只想知道给定部署的 Pod 时,获取所有 Pod 似乎有些过分了。我使用此命令的输出来查看所有 pod 的状态,然后可能执行其中一个 pod 的状态。

我也尝试了

kc get -o wide deployments hellodeployment
,但它不打印 Pod 名称。

kubernetes kubectl
3个回答
84
投票

pod 中有一个 label,用于部署中的 selector。这就是“部署”管理其 Pod 的方式。例如,对于标签或选择器 app=http-svc,您可以执行类似的操作,并避免使用

grep
并列出所有 pod(当 pod 数量变得非常大时,这会变得很有用)
以下是一些命令行示例:

# single label kubectl get pods -l=app=http-svc kubectl get pods --selector=app=http-svc # multiple labels kubectl get pods --selector key1=value1,key2=value2



16
投票
kubectl describe

kubectl get 获取它们 正如@Rico上面建议的,你必须使用标签过滤器。但是您不能简单地使用在部署图元文件中指定的标签,因为部署将生成随机哈希并将其用作附加标签。

例如,我有一个部署和一个独立的 Pod,它们共享相同的标签

app=http-svc

。虽然前两个由部署管理,但第三个不是也不应该出现在结果中。 ma.chi@~/k8s/deployments % kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS http-9c89b5578-6cqbp 1/1 Running 0 7s app=http-svc,pod-template-hash=574561134 http-9c89b5578-vwqbx 1/1 Running 0 7s app=http-svc,pod-template-hash=574561134 nginx-standalone 1/1 Running 0 7s app=http-svc ma.chi@~/k8s/deployments %

源文件是

apiVersion: apps/v1 kind: Deployment metadata: labels: app: http-svc name: http spec: replicas: 2 selector: matchLabels: app: http-svc strategy: {} template: metadata: labels: app: http-svc spec: containers: - image: nginx:1.9.1 name: nginx1 --- apiVersion: v1 kind: Pod metadata: labels: app: http-svc name: nginx-standalone spec: containers: - image: nginx:1.9.1 name: nginx1-standalone

要准确找到部署创建和管理的容器,您可以使用下面的脚本(这很丑陋,但这是我能做的最好的事情)

DEPLOY_NAME=http RS_NAME=`kubectl describe deployment $DEPLOY_NAME|grep "^NewReplicaSet"|awk '{print $2}'`; echo $RS_NAME POD_HASH_LABEL=`kubectl get rs $RS_NAME -o jsonpath="{.metadata.labels.pod-template-hash}"` ; echo $POD_HASH_LABEL POD_NAMES=`kubectl get pods -l pod-template-hash=$POD_HASH_LABEL --show-labels | tail -n +2 | awk '{print $1}'`; echo $POD_NAMES



5
投票
此代码

),它仅列出部署的 pod(不显示临时结果): k_list_pods_in_deployment() ( test $# -eq 0 && { echo "Missing deployment name" && kubectl get deployments return 1 } deployment="$1"; shift replicaSet="$(kubectl describe deployment $deployment \ | grep '^NewReplicaSet' \ | awk '{print $2}' )" podHashLabel="$(kubectl get rs $replicaSet \ -o jsonpath='{.metadata.labels.pod-template-hash}' )" kubectl get pods -l pod-template-hash=$podHashLabel --show-labels \ | tail -n +2 | awk '{print $1}' ) alias k.list-pods-in-deployment=k_list_pods_in_deployment

	
© www.soinside.com 2019 - 2024. All rights reserved.