Go Client로 동일한 프로세스를 수행했으며 CLI가 취하는 몇 가지 바로 가기를 발견했습니다.
func doNodesHavePods(clientset *kubernetes.Clientset) error {
nodeLabelSelector := "nodelabel=interesting_nodes"
nodes, err := clientset.CoreV1().Nodes().List(metav1.ListOptions{LabelSelector: nodeLabelSelector})
if err != nil {
return err
}
nodeNames := []string{}
for _, node := range nodes.Items {
nodeNames = append(nodeNames, node.Name)
}
// --all-namespaces -> listing and looping on namespaces
namespaces, err := clientset.CoreV1().Namespaces().List(metav1.ListOptions{})
if err != nil {
return err
}
for _, namespace := range namespaces.Items {
for _, name := range nodeNames {
// pods need a namespace to be listed.
pods, err := clientset.CoreV1().Pods(namespace.Name).List(metav1.ListOptions{FieldSelector: "spec.nodeName=" + name})
if err != nil {
println("%v", err)
}
for _, pod := range pods.Items {
fmt.Println(pod.Namespace, pod.Name)
}
}
}
return nil
}
저는 제가 물어봐야 할 많은 질문이 CLI에 비해 너무 복잡해지고 있다는 사실을 알게되었습니다. CLI는 훌륭한 도구이지만 Go 클라이언트를 사용하는 방법을 배우면 찾고있는 첫 번째 답변을 얻을 수 있습니다. 또한 그 답변이 제기하는 질문을 더 깊이 파고 듭니다.