Watch kubernetes pod status to be completed in client-go

前端 未结 2 1203
别跟我提以往
别跟我提以往 2020-12-16 23:22

I am creating a pod in k8 client go and making a watch to get notified for when the pod has completed so that i can read the logs of the pod. The watch interface doesnt seem

相关标签:
2条回答
  • 2020-12-16 23:58

    The events can be listed using the following snippet. You can then process the pod events as needed.

    label := ""
    for k := range pod.GetLabels() {
        label = k
        break
    }
    watch, err := clientset.CoreV1().Pods(namespace).Watch(metav1.ListOptions{
        LabelSelector: label,
    })
    if err != nil {
        log.Fatal(err.Error())
    }
    go func() {
        for event := range watch.ResultChan() {
            fmt.Printf("Type: %v\n", event.Type)
            p, ok := event.Object.(*v1.Pod)
            if !ok {
                log.Fatal("unexpected type")
            }
            fmt.Println(p.Status.ContainerStatuses)
            fmt.Println(p.Status.Phase)
        }
    }()
    time.Sleep(5 * time.Second)
    
    0 讨论(0)
  • 2020-12-17 00:04

    You keep could keep checking the pod status in a loop and whenever the status changes to successful, you're done

    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 讨论(0)
提交回复
热议问题