为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用client-go访问service.yaml中的metadata.labels.

如何使用client-go访问service.yaml中的metadata.labels.

Go
白衣非少年 2022-11-28 17:14:22
我目前正在使用 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


查看完整回答
反对 回复 2022-11-28
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号