Kubectl 命令列出 Kubernetes 中部署的 pods
Kubectl command to list pods of a deployment in Kubernetes
有没有办法使用 kubectl
仅列出属于部署的 pods?
目前,我这样做是为了 pods:
kubectl get pods| grep hello
但是,当我只想知道给定部署的 pods 时,获得所有 pods 似乎有点矫枉过正。我使用此命令的输出来查看所有 pods 的状态,然后可能会执行到其中一个
我也试过kc get -o wide deployments hellodeployment
,但它不打印 Pod 名称。
有一个 label in the pod for the selector in the deployment. That's how a deployment 管理着它的 pods。例如对于标签或选择器 app=http-svc
你可以做这样的事情并避免使用 grep
并列出所有 pods (当你的 pods 数量变得非常大):
$ kubectl get pods -l=app=http-svc
或
$ kubectl get pods --selector=app=http-svc
K8s 组件通过标签和选择器相互链接。只是没有用于部署的 My-List-of-ReplicaSets 或 My-List-Of-Pods 的内置属性。您无法从 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 }'`; 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 }'`; echo $POD_NAMES
有没有办法使用 kubectl
仅列出属于部署的 pods?
目前,我这样做是为了 pods:
kubectl get pods| grep hello
但是,当我只想知道给定部署的 pods 时,获得所有 pods 似乎有点矫枉过正。我使用此命令的输出来查看所有 pods 的状态,然后可能会执行到其中一个
我也试过kc get -o wide deployments hellodeployment
,但它不打印 Pod 名称。
有一个 label in the pod for the selector in the deployment. That's how a deployment 管理着它的 pods。例如对于标签或选择器 app=http-svc
你可以做这样的事情并避免使用 grep
并列出所有 pods (当你的 pods 数量变得非常大):
$ kubectl get pods -l=app=http-svc
或
$ kubectl get pods --selector=app=http-svc
K8s 组件通过标签和选择器相互链接。只是没有用于部署的 My-List-of-ReplicaSets 或 My-List-Of-Pods 的内置属性。您无法从 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 }'`; 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 }'`; echo $POD_NAMES