0

我从 Kubernetes 官方 javascript 客户端运行以下函数,例如:

.listNamespacedPod("default", null, "false", "smth=test", null, null, null, null, null, null)

或任何其他功能。

有一个称为标签选择器的参数。

现在我想使用以下标签选择器找到 pod(如在 HTTP 请求中):

smth=test

但我不能smth=test作为字符串发送。

如何按标签选择器过滤?

这是我来自 YAML 的元数据:

metadata:
  name: label-demo
  labels:
    smth: test 
    app: nginx

我可以通过以下方式运行kubectl

kubectl -n="namespace" get deployments -l=smth=test

所以它只会返回匹配的标签。

4

2 回答 2

3

基于CoreV1API这个示例,它应该是:

.listNamespacedPod("default", undefined, "false", undefined, undefined, "smth=test")

它将列出命名空间中所有带有标签smth=test的pod default

于 2021-06-16T13:17:37.907 回答
1

我完全同意 Arnaud Develay 提供的答案,但我想补充一下我在调查这个问题时发现的内容。

为了使您的代码响应Pods具有此标签的 ,它还需要包含在spec.selector.matchLabels(和.spec.template. metadata.labels分别)中。

通过使用以下Deployment定义:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: label-demo
  labels:
    smth: test # <-- IMPORTANT
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      search: here 
  template:
    metadata:
      labels:
        search: here 
    spec:
      containers:
      - name: nginx
        image: nginx

以及来自官方 github 页面的以下代码片段:

const k8s = require('@kubernetes/client-node');

const kc = new k8s.KubeConfig();
kc.loadFromDefault();

const k8sApi = kc.makeApiClient(k8s.CoreV1Api);


k8sApi.listNamespacedPod("default", undefined, "false", undefined, undefined, "smth=test").then((res) => {
    console.log(res.body);
});

代码生成以下输出(和空列表Pods):

V1PodList {
  apiVersion: 'v1',
  items: [],
  kind: 'PodList',
  metadata: V1ListMeta {
    _continue: undefined,
    remainingItemCount: undefined,
    resourceVersion: '990955',
    selfLink: '/api/v1/namespaces/default/pods'
  }
}

使用响应search=here中的标签查询时:.spec

V1PodList {
  apiVersion: 'v1',
  items: [
    V1Pod {
      apiVersion: undefined,
      kind: undefined,
      metadata: [V1ObjectMeta],
      spec: [V1PodSpec],
      status: [V1PodStatus]
    }
  ],
  kind: 'PodList',
  metadata: V1ListMeta {
    _continue: undefined,
    remainingItemCount: undefined,
    resourceVersion: '991498',
    selfLink: '/api/v1/namespaces/default/pods'
  }
}
于 2021-06-16T13:49:22.757 回答