Этот материал предоставит вам несколько рекомендаций по поддержке сервера Rocky Linux в актуальном состоянии. Чтобы ваши серверы продолжали безопасно работать без вашего вмешательства в будущем, вы можете предпринять множество шагов.
Итак, кроме автоматических и стандартных параметров существует ряд других инструментов и конфигураций, которые вы можете применить к большинству серверов Rocky Linux. Если вы администрируете свой сервер самостоятельно, настройка всех сред вручную может нанести вред системе и привести к появлению ошибок.
Мы рассмотрим:
- Тестирование плавной перезагрузки в соответствии с передовыми методами управления приложениями, она минимизирует все связанные с обновлениями сложности
- Настройку автоматического обновления для большинства пакетов и библиотек на сервере
- Исправление ядра в реальном времени и другие передовые методы обновления ядра
Требования
- Сервер Rocky Linux 9 и пользователь sudo. Узнать больше о настройке сервера можно в этом мануале.
1: Рекомендации по управлению приложениями
Важнейшим моментом настройки сервера для автообновления является обеспечение возможности правильного перезапуска всех приложений после случайного простоя или перезагрузки. Менеджеры пакетов Linux бесперебойно работают в фоновом режиме, поэтому для необходимого обслуживания не нужно устанавливать никаких дополнительных пакетов. Однако все же не всегда ясно, как сервер будет вести себя после перезапуска, и это – одна из основных сложностей построения хорошей стратегии обновления.
Приложения в стеке по возможности должны управляться системой инициализации вашего сервера. В большинстве современных дистрибутивов Linux (в том числе и в Rocky Linux) этой системой является systemd. systemctl – это команда для взаимодействия с запущенными сервисами и для их автоматического перезапуска по мере необходимости. Практически все программы, которые были установлены через менеджер пакетов и которые работают в фоновом режиме, автоматически поставляются с сервисом systemd и конфигурационным файлом.
Читайте также: Управление сервисами и юнитами Systemd с помощью Systemctl
Когда вы запускаете свое собственное ПО или программы, развернутые из репозиториев Git, рекомендуем написать пользовательские юнит-файлы для интеграции с systemd. В качестве упрощенного аналога можно также использовать supervisor или системный планировщик cron с @reboot.
Читайте также:
- Установка и управление Supervisor на сервере Ubuntu и Debian
- Автоматизация задач с помощью Cron в CentOS 8
Когда конфигурация будет готова, обязательно проверьте ее после перезагрузки. Чтобы перезагрузить сервер, запустите: sudo shutdown now -r – это остановит запущенные процессы и перезагрузит машину. Вместо now можно указать точное время (в формате чч:мм) или период (в минутах), по прошествии которого нужно перезапустить сервер. Производственные развертывания, как правило, не требуют постороннего вмешательства после каких-либо незапланированных простоев – обычно все необходимые сервисы и конечные точки восстанавливаются автоматически.
Итак, для начала следует убедиться, что у вашего сервера не будет проблем с поддержкой приложений при перезагрузке. Далее мы поговорим о том, как планировать автоматические обновления.
2: Настройка автоматических обновлений
Менеджер пакетов Rocky, который называется dnf, имеет два основных способа полного обновления системы. Если запустить команду dnf upgrade без указания имени пакета, тогда обновится каждый пакет в системе. Также можно выполнить dnf upgrade-minimal для обновления каждого пакета только до последней версии исправления ошибок или безопасности во избежание нежелательных изменений в среде. Подробно с командами dnf можно ознакомиться в этом мануале.
Кроме того, Rocky предоставляет уникальный инструмент для автоматической установки исправлений безопасности и других важных обновлений — dnf-automatic. Его можно установить с помощью dnf:
sudo dnf install dnf-automatic -y
Команда dnf-automatic не запускается автоматически после установки. Вместо этого она предоставляет несколько сервисов, которые можно зарегистрировать в Systemd, чтобы настроить ее поведение:
- dnf-automatic — использует параметры файла конфигурации dnf-automatic в /etc/dnf/automatic.
- dnf-automatic-notifyonly — уведомляет о доступных обновлениях, но не устанавливает их.
- dnf-automatic-download — загружает пакеты, но не устанавливает их.
- dnf-automatic-install — устанавливает загруженные пакеты.
В этой статье мы включим службу dnf-automatic-install, но сначала нужно внести изменения в файл конфигурации dnf-automatic. Откройте файл с помощью vi или любого другого текстового редактора:
sudo vi /etc/dnf/automatic
Вы увидите:
[commands] # What kind of upgrade to perform: # default = all available upgrades # security = only the security upgrades upgrade_type = security random_sleep = 0 # Maximum time in seconds to wait until the system is on-line and able to # connect to remote repositories. network_online_timeout = 60 # To just receive updates use dnf-automatic-notifyonly.timer # Whether updates should be downloaded when they are available, by # dnf-automatic.timer. notifyonly.timer, download.timer and # install.timer override this setting. download_updates = yes # Whether updates should be applied when they are available, by # dnf-automatic.timer. notifyonly.timer, download.timer and # install.timer override this setting. apply_updates = no
Большинство опций в этом файле соответствуют разным переопределениям, которые предоставляют службы Systemd. Исключением является upgrade_type, которая по умолчанию имеет значение default. Если вы собираетесь внедрять автоматические обновления (наиболее проактивная конфигурация), то рекомендуем по умолчанию устанавливать только обновление безопасности, чтобы избежать неожиданных изменений в функционале. Измените значение upgrade_type на security, как показано в примере выше, затем сохраните и закройте файл.
Теперь можно включить службу с помощью systemctl:
sudo systemctl enable dnf-automatic-install.timer
Убедиться, что служба dnf-automatic-install запущена правильно, можно с помощью systemctl:
sudo systemctl status dnf-automatic-install
Вы получите результат:
dnf-automatic-install.service - dnf automatic install updates Loaded: loaded (/usr/lib/systemd/system/dnf-automatic-install.service; static; vendor preset: disabled) Active: inactive (dead) Jul 14 21:01:03 droplet-name dnf-automatic[40103]: No security updates needed, but 154 updates available Jul 14 21:01:03 droplet-name systemd[1]: dnf-automatic-install.service: Succeeded. Jul 14 21:01:03 droplet-name systemd[1]: Started dnf automatic install updates.
В отличии от некоторых служб Systemd, dnf-automatic реализована как timer, а не как постоянно работающая в фоновом режиме служба. Потому для нее нормально возвращать статус Active: inactive (dead), пока она загружена, а логи подтверждают успешные запуски.
Вы можете проверить детали работы службы с помощью systemctl cat:
sudo systemctl cat dnf-automatic-install.time
Вы получите:
[Unit] Description=dnf-automatic-install timer # See comment in dnf-makecache.service ConditionPathExists=!/run/ostree-booted Wants=network-online.target [Timer] OnCalendar=*-*-* 6:00 RandomizedDelaySec=60m Persistent=true [Install] WantedBy=timers.target
По умолчанию служба настроена на запуск в 6:00 каждый день. Не нужно изменять это значение.
Теперь у вас есть всё для загрузки необходимых обновлений безопасности без какого-либо постороннего вмешательства. В последнем разделе мы поговорим о том, как обновлять ядро и как лучше проводить перезагрузку сервера, когда она необходима.
3: Обновление и исправление ядра
Ядро системы нужно обновлять реже, чем все остальные пакеты. В Linux ядро содержит (почти) все рабочие аппаратные драйверы и отвечает за большинство низкоуровневых системных взаимодействий. Обычно ядро необходимо обновлять только в том случае, если на сервере обнаружена уязвимость и ее нужно устранить, если вам нужно добавить новую функцию ядра или если ядро сильно устарело и на нем скопилось множество ошибок.
К сожалению, универсального метода автоматически запланировать обновление ядра Linux не существует. Дело в том, что традиционно для обновления ядра требовалась полная перезагрузка системы, а планирование перезагрузки невозможно без сведений о среде. Как правило, от сервера ждут круглосуточной доступности (насколько это возможно), а перезагрузка может занять непредсказуемое количество времени или потребовать ручного вмешательства.
В большинстве производственных развертываний необходим дополнительный уровень перезагрузки, чтобы обеспечить доступность сервиса. К примеру, с помощью балансировщика нагрузки можно настроить автоматическое перенаправление трафика на серверы, которые могут обеспечить нужную функциональность в горизонтально масштабируемом развертывании – такие серверы будут перезагружаться по отдельности, что позволит нам избежать простоя.
Читайте также: Архитектурное проектирование приложений в Kubernetes
Включение Livepatch
Избежать простоев во время обновления ядра можно с помощью функции Linux под названием Livepatch. Она позволяет выполнять обновления ядра без перезагрузки. В Rocky Linux есть два основных мейнтейнера: kpatch от Red Hat, который предоставляет livepatch для Red Hat Enterprise Linux, и KernelCare, которая поддерживает Rocky Linux вместе с большинством других основных дистрибутивов Linux. Оба варианта доступны только по регистрации.
Из-за работы модели лицензирования Red Hat Enterprise Linux вы не сможете получать оперативные исправления ядра через kpatch в Rocky Linux. Поскольку Rocky во многом действует как нелицензионная версия Red Hat, то это не дает возможности зарегистрироваться для обновления ядра в режиме реального времени без Red Hat с полной лицензией. Способ включения Rocky и RHEL одинаковый. Сначала установим пакет kpatch-dnf:
sudo dnf install kpatch-dnf
Затем запустите dnf kpatch auto для автоматической подписки на службы исправления в реальном времени:
sudo dnf kpatch auto
Last metadata expiration check: 0:00:06 ago on Thu 14 Jul 2022 09:12:07 PM UTC. Dependencies resolved. Nothing to do. Complete!
kpatch проверит настроенные сервисы исправлений и, не найдя их, корректно завершит работу. В Red Hat вместо этого выполняется проверка лицензии и регистрация на серверах kpatch Red Hat. Также можете рассмотреть KernelCare как вариант коммерческой поддержки.
Заключение
В этом материале мы описали несколько стратегий автоматического обновления серверов Rocky Linux. Также мы рассмотрели некоторые нюансы в работе репозиториев пакетов, обновлении ядра и перезагрузке сервера. Это важные навыки DevOps и работы с серверами в более широком смысле, на этих концепциях основаны почти все производственные конфигурации.