Kubectl命令列出Kubernetes中部署的吊舱

Kubectl命令列出Kubernetes中部署的吊舱,kubernetes,kubectl,Kubernetes,Kubectl,有没有办法使用kubectl只列出属于部署的吊舱? 目前,我这样做是为了获得吊舱: kubectl拿豆荚| grep你好 但是,当我只想知道给定部署的吊舱时,获取所有吊舱似乎有些过分。我使用这个命令的输出查看所有pod的状态,然后可能执行其中一个pod 我还尝试了kc get-o wide deployments hellodeployment,但它不会打印Pod名称。Pod中有一个用于部署中的。a就是这样管理它的豆荚的。例如,对于label或selector app=http svc,您可以这

有没有办法使用kubectl只列出属于部署的吊舱? 目前,我这样做是为了获得吊舱:

kubectl拿豆荚| grep你好

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

我还尝试了kc get-o wide deployments hellodeployment,但它不会打印Pod名称。

Pod中有一个用于部署中的。a就是这样管理它的豆荚的。例如,对于label或selector app=http svc,您可以这样做,避免使用grep并列出所有的pod。随着pod数量的增加,这将变得非常有用:

$ kubectl get pods -l=app=http-svc


K8s组件通过标签和选择器相互链接。我的复制集列表或部署的pod列表中没有内置属性。你不能从kubectl或kubectl那里得到它们

正如上面@Rico所建议的,您必须使用标签过滤器。但不能简单地使用部署图元文件中指定的标签,因为部署将生成一个随机散列并将其用作附加标签

例如,我有一个部署和一个独立的pod,它们共享相同的标签app=httpsvc。虽然前两个由部署管理,但第三个不是,也不应该出现在结果中


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

但是pod有两个标签:run=httpsvc和pod模板hash=736954933。如果只指定一个标签,则可能会包含一些不受部署管理的其他吊舱。
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