web-dev-qa-db-ja.com

kubernetesポッドのステータスがclient-goで完了するのを見る

K8 client goでポッドを作成し、ポッドのログを読み取れるように、ポッドが完了したときに通知を受け取る時計を作成しています。時計のインターフェースは、チャンネルでイベントを提供していないようです。コードは次のとおりです。ポッドのステータスが完了し、ログを読み取る準備ができたことを通知するにはどうすればよいですか。

func readLogs(clientset *kubernetes.Clientset) {
// namespace := "default"
// label := "cithu"
var (
    pod *v1.Pod
    // watchface watch.Interface
    err error
)
// returns a pod after creation

pod, err = createPod(clientset)
fmt.Println(pod.Name, pod.Status, err)

if watchface, err = clientset.CoreV1().Pods(namespace).Watch(metav1.ListOptions{
    LabelSelector: pod.Name,
}); err != nil {
    log.Fatalf(err.Error())
}

// How do I get notified when the pod.Status == completed
}
6
mohd.gadi

ポッドのステータスをループでチェックし続けることができ、ステータスが成功に変わるたびに完了です。

for {
    pod, _ := clientset.CoreV1().Pods(Namespace).Get(podName, metav1.GetOptions{})
    if pod.Status.Phase != corev1.PodPending {
        break
    }
}
pod, _ := clientset.CoreV1().Pods(corev1.NamespaceDefault).Get(podName, metav1.GetOptions{})
if pod.Status.Phase != corev1.PodSucceeded {
    return false, fmt.Errorf("Pod did not succeed/complete")
}
return true, nil
0
him229