观看kubernetes窗格状态以在客户端运行中完成

时间:2018-09-29 10:12:29

标签: kubernetes kubernetes-pod kubernetes-go-client

我正在k8 client go中创建一个pod,并制作一个手表以通知pod完成的时间,以便我可以读取pod的日志。监视界面似乎未在频道上提供任何事件。这是代码,如何通知我吊舱状态已完成并准备读取日志

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
}

2 个答案:

答案 0 :(得分:1)

可以使用以下代码段列出事件。然后,您可以根据需要处理pod事件。

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)

答案 1 :(得分:0)

您可以保持循环查看广告连播状态,只要状态更改为成功,就可以完成

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
相关问题