Элегантный способ проверки статуса другого контейнера - PullRequest
1 голос
/ 14 июня 2019

Поскольку Kubernetes не реализует зависимость между контейнерами, мне было интересно, есть ли элегантный способ проверить, готов ли другой Контейнер в том же модуле.

Я бы предположил, что необходим Downward API. Может быть, это можно сделать, вставив kubectl внутрь контейнера - но есть ли более простой способ?

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Пока я использовал простую проверку существования файла:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      ...
      - name: former
        readinessProbe:
          exec:
            command:
            - /bin/sh
            - "-c"
            - /bin/sh /check_readiness.sh && touch /foo/ready
        volumeMounts:
        - name: shared-data
          mountPath: /foo
        ...
      - name: latter
        command:
        - /bin/sh
        - "-c"
        - while [ ! -f /foo/ready ]; do sleep 1; done; /bar.sh
        volumeMounts:
        - name: shared-data
          mountPath: /foo
          readOnly: true
      ...
      volumes:
      - name: shared-data
        emptyDir: {}
1 голос
/ 15 июня 2019

Ожидание готовности контейнера из другого модуля легко выполняется с помощью контейнера init, который выполнит проверку (как правило, скручивание на конечной точке работоспособности или что-либо еще) до получения приемлемого ответа.На контейнере в том же модуле это решение не будет работать, но вы можете использовать часть спецификации контейнера command, которая может достичь чего-то очень похожего.

Для службы HTTP:

    command:
    - '/bin/sh'
    - '-c'
    - >
      set -ex;
      until curl --fail --connect-timeout 5 http://localhost:8080/login; do sleep 2; done
      && <start command>

Вы можете легко добиться того же для базы данных postgres:

    command:
    - '/bin/bash'
    - >
      until pg_isready --host localhost -p 5432; do sleep 2; done
      && bash /sql/00-postgres-configuration.sh

Это хороший пример, вы должны определить лучший способ обнаружить, работает ли ваш другой контейнер.

Взгляните на https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/, чтобы увидеть, как вы можете указать command для пакета.

...