如何从部署中获取 pod 名称?

How to get pod names from deployment?

我们创建了部署,部署又创建了 pod。 我需要获取由我的部署文件创建的 Pod 名称。

kubectl get -f deployment.yml

以上命令列出部署名称。如果我键入 kubectl get pod,它会显示 Pod 名称,其中添加了一些随机的额外字符串和部署名称。

即使我使用 -o json 选项仍然无法获取 pod 名称。

如何获取部署创建的所有pods?即使是 shell 脚本方式也可以。

我的部署文件如下所示

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    ansible: test-2020-05-26-00-04-1590476651
    podRef: pod-ansibles
  name: rd-2020-05-26-00-04-1590476651
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nginx
        ...
        ....

那么有什么方法可以让我获得所有具有部署标签 'test-2020-05-26-00-04-1590476651' 的 pods 吗?

当我尝试 'kubectl get pod -l ansible=test-2020-05-26-00-04-1590476651' 时。它显示

'No resources found in default namespace.' 好像只能显示部署名称 'kubectl get deploy -l ansible=test-2020-05-26-00-04-1590476651'

但我需要部署下的所有 pod 名称..

通常,我们标记部署的 pods。

  template:
    metadata:
      labels:
        app: my-app

因此,我们可以通过标签获取所有 pod 过滤器

kubectl get pod -l app=my-app

所有由 Kubernetes 控制器创建的 pods 在 Pods 的名称中都有其最高所有者的名称。对于由 ReplicaSet 创建的 pods,由 Deployment 创建的它看起来像:

PodName = ReplicaSetName-PodHash

ReplicaSet 名称依次遵循相同的规则:

ReplicaSetName = DeploymentName-ReplicaSetHash

“展开”Pod 的名称如下所示:

PodName = DeploymentName-ReplicaSetHash-PodHash

Kubernetes 要求同一命名空间中的所有同类资源具有不同的名称。

因此,要获取部署使用 kubectl 创建的 pods,我们可以使用 grepawk 来获取名称:

kubectl get pods -n NamespaceName | grep "DeploymentName" | awk '{print }'

例如:

kubectl get pods -n default | grep "rd-2020-05-26-00-04-1590476651" | awk '{print }'

# or just awk

kubectl get pods -n default | awk '/rd-2020-05-26-00-04-1590476651/{print }'