获取属于 kubernetes 复制控制器的 pods

get pods belonging to a kubernetes replication controller

我想知道是否有一种方法可以使用 kubernetes API 来获取属于给定复制控制器的 pods 的详细信息。我查看了参考资料,我看到的唯一方法是获取 pods 列表并通过分析 'annotations' 部分检查每个列表是否属于某个 RC。这又是一项艰巨的工作,因为 json 将整个 'kubernetes.io/created-by' 部分指定为单个字符串。

每个 Replication Controller 都有一个 selector,它定义了由它管理的 pods 的集合:

selector:
    label_name_1: some_value
    label_name_2: another_value

您可以使用选择器获取所有 pods 和相应的一组标签:

https://k8s.example.com/api/v1/pods?labelSelector=label_name_1%3Dsome_value,label_name_2%3Danother_value

要获取属于特定复制控制器的 pods 的详细信息,我们需要在定义复制控制器的 yaml 文件中包含选择器字段,并在要创建的 pod 模板中包含匹配的标签字段。下面给出了复制控制器 yaml 文件的示例:

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80 

要列出 pod 名称,请使用命令:

pods=$(kubectl get pods --selector=app=nginx --output=jsonpath={.items..metadata.name})
echo $pods

在上面的命令中,--output=jsonpath 选项指定了仅获取每个 pod 名称的表达式。