Найти тему

Как изменить часовой пояс всего кластера Kubernetes. Выстаявляем timezone в кластере глобально.

Оглавление

Вступление

Для начала давайте определимся с целью статьи. Точное время в контейнерах является важным критерием работы современных программных систем, так как в эру микросервисов и распределённых систем различное время может привести к ошибкам в работе и дополнительным временным затратам при анализе проблем. А часовой пояс является, как кажется, не самой важной характеристикой. Но всё же, точный временной пояс поможет вам корректно отображать и работать с временем без дополнительных проблем.

Итак, мы решили выставить один часовой пояс во всех наших контейнерах. В чём же дело?

Но, к сожалению, сделать это, оказывается, не так легко. Почему? Всё дело в работе системы виртуализации. Время не является характеристикой виртуальной машины и берётся из операционной системы хоста. Виртуальная машина обычно наследует часовой пояс и текущее время от хост-системы, на которой она выполняется. Это позволяет обеспечить корректную синхронизацию времени между виртуальной машиной и хост-системой.
Говоря простыми словами, в kubernates timezone запускаемых контейнеров наследуется от timezone нод кластера. Если вы настроили кластер на собстенном bare-metal server, то сложностей никаких нет, достаточно выставить tz на сервере и дело закрыто.

Но что если у вас отказоустойчивый гео-распределённый кластер, в котором, к тому же, используется несколько арендуемых площадок от разных service-провайдеров?

Итак, давайте посмотрим, какие есть варианты в данном случае.

Выставление timezone вручную

  1. Определите список nodes в кластере: для этого используем команду kubectl get nodes для получения списка node.
  2. Подключитесь по SSH к каждой из node.
  3. Измените timezone для каждой из нод: Например, используйте команду sudo timedatectl set-timezone <timezone> для выставления требуемой timezone. Изммените <timezone> с нужной вам настройкой, например, Asia/Novosibirsk.
  4. Проверьте изменение timezone: Используйте команду timedatectl для проверки timezone в операционной системе ноды.
  5. Сделайте рестарт компонентов кластера: перезапусnbnt kubernates cluster для того, чтобы убедиться, что timezone прописана во всех компонентах кластера. Вы можете использовать команду sudo systemctl restart kubelet для перезапуска kubelet на каждой ноде.
  6. Проверьте применение tz: запустите приложение и проверьте, что настройки верно применились.

Выставление timezone автоматически с помощью k8tz

k8tz или Kubernetes Timezone Controller - специальный аддон, который призван помочь администраторам в выставлении timezone глобально для всех контейнеров и CronJobs.

Установка в данном случае будет намного проще, например, можно воспользоваться пакетным менеджером helm:

helm repo add k8tz https://k8tz.github.io/k8tz/
helm install k8tz k8tz/k8tz --set timezone=Africa/Addis_Ababa

Ниже пример работы с k8tz

Работа с k8tz в кластере kubernates
Работа с k8tz в кластере kubernates