Наблюдайте за статусом kubernetes pod в клиентской версии - PullRequest
0 голосов
/ 29 сентября 2018

Я создаю модуль в клиенте k8 и создаю часы, чтобы получать уведомления о том, когда модуль завершился, чтобы я мог читать журналы модуля.Интерфейс часов не обеспечивает каких-либо событий на канале.Вот код, как бы я получил уведомление о том, что статус модуля теперь заполнен и готов к чтению журналов

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
}

1 Ответ

0 голосов
/ 29 сентября 2018

События могут быть перечислены с использованием следующего фрагмента.Затем вы можете обработать события модуля при необходимости.

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)
...