我目前正在使用 Go 进行一个副项目。我正在尝试获取有关集群上运行的 pod 的信息。我可以根据命名空间值访问 pod,但为了使用 service.yaml 文件中的 metadata.labels.applicationGroup 值访问工作 pod,我需要先获取该值。我在下面添加了我的 service.yaml 文件的一部分。---apiVersion: apps/v1kind: Deploymentmetadata: name: metadata-name labels: service: service-name applicationGroup: beta --> this fieldspec: replicas: 1 selector: matchLabels: service: service-name template: metadata: labels: service: service-name spec: containers: - name: nginx image: nginx:1.15.8 ports: - containerPort: 80...现在,我可以使用“默认”命名空间访问信息 pod。func getPodsInfo() (string, error) { var kubeConfig *string if home := homedir.HomeDir(); home != "" { kubeConfig = flag.String("kubeConfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeConfig file") } else { kubeConfig = flag.String("kubeConfig", "", "absolute path to the kubeConfig file") } flag.Parse() config, err := clientcmd.BuildConfigFromFlags("", *kubeConfig) if err != nil { err = fmt.Errorf("error occured when build config from flags: %s", err.Error()) return "", err } clientSet, err := kubernetes.NewForConfig(config) if err != nil { err = fmt.Errorf("error occured when build client set from config: %s", err.Error()) return "", err } /* listOptions := meta.ListOptions{ FieldSelector: "metadata.labels.applicationGroup=alpha", } */ pods, err := clientSet.CoreV1().Pods("default").List(context.TODO(), metav1.ListOptions{}) if err != nil { err = fmt.Errorf("error occured when get pods info from k8s: %s", err.Error()) return "", err }}我尝试使用 FieldSelector,但 FieldSelector 已支持某些字段。listOptions := meta.ListOptions{ FieldSelector: "metadata.labels.applicationGroup=alpha",}我收到以下错误。field label not supported: metadata.labels.applicationGroup您可以查看此链接以了解支持的字段。对于我的问题,如何使用 cilent_go 获取 metadata.labels.applicationGroup 值,我应该使用哪个函数来获取使用该值的 pod?
1 回答

函数式编程
TA贡献1807条经验 获得超9个赞
只需使用 LabelSelector 而不是 FieldSelector
listOptions := meta.ListOptions{
LabelSelector: "applicationGroup=alpha",
}
UPD:如果你想将它用于 pod,你应该在 pod 模板上设置 applicationGroup
apiVersion: apps/v1
kind: Deployment
metadata:
name: metadata-name
labels:
service: service-name
spec:
replicas: 1
selector:
matchLabels:
service: service-name
template:
metadata:
labels:
service: service-name
applicationGroup: beta
spec:
containers:
- name: nginx
image: nginx:1.15.8
ports:
- containerPort: 80
- 1 回答
- 0 关注
- 146 浏览
添加回答
举报
0/150
提交
取消