Как определить порт проверки работоспособности Pod для livenessProbe / readinessProbe - PullRequest
0 голосов
/ 28 января 2020

Как определить отдельные порты Pod, один для приложения и другой для проверки работоспособности (readinessProbe)?

Является ли приведенная ниже спецификация для портов правильным способом сделать готовностьProbe для проверки работоспособности? порт TCP / 9090? Я имею в виду, будет ли readinessProbe достигать порта 9090 (конечно, если он открыт работающим контейнером)? Или нужно указать какой-либо другой порт (nodePort, targetPort, порт и т. Д.)?

kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: <image>
        ports:
        - name: myapp-port
          containerPort: 8080
          protocol: TCP
        - name: healthcheck-port
          containerPort: 9090
          protocol: TCP

        readinessProbe:
          httpGet:
            port: healthcheck-port
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          periodSeconds: 10
          successThreshold: 2
          failureThreshold: 2

Ответы [ 4 ]

3 голосов
/ 28 января 2020

Да, ваш код спецификации почти правильный. Вам не нужно указывать что-то еще, чтобы заставить датчик готовности работать.

Имена портов не могут быть длиннее 15 символов, поэтому имя healthcheck-port не будет работать. Возможно, вы захотите изменить имя на что-то меньшее, например healthcheck.

1 голос
/ 28 января 2020

Ваша текущая конфигурация почти правильная, как указано @ shashank-v, за исключением имени порта.

Что я хотел бы отметить здесь, помимо названия, это использовать тот же порт, что и в качестве лучшей практики, - TCP / 8080, но иметь путь healthz, на который ваше приложение отвечает ok или running. тогда в вашем httpget:

readinessProbe:
      httpGet:
        port: 8080
        path: /healthz
1 голос
/ 28 января 2020

Вы можете указать любой порт и путь (при условии, что это http) для livenessProbe и readinessProbe, но, конечно, вам нужно что-то обслуживать там.

Это не должно быть службой порт, поэтому NodePort не вариант, так как kubelet отвечает за состояние контейнеров и имеет прямой доступ к контейнерам.

0 голосов
/ 28 января 2020
readinessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10

Справка:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define -a-tcp-liveness-probe

...