我完全同意 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页面的以下代码sn-p:
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'
}
}
在使用.spec 中的search=here 标签查询时,回复为:
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'
}
}