我完全同意 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'
}
}