Должен ли я создать API для readinessprobe для работы с kubernetes

#kubernetes #readinessprobe

#kubernetes #readinessprobe

Вопрос:

Я пытаюсь создать RollingUpdate и пытаюсь использовать приведенный ниже код, чтобы узнать, появился pod или нет. Должен ли я создать явный путь API, например /healthz, в моем приложении, чтобы kubernetes проверял его и возвращал статус 200 или его внутренний URL-адрес для kubernetes?

 specs:
   containers:
   - name: liveness
     readinessProbe:
    httpGet:
      path: /healthz
      port: 80
 

Комментарии:

1. Привет, да, приложение должно сообщить kubelt, что оно исправно, поэтому эти конечные точки являются одним из способов. или вы можете использовать tcp probe или выполнение скрипта в контейнере.

Ответ №1:

Поскольку @Thomas ответил на Http-запрос, если приложение не предоставляет конечную точку для проверки успешного ответа. вы можете использовать TCP Probe

kubelet пытается установить TCP-соединение на порту контейнера. Если он может установить соединение, контейнер считается исправным; если он не может, он считается неработоспособным

например, в вашем случае это было бы так

     ports:
    - containerPort: 80
    readinessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 15
      periodSeconds: 20
 

Вы можете получить дополнительную информацию здесь configure-liveness-readiness-probes /

Комментарии:

1. Является ли livenessProbe обязательным? Если я не предоставлю его, не будет ли мой модуль воссоздан заново, когда модуль умрет?]

2. Вы должны знать, что если вашему приложению требуется время для инициализации, но tcp-зонд уже получает открытый порт, вы можете в конечном итоге перенаправить производственный трафик в модуль приложения, инициализация которого не завершена. Если вы предоставляете HTTP API, я настоятельно рекомендую использовать http probe для этого варианта использования.

3. Я согласен с Томасом, используйте tcp probe до тех пор, пока у вас не будет возможности использовать http probe или это приложение, отличное от http, такое как grpc или ftp

Ответ №2:

Kubernetes отправит запрос к контейнеру через порт 80 и путь /healthz и ожидает, что код состояния в диапазоне 2xx-3xx будет считаться успешным. Если ваше приложение не предоставляет сопоставление для пути и возвращает значение 404, kubernetes предполагает, что проверка работоспособности завершилась неудачей. В зависимости от вашего приложения вам необходимо вручную предоставить API, если это не сделано вашей платформой. (Вы можете проверить с помощью curl или wget путь из другого модуля и проверить результат)