Kubernetes `client-go` - Как получить статус контейнера в поде - PullRequest
1 голос
/ 01 августа 2020

После следования за this и this , как мне посмотреть статус контейнеров (если контейнер разбился, завершился et c) в Pod и инициировать события при изменении статуса контейнера в Pod?

Допустим, у меня есть Pod с 2 контейнерами:

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  containers:
  - image: busybox
    name: busybox5
    command:
      - sleep
      - "5"
    imagePullPolicy: IfNotPresent
  - image: busybox
    name: busybox50
    command:
      - sleep
      - "50"
    imagePullPolicy: IfNotPresent
  restartPolicy: Never

Я хочу получать уведомление, когда контейнер busybox5 завершает выполнение, а не примерно busybox50. Я проделал что-то подобное с помощью информеров:

        UpdateFunc: func(oldObj, obj interface{}) {
            mObj := obj.(v1.Object)
            log.Printf("%s: Updated", mObj.GetName())
        },

Это просто. Но как это работает в многоконтейнерном Pod? Что, если я хочу обрабатывать события о контейнере busybox5 только в Pod. Как я могу добиться этого в Go?

1 Ответ

0 голосов
/ 02 августа 2020

Думаю, вам нужен клиент - go информеры . Вот хороший учебник о них: https://firehydrant.io/blog/stay-informed-with-kubernetes-informers/

Вы можете создать асинхронный прослушиватель событий для Pod, в котором работают ваши контейнеры, а затем, когда один из статусов контейнера изменится, Статус пода также изменяется (обновляется, поэтому вы должны слушать события обновления). Итак, у вас есть событие обновления из вашего модуля, в конце концов, вам нужно получить монетоприемники Pod.

Надеюсь, вы ищете это:)

...