Работают ли тесты живучести Kubernetes параллельно с вашим приложением?
У меня есть под, работающий на Kubernetes, для которого я разрабатываю тест жизнеспособности. Мое приложение читает из очереди (через цикл, который постоянно ищет новые сообщения и выполняет другие функции, если он их находит) и не отображается через HTTP, поэтому мне нужна проверка жизнеспособности команд. Я думаю, подойдет ли простая реализация:
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
Однако я не уверен,
cat
будет успешным, даже если приложение "зависнет" в какой-то момент цикла - файл все равно будет там. Это сводится к фундаментальному отсутствию понимания зондов живучести, которые мне не удалось найти в документации - предположительно, они запускаются каким-то образом последовательно с вашим приложением, поэтому, если ваше приложение не запущено, команда не может быть выполнена? Но я не уверен в этом.
Если команда может выполняться параллельно, я считаю, что мне понадобится какая-то проверка метки времени, когда я обновляю файл в каждом цикле, а зонд живучести проверяет свою метку времени. Если первый способ работает, он проще, но может ли кто-нибудь подтвердить, так ли это? Благодарю.
Изменить: мой код приложения. Я добавил в sleep(60)s, чтобы попытаться проверить, не сработает ли зонд живучести, если файл не будет обновлен в течение минуты, но они не будут частью обычного кода приложения.
INITIALISATION CODE
with open('loaded.txt','w') as f: # readiness probe = check this file exists
f.write('loaded')
current_backoff = 0
max_backoff = 10
while True:
if current_backoff < max_backoff:
current_backoff +=1
with open('loaded.txt','w') as f:
f.write('loaded')
sleep(60)
messages = input_queue_client.receive_messages(visibility_timeout=100)
for message in messages:
with open('loaded.txt','w') as f:
f.write('loaded')
sleep(60)
current_backoff = 0
CODE TO PROCESS MESSAGES
sleep(current_backoff)
Моя проверка живучести пытается:
1.
livenessProbe:
exec:
command:
- find
- /var/app/loaded.txt
- -mmin
- '+0.1'
initialDelaySeconds: 10
periodSeconds: 10
- (команда возвращает ошибку, если что-то возвращается из find, в противном случае - cat файл)
livenessProbe:
exec:
command:
- find
- /var/app/loaded.txt
- -mmin
- '+0.1'
- -exec
- cat
- '/var/app/loaded.txt{}'
- ;
initialDelaySeconds: 10
periodSeconds: 10
- (команда возвращает ошибку, если что-то возвращается из find, иначе ничего не возвращает)
livenessProbe:
exec:
command:
- find
- /var/app/loaded.txt
- -mmin
- '+0.1'
- -exec
- if[[{}]]
- ;
initialDelaySeconds: 10
periodSeconds: 10
Я также пробовал все это с - вместо +. Зонд никогда не выходит из строя, несмотря на очень короткое окно (которое в конечном итоге будет длиннее!) И команду сна.
1 ответ
Зондирование живучести производится кубелетом в каждом узле. И да, он работает параллельно с вашим приложением.
В вашем случае вы можете прикоснуться к
/tmp/healthy
file каждый раз, когда вы начинаете новую итерацию в цикле. И используйте команду вроде
find /tmp/health -mmin +0.5
в проверке здоровья. Эта команда ничего не возвращает, если файл старше получаса. Если команда проверки работоспособности ничего не возвращает, предполагается, что проверка прошла успешно.