代码之家  ›  专栏  ›  技术社区  ›  Samselvaprabu

如何从部署中获取吊舱名称?

  •  0
  • Samselvaprabu  · 技术社区  · 4 年前

    我需要得到我的部署文件创建的吊舱名称。

    kubectl get -f deployment.yml
    

    上面的命令列出了部署名称。如果我打字 kubectl get pod

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

    如何获得部署创建的所有pod?即使是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
            ...
            ....
    

    当我试过的时候 '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'

    但我需要所有正在部署的吊舱名称。。

    1 回复  |  直到 4 年前
        1
  •  3
  •   RammusXu    4 年前

    通常,我们为部署的pod添加标签。

      template:
        metadata:
          labels:
            app: my-app
    

    所以,我们可以通过标签得到所有的pod过滤器

    kubectl get pod -l app=my-app
    
        2
  •  1
  •   VAS    4 年前

    由Kubernetes控制器创建的所有pods在pods的名称中都有其顶级所有者的名字。对于由复制集创建的、由部署创建的pod,它看起来像:

    PodName = ReplicaSetName-PodHash
    

    复制集名称又遵循相同的规则:

    ReplicaSetName = DeploymentName-ReplicaSetHash
    

    “展开”吊舱的名称如下:

    PodName = DeploymentName-ReplicaSetHash-PodHash
    

    因此,要使用kubectl获得部署所创建的pods,我们可以使用 grep awk 要只获取姓名:

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

    例如:

    kubectl get pods -n default | grep "rd-2020-05-26-00-04-1590476651" | awk '{print $1}'
    
    # or just awk
    
    kubectl get pods -n default | awk '/rd-2020-05-26-00-04-1590476651/{print $1}'