Làm thế nào để liệt kê các công việc k8s của tôi với một LabelSelector phức tạp theo từng khách hàng?

Jan 28 2021

Tôi muốn liệt kê các công việc k8s của mình với một bộ chọn nhãn bằng client-go như lệnh sau:

$ kubectl get jobs -l 'hello-world in (London, China, NewYork)'

Tôi đã xem qua mã nguồn của client-go, sau đó tôi viết một số mã như sau:

func listJobs(cli *kubernetes.Clientset) (*batchv1.JobList, error) {
    label := metav1.LabelSelector{
        MatchExpressions: []metav1.LabelSelectorRequirement{
            {
                Key:      "hello-world",
                Operator: metav1.LabelSelectorOpIn,
                Values: []string{
                    "London",
                    "China",
                    "NewYork",
                },
            },
        },
    }

    fmt.Println(label.String())

    return cli.BatchV1().Jobs("default").List(context.TODO(), metav1.ListOptions{
        LabelSelector: label.String(),
    })
}

và sau đó tôi gặp lỗi:

&LabelSelector{MatchLabels:map[string]string{},MatchExpressions:[]LabelSelectorRequirement{LabelSelectorRequirement{Key:hello-world,Operator:In,Values:[London China NewYork],},},}
2021/01/28 17:58:07 unable to parse requirement: invalid label key "&LabelSelector{MatchLabels:map[string]string{}": name part must consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyName',  or 'my.name',  or '123-abc', regex used for validation is '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]')

Tôi đã sai ở đâu? Làm cách nào để liệt kê các công việc của tôi với một bộ chọn nhãn là một biểu thức phức tạp?

Trả lời

3 Ullaakut Jan 28 2021 at 17:36

Sử dụng client-gothư viện Kubernetes , bạn có thể chỉ cần viết các bộ chọn nhãn giống như cách bạn làm kubectl.

Viết hello-world in (London, China, NewYork)nên hoạt động tốt.

func listJobs(cli *kubernetes.Clientset) (*batchv1.JobList, error) {
    return cli.BatchV1().Jobs("default").List(context.TODO(), metav1.ListOptions{
        LabelSelector: "hello-world in (London, China, NewYork)",
    })
}

hello-world in (London, China, NewYork)Tuy nhiên, nếu những gì bạn muốn là tạo động từ một đối tượng lập trình, thì đó là một câu hỏi khác, đã được trả lời trên StackOverflow tại đây .