Как настроить проверку готовности и живучести пода в кубернетах, где работает автономная служба go? - PullRequest
0 голосов
/ 07 августа 2020

Я написал службу планировщика заданий в go, которая загружает файлы с интервалом c. Внутри этой службы не запущена служба HTTP.

Обычно для службы HTTP ниже приведены конфигурации проверки работоспособности и готовности, которые необходимо добавить в файл развертывания.

readinessProbe:
  httpGet:
    path: <http_get_path>
    port: 3401
  initialDelaySeconds: 5
  timeoutSeconds: 1
  periodSeconds: 15

livenessProbe:
  httpGet:
    path: <http_get_path>
    port: 3401
  initialDelaySeconds: 15
  timeoutSeconds: 1
  periodSeconds: 15

Для автономная служба, как показано ниже:

//main : main function to trigger the services
func main() {
    scheduler.RunScheduler()
}

//RunScheduler : Run the scheduler
func RunScheduler() {
    done := make(chan bool)
    quit := make(chan bool)

    go startJob1()

    go startJob2()
    
    sigs := make(chan os.Signal, 1)
    //pass done "True", only if the application is stopped
    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
    <-sigs
    .....
}

, которая запускается периодически и не прослушивает ни один порт, можем ли мы настроить какие-либо проверки готовности и проверки работоспособности?

1 Ответ

3 голосов
/ 07 августа 2020

Поскольку ваш контейнер не обрабатывает HTTP-запросы, вам не нужно readinessProbe.

readinessProbe: указывает, готов ли контейнер отвечать на запросы. В случае сбоя проверки готовности контроллер конечных точек удаляет IP-адрес модуля из конечных точек всех служб, соответствующих модулю.

Когда следует использовать проверку работоспособности?

Вам нужен livenessProbe.

livenessProbe: указывает, запущен ли контейнер. Если зонд живучести дает сбой, кубелет убивает контейнер, и контейнер подвергается политике перезапуска.

Когда следует использовать зонд готовности?

Вот пример с ps процесса:

livenessProbe:
    exec:
     command:
     - ps -ef | grep my_process_name
    initialDelaySeconds: 120
    periodSeconds: 30

Убедитесь, что у вас есть команда ps в $PATH.

Другой способ - создать файл в каталог tmp при запуске модуля и проверьте, присутствует ли файл в команде exec.

...