Работают ли тесты живучести 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
  1. (команда возвращает ошибку, если что-то возвращается из find, в противном случае - cat файл)
        livenessProbe:
          exec:
            command:
              - find
              - /var/app/loaded.txt
              - -mmin 
              - '+0.1'
              - -exec
              - cat
              - '/var/app/loaded.txt{}'
              -  ;
          initialDelaySeconds: 10
          periodSeconds: 10
  1. (команда возвращает ошибку, если что-то возвращается из find, иначе ничего не возвращает)
        livenessProbe:
          exec:
            command:
              - find
              - /var/app/loaded.txt
              - -mmin 
              - '+0.1'
              - -exec
              - if[[{}]]
              - ;
          initialDelaySeconds: 10
          periodSeconds: 10

Я также пробовал все это с - вместо +. Зонд никогда не выходит из строя, несмотря на очень короткое окно (которое в конечном итоге будет длиннее!) И команду сна.

1 ответ

Решение

Зондирование живучести производится кубелетом в каждом узле. И да, он работает параллельно с вашим приложением.

В вашем случае вы можете прикоснуться к /tmp/healthyfile каждый раз, когда вы начинаете новую итерацию в цикле. И используйте команду вроде find /tmp/health -mmin +0.5в проверке здоровья. Эта команда ничего не возвращает, если файл старше получаса. Если команда проверки работоспособности ничего не возвращает, предполагается, что проверка прошла успешно.

Другие вопросы по тегам