0

I run the following function from Kubernetes official javascript client, for example :

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

or any other function.

There is a param called labels selector.

Now I would like to find the pods (as in the HTTP request) with the following label selector:

smth=test

But I cannot send smth=test as a string.

How can I filter by label selector?

This is my metadata from the YAML:

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

I can run via kubectl:

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

so it will return only the matched labels.

Wytrzymały Wiktor
  • 11,492
  • 5
  • 29
  • 37
Tuz
  • 1,810
  • 5
  • 29
  • 58

2 Answers2

5

Based on CoreV1API and this sample, it should be:

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

It will list all pods with labels smth=test in the default namespace.

Arnaud Develay
  • 3,920
  • 2
  • 15
  • 27
1

I wholeheartedly agree with the answer provided by Arnaud Develay but I wanted to add what I found out while investigating this question.

To make your code respond with the Pods that are having this label, it also needs to be included in the spec.selector.matchLabels (and .spec.template. metadata.labels respectively).

By using the following Deployment definition:

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

and following code snippet from the official github page:

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);
});

The code generated following output (and empty list of Pods):

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

While querying with the search=here label in the .spec responded with:

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'
  }
}
Dawid Kruk
  • 8,982
  • 2
  • 22
  • 45