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

时间:2020-05-29 08:22:53

标签: shell kubernetes kubernetes-pod

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

kubectl get -f deployment.yml

以上命令列出了部署名称。如果我输入kubectl get pod,则会显示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
        ...
        ....

那么我有什么办法可以获取所有带有部署标签'test-2020-05-26-00-04-1590476651'的吊舱?

当我尝试'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名称。

2 个答案:

答案 0 :(得分:3)

通常,我们标记部署的吊舱。

  template:
    metadata:
      labels:
        app: my-app

因此,我们可以按标签获取所有广告连播过滤器

kubectl get pod -l app=my-app

答案 1 :(得分:1)

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

PodName = ReplicaSetName-PodHash

ReplicaSet名称又遵循相同的规则:

ReplicaSetName = DeploymentName-ReplicaSetHash

“展开的”广告连播的名称如下:

PodName = DeploymentName-ReplicaSetHash-PodHash

Kubernetes要求在同一名称空间中的所有相同类型的资源都具有不同的名称。

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

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}'