#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 путь из другого модуля и проверить результат)