Руководство администратора#

Сценарии администрирования#

Настройка пользователей#

Пользователь по умолчанию#

По умолчанию в компоненте Базовая ОС (CORE) продукта Platform V SberLinux OS Сore (SLC) (далее - OS Сore) создается привилегированный core-пользователь с указанным именем, но без пароля или ключа SSH. Если необходимо использовать core-пользователя с паролем или ключом – создайте конфигурацию Ignition, которая включает пароль и/или ключ(и) SSH для пользователя core. Также можно создать дополнительных новых пользователей с помощью конфигураций Ignition.

Управление пользователями через Ignition предпочтительнее, потому что это позволяет использовать одну и ту же конфигурацию на многих серверах, а конфигурация Ignition может храниться в репозитории и версионироваться. В конфигурации Ignition можно указать множество различных параметров для каждого пользователя, например:


passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGdByTgSVHq......."
    - name: elroy
      password_hash: "$6$5s2u6/jR$un0AvWnqilcgaNB3Mkxd5yYv6mTlWfOoCYHZmfi3LDKVltj.E8XNKEcwWm..."
      ssh_authorized_keys:
        - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGdByTgSVHq......."
      create:
        groups: [ sudo, docker ]

Примечание: хеши ненастоящие и приведены для примера.

Добавление пользователя вручную

Если необходимо добавить пользователя вручную, подключитесь к компьютеру по SSH и используйте useradd инструмент. Чтобы создать пользователя user, пропишите команду:


sudo useradd -p "*" -U -m user1 -G sudo

Где:

  • "*" cоздает пользователя, который не может войти в систему с помощью пароля, но может войти через SSH-ключ.

  • -U создает группу для пользователя;

  • -G добавляет пользователя в существующую sudo группу;

  • -m создает домашний каталог.

Если необходимо добавить пароль для пользователя, пропишите:


$ sudo passwd user1
New password:
Re-enter new password:
passwd: password changed.

Если необходимо обновить-ssh-ключи, пропишите:


update-ssh-keys -u user1 user1.pem

Предоставление доступа к sudo

  1. Если доверяете пользователю, можно предоставить права администратора с помощью команды visudo. Команда visudo проверяет синтаксис файла перед фактической перезаписью sudoers файла. Эту команду следует запускать от имени root, чтобы избежать потери доступа sudo в случае сбоя. Вместо непосредственного редактирования /etc/sudo.conf можно создать новый файл в /etc/sudoers.d/ каталоге. При запуске visudo требуется указать, какой файл нужно отредактировать, -f аргументом. Например, введите команду:


# visudo -f /etc/sudoers.d/user1

  1. Далее добавьте строку:


user1 ALL=(ALL) NOPASSWD: ALL

  1. Убедитесь, что sudo был предоставлен:


# su пользователь1
$ cat /etc/sudoers.d/user1
cat: /etc/sudoers.d/user1: Permission denied

$ sudo cat /etc/sudoers.d/user1
user1 ALL=(ALL) NOPASSWD: ALL

Создание нового пользователя#

Чтобы создать нового пользователя (или пользователей), добавьте его в раздел users списка конфигурации Butane. В следующем примере конфигурация создает два новых имени пользователя:


variant: fcos
version: 1.3.0
passwd:
  users:
    - name: jlebon
    - name: miabbott

Настройте ключи SSH или пароль, чтобы иметь возможность войти в систему, как эти пользователи.

Использование SSH-ключа#

Чтобы настроить ключ SSH для локального пользователя, используйте конфигурацию Butane:


variant: fcos
version: 1.3.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHn2eh...
    - name: jlebon
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDC5QFS...
        - sh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIveEaMRW...
    - name: miabbott
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDTey7R...

Расположение ключей SSH#

sshd использует вспомогательную программу для чтения открытых ключей из файлов в каталоге пользователя ~/.ssh/authorized_keys.d. Ключевые файлы читаются в алфавитном порядке, игнорируя точечные файлы. Для отладки чтения ~/.ssh/authorized_keys.d вручную запустите вспомогательную программу и проверьте ее вывод:


/usr/libexec/ssh-key-dir

Ignition записывает настроенные ключи SSH в файлы ~/.ssh/authorized_keys.d/ignition.

Использование аутентификации по паролю#

OS Сore поставляется без паролей по умолчанию. Чтобы установить пароль для локального пользователя, используйте конфигурацию Butane.

Ниже показан пример настройки password_hash для одного или нескольких пользователей:


variant: fcos
version: 1.3.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHn2eh...
    - name: jlebon
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDC5QFS...
        - sh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIveEaMRW...
    - name: miabbott
      password_hash: $y$j9T$aUmgEDoFIDPhGxEe2FUjc/$C5A...
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDTey7R...

Примечание: хеши ненастоящие и приведены для примера.

Чтобы создать безопасный хеш пароля, используйте mkpasswdfrom whoispackage. Для того чтобы проверить правильность настроек, запустите из контейнера:


$ crio run -ti --rm quay.io/oscore/mkpasswd --method=yescrypt
Password:
$y$j9T$A0Y3wwVOKP69S.1K/zYGN.$S596l11UGH3XjN...

Метод хеширования yescrypt рекомендуется для новых паролей.

Настроенный пароль будет принят для локальной аутентификации на консоли.

Настройка групп#

OS Core поставляется с несколькими настроенными по умолчанию группами: root, adm, wheel, sudo.

При настройке пользователей через конфигурацию Butane укажите группы, частью которых должны быть пользователи:


variant: fcos
version: 1.3.0
passwd:
    users:
        - name: core
        ssh_authorized_keys:
            - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHn2eh...
        - name: jlebon
    groups:
        - wheel
        ssh_authorized_keys:
            - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDC5QFS...
            - sh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIveEaMRW...
        - name: miabbott
    groups:
        - wheel
        password_hash: $y$j9T$aUmgEDoFIDPhGxEe2FUjc/$C5A...
        ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDTey7R...

Если необходимой группы не существует, создайте ее как часть конфигурации Butane:


variant: fcos
version: 1.3.0
passwd:
  groups:
    - name: engineering
    - name: marketing
      gid: 9000
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHn2eh...
    - name: jlebon
      groups:
        - engineering
        - wheel
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDC5QFS...
        - sh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIveEaMRW...
    - name: miabbott
      groups:
        - marketing
        - wheel
      password_hash: $y$j9T$aUmgEDoFIDPhGxEe2FUjc/$C5A...
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDTey7R...

Настройка административных привилегий#

Самый простой способ предоставить пользователям административные привилегии — добавить их в группы sudo и wheel как часть конфигурации Butane.


variant: fcos
version: 1.3.0
passwd:
  groups:
    - name: engineering
    - name: marketing
      gid: 9000
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHn2eh...
    - name: jlebon
      groups:
        - engineering
        - wheel
        - sudo
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDC5QFS...
        - sh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIveEaMRW...
    - name: miabbott
      groups:
        - marketing
        - wheel
        - sudo
      password_hash: $y$j9T$aUmgEDoFIDPhGxEe2FUjc/$C5A...
      ssh_authorized_keys:
        - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDTey7R...

Включение аутентификации по паролю SSH#

Чтобы включить аутентификацию по паролю через SSH, добавьте в конфигурацию Butane следующее:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/ssh/sshd_config.d/20-enable-passwords.conf
      mode: 0644
      contents:
        inline: |
          # OS Сore по умолчанию отключает вход по SSH-паролю.
          # Включите его.
          # Этот файл должен быть отсортирован до 40-disable-passwords.conf.
          PasswordAuthentication yes

Установка имени хоста#

Чтобы установить пользовательское имя хоста для системы, используйте следующую конфигурацию Butane для записи в /etc/hostname:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/hostname
      mode: 0644
      contents:
        inline: myhostname

После загрузки убедитесь, что желаемое имя хоста установлено с помощью hostnamectl.

Настройка даты и времени#

Операционные системы различают следующие два типа часов:

  • Часы реального времени (RTC), обычно называемые аппаратными часами (обычно это интегральная схема на системной плате), которые полностью независимы от текущего состояния операционной системы и работают даже при выключении компьютера.

  • Системные часы, также известные как программные часы, которые поддерживаются ядром, и их начальное значение основано на часах реального времени. Как только система загружена и системные часы инициализированы, системные часы полностью независимы от часов реального времени.

Системное время всегда хранится в едином координированном времени (UTC) и при необходимости преобразуется в приложениях в местное время. Местное время - это фактическое время в текущем часовом поясе с учетом перехода на летнее время (DST). Часы реального времени могут использовать UTC или местное время. Рекомендуется использовать UTC.

OS Core предлагает три средства командной строки, которые можно использовать для настройки и отображения информации о системной дате и времени:

  • утилита timedatectl, которая является частью systemd;

  • традиционная команда даты;

  • утилита hwclock для доступа к аппаратным часам.

Использование команды timedatectl#

Утилита timedatectl распространяется как часть systemd system and service manager и позволяет просматривать или изменять конфигурацию системных часов. Можно использовать этот инструмент для изменения текущей даты и времени, установки часового пояса или включения автоматической синхронизации системных часов с удаленным сервером.

Отображение текущей даты и времени#

Чтобы отобразить текущую дату и время вместе с подробной информацией о конфигурации системных и аппаратных часов, запустите команду timedatectl без дополнительных опций командной строки:


timedatectl

Чтобы отобразить текущую дату и время, выполните команду date без дополнительных опций командной строки:


date

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

По умолчанию команда date отображает местное время. Чтобы отобразить время в UTC, запустите команду с параметром командной строки --utc или -u:


date --utc

Настройте формат отображаемой информации, указав опцию +"format" в командной строке:


date +"format"

Изменение текущего времени#

Чтобы изменить текущее время, введите следующую команду в командной строке от имени пользователя root:


timedatectl set-time HH:MM:SS

Замените HH на часы, ММ на минуты и SS на секунды, все они вводятся в двузначной форме.

Эта команда обновляет как системное время, так и аппаратные часы. Результат аналогичен использованию команд date --set и hwclock --systohc.

По умолчанию система настроена на использование UTC. Чтобы настроить систему на поддержание часов по местному времени, запустите команду timedatectl с параметром set-local-rtc от имени пользователя root:


timedatectl set-local-rtc boolean

Чтобы настроить систему на поддержание часов по местному времени, замените логическое значение boolean на yes (или, альтернативно, y, true, t или 1). Чтобы настроить систему на использование UTC, замените логическое значение на no (или, альтернативно, n, false, f или 0). Параметр по умолчанию - no.

Изменение текущей даты#

Чтобы изменить текущую дату, введите следующую команду в командной строке от имени пользователя root:


timedatectl set-time YYYY-MM-DD

Замените YYYY - на четырехзначный год, ММ - на двузначный месяц, а DD - на двузначный день месяца.

Обратите внимание, что изменение даты без указания текущего времени приводит к установке времени на 00:00:00.

Изменение часового пояса#

Чтобы перечислить все доступные часовые пояса, введите следующее в командной строке:


timedatectl list-timezones

Чтобы изменить используемый в данный момент часовой пояс, введите как пользователь root:


timedatectl set-timezone time_zone

Замените time_zone любым из значений, перечисленных командой timedatectl list-timezones.

Синхронизация системных часов с удаленным сервером#

В отличие от настроек вручную, команда timedatectl также позволяет включить автоматическую синхронизацию системных часов с группой удаленных серверов, использующих протокол NTP. Включение NTP использует службу chronyd или ntpd, в зависимости от того, какая из них установлена.

Службу NTP можно включить и отключить с помощью следующей команды:


timedatectl set-ntp boolean

Чтобы разрешить системе синхронизировать системные часы с удаленным сервером NTP, замените значение boolean на yes (параметр по умолчанию). Чтобы отключить эту функцию, замените логическое значение на no.

Управление основными настройками SELinux#

Security-Enhanced Linux (SELinux) — это дополнительный уровень безопасности системы, определяющий, какие процессы могут получать доступ к тем или иным файлам, каталогам и портам. Эти разрешения определены в политиках SELinux. Политика — это набор правил, которыми руководствуется механизм безопасности SELinux.

SELinux имеет два возможных состояния:

1 Включено.

2 Выключено.

Когда SELinux включен, он содержит два режима:

  1. Принудительный.

  2. Разрешающий.

В принудительном режиме SELinux применяет загруженные политики. SELinux запрещает доступ на основе правил политики SELinux и разрешает только явно разрешенные взаимодействия. Принудительный режим является самым безопасным режимом SELinux и является режимом по умолчанию после установки.

В разрешающем режиме SELinux не применяет загруженные политики. SELinux не запрещает доступ, но сообщает о действиях, нарушающих правила, в журнал /var/log/audit/audit.log. Разрешающий режим является режимом по умолчанию во время установки. Разрешающий режим также полезен, например, при устранении неполадок.

Обеспечение требуемого состояния SElinux#

По умолчанию SELinux работает в принудительном режиме.

Примечание: рекомендуем поддерживать систему в принудительном режиме. В целях отладки установите SELinux в разрешающий режим.

Следуйте этой процедуре, чтобы изменить состояние и режим SELinux в системе.

Процедура

  1. Отобразите текущий режим SELinux:


$ getenforce

  1. Чтобы временно установить SELinux:

  • Для принудительного режима:


# setenforce

  • Для разрешающего режима:


# setenforce Permissive

Примечание: после перезагрузки режим SELinux устанавливается на значение, указанное в файле конфигурации /etc/selinux/config.

Настройка политики для SELinux, функционирующего в принудительном режиме#

В следующих разделах описываются файлы конфигурации и политики SELinux, а также связанные файловые системы, расположенные в /etc/ каталоге.

Конфигурационный файл /etc/sysconfig/selinux

Существует два способа настроить SELinux: с помощью средства настройки уровня безопасности (system-config-securitylevel) или вручную отредактировав файл конфигурации (/etc/sysconfig/selinux).

Файл /etc/sysconfig/selinux является основным конфигурационным файлом для включения или отключения SELinux, а также для настройки того, какую политику применять в системе и как ее применять.

Примечание: файл /etc/sysconfig/selinux содержит символическую ссылку на фактический файл конфигурации /etc/selinux/config.

Ниже объясняется полное подмножество параметров, доступных для настройки:

  • SELINUX=<enforcing|permissive> — определяет состояние SELinux верхнего уровня в системе.

  • enforcing — политика безопасности SELinux применяется принудительно.

  • permissive — система SELinux выводит предупреждения, но не применяет политику. Это полезно для целей отладки и устранения неполадок. В разрешающем режиме будет регистрироваться больше отказов, так как субъекты смогут продолжить действия, в противном случае запрещенные в принудительном режиме. Например, обход дерева каталогов приведет к появлению нескольких avc: denied сообщений для каждого прочитанного уровня каталога, где ядро в принудительном режиме остановило бы начальный обход и предотвратило появление дальнейших сообщений об отказе.

Примечание: действия, выполняемые при отключенном SELinux, могут привести к тому, что файловая система больше не будет иметь надлежащего контекста безопасности, определенного политикой. Запуск fixfiles relabel перед включением SELinux приведет к переименованию файловой системы, чтобы SELinux работал правильно при включении. Для получения дополнительной информации обратитесь к справочной странице fixfiles(8). Дополнительные пробелы в конце строки конфигурации или в виде дополнительных строк в конце файла могут привести к неожиданному поведению. На всякий случай удалите ненужные пробелы.

  • SELINUXTYPE=<targeted|strict> — указывает, какая политика в данный момент применяется SELinux.

  • targeted — защищены только целевые сетевые демоны.

Примечание: следующие демоны защищены целевой политикой по умолчанию: dhcpd, httpd, named, nscd, ntpd, portmap, snmpd, squid, и syslogd. Остальная часть системы работает в unconfined_t домене.

Файлы политик для этих демонов можно найти в файле /etc/selinux/targeted/src/policy/domains/program.

Принудительное применение политики для этих демонов можно включить или выключить, используя логические значения, управляемые средством настройки уровня безопасности (system-config-securitylevel). Переключение логического значения для целевого демона отключает переход политики для демона, который предотвращает, например, init переход dhcpd из unconfined_t домена в домен, указанный в dhcpd. Домен unconfined_t позволяет субъектам и объектам с этим контекстом безопасности работать под стандартной защитой OS Core.

strict — полная защита SELinux для всех демонов. Контексты безопасности определяются для всех субъектов и объектов, и каждое отдельное действие обрабатывается сервером принудительного применения политики.

Каталог /etc/selinux/

Каталог /etc/selinux/ является основным местом расположения всех файлов политики, а также основного файла конфигурации. В следующем примере показано примерное содержимое /etc/selinux/ каталога:


-rw-r--r-- 1 root root 448 Sep 22 17:34 config
drwxr-xr-x 5 root root 4096 Sep 22 17:27 strict
drwxr-xr-x 5 root root 4096 Sep 22 17:28 targeted

Два подкаталога, strict/ и targeted/, являются конкретными каталогами, в которых содержатся файлы политики с одинаковыми именами (strict и targeted). Политика strict защищает основные системные сервисы, например, веб-сервер, DHCP, DNS, но не трогает все остальные программы. Политика targeted - управляет не только сетевыми службами, но и программами пользователя.

  1. Чтобы режим SELinux сохранялся при перезагрузке, измените (с правами root) SELINUX переменную в /etc/selinux/config файле конфигурации.

Например, чтобы переключить SELinux в принудительный режим:


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
SELINUX=enforcing
...

Предупреждение: Отключение SELinux снижает безопасность системы. Вместо этого отключите SELinux, добавив selinux=0 параметр в командную строку ядра.

Настройка хранилища#

OS Core поставляется с простой компоновкой хранилища по умолчанию и требует не менее 1 ГБ. Если корневая файловая система меньше рекомендуемого размера, при входе в систему появится предупреждение. Если корневая файловая система меньше 1 ГБ и за ней следует другой раздел, OS Core откажется от загрузки. Корневой раздел является последним и заполняет все доступное дисковое пространство. Все данные хранятся в корневом разделе, отдельно от загрузочного. Если необходимо добавить дополнительные разделы после корневой файловой системы, нужно изменить размер корневого раздела, чтобы он был не менее 1 ГБ. Дополнительная информация находится в разделе «Разметка диска».

Ссылки на block devices из Ignition файла#

Многие из приведенных ниже примеров будут ссылаться на block device, такое как /dev/vda. Название доступных block devices зависит от типа инфраструктуры (облачная или без программного обеспечения) и от конкретного типа экземпляра. Например, в AWS некоторые типы экземпляров имеют диски NVMe (/dev/nvme*), другие же используют /dev/xvda*. Во время подготовки (provisioning) можно использовать ссылку /dev/disk/by-id/oscore-boot-disk для более удобного обращения к устройству в случае если конфигурация диска простая и использует тот же диск, с которого была запущена OS Core. В тех случаях, когда вам нужен доступ к другим дискам, проще всего загрузить одну машину с конфигурацией Ignition, которая предоставляет доступ к SSH, и проверить block devices, например, с помощью команды lsblk. В случае физической аппаратуры наилучшим способом обратиться к другим устройствам является ссылка /dev/disk/by-id/ или /dev/disk/by-path.

Настройка отдельных разделов /var#

Ниже приведен пример конфигурации Butane для настройки /var на отдельной части основного диска (добавление раздела /var на основной диск):


variant: fcos
version: 1.3.0
storage:
  disks:
  - # Ссылка на блочное устройство, с которого была загружена операционная система.
    device: /dev/disk/by-id/OSCore-boot-disk
    # Не стирайте таблицу разделов, так как это основная.
    # устройство.
    wipe_table: false
    partitions:
    - number: 4
      label: root
      # Выделите корневым файлам не менее 8 гигабайт.
      size_mib: 8192
      resize: true
    - size_mib: 0
      # Присваиваем разделу описательную метку. Это важно для того, чтобы ссылаться на него независимо от устройства в других частях конфигурации
      label: var
  filesystems:
    - path: /var
      device: /dev/disk/by-partlabel/var
      # Можно выбрать файловую систему, которая подходит
      format: ext4
      # Запросите Butane сгенерировать модуль монтирования, чтобы эта файловая система монтировалась в реальном корневом каталоге
      with_mount_unit: true

Также возможно установить подраздел /var отдельно. Например, /var/lib/containers. Для добавления подраздела /var/lib/containers на основной диск внесите конфигурацию:


variant: fcos
version: 1.3.0
storage:
  disks:
  - device: /dev/disk/by-id/oscore-boot-disk
    wipe_table: false
    partitions:
    - number: 4
      label: root
      # Выделяйте как минимум 1 Гб дискового пространства
      size_mib: 1024
      resize: true
    - size_mib: 0
      label: containers
  filesystems:
    - path: /var/lib/containers
      device: /dev/disk/by-partlabel/containers
      format: xfs
      with_mount_unit: true

Можно присоединить хранилище с другого диска. Например, примонтировать информацию об авторизации пользователей /var/log из раздела /dev/vdb.

Также можно добавить информацию об авторизации пользователей /var/log со вторичного диска:


variant: fcos
version: 1.3.0
storage:
  disks:
  - device: /dev/vdb
    wipe_table: false
    partitions:
    - size_mib: 0
      start_mib: 0
      label: log
  filesystems:
    - path: /var/log
      device: /dev/disk/by-partlabel/log
      format: xfs
      with_mount_unit: true

Определите диск с несколькими разделами. Например, ниже показано, как удалить диск и создать два новых раздела:


variant: fcos
version: 1.3.0
storage:
  disks:
    -
      # Для гарантии уникальности используется идентификатор World Wide Name (WWN) ID
      device: /dev/disk/by-id/wwn-0x50014e2eb507fcdf
      # Нужно убедиться, что таблица разделов и сами разделы созданы заново.
      wipe_table: true
      partitions:
        # Размер первого раздела (слот номер 1) составляет 32 ГБ и начинается с нулевой отметки устройства.
        # type_guid определен как Linux swap partition
        - label: part1
          number: 1
          size_mib: 32768
          start_mib: 0
          type_guid: 0657fd6d-a4ab-43c4-84e5-0933c84b4f4f
        # Второй раздел (слот номер 2) будет располагаться сразу после первого раздела и займет все доступное дисковое пространство
        # type_guid явно не указан, будет использоваться Linux native partititon
         - label: part2

Перенастройка корневой файловой системы#

Для перенастройки корневой файловой системы используйте /dev/disk/by-label/root, как ссылку на изначальный тип разделения корневой системы. Убедитесь, что в новой файловой системе присутствует метка root. Пример перехода от xfs к ext4, c повторным использованием одного и того же раздела на основном диске:

На примере ниже представлено изменение корневой файловой системы на ext4:


variant: fcos
version: 1.3.0
storage:
  filesystems:
    - device: /dev/disk/by-partlabel/root
      wipe_filesystem: true
      format: ext4
      label: root

Как и в предыдущей части, также можно полностью переместить корневую файловую систему. В примере ниже показан перенос root на устройство RAID0:


variant: fcos
version: 1.3.0
storage:
  raid:
    - name: myroot
      level: raid0
      devices:
        - /dev/disk/by-id/virtio-disk1
        - /dev/disk/by-id/virtio-disk2
  filesystems:
    - device: /dev/md/myroot
      format: xfs
      wipe_filesystem: true
      label: root

Необязательно указывать параметры (ключи) path и with_mount_unit, OS Core найдет и установит специальный раздел root самостоятельно.

Если необходимо продублировать загрузочный диск на несколько дисков, чтобы обеспечить отказоустойчивость, необходимо отобразить все разделы по умолчанию (корневой, загрузочный, системный раздел EFI и начальный загрузчик). Для этого существует специальный синтаксис конфигурации Butane. Разделение загрузочного диска на две копии:


variant: fcos
version: 1.3.0
boot_device:
  mirror:
    devices:
      - /dev/sda
      - /dev/sdb

Определение файловой системы#

Ниже, на примере, представлен процесс создания файловой системы путем определения и маркировки разделов, объединения их в RAID-массив и форматирования этого массива как ext4.

Определение файловой системы на устройстве хранения RAID:


variant: fcos
version: 1.3.0
storage:
  disks:
  # Здесь определяются два раздела, каждый на своем диске. Диски идентифицируются по World Wide Name (WWN) ID
  - device: /dev/disk/by-id/wwn-0x50014ee261e524e4
    wipe_table: true
    partitions:
    -
      # Для каждого раздела назначаем имя (метку)
      label: "raid.1.1"
      # Каждый раздел начинается с нулевого сектора и имеет размер 64 ГБ
      number: 1
      size_mib: 65536
      start_mib: 0
  - device: /dev/disk/by-id/wwn-0x50014ee0b8442cd3
    wipe_table: true
    partitions:
    - label: "raid.1.2"
      number: 1
      size_mib: 65536
      start_mib: 0
      # Используются ранее определенные разделы в качестве устройств в массиве RAID1 MD.
  raid:
    - name: publicdata
      level: raid1
      devices:
      - /dev/disk/by-partlabel/raid.1.1
      - /dev/disk/by-partlabel/raid.1.2
      # Полученный массив MD используется для создания файловой системы EXT4.
  filesystems:
    - path: /var/publicdata
      device: /dev/md/publicdata
      format: ext4
      label: PUB
      with_mount_unit: true

Зашифрованное хранилище (LUKS)#

Пример настройки устройства LUKS в /var/lib/data:


variant: fcos
version: 1.3.0
storage:
  luks:
    - name: data
      device: /dev/vdb
  filesystems:
    - path: /var/lib/data
      device: /dev/mapper/data
      format: xfs
      label: DATA
      with_mount_unit: true

Корневую файловую систему также можно переместить в LUKS. В этом случае устройство LUKS должно быть связано с Clevis (подключаемый пользователем фреймворк для автоматического дешифрования. Его можно использовать для обеспечения автоматического дешифрования данных или даже автоматической разблокировки томов LUKS). Доступны два основных типа плагина: TPM2 и Tang (или комбинация тех плагинов, которые используют Shamir Secret Sharing).

Плагин TPM2 просто связывает шифрование с используемой физической машиной. Обязательно изучите документацию, прежде чем выбирать между TPM2 и Tang. Для получения дополнительной информации ознакомьтесь с разделом документации по Clevis TPM2.

Примечание: для работы должно быть не менее 1 ГБ оперативной памяти для повторного выделения корневого раздела.

Существует упрощенный синтаксис конфигурации Butane для настройки шифрования и связывания корневой файловой системы. Ниже приведен пример его использования для создания зашифрованной корневой файловой системы, связанной с плагином TPM2:

Шифрование корневой файловой системы с помощью TPM2 Clevis:


variant: fcos
version: 1.3.0
boot_device:
  luks:
    tpm2: true

Это эквивалентно шифрованию корневой файловой системы с помощью TPM2 Clevis без использования boot_device, как представлено в следующей расширенной конфигурации:


variant: fcos
version: 1.3.0
storage:
  luks:
    - name: root
      label: luks-root
      device: /dev/disk/by-partlabel/root
      clevis:
        tpm2: true
      wipe_volume: true
  filesystems:
    - device: /dev/mapper/root
      format: xfs
      wipe_filesystem: true
      label: root

Примечание: не нужно указывать параметры (ключи) path и with_mount_unit, OS Core найдет и установит специальный раздел root самостоятельно.

Пример шифрования корневой файловой системы с помощью Tang Clevis с упрощенным синтаксисом с конфигурацией Tang:


variant: fcos
version: 1.3.0
boot_device:
  luks:
    tang:
      - url: http://192.168.122.1:80
        thumbprint: bV8aajlyN6sYqQ41lGqD4zlhe0E

Далее система свяжется с сервером Tang при загрузке.

Можно настроить Tang и TPM2 связки (в том числе несколько серверов Tang для избыточности). По умолчанию, для разблокировки корневой файловой системы, требуется только устройство TPM2 или один сервер Tang. Это можно изменить с помощью ключа threshold:

Шифрование корневой файловой системы с помощью TPM2 и Tang:


variant: fcos
version: 1.3.0
boot_device:
  luks:
    tang:
      - url: http://192.168.122.1:80
        thumbprint: bV8aajlyN6sYqQ41lGqD4zlhe0E
    tpm2: true
    # this will allow rootfs unlocking only if both TPM2 and Tang pins are
    # accessible and valid
    threshold: 2

Установка размера корневого раздела#

Если используется Ignition для перенастройки или перемещения корневого раздела, этот раздел не будет расширяться автоматически при первой загрузке. В случае перемещения корневого раздела на новый диск (или на несколько дисков) следует установить желаемый размер раздела с помощью поля size_mib. При перенастройке корневой файловой системы, измените размер существующего раздела, используя поле resize:

На примере ниже представлено переназначение размера корневого раздела до максимального размера:


variant: fcos
version: 1.3.0
storage:
  disks:
    - device: /dev/vda
      partitions:
        - label: root
          number: 4
          # 0 означает использование всего доступного пространства
          size_mib: 0
          resize: true
  luks:
    - name: root
      device: /dev/disk/by-partlabel/root
      clevis:
        tpm2: true
      wipe_volume: true
  filesystems:
    - device: /dev/mapper/root
      format: xfs
      wipe_filesystem: true
      label: root

Добавление подкачки/обмена (swap)#

Можно создать раздел подкачки, охватывающий все устройство sdb, выделить на нем область для работы и создать блок подкачки systemd, чтобы область была включена при загрузке.

На примере ниже представлена настройка раздела подкачки на втором диске:


variant: fcos
version: 1.3.0
storage:
  disks:
    - device: /dev/sdb
      wipe_table: true
      partitions:
        - number: 1
          label: swap
  filesystems:
    - device: /dev/disk/by-partlabel/swap
      format: swap
      wipe_filesystem: true
      with_mount_unit: true

Добавление сетевого хранилища#

OS Core может быть настроена для монтирования сетевых файловых систем, таких как NFS и CIFS. Рекомендуется это делать с помощью Ignition файла. Файловые системы можно смонтировать при загрузке, создав стандартный блок монтирования. Кроме того, файловая система может быть настроена, когда пользователи получают доступ к точке монтирования, создав дополнительный блок автомонтирования. Ниже приведены примеры каждого из них для файловой системы NFS.

Настройка монтирования NFS#

Создание системного устройства для подключения файловой системы NFS при загрузке.

Примечание: файл .mount должен быть привязан к пути файла (например,/var/mnt/data = var-mnt-data.mount)


variant: fcos
version: 1.3.0
systemd:
  units:
    - name: var-mnt-data.mount
      enabled: true
      contents: |
        [Unit]
        Description=Mount data directory

        [Mount]
        What=example.org:/data
        Where=/var/mnt/data
        Type=nfs4

        [Install]
        WantedBy=multi-user.target

Создайте системное устройство для монтирования файловой системы NFS при доступе пользователей к точке монтирования (автомонтирование):


variant: fcos
version: 1.3.0
systemd:
  units:
    - name: var-mnt-data.mount
      contents: |
        [Unit]
        Description=Mount data directory

        [Mount]
        What=example.org:/data
        Where=/var/mnt/data
        Type=nfs4

        [Install]
        WantedBy=multi-user.target

    - name: var-mnt-data.automount
      enabled: true
      contents: |
        [Unit]
        Description=Automount data directory

        [Automount]
        TimeoutIdleSec=20min
        Where=/var/mnt/data

        [Install]
        WantedBy=multi-user.target

Разметка диска#

При первой загрузке корневая файловая система заполняет остальную часть диска. Образ диска можно настроить с использованием конфигурации Butane для перераспределения файловых систем диска, а также для создания и форматирования. Установка в систему без программного обеспечения аналогична – установщик копирует изначальный образ на целевой диск и вводит указанный конфигуратор в /boot для использования при первой загрузке.

Более подробную информацию см. в разделе «Перенастройка корневой файловой системы».

Таблицы разделов#

Использование номеров для обозначения конкретных разделов не рекомендуется, вместо этого используйте метки (labels) или UUID. В OS Core используются следующие названия меток:

  • boot;

  • boot-<number>;

  • root;

  • root-<number>;

  • BIOS-BOOT;

  • bios-<number>;

  • EFI-SYSTEM;

  • esp-<number>;

  • md-boot;

  • md-root для имен RAID устройств.

Примечание: не рекомендуется создавать разделы, файловые системы или RAID устройства с вышеприведенными именами.

x86_64 Таблица разделов#

Образ диска x86_64 отформатирован GPT с защитным MBR. Он поддерживает загрузку как через BIOS и через UEFI (включая безопасную загрузку).

Макет разделов для x86_64 представлен ниже:

Номер

Метка

Содержание

Тип раздела

1

BIOS-BOOT

Образ BIOS GRUB

Исходные данные

2

EFI-SYSTEM

Образ EFI GRUB и прокладка безопасной загрузки

FAT32

3

boot

Конфигурация GRUB, образы kernel/initramfs

ext4

4

root

Корневая файловая система

xfc

Раздел EFI-SYSTEM можно удалить или переформатировать при загрузке BIOS. Аналогичным образом, раздел BIOS-BOOT можно удалить или переформатировать при загрузке EFI.

Установленные файловые системы#

OS Core использует OSTree - систему для управления несколькими деревьями загрузочных операционных систем, которые совместно используют хранилище. В OS Core каждая версия операционной системы является частью / файловой системы. Все развертывания используют одно и то же хранилище /var, которое может находиться в одной файловой системе или монтироваться отдельно. В OS Core каждая версия операционной системы является частью файловой системы.

Ниже показаны точки монтирования по умолчанию на x86_64 для системы OS Core, установленной на диске /dev/vda:


$ findmnt --real # Некоторые детали опущены
TARGET        SOURCE                                                   FSTYPE  OPTIONS
/             /dev/vda4[/ostree/deploy/fedora-oscore/deploy/$hash]     xfs     rw
|-/sysroot    /dev/vda4                                                xfs     ro
|-/etc        /dev/vda4[/ostree/deploy/fedora-oscore/deploy/$hash/etc] xfs     rw
|-/usr        /dev/vda4[/ostree/deploy/fedora-oscore/deploy/$hash/usr] xfs     ro
|-/var        /dev/vda4[/ostree/deploy/fedora-oscore/deploy/var]       xfs     rw
`-/boot       /dev/vda3                                                ext4    ro

Как представлено в примере, раздел системы EFI, который ранее был установлен на /boot/efi, находится уже в другом месте. В системах, настроенных с зеркалированием загрузочных устройств, на каждом входящем диске есть независимые разделы EFI.

Неизменяемые точки монтирования / и /usr#

В OS Core раздел /usr предназначен только для чтения, поэтому каталог /usr/local/bin/ также будет доступен только для чтения (если не будет смонтирован другой диск). Это позволяет использовать автоматическое обновление OS Core.

Поскольку OSTree используется для управления всеми файлами, принадлежащими к операционной системе, точки монтирования / и /usr не предназначены для записи. Любые изменения в операционной системе должны применяться через RPM-Ostree.

Точка монтирования /boot тоже не предназначена для записи, потому что система разделов EFI не монтируется по умолчанию. Эти файловые системы управляются rpm-ostree и bootupd, и не должны изменяться администратором.

/ (в корне файловой системы в корневом разделе) настроено в режиме «только для чтения» в /sysroot, и также должно быть недоступно для просмотра и изменений напрямую.

Конфигурация /etc и состояние /var#

Единственные поддерживаемые места для записи – это /etc и /var. Каталог /etc должен содержать только файлы конфигурации, хранение данных не допускается. Все данные должны храниться в /var, так как в этом разделе обновления системы их не затрагивают. Места, обычно используемые для хранения неизменной информации (например, /home, или /srv), являются символическими ссылками на каталоги в /var (например, /var/home или /var/srv).

Выбор версии и загрузка#

Вход в меню загрузчика операционной системы GRUB создается для каждой версии OS Core, которая в настоящее время доступна в системе. Вход в меню ссылается на развертывание ostree, которое состоит из ядра Linux, инициатора и хеша, связывающегося с ostreecommit (передается через аргумент ядра Ostree =). Во время загрузки ostree прочитает этот аргумент ядра, чтобы определить, какое развертывание использовать в качестве корневой файловой системы. Каждое обновление или изменение в системе (установка пакета, добавление аргументов ядра) создает новое развертывание. Это позволяет возвращаться к предыдущей версии, если обновление вызывает проблемы.

Управление файлами, каталогами и ссылками#

Используйте конфигурационный файл Ignition для создания, замены или обновления файлов, каталогов или ссылок.

В примере ниже создается каталог с режимом по умолчанию (доступ 0755: могут читать и исполнять все, данные изменяются рекурсивно) и доступен только владельцу (по умолчанию root):


variant: fcos
version: 1.3.0
storage:
  directories:
  - path: /opt/tools
    overwrite: true

На примере ниже создается файл с именем /var/helloworld с содержимым в строке. Режим доступа к файлу установлен как 0644 (читать могут все, писать может только владелец), владельцем назначается пользователь: группа dnsmasq:dnsmasq:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /var/helloworld
      overwrite: true
      contents:
        inline: Hello, world!
      mode: 0644
      user:
        name: dnsmasq
      group:
        name: dnsmasq

На примере ниже создается файл с содержимым, извлеченным из удаленного источника. В этом случае удаленный источник получает URL-адрес HTTPS и ожидает, что файл будет сжат с помощью GZIP, далее распаковывает его, прежде чем записать на диск. Распакованный контент проверяется по значению хеша, указанному в конфигурации, в данном случае SHA512, за которым следуют символы HEX 128, предоставленные командой SHA512SUM. Полученный файл переведен в режим читаемого и исполняемого для всех:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /opt/tools/transmogrifier
      overwrite: true
      contents:
        source: https://mytools.example.com/path/to/archive.gz
        compression: gzip
        verification:
          hash: sha512-00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
      mode: 0555

В примере ниже создается символическая ссылка в каталог /usr/local/bin для пути в /opt. Используется для того, чтобы локальные процессы вызывали программу, не изменяя переменную среды PATH:


variant: fcos
version: 1.3.0
storage:
  links:
    - path: /usr/local/bin/transmogrifier
      overwrite: true
      target: /opt/tools/transmogrifier
      hard: false

Если необходимо, чтобы корневой каталог принадлежал конкретному пользователю, необходимо перечислить разрешения для этого пользователя в конфигурации Butane, как представлено в примере ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /home/builder/.config
      user:
        name: builder
      group:
        name: builder
    - path: /home/builder/.config/systemd
      user:
        name: builder
      group:
        name: builder
    - path: /home/builder/.config/systemd/user
      user:
        name: builder
      group:
        name: builder
    - path: /home/builder/.config/systemd/user/default.target.wants
      user:
        name: builder
      group:
        name: builder
    - path: /home/builder/.config/systemd/user/timers.target.wants
      user:
        name: builder
      group:
        name: builder
    - path: /home/builder/.config/systemd/user/sockets.target.wants
      user:
        name: builder
      group:
        name: builder

Конфигурация сети#

Параметры конфигурации хост-сети#

Если не настроено иное, OS Core будет пытаться получить динамический IP-адрес для каждого сетевого интерфейса с подключенным кабелем. Однако если необходимо использовать статическую адресность или более сложные сети (vlans, bonds, bridges, teams и т. д.), можно сделать это несколькими способами, которые кратко изложены ниже. Настройка сводится к конфигурации для NetworkManager, которая представлена в виде ключевых файлов NetworkManager.

Варианты конфигурации#

Виртуальная машина OS Core настраивается с помощью Ignition-файлов, которые запускаются из initramfs (образ файловой системы, загружаемый в оперативную память вместе с ядром) при первой загрузке виртуальной машины.

В зависимости от платформы виртуальной машине может потребоваться:

  • сетевой доступ для получения удаленных ресурсов;

  • сама конфигурация Ignition;

  • удаленные ресурсы, указанные в конфигурации Ignition.

Сеть будет запущена в initramfs только в том случае, если это требуется или если пользователь запрошен пользователем с возможностью rd.neednet=1.

Независимо от того, нужна ли машина в сети initramfs, нужно настроить сеть для виртуальной машины.

Варианты настройки сети:

  • с помощью аргументов ядра, которые обрабатываются модулями dracut в initramfs при первой загрузке;

  • с помощью настройки образа путем встраивания конфигурации сети в образ ISO или PXE;

  • через oscore-installer install --copy-network путем распространения сетевой конфигурации среды установки;

  • через Afterburn путем применения конфигурации сети, введенной различными платформами;

  • через Ignition путем установки файлов, которые NetworkManager использует при запуске.

Если нужно сетевое подключение для извлечения конфигурации Ignition или если у Ignition есть удаленные ссылки, не получится сделать это через сетевую конфигурацию в Ignition. Если настроить сетевую конфигурацию несколькими способами (например, с помощью аргументов ядра и через Ignition), то конфигурация, предоставляемая через Ignition, будет приоритетной.

Примечание: не поддерживается частичная настройка конфигурации одновременно через аргументы ядра и через Ignition.

Настройка через аргументы ядра#

При первой загрузке машины администратор может предоставить аргументы ядра, определяющие конфигурацию сети.

Способы внесения аргументов администратором:

  • С помощью остановки в командной строке GRUB при первой загрузке (загрузка Ignition).

  • При автоматизации установки с помощью добавленных аргументов ядра (например, coreos.inst.install_dev=/dev/sda или coreos.inst.ignition_url=http://example.com/config.ign) на виртуальную машину без программного обеспечения. Если добавить сетевые параметры, они будут применяться к установочной загрузке, а также к первой загрузке (загрузке Ignition) установленной машины.

  • Путем добавления сетевых аргументов ядра в существующий набор аргументов ядра в конфигурации PXE.

Ниже приведен пример аргументов ядра для настройки статического IP-адреса:


ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:ens2:none:8.8.8.8

Примечание: IP ненастоящие и приведены для примера.

Такой синтаксис не очень удобен для восприятия. Один из способов решения этой проблемы – написать небольшой сценарий, который заполнит параметры самостоятельно.

Пример скрипта для заполнения аргументов ядра


ip='10.10.10.10'
gateway='10.10.10.1'
netmask='255.255.255.0'
hostname='myhostname'
interface='ens2'
nameserver='8.8.8.8'
echo "ip=${ip}::${gateway}:${netmask}:${hostname}:${interface}:none:${nameserver}"

Примечание: статический IP ненастоящий и приведен для примера.

Настройка через oscore-installer install --copy-network#

Примечание: не рекомендуется использовать аргументы ядра dracut для настройки сети вручную, потому что синтаксис не удобен для пользователя и работа с аргументами ядра путем перехвата загрузчика GRUB может быть сложной.

Ключ --copy-network команды oscore -installer install скопирует файлы из папки /etc/NetworkManager/system-connections/ в установленную систему. Это позволит пользователю заполнить сетевую конфигурацию различными способами перед установкой, например:

  • используя команду nmcli;

  • используя nmtui TUI интерфейс;

  • записывая файлы напрямую;

  • используя другой инструмент выбора.

Настройка через Ignition#

Примечание: если нужна сеть для получения конфигурации Ignition и сеть устроена сложнее, чем DHCP по умолчанию, используйте другой метод.

Сетевая конфигурация может быть описана с помощью конфигурационных файлов Ignition. Это файлы ключей NetworkManager, которые записываются в /etc/NetworkManager/system-connections/ и сообщают NetworkManager, что делать.

Любая конфигурация, предоставляемая через Ignition, будет рассматриваться с более высоким приоритетом, чем любой другой метод настройки сети для OS Core.

Пример конфигурации Butane для того же примера со статическим IP, который показан в разделе «Настройка через аргументы ядра»:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2
          type=ethernet
          interface-name=ens2
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual

Примечание: статический IP и DNS ненастоящие и приведены для примера.

Примеры конфигурации хост-сети#

В этом разделе рассматриваются общие примеры настройки различных типов сетевых устройств с использованием как аргументов ядра, так и ключевых файлов NetworkManager через Ignition/Butane.

Примеры со статическим IP-адресом в этом разделе будут использовать следующие значения, если не указано иное:


ip='10.10.10.10'
gateway='10.10.10.1'
netmask='255.255.255.0'
prefix='24'
hostname='myhostname'
interface='ens2'
nameserver='8.8.8.8'
bondname='bond0'
teamname='team0'
bridgename='br0'
subnic1='ens2'
subnic2='ens3'
vlanid='100'

Примечание: статический IP ненастоящий и приведен для примера.

Создание ключевых файлов NetworkManager с помощью nm-initrd-generator#

NetworkManager предоставляет инструмент nm-initrd-generator, который может генерировать ключевые файлы из синтаксиса аргументов ядра. Преобразуйте аргументы ядра в ключевые файлы, как представлено ниже на примере генерации ключевых файлов для связи через nm-initrd-generator:


$ kargs="ip=bond0:dhcp bond=bond0:ens2,ens3:mode=active-backup,miimon=100 nameserver=8.8.8.8"
$ /usr/libexec/nm-initrd-generator -s -- $kargs

*** Connection 'bond0' ***

[connection]
id=bond0
uuid=643c17b5-b364-4137-b273-33f450a45476
type=bond
interface-name=bond0
multi-connect=1
permissions=

[ethernet]
mac-address-blacklist=

[bond]
miimon=100
mode=active-backup

[ipv4]
dns=8.8.8.8;
dns-search=
may-fail=false
method=auto

[ipv6]
addr-gen-mode=eui64
dns-search=
method=auto

[proxy]

*** Connection 'ens3' ***

[connection]
id=ens3
uuid=b42cc917-fd87-47df-9ac2-34622ecddd8c
type=ethernet
interface-name=ens3
master=643c17b5-b364-4137-b273-33f450a45476
multi-connect=1
permissions=
slave-type=bond

[ethernet]
mac-address-blacklist=

*** Connection 'ens2' ***

[connection]
id=ens2
uuid=e111bb4e-3ee3-4612-afc2-1d2dfff97671
type=ethernet
interface-name=ens2
master=643c17b5-b364-4137-b273-33f450a45476
multi-connect=1
permissions=
slave-type=bond

[ethernet]
mac-address-blacklist=

Примечание: DNS адрес ненастоящий и приведен для примера.

Этот пример генерирует три ключевых файла:

  • один для bond0;

  • второй для ens3;

  • третий для ens2.

В результат можно добавить новые настройки или изменить существующие, затем передать с помощью конфигурации Ignition.

Настройка статического IP-адреса#

Настройте аргументы ядра dracut, как представлено в шаблоне:


ip=${ip}::${gateway}:${netmask}:${hostname}:${interface}:none:${nameserver}

Результат будет следующим:


ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:ens2:none:8.8.8.8

Примечание: IP приведен для примера и является не существующим.

Настройте конфигурацию Butane, как представлено в шаблоне:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${interface}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${interface}
          type=ethernet
          interface-name=${interface}
          [ipv4]
          address1=${ip}/${prefix},${gateway}
          dhcp-hostname=${hostname}
          dns=${nameserver};
          dns-search=
          may-fail=false
          method=manual

Результат будет следующим:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2
          type=ethernet
          interface-name=ens2
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dhcp-hostname=myhostname
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual

Настройка bond (статический IP)#

Настройте аргументы ядра dracut, как представлено в шаблоне ниже:


ip=${ip}::${gateway}:${netmask}:${hostname}:${bondname}:none:${nameserver}
bond=${bondname}:${subnic1},${subnic2}:mode=active-backup,miimon=100

Результат будет следующим:


ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:bond0:none:8.8.8.8
bond=bond0:ens2,ens3:mode=active-backup,miimon=100

Примечание: IP адрес ненастоящий и приведен для примера.

Настройте конфигурацию Butane, как представлено в шаблоне ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${bondname}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}
          type=bond
          interface-name=${bondname}
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          address1=${ip}/${prefix},${gateway}
          dhcp-hostname=${hostname}
          dns=${nameserver};
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${bondname}
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${bondname}
          slave-type=bond

Результат будет следующим:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/bond0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0
          type=bond
          interface-name=bond0
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dhcp-hostname=myhostname
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=bond0
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=bond0
          slave-type=bond

Примечание: DNS адрес ненастоящий и приведен для примера.

Настройка bridge (DHCP)#

Настройте аргументы ядра dracut, как представлено в шаблоне:


ip=${bridgename}:dhcp
bridge=${bridgename}:${subnic1},${subnic2}

Результат будет следующим:


ip=br0:dhcp
bridge=br0:ens2,ens3

Настройте конфигурацию Butane, как представлено в шаблоне:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${bridgename}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bridgename}
          type=bridge
          interface-name=${bridgename}
          [bridge]
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/${bridgename}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bridgename}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${bridgename}
          slave-type=bridge
          [bridge-port]
    - path: /etc/NetworkManager/system-connections/${bridgename}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bridgename}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${bridgename}
          slave-type=bridge
          [bridge-port]

Результат будет следующим:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/br0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=br0
          type=bridge
          interface-name=br0
          [bridge]
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/br0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=br0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=br0
          slave-type=bridge
          [bridge-port]
    - path: /etc/NetworkManager/system-connections/br0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=br0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=br0
          slave-type=bridge
          [bridge-port]

Настройка team (DHCP)#

Настройте аргументы ядра dracut, как представлено в шаблоне ниже:


ip=${teamname}:dhcp
team=${teamname}:${subnic1},${subnic2}

Результат будет следующим:


ip=team0:dhcp
team=team0:ens2,ens3

Настройте конфигурацию Butane, как представлено в шаблоне:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${teamname}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${teamname}
          type=team
          interface-name=${teamname}
          [team]
          config={"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/${teamname}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${teamname}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${teamname}
          slave-type=team
          [team-port]
          config={"prio": 100}
    - path: /etc/NetworkManager/system-connections/${teamname}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${teamname}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${teamname}
          slave-type=team
          [team-port]
          config={"prio": 100}

Результат будет следующим:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/team0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=team0
          type=team
          interface-name=team0
          [team]
          config={"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/team0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=team0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=team0
          slave-type=team
          [team-port]
          config={"prio": 100}
    - path: /etc/NetworkManager/system-connections/team0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=team0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=team0
          slave-type=team
          [team-port]
          config={"prio": 100}

Настройка VLAN (статический IP)#

Настройте аргументы ядра dracut, как представлено в шаблоне ниже:


ip=${ip}::${gateway}:${netmask}:${hostname}:${interface}.${vlanid}:none:${nameserver}
vlan=${interface}.${vlanid}:${interface}

Результат будет следующим:


ip=10.10.10.10::10.10.10.1:255.255.255.0:myhostname:ens2.100:none:8.8.8.8
vlan=ens2.100:ens2

Примечание: IP адрес ненастоящий и приведен для примера.

Настройте конфигурацию Butane, как представлено в шаблоне ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${interface}.${vlanid}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${interface}.${vlanid}
          type=vlan
          interface-name=${interface}.${vlanid}
          [vlan]
          egress-priority-map=
          flags=1
          id=${vlanid}
          ingress-priority-map=
          parent=${interface}
          [ipv4]
          address1=${ip}/${prefix},${gateway}
          dhcp-hostname=${hostname}
          dns=${nameserver};
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/${interface}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${interface}
          type=ethernet
          interface-name=${interface}
          [ipv4]
          dns-search=
          method=disabled
          [ipv6]
          addr-gen-mode=eui64
          dns-search=
          method=disabled

Результат будет следующим:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/ens2.100.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2.100
          type=vlan
          interface-name=ens2.100
          [vlan]
          egress-priority-map=
          flags=1
          id=100
          ingress-priority-map=
          parent=ens2
          [ipv4]
          address1=10.10.10.10/24,10.10.10.1
          dhcp-hostname=myhostname
          dns=8.8.8.8;
          dns-search=
          may-fail=false
          method=manual
    - path: /etc/NetworkManager/system-connections/ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=ens2
          type=ethernet
          interface-name=ens2
          [ipv4]
          dns-search=
          method=disabled
          [ipv6]
          addr-gen-mode=eui64
          dns-search=
          method=disabled

Примечание: DNS адрес ненастоящий и приведен для примера.

Настройка VLAN на Bond (DHCP)#

Настройте аргументы ядра dracut, как представлено в шаблоне ниже:


ip=${bondname}.${vlanid}:dhcp
bond=${bondname}:${subnic1},${subnic2}:mode=active-backup,miimon=100
vlan=${bondname}.${vlanid}:${bondname}

Результат будет следующим:


ip=bond0.100:dhcp
bond=bond0:ens2,ens3:mode=active-backup,miimon=100
vlan=bond0.100:bond0

Настройте конфигурацию Butane, как представлено в шаблоне ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/${bondname}.${vlanid}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}.${vlanid}
          type=vlan
          interface-name=${bondname}.${vlanid}
          [vlan]
          egress-priority-map=
          flags=1
          id=${vlanid}
          ingress-priority-map=
          parent=${bondname}
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/${bondname}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}
          type=bond
          interface-name=${bondname}
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          method=disabled
          [ipv6]
          method=disabled
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic1}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic1}
          type=ethernet
          interface-name=${subnic1}
          master=${bondname}
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/${bondname}-slave-${subnic2}.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=${bondname}-slave-${subnic2}
          type=ethernet
          interface-name=${subnic2}
          master=${bondname}
          slave-type=bond

Результат будет следующим:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/system-connections/bond0.100.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0.100
          type=vlan
          interface-name=bond0.100
          [vlan]
          egress-priority-map=
          flags=1
          id=100
          ingress-priority-map=
          parent=bond0
          [ipv4]
          dns-search=
          may-fail=false
          method=auto
    - path: /etc/NetworkManager/system-connections/bond0.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0
          type=bond
          interface-name=bond0
          [bond]
          miimon=100
          mode=active-backup
          [ipv4]
          method=disabled
          [ipv6]
          method=disabled
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens2.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens2
          type=ethernet
          interface-name=ens2
          master=bond0
          slave-type=bond
    - path: /etc/NetworkManager/system-connections/bond0-slave-ens3.nmconnection
      mode: 0600
      contents:
        inline: |
          [connection]
          id=bond0-slave-ens3
          type=ethernet
          interface-name=ens3
          master=bond0
          slave-type=bond

Отключение автоматической настройки устройств Ethernet#

По умолчанию OS Core будет пытаться автоматически настроиться (DHCP/SLAAC) на каждом интерфейсе с подключенным кабелем. Если это не требуется, NetworkManager можно изменить с помощью файла конфигурации:

Отключите автоматическую настройку устройств Ethernet NetworkManager, как показано ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/NetworkManager/conf.d/noauto.conf
      mode: 0644
      contents:
        inline: |
          [main]
          # Не выполняйте автоматическую настройку (DHCP/SLAAC) на устройствах Ethernet
          # без каких-либо других подходящих подключений.
          no-auto-default=*

Если автоматическая настройка устройств Ethernet NetworkManager отключена, и не предусмотрена другая конфигурация сети, система загрузится без доступа к сети.

Настройка ядра (sysctl)#

Ядро OS Core предлагает множество подстроек под /proc /sys для управления доступностью различных функций и параметров производительности настройки. Значения в /proc /sys могут быть изменены непосредственно во время работы, но такие изменения не будут сохраняться при перезагрузках. Постоянные настройки должны быть записаны в разделе /etc/sysctl.d/, при каждой загрузке. Например, фрагмент из Butane ниже показывает, как отключить клавиши SysRq:

Настройте ядро для отключения ключей SysRq, как представлено ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/sysctl.d/90-sysrq.conf
      contents:
        inline: |
          kernel.sysrq = 0

Более подробную информацию можно найти на справочных страницах systemd sysctl.d(5) и systemd-sysctl.service(8).

Запуск контейнеров#

OS Core поставляется c CRI-O. В этом разделе показано как использовать системные устройства для запуска и остановки контейнеров CRI-O.

Следующий фрагмент конфигурации Butane настраивает systemd hello.service для запуска busybox (программного пакета, который предоставляет несколько утилит Unix в одном исполняемом файле):


variant: fcos
version: 1.3.0
systemd:
  units:
    - name: hello.service
      enabled: true
      contents: |
        [Unit]
        Description=MyApp
        After=network-online.target
        Wants=network-online.target

        [Service]
        TimeoutStartSec=0
        ExecStartPre=-/bin/crio kill busybox1
        ExecStartPre=-/bin/crio rm busybox1
        ExecStartPre=/bin/crio pull busybox
        ExecStart=/bin/crio run --name busybox1 busybox /bin/sh -c "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"

        [Install]
        WantedBy=multi-user.target

Работа с продуктом Platform V DropApp (K8S)#

В этом разделе представлена базовая информация по компонентам и настройке продукта Platform V DropApp (K8S) (далее - DropApp). Для более полной информации по работе с DropApp обратитесь к документации продукта.

При установке DropApp в операционной системе OS Core пропускается шаг установки RPM пакетов, дальнейшая работа с кластерами не отличается от других операционных систем.

Роль администратора – это роль сервисного пользовательского аккаунта по умолчанию (привилегированного пользователя), который автоматически создается при создании кластера (cluster) DropApp.

Установка и настройка программного обеспечения осуществляется с помощью утилит управления кластером DropApp, например, kubeadm, kubelet и kubectl.

При развертывании DropApp, осуществляется работа с кластерами. Кластер DropApp состоит из набора узлов, которые запускают контейнерные приложения. Кластер DropApp имеет, как минимум, один рабочий узел. В тестовых или небольших не отказоустойчивых инсталляциях возможна ситуация, когда главные узлы являются рабочими, то есть на них запущена и управляющая, и рабочая нагрузка.

В рабочих узлах размещены pod, являющиеся компонентами приложения. Управляющий слой (control plane), представляет собой совокупность главных узлов и управляет рабочими узлами и pods в кластере DropApp.

Файл kubeconfig#

По умолчанию инструмент командной строки для управления кластерами kubectl задействуется через командную строку (например, через bash) и использует контексты (context) для взаимодействия с кластером DropApp.

Контекст DropApp — это набор параметров доступа, содержащий кластер DropApp, пользователя и пространство имен.

Контексты используются для доступа к определенному кластеру и пространству имен с помощью учетной записи пользователя. Установка того, с каким кластером взаимодействует DropApp и изменение конфигурационной информации осуществляются посредством kubectl.

В каждом контексте есть три ключевых параметра: cluster, namespace и user.

Для выбора контекста введите команду:


kubectl config get-contexts # показать список контекстов
kubectl config current-context # показать текущий контекст (current-context)
kubectl config use-context my-cluster-name # установить my-cluster-name как контекст по умолчанию

Для выбора того, с каким кластером DropApp необходимо взаимодействовать при помощи kubectl, выберите среди следующих команд:


kubectl config view # показать объединенные настройки kubeconfig

# использовать несколько файлов kubeconfig одновременно и посмотреть объединенную конфигурацию из этих файлов
KUBECONFIG=~/.kube/config:~/.kube/kubconfig2

kubectl config view

# получить пароль для пользователя e2e
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'

# показать первого пользователя
kubectl config view -o jsonpath='{.users[].name}'

# получить список пользователей
kubectl config view -o jsonpath='{.users[*].name}'

# показать список контекстов
kubectl config get-contexts

# показать текущий контекст (current-context)
kubectl config current-context

# установить my-cluster-name как контекст по умолчанию
kubectl config use-context my-cluster-name

# добавить новую конфигурацию для кластера в kubeconf с базовой аутентификацией
kubectl config set-credentials kubeuser/foo.dropapp.com --username=dapp_user --password=dapp_password

# сохранить пространство имен для всех последующих команд kubectl в этом контексте.
kubectl config set-context --current --namespace=ggckad-s2

# установить контекст, используя имя пользователя (user) и пространство имен (namespace).
kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce

# удалить пользователя foo
kubectl config unset users.foo

Переменная среды KUBECONFIG

Переменная среды KUBECONFIG содержит список файлов kubeconfig. kubeconfig — это файл YAML со всеми деталями кластера DropApp, сертификатом и секретным токеном для аутентификации кластера. Специальной установки для KUBECONFIG не требуется.

  • Если KUBECONFIG отсутствует, kubectl использует файл kubeconfig по умолчанию, Например, через обращение к конфигурационному файлу $HOME/.kube/config;

  • Если KUBECONFIG присутствует, kubectl использует конфигурацию, которая является результатом объединения файлов, перечисленных в KUBECONFIG.

Конфигурация объединения файлов kubeconfig

Чтобы просмотреть конфигурацию, введите команду:


kubectl config view

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

  1. Если установлен флаг --kubeconfig, используйте только указанный файл.

  2. Определите первый контекст для взаимодействия с кластером DropApp:

    • Используйте флаг --context командной строки, если контекст присутствует.

    • Используйте current-context из объединенных файлов kubeconfig.

    На этом этапе допускается незаполненный контекст.

  3. Определите кластер DropApp и пользователя (user). На этом этапе допускается неопределенность контекста.

Определение пользователя к кластеру DropApp выполняется дважды: один раз для пользователя и один раз для кластера DropApp:

  • Используйте флаг командной строки, если контекст существует: --user или --cluster.

  • Если контекст уже заполнен, удалите пользователя или кластер DropApp из контекста.

Примечание: пользователь и кластер DropApp могут быть не заполненными на этом этапе.

  1. Определите актуальную информацию о кластере DropApp для использования. На этом этапе актуальная информация не определена. Создайте атрибуты информации о кластере DropApp при помощи следующих флагов командной строки: --server, --certificate-authority, --insecure-skip-tls-verify.

Если в объединенных файлах kubeconfig существуют какие-либо атрибуты информации о кластере DropApp, используйте их. Если местоположение сервера не определено, то произойдет сбой.

  1. Определите фактическую информацию о пользователе для использования. Создайте информацию о пользователе, используя те же правила создания информации о кластере DropApp:

  • Используйте флаги командной строки: --client-certificate, --client-key, --username, --password --token.

  • Используйте user поля из объединенных файлов kubeconfig.

Примечание: также можно использовать значения по умолчанию.

Ссылки на файлы

Ссылки на файлы и пути в файле kubeconfig относятся к расположению файла kubeconfig. Ссылки на файлы в командной строке относятся к текущему рабочему каталогу. Относительные пути $HOME/.kube/config хранятся относительно, а абсолютные пути хранятся абсолютно.

Control plane (управляющий слой)#

Компоненты управляющего слоя, которые отвечают за основные операции кластера DropApp (например, планирование), а также обрабатывают события кластера DropApp (например, запускают новый pod, когда поле развертывания replicas не соответствует требуемому количеству реплик). Минимальный набор таких компонентов: etcd, API-server, kube-scheduler, controller manager. Помимо управляющих компонентов, в DropApp входят агенты kubelet и kubeproxy, которые запущены на всех узлах кластера DropApp. Компоненты управляющего слоя могут быть запущены на любой машине в кластере. Однако сценарии настройки обычно запускают все компоненты управляющего слоя на одном компьютере и в то же время не позволяют запускать пользовательские контейнеры на этом компьютере.

Kubelet#

Kubelet - это сервис, который управляет pods, основываясь на их спецификации, является главным сервисом для рабочих узлов. Сервис взаимодействует с API-server. Для запуска полезной нагрузки на узлах используется агент kubelet. В отличие от компонентов управляющего слоя, он запущен на каждом узле: управляющем и рабочем. kubelet читает событие с помощью API Server, что экземпляр сервиса распределен посредством kube-scheduler на узел, на котором он работает, и запускает экземпляр сервиса. Для изоляции сервисов друг от друга они запускаются kubelet в контейнерном окружении CRI-O. Также c использованием kubelet возможно отслеживание работоспособности контейнеров, которые были запущены с его помощью.

Cri-tools#

Cri-tools — набор инструментов, используется в DropApp для взаимодействия с контейнерным временем выполнения, которое соответствуют стандарту Container Runtime Interface (CRI). Он содержит утилиты для запуска и остановки контейнеров, создания и удаления образов контейнеров, а также для получения информации о контейнерах и их статусе.

CRI — это интерфейс, который описывает стандартную спецификацию для взаимодействия между DropApp и контейнерным временем выполнения. Это позволяет расширять возможности DropApp и использовать различное время выполнения контейнеров, доступное на рынке с различными функциями и возможностями.

CLI интерфейса времени выполнения контейнера (CRI)

crictl — интерфейс командной строки для сред выполнения контейнеров, совместимых с CRI. Это позволяет разработчикам среды выполнения CRI отлаживать свою среду выполнения без необходимости настраивать компоненты DropApp.

Список команд, их синтаксис и краткое описание приведены в таблице ниже.

Таблица. Список команд crictl

Синтаксис

Описание

attach

Прикрепить к запущенному контейнеру

create

Создать новый контейнер

exec

Запустить команду в работающем контейнере

version

Отобразить информацию о версии среды выполнения

images , image, img

Вывести список образов

inspect

Отобразить состояние одного или нескольких контейнеров

inspecti

Вернуть статус одного или нескольких образов

imagefsinfo

Вернуть информацию о файловой системе образа

inspectp

Отобразить состояния одного или нескольких pods

logs

Получить журналы контейнера

port-forward

Перенаправить локальный порт на pod

ps

Вывести список контейнеров

pull

Извлечь образ из реестра

run

Запустить новый контейнер внутри тестовой среды

runp

Запустить новый pod

rm

Удалить один или несколько контейнеров

rmi

Удалить один или несколько образов

rmp

Удалить один или несколько pods

pods

Вывести список pods

start

Запустить один или несколько созданных контейнеров

info

Отобразить информацию о среде выполнения контейнера

stop

Остановить один или несколько запущенных контейнеров

stopp

Остановить один или несколько запущенных pod

update

Обновить один или несколько запущенных контейнеров

config

Получить и установить параметры конфигурации crictl

stats

Показать статистику использования ресурсов контейнера(ов)

statsp

Показать статистику использования ресурсов pods

completion

Вывести код завершения оболочки bash

checkpoint

Вывести контрольную точку одного или нескольких запущенных контейнеров

help, h

Вывести список команд или справку для одной команды

Сценарии использования crictl состоят в применении команд, обозначенных в таблице и имеют следующий синтаксис:


crictl [global options] command [command options] [arguments...]

Например, команда crictl config --set debug=true устанавливает режим отладки при подаче последующих crictl команд.

Сrictl по умолчанию подключается в Unix к unix:///var/run/dockershim.sock или unix:///run/containerd/containerd.sock или unix:///run/crio/crio.sock или unix:///var/run/cri-dockerd.sock

Конечная точка может быть установлена:

  • в глобальных флагах опций --runtime-endpoint( -r) и --image-endpoint( -i);

  • путем назначения переменных окружения CONTAINER_RUNTIME_ENDPOINT и IMAGE_SERVICE_ENDPOINT;

  • в файле конфигурации --config=/etc/crictl.yaml.

Если конечная точка среды выполнения не установлена, crictl по умолчанию будет пытаться подключиться с помощью cri-o.

Если конечная точка образа не задана, по умолчанию будет использоваться конечная точка времени выполнения:


$ cat /etc/crictl.yaml
runtime-endpoint: unix:///var/run/dockershim.sock
image-endpoint: unix:///var/run/dockershim.sock
timeout: 2
debug: true
pull-image-on-create: false

Сценарий использования crictl

  1. Загрузите crictl из репозитория, предоставленного разработчиком используя curl:


VERSION="v1.26.0" # check latest version in /releases page
curl -L https://<example>/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz

Примечание: выберите архив соответствующий текущему типу процессора в среде развертывания, в приведенном примере указан архив соответствующий архитектуре процессоров AMD.

  1. Запустите pod с конфигурационным файлом:


$ cat pod-config.json
{
   "metadata":{
      "name":"nginx-sandbox",
      "namespace":"default",
      "attempt":1,
      "uid":"hdishd83djaidwnduwk28bcsb"
   },
   "log_directory":"/tmp",
   "linux":{
      
   }
}

$ crictl runp pod-config.json
f84dd361f8dc51518ed291fbadd6db537b0496536c1d2d6c05ff943ce8c9a54f

  1. Убедитесь, что pods находится в состоянии Ready:


$ crictl pods
POD ID              CREATED             STATE               NAME                NAMESPACE           ATTEMPT
f84dd361f8dc5       17 seconds ago      Ready               nginx-sandbox       default             1

Это команда crictl, которая показывает список всех установленных pods (pods - это наборы программного обеспечения) в контейнере Docker. Команда crictl использует опцию pods, чтобы получить список всех установленных наборов программного обеспечения в контейнере Docker.

Опция pods указывает имя хоста и порт контейнера Docker, где были установлены pods. Команда crictl выводит список всех установленных pods в указанном контейнере.

Например, если контейнер Docker запущен на хосте hostname и порте контейнера port, то команда crictl выведет следующий список установленных pods:

  • default

  • nginx-sandbox

  1. Запустите рабочую среду pod с обработчиком времени выполнения:


$ cat pod-config.json
{
   "metadata":{
      "name":"nginx-runsc-sandbox",
      "namespace":"default",
      "attempt":1,
      "uid":"hdishd83djaidwnduwk28bcsb"
   },
   "log_directory":"/tmp",
   "linux":{
      
   }
}

$ crictl runp --runtime=runsc pod-config.json
c112976cb6caa43a967293e2c62a2e0d9d8191d5109afef230f403411147548c

$ crictl inspectp c112976cb6caa43a967293e2c62a2e0d9d8191d5109afef230f403411147548c
...
"runtime": {
"runtimeType": "io.containerd.runtime.v1.linux",
"runtimeEngine": "/usr/local/sbin/runsc",
"runtimeRoot": "/run/containerd/runsc"
},
...

В приведенном примере показан запуск рабочей среды pod с runsc обработчиком.

  1. Извлеките образ busybox:


$ crictl pull busybox
Image is up to date for busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47

  1. Перечислите образы и убедитесь, что выбранный образ busybox загружен:


$ crictl images
IMAGE               TAG                 IMAGE ID            SIZE
busybox             latest              8c811b4aec35f       1.15MB
k8s.gcr.io/pause    3.1                 da86e6ba6ca19       742kB

  1. Создайте контейнер с файлом конфигурации:


$ cat pod-config.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "log_directory": "/tmp",
    "linux": {
    }
}

$ cat container-config.json
{
  "metadata": {
      "name": "busybox"
  },
  "image":{
      "image": "busybox"
  },
  "command": [
      "top"
  ],
  "log_path":"busybox.0.log",
  "linux": {
  }
}

$ crictl create f84dd361f8dc51518ed291fbadd6db537b0496536c1d2d6c05ff943ce8c9a54f container-config.json pod-config.json
3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60

  1. Перечислите контейнеры и убедитесь, что созданный контейнер находится в статусе Created:


$ crictl ps -a
CONTAINER ID        IMAGE               CREATED             STATE               NAME                ATTEMPT
3e025dd50a72d       busybox             32 seconds ago      Created             busybox             0

  1. Запустите стартовый контейнер:


$ crictl start 3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60
3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60

  1. Убедитесь, что контейнер находится в состоянии Running:


$ crictl ps
CONTAINER ID        IMAGE               CREATED              STATE               NAME                ATTEMPT
3e025dd50a72d       busybox             About a minute ago   Running             busybox             0

  1. Выполните команду в контейнере:


crictl exec -i -t 3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60 ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var

  1. Создайте и запустите контейнер одной командой:


$ cat pod-config.json
{
   "metadata":{
      "name":"nginx-sandbox",
      "namespace":"default",
      "attempt":1,
      "uid":"hdishd83djaidwnduwk28bcsb"
   },
   "log_directory":"/tmp",
   "linux":{
      
   }
}

$ cat container-config.json
{
   "metadata":{
      "name":"busybox"
   },
   "image":{
      "image":"busybox"
   },
   "command":[
      "top"
   ],
   "log_path":"busybox.0.log",
   "linux":{
      
   }
}

$ crictl run container-config.json pod-config.json
b25b4f26e342969eb40d05e98130eee0846557d667e93deac992471a3b8f1cf4

  1. Выведите список контейнеров и убедитесь, что busybox находится в состоянии Running:


$ crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID
b25b4f26e3429       busybox:latest      14 seconds ago      Running             busybox             0                   158d7a6665ff3

Выше представлен вывод команды crictl ps, которая показывает информацию о контейнерах, запущенных в DropApp. В данном случае, информация выводится о контейнере busybox, который запущен на основе образа busybox:latest.

В выводе указаны следующие поля:

  • CONTAINER: уникальный идентификатор контейнера, который может быть использован для управления им;

  • IMAGE: имя образа, из которого был запущен контейнер;

  • CREATED: время создания контейнера;

  • STATE: текущее состояние контейнера (Running - запущен);

  • NAME: имя контейнера;

  • ATTEMPT: количество попыток запуска контейнера;

  • POD ID: идентификатор Pod, в котором запущен контейнер.

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

API-server#

API-server — это центральный компонент кластера DropApp. Он является связывающим компонентом для всех остальных сервисов. Все взаимодействие как самих компонентов, так и обращение извне к кластеру проходит через kube-apiserver и проверяется им. Это единственный компонент кластера DropApp, который общается с базой данных etcd, где хранится состояние кластера DropApp. В самом API Server нет бизнес-логики. API Server не принимает решения, например, на каком узле запустить тот или иной сервис. В нем существует логика проверки формата запросов, аутентификации, проверки прав и т.д. Еще одной функцией API Server является рассылка изменений конфигураций и состояния кластера DropApp. Другие компоненты подписываются на события, отслеживают их и обрабатывают, либо с определенной периодичностью считывают конфигурацию через API Server.

Etcd#

Etcd — это высоконадежное распределенное хранилище данных. DropApp хранит в нем информацию о состоянии существующих кластеров DropApp, сервисах, сети и т. д. Доступ к данным осуществляется через REST API. При изменениях записей вместо поиска и изменения предыдущей копии, все предыдущие записи помечаются как устаревшие, а новые значения записываются в конец. Позже устаревшие значения удаляются специальным процессом. В небольших временных кластерах etcd можно запускать в единственном экземпляре и на одном узле с ведущими компонентами. В важных системах, требующих избыточности и высокой доступности, etcd следует создавать в виде кластера DropApp, состоящего из нескольких узлов. Сервер API является основной точкой управления всего кластера DropApp. Он обрабатывает операции REST, проверяет их и обновляет соответствующие объекты в etcd. Сервер API обслуживает DropApp API и задуман как простой сервер, с большей частью бизнес-логики, реализованной в отдельных компонентах или в плагинах. Ниже приведены некоторые примеры API, доступных на сервере API.


# pods
api/v1/pods

# services
api/v1/services

# deployments
api/v1/deployments

Когда происходит работа с кластером DropApp с использованием kubectl интерфейса командной строки, взаимодействие осуществляется с основным серверным компонентом API. Команды kubectl преобразуются в HTTP-вызовы REST и вызываются на сервере API. Сервер API также отвечает за механизм аутентификации и авторизации. Все клиенты API должны быть аутентифицированы для взаимодействия с сервером API. Возможно написание клиентских библиотек/приложений DropApp, используя сервер API (например аналог kubectl, chaos engineering system и т.д.).

Kube-scheduler#

Kube-scheduler — это компонент управляющего слоя, с его помощью необходимо отслеживать созданные pods без привязанного узла и осуществлять выбор узла, на котором pods должны работать. При развертывании pods на узлах, учитывается множество факторов, включая требования к ресурсам, ограничения, связанные с аппаратными/программными политиками, принадлежности (affinity) и непринадлежности (anti-affinity) узлов/pods, местонахождения данных, предельных сроков. Используя механизм оповещения об изменениях API Server, kube-scheduler получает сообщения от управляющего слоя, когда необходимо запустить экземпляр сервиса и принимает решение о том, на каком узле он должен быть запущен, и через API server обновляет состояние кластера DropApp. Сам kube-scheduler ничего не запускает.

Kubelet#

Kubelet - это сервис, который управляет pods, основываясь на их спецификации, является главным сервисом для рабочих узлов. Сервис взаимодействует с API-server. Для запуска полезной нагрузки на узлах используется агент kubelet. В отличие от компонентов управляющего слоя, он запущен на каждом узле: управляющем и рабочем. kubelet читает событие с помощью API Server, что экземпляр сервиса распределен посредством kube-scheduler на узел, на котором он работает, и запускает экземпляр сервиса. Для изоляции сервисов друг от друга они запускаются kubelet в контейнерном окружении CRI-O. Также c использованием kubelet возможно отслеживание работоспособности контейнеров, которые были запущены с его помощью.

Controller-manager#

Controller-manager - это компонент, отвечающий за запуск контроллеров, которые определяют текущее состояние системы. Каждый контроллер представляет собой отдельный процесс, и для упрощения все такие процессы скомпилированы в один двоичный файл и выполняются в одном процессе.

Эти контроллеры включают:

  • контроллер узла (Node Controller): уведомляет и реагирует на сбои узла;

  • контроллер репликации (Replication Controller): поддерживает правильное количество pods для каждого объекта контроллера репликации в системе;

  • контроллер конечных точек (Endpoints Controller): заполняет объект конечных точек (Endpoints), то есть связывает сервисы (Services) и pods;

  • контроллеры учетных записей и токенов (Account & Token Controllers): создают стандартные учетные записи и токены доступа API для новых пространств имен.

CoreDNS#

CoreDNS - это сервер имен, который выступает в качестве ключевого компонента инфраструктуры кластера DropApp, предоставляя расширяемый механизм для разрешения имен внутри кластера DropApp. Благодаря своей распределенной архитектуре и возможности использования нескольких источников данных, таких как файлы конфигурации, etcd или сетевые службы за пределами кластера DropApp, CoreDNS обеспечивает устойчивость и надежность DNS-сервиса в кластере DropApp. СoreDNS обладает быстрым и эффективным механизмом выполнения DNS-запросов и может быть легко настроен для интеграции с сетевыми политиками DropApp и расширения функциональности с помощью плагинов, что делает его неотъемлемой частью инфраструктуры кластера DropApp.

Запуск etcd#

Распределенное хранилище ключей и значений, предназначенное для безопасного хранения данных в кластере etcd не поставляется как часть OS Core. Чтобы использовать etcd, запустите его, как показано в Butane-конфигурации для настройки одного узла etcd в примере ниже:


variant: fcos
version: 1.3.0
systemd:
  units:
    - name: etcd-member.service
      enabled: true
      contents: |
        [Unit]
        Description=Run single node etcd
        After=network-online.target
        Wants=network-online.target

        [Service]
        ExecStartPre=mkdir -p /var/lib/etcd
        ExecStartPre=-/bin/crio kill etcd
        ExecStartPre=-/bin/crio rm etcd
        ExecStartPre=-/bin/crio pull quay.io/oscore/etcd
        ExecStart=/bin/crio run --name etcd --volume /var/lib/etcd:/etcd-data:z --net=host quay.io/oscore/etcd:latest /usr/local/bin/etcd --data-dir /etcd-data --name node1 \
                --initial-advertise-peer-urls http://127.0.0.1:2380 --listen-peer-urls http://127.0.0.1:2380 \
                --advertise-client-urls http://127.0.0.1:2379 \
                --listen-client-urls http://127.0.0.1:2379 \
                --initial-cluster node1=http://127.0.0.1:2380

        ExecStop=/bin/crio stop etcd

        [Install]
        WantedBy=multi-user.target

Примечание: URL ненастоящие и приведены для примера.

Настройка доступа SSH и запуск контейнеров при загрузке#

OS Core ориентирована на запуск приложений/служб в контейнерах, поэтому рекомендуется запускать контейнеры, и избегать изменения хоста.

Настройте автоматический вход в систему (автологин) в командной строке, также настройте имя хоста и конфигурацию системного пейджера (terminal pager):

  • SSH ключа для основного пользователя;

  • Службу systemd (failure.service), которая выводит ошибку при загрузке;

  • Службу systemd, которая будет использовать контейнер для выведения размещенной службы.

Настройка конфигурации Butane и преобразование в Ignition#

  1. Запишите приведенную ниже конфигурацию Butane в файл под названием containers.bu, как представлено ниже:


variant: fcos
version: 1.3.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-rsa AAAA...
systemd:
  units:
    - name: serial-getty@ttyS0.service
      dropins:
      - name: autologin-core.conf
        contents: |
          [Service]
          # Переопределите Execstart в главном блоке
          ExecStart=
          # Добавьте новый Execstart с префиксом `-`, чтобы игнорировать сбой
          ExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM
          TTYVTDisallocate=no
    - name: failure.service
      enabled: true
      contents: |
        [Service]
        Type=oneshot
        ExecStart=/usr/bin/false
        RemainAfterExit=yes

        [Install]
        WantedBy=multi-user.target
    - name: etcd-member.service
      enabled: true
      contents: |
        [Unit]
        Description=Run a single node etcd
        After=network-online.target
        Wants=network-online.target

        [Service]
        ExecStartPre=mkdir -p /var/lib/etcd
        ExecStartPre=-/bin/crio kill etcd
        ExecStartPre=-/bin/crio rm etcd
        ExecStartPre=-/bin/crio pull quay.io/oscore/etcd
        ExecStart=/bin/crio run --name etcd --net=host \
                    --volume /var/lib/etcd:/etcd-data:z  \
                    quay.io/oscore/etcd:latest /usr/local/bin/etcd              \
                            --data-dir /etcd-data --name node1                  \
                            --initial-advertise-peer-urls http://127.0.0.1:000 \
                            --listen-peer-urls http://127.0.0.1:0000            \
                            --advertise-client-urls http://127.0.0.1:0000       \
                            --listen-client-urls http://127.0.0.1:0000          \
                            --initial-cluster node1=http://127.0.0.1:0000
        ExecStop=/bin/crio stop etcd

        [Install]
        WantedBy=multi-user.target
storage:
  files:
    - path: /etc/hostname
      mode: 0644
      contents:
        inline: |
          tutorial
    - path: /etc/profile.d/systemd-pager.sh
      mode: 0644
      contents:
        inline: |
          # Попросите systemd не использовать pager при печати информации
          export SYSTEMD_PAGER=cat

Примечание: URL ненастоящие и приведены для примера.

  1. Запустите Butane, чтобы преобразовать его в конфигурацию Ignition:


butane --pretty --strict containers.bu --output containers.ign
# Установите правильную метку SELinux, чтобы разрешить доступ к конфигурации
chcon --verbose --type svirt_home_t containers.ign

# Запустите виртуальную машину OS Core
virt-install --name=fcos --vcpus=2 --ram=2048 --os-variant=fedora-oscore-stable \
--import --network=bridge=virbr0 --graphics=none \
--qemu-commandline="-fw_cfg name=opt/com.oscore/config,file=${PWD}/containers.ign" \
--disk=size=20,backing_store=${PWD}/fedora-oscore.qcow2

Результат будет следующим:


OS Core 9.2
Kernel 5.18.13-200.fc36.x86_64 on an x86_64 (ttyS0)

SSH host key: SHA256:X38nTiEGsp/G+tFz6ojBaeGDoI9a9S350xN8HSNa1oc (ECDSA)
SSH host key: SHA256:gDZoJpgOpLJSCPaLn8OdA1hZQxytI+rdt2XOnLlfPHc (ED25519)
SSH host key: SHA256:H73stdlwb9eJspcVb69wpEOnBEXoF2iBfGnS6cbtBNE (RSA)
enp1s0: 192.168.122.171 fe80::d100:b088:5914:115e
Ignition: ran on 2022/08/21 01:31:56 UTC (this boot)
Ignition: user-provided config was applied
Ignition: wrote ssh authorized keys file for user: core
tutorial login: core (automatic login)

OS Core 9.2
[systemd]
Failed Units: 1
  failure.service
[core@tutorial ~]$

  1. Если необходимо подключение через SSH, выйдите из bash, нажав комбинацию клавиш CTRL + ], затем используйте предоставленный IP-адрес в bash, чтобы войти, используя пользователя core через SSH, как представлено ниже:


$ ssh core@192.168.122.171
The authenticity of host '192.168.122.171 (192.168.122.171)' can't be established.
ED25519 key fingerprint is SHA256:gDZoJpgOpLJSCPaLn8OdA1hZQxytI+rdt2XOnLlfPHc.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.122.171' (ED25519) to the list of known hosts.
OS Core 36.20220723.3.1
Tracker: https://Tracker.ru

Last login: Sun Aug 21 01:32:09 2022
[systemd]
Failed Units: 1
  failure.service

Примечание: хост адреса ненастоящие и приведены для примера.

Сообщение Failed Units поступает от сервиса вспомогательных сообщений. Когда у systemd есть службы с ошибками, они выводятся на экран. В этом конкретном случае failure.service настроена с excstart =/usr/bin/false, поэтому ошибка происходит намеренно, чтобы проиллюстрировать работу вспомогательных сообщений.

  1. Если система запущена без сбоев, проверьте сервис etcd-member.service:


[core@tutorial ~]$ systemctl status --full etcd-member.service
● etcd-member.service - Run a single node etcd
     Loaded: loaded (/etc/systemd/system/etcd-member.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-08-21 01:32:09 UTC; 2min 18s ago
    Process: 1608 ExecStartPre=mkdir -p /var/lib/etcd (code=exited, status=0/SUCCESS)
    Process: 1610 ExecStartPre=/bin/crio kill etcd (code=exited, status=125)
    Process: 1649 ExecStartPre=/bin/crio rm etcd (code=exited, status=1/FAILURE)
    Process: 1657 ExecStartPre=/bin/crio pull quay.io/oscore/etcd (code=exited, status=0/SUCCESS)
   Main PID: 1706 (crio)
      Tasks: 10 (limit: 2254)
     Memory: 91.5M
        CPU: 4.978s
     CGroup: /system.slice/etcd-member.service
             ├─ 1706 /bin/crio run ...
             └─ 1724 /usr/bin/conmon ...

Aug 21 01:32:10 tutorial etcd[1724]: 2022-08-21 01:32:10.719193 N | etcdserver/membership: set the initial cluster version to 3.3
Aug 21 01:32:10 tutorial etcd[1724]: 2022-08-21 01:32:10.719548 I | etcdserver/api: enabled capabilities for version 3.3
Aug 21 01:32:10 tutorial crio[1706]: 2022-08-21 01:32:10.719193 N | etcdserver/membership: set the initial cluster version to 3.3
Aug 21 01:32:10 tutorial crio[1706]: 2022-08-21 01:32:10.719548 I | etcdserver/api: enabled capabilities for version 3.3
Aug 21 01:32:10 tutorial crio[1706]: 2022-08-21 01:32:10.719595 I | etcdserver: published {Name:node1 ClientURLs:[http://127.0.0.1:2379]} to cluster 1c45a069f3a1d796
Aug 21 01:32:10 tutorial crio[1706]: 2022-08-21 01:32:10.719968 I | embed: ready to serve client requests
Aug 21 01:32:10 tutorial etcd[1724]: 2022-08-21 01:32:10.719595 I | etcdserver: published {Name:node1 ClientURLs:[http://127.0.0.1:2379]} to cluster 1c45a069f3a1d796
Aug 21 01:32:10 tutorial etcd[1724]: 2022-08-21 01:32:10.719968 I | embed: ready to serve client requests
Aug 21 01:32:10 tutorial etcd[1724]: 2022-08-21 01:32:10.722332 N | embed: serving insecure client requests on 127.0.0.1:2379, this is strongly discouraged!
Aug 21 01:32:10 tutorial crio[1706]: 2022-08-21 01:32:10.722332 N | embed: serving insecure client requests on 127.0.0.1:2379, this is strongly discouraged!

  1. Проверьте состояние контейнера, который был запущен службой systemd:


[core@tutorial ~]$ sudo crio ps -a
CONTAINER ID  IMAGE                       COMMAND               CREATED         STATUS             PORTS       NAMES
9d854474bba7  quay.io/oscore/etcd:latest  /usr/local/bin/et...  11 minutes ago  Up 11 minutes ago              etcd

  1. Установите пары ключ/значение в etcd.


[core@tutorial ~]$ curl -L -X PUT http://127.0.0.1:2379/v2/keys/fedora -d value="fun"
{"action":"set","node":{"key":"/fedora","value":"fun","modifiedIndex":4,"createdIndex":4}}
[core@tutorial ~]$ curl -L http://127.0.0.1:2379/v2/keys/ 2>/dev/null | jq .
{
  "action": "get",
  "node": {
    "dir": true,
    "nodes": [
      {
        "key": "/fedora",
        "value": "fun",
        "modifiedIndex": 4,
        "createdIndex": 4
      }
    ]
  }
}

После этих шагов настройка является завершенной.

Очистка#

  1. Для очистки выйдите из bash, нажав комбинацию клавиш CTRL + ], затем удалите виртуальную машину:


virsh destroy fcos
virsh undefine --remove-all-storage fcos

Определение общих переменных среды прокси#

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

Лучше всего это сделать, определив один файл с требуемыми переменными среды в конфигурации Butane и сославшись на него через системные файлы для всех таких сервисов. На этот общий файл должна ссылаться каждая служба, которой требуется доступ в интернет.


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/example-proxy.env
      mode: 0644
      contents:
        inline: |
          https_proxy="http://example.com:8080"
          all_proxy="http://example.com:8080"
          http_proxy="http://example.com:8080"
          HTTP_PROXY="http://example.com:8080"
          HTTPS_PROXY="http://example.com:8080"
          no_proxy="*.example.com,127.0.0.1,0.0.0.0,localhost"

Определение встраиваемых модулей для демонов контейнеров#

Если используется crio, достаточно добавить crio.service. Если используется containerd (и без crio), может потребоваться подключаемый модуль containerd.service:


variant: fcos
version: 1.3.0
systemd:
  units:
    - name: crio.service
      enabled: true
      dropins:
        - name: 99-proxy.conf
          contents: |
            [Service]
            EnvironmentFile=/etc/example-proxy.env
    - name: containerd.service
      enabled: true
      dropins:
        - name: 99-proxy.conf
          contents: |
            [Service]
            EnvironmentFile=/etc/example-proxy.env

Определение использования прокси для модулей crio systemd#

У crio нет демона, поэтому конфигурация запланирована для каждой отдельной службы и может быть выполнена как часть полного определения модуля systemd:


variant: fcos
version: 1.3.0
systemd:
  units:
    - name: example-svc.service
      enabled: true
      contents: |
        [Unit]
        After=network-online.target
        Wants=network-online.target

        [Service]
        EnvironmentFile=/etc/example-proxy.env
        ExecStartPre=-/bin/crio kill example-svc
        ExecStartPre=-/bin/crio rm example-svc
        ExecStartPre=-/bin/crio pull example-image:latest
        ExecStart=/bin/crio run --name example-svc example-image:latest
        ExecStop=/bin/crio stop example-svc

        [Install]
        WantedBy=multi-user.target

Настройка раскладки клавиатуры#

Чтобы установить раскладку системной клавиатуры (раскладку клавиатуры), используйте следующую конфигурацию Butane для записи /etc/vconsole.conf:


variant: fcos
version: 1.3.0
storage:
files:
- path: /etc/vconsole.conf
  mode: 0644
  contents:
  inline: KEYMAP=de

После загрузки убедитесь, что нужная раскладка была установлена с помощью localectl.

Добавление расширений OS Core в хост-систему#

OS Core сохраняет базовый образ из соображений безопасности и удобства сопровождения. Для этого можно использовать установщик rpm-ostree install: он расширяет функциональность базовой OS Core.

Чтобы добавить расширения OS Core, внесите модуль systemd, который выполнит команду rpm-ostree для установки нужных пакетов. По умолчанию rpm-ostree install изменения помещаются в очередь для следующей загрузки. Параметр -A/--apply-live можно использовать для применения изменений в реальном времени и их сохранения.

Настройка имен сетевой карты#

Использование файла ссылки systemd#

Файл ссылки systemd можно создать с конфигурациями Ignition. Например, чтобы назвать сетевую карту с MAC-адресом 12:34:56:78:9a:bc "infra", поместите файл ссылки systemd /etc/systemd/network/25-infra.link с помощью фрагмента конфигурации Butane, как представлено ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/systemd/network/25-infra.link
      mode: 0644
      contents:
        inline: |
          [Match]
          MACAddress=12:34:56:78:9a:bc
          [Link]
          Name=infra

Примечание: MAC-адрес ненастоящий и приведен для примера.

Использование правил Udev#

Точно так же, через конфигурации Ignition, чтобы назвать NIC с MAC-адресом 12:34:56:78:9a:bc "infra", создайте правило udev при /etc/udev/rules.d/80-ifname.rules использовании фрагмента конфигурации Butane, как показано ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/udev/rules.d/80-ifname.rules
      mode: 0644
      contents:
        inline: |
          SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="12:34:56:78:9a:bc", ATTR{type}=="1", NAME="infra"'

Примечание: MAC-адрес ненастоящий и приведен для примера.

Сеть в initramfs через аргументы ядра#

Если требуется подключение к сети в initramfs, аргумент ядра ifname= динамически создаст правило udev для изменения имени сетевой карты.

Эти правила udev не сохраняет в реальном корневом каталоге. Если пользовательское имя необходимо применить к реальному корню, создайте файл ссылки или правило udev, как показано выше в подразделе «Использование правил Udev».

Например, чтобы дать сетевой карте с MAC-адресом 12:34:56:78:9a:bc имя «infra», укажите аргумент ядра, например: ifname=infra:12:34:56:78:9a:bc. В initramfs будет создано правило udev, например:


# cat /etc/udev/rules.d/80-ifname.rules SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="12:34:56:78:9a:bc", ATTR{type}=="1", NAME="infra"

Настройка подкачки на ZRAM#

Конфигурация для включения подкачки (swap) в ZRAM по умолчанию не настроена. Чтобы настроить подкачку (swap) на ZRAM, установите файл конфигурации через Ignition, который сообщит генератору ZRAM настроить подкачку поверх ZRAM. Самая простая форма конфигурационного файла, который настроит устройство ZRAM для подкачки представлена ниже:


variant: fcos
version: 1.3.0
storage:
  files:
    - path: /etc/systemd/zram-generator.conf
      mode: 0644
      contents:
        inline: |
          # Этот конфигурационный файл включает устройство /dev/zram0 с настройками по умолчанию
          [zram0]

После загрузки убедитесь, что устройство подкачки настроено, просмотрев выходные данные swapon --show.

Изменение аргументов ядра#

Изменение аргументов ядра с помощью Ignition#

Существует возможность указывать аргументы ядра в конфигурации Butane, используя раздел kernel_arguments.

Ниже показан пример kernelArguments раздела, который добавляет аргумент ядра systemd.unified_cgroup_hierarchy=0, чтобы виртуальная машина продолжала использовать cgroups v1:


variant: fcos
version: 1.3.0
kernel_arguments:
should_exist:
- systemd.unified_cgroup_hierarchy=0

Ниже представлен пример отключения всех средств снижения уязвимости ЦП раздела kernelArguments, который переключается с mitigations=auto,nosmt, чтобы отключить все меры по снижению уязвимости ЦП mitigations=off:


variant: fcos
version: 1.3.0
kernel_arguments:
should_exist:
- mitigations=off
should_not_exist:
- mitigations=auto,nosmt

Изменение конфигурации консоли во время установки с нуля#

oscore-installer имеет специальную поддержку для изменения конфигурации консоли при выполнении установки с нуля. Эту функцию можно использовать для добавления console аргументов в командную строку ядра и эквивалентных параметров в конфигурацию загрузчика GRUB.

Изменение аргументов ядра в существующих системах#

Изменения аргументов ядра управляются rpm-ostree с помощью подкоманды rpm-ostree kargs. Изменения применяются к новому развертыванию, и для их вступления в силу требуется перезагрузка.

Добавление аргументов ядра#

Существует возможность добавить аргументы ядра.

Допустимо пустое значение аргумента, как показано ниже:


$ sudo rpm-ostree kargs --append=KEY=VALUE

Добавьте зарезервированную память для поддержки Kdump:


$ sudo rpm-ostree kargs --append='crashkernel=256M'

См. также в разделе «Отладка сбоев ядра с помощью kdump».

Удаление существующих аргументов ядра#

Существует возможность удаления пары ключа/значения аргумента ядра или всего аргумента с помощью одной пары ключа/значения, как представлено ниже:


$ sudo rpm-ostree kargs --delete=KEY=VALUE

  1. Повторно включите SMT (Simultaneous multithreading - одновременная многопоточность) на уязвимых процессорах:


$ sudo rpm-ostree kargs --delete=mitigations=auto,nosmt

  1. Обновите существующую систему с cgroupsv1 до cgroupsv2 с немедленной перезагрузкой:


$ sudo rpm-ostree kargs --delete=systemd.unified_cgroup_hierarchy --reboot

Замена существующих аргументов ядра#

Для замены существующего аргумента ядра новым значением, используйте KEY=VALUE, если для этого аргумента имеется только одно значение. Или укажите новое значение, используя следующий формат:


$ sudo rpm-ostree kargs --replace=KEY=VALUE=NEWVALUE

Ниже представлен пример отключения всех мер по снижению уязвимости ЦП:


$ sudo rpm-ostree kargs --replace=mitigations=auto,nosmt=off

Это переключает mitigations=auto,nosmt на mitigations=off, чтобы отключить все меры по снижению уязвимости ЦП.

Интерактивное редактирование#

Чтобы использовать редактор для изменения аргументов ядра, введите:


$ sudo rpm-ostree kargs --editor

Настройка часового пояса#

По умолчанию OS Core позволяет сохранять время в зоне всемирного координированного времени (UTC) и синхронизируют свои часы с протоколом сетевого времени (NTP). На этой странице содержится информация о настройке часового пояса.

Просмотр и изменение часового пояса#

Команда timedatectl отображает и устанавливает дату, время и часовой пояс.


$ timedatectl status
Local time: Mon 2021-05-17 20:10:20 UTC
Universal time: Mon 2021-05-17 20:10:20 UTC
RTC time: Mon 2021-05-17 20:10:20
Time zone: UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

Можно использовать list-timezones подкоманду для вывода списка доступных часовых поясов. Доступные часовые пояса представлены tzfile записями в базе данных часовых поясов системы в каталоге /usr/share/zoneinfo, например:


$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
…

Примечание: не рекомендуется принудительно менять часовой пояс для каждой виртуальной машины через SSH.

Рекомендации часового пояса: всемирное координированное время (UTC)#

Часовой пояс UTC по умолчанию рекомендуется использовать для виртуальной машины в кластерах OS Core.

Если приложениям требуется другой часовой пояс, можно задать переменную TimeZone для необходимых приложений.

Установка часового пояса через Ignition#

Существует возможность альтернативной настройки системного часового пояса.

Задайте в файле конфигурации локального часового пояса абсолютную или относительную символическую ссылку /etc/localtimeна tzfile в /usr/share/zoneinfo/.

Примечание: рекомендуется установить один и тот же часовой пояс на всех компьютерах в кластере.

На примере ниже показано, как установить часовой пояс Russia/Moscow с помощью конфигурации Butane:


variant: fcos
version: 1.3.0
storage:
links:
- path: /etc/localtime
target: ../usr/share/zoneinfo/Russia/Moscow

Синхронизация времени#

OS Core использует chrony реализацию NTP. Подробнее см. документ Руководство по системному администрированию продукта Platform V SberLinux OS Server (SLO) в разделе «Настройка основных параметров системы».

Установка пароля GRUB#

Существует возможность установить пароль, чтобы предотвратить доступ неавторизованных пользователей к командной строке GRUB, изменение аргументов командной строки ядра или загрузку нестандартных развертываний OSTree. Подробнее см. документ Руководство по системному администрированию продукта Platform V SberLinux OS Server (SLO) в разделе «Настройка основных параметров системы».

Создание хеша пароля#

Используйте grub2-mkpasswd-pbkdf2 для создания хеша пароля для GRUB.


$ grub2-mkpasswd-pbkdf2
Enter password: <PASSWORD>
Reenter password: <PASSWORD>
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.5AE6255...

grub2-mkpasswd-pbkdf2 инструмент является компонентом пакета grub2-tools-minimal в OS Core.

События системного журнала#

Системный журнал journalctl отвечает за логирование одного конкретного устройства, а системный журнал fleetctl отвечает за события, генерируемые контейнерами.

Все службы отправляют данные в журнал systemd.

Используйте базовые команды для чтения системного журнала. Чтобы читать весь журнал, используйте:


$ journalctl

Чтобы просмотреть журналы, относящиеся к определенному файлу, предоставьте команде journalctl путь к файлу. Приведенный ниже пример показывает все журналы узла устройства ядра /dev/sda:


$ journalctl /dev/sda

Для просмотра журнала текущей загрузки используйте -b опцию:


$ journalctl -b

Чтобы просмотреть журналы ядра для предыдущей загрузки -1 , добавьте -k опцию:

Цифра -1 обозначает хронологический порядок загрузки журнала, например: 1 означает первую загрузку, найденную в журнале в хронологическом порядке, 2 вторую загрузку и так далее; 0 - последняя загрузка, -1 позапрошлая загрузка.


$ journalctl -k -b -1

Чтение записей для конкретной службы#

Чтобы читать записи, сгенерированные определенным устройством с фильтрацией записи журнала -u, используйте:


$ journalctl -u apache.service

Чтобы удаленно прочитать журнал для конкретного устройства, запущенного через контейнер, используйте флаг --tunnel. Этот флаг поможет выяснить на какой виртуальной машине работает устройство и выведет соответствующий журнал:


$ fleetctl --tunnel 10.10.10.10 journal apache.service

Чтение записей с момента загрузки#

Чтение только записей с момента последней загрузки – это простой способ устранения неполадок служб, которые не могут запуститься должным образом:


journalctl --boot

Последние события журнала#

Командой journalctl можно просмотреть сообщения в системном журнале в командной строке. Для файлов обычных текстовых журналов могут использоваться универсальные инструменты: cat, less, tail, head или команду grep для поиска определенной информации.

Чтобы отобразить последние десять строк файла, используйте, например, утилиту tail.


tail /var/log/syslog

Если 10 строк недостаточно, настройте этот параметр с помощью опции -n:


tail -n 100 /var/log/syslog

Если необходимо отслеживать появление новых строк в файле, добавьте опцию -f:


tail -f /var/log/syslog

Чтобы оставить весь журнал или только конкретную службу, используйте:


journalctl -f
journalctl -u apache.service -f

Чтение записей с обтеканием строк#

По умолчанию journalctl передает параметрам командной строки FRSXMK значение less. Определите эти параметры, установив пользовательскую переменную окружения SYSTEM_LESS с опущенным параметром S:


SYSTEMD_LESS=FRXMK journalctl

Чтобы читать журналы в режиме --no-pager, используйте:


journalctl --no-pager

Отладка в журнале#

Если возникли проблемы с журналом, существует возможность включения режима отладки.

Чтобы включить отладку вручную, используйте:


mkdir -p /etc/systemd/system/systemd-journald.service.d/

Чтобы создать возможность выпадающего файла для быстрых команд Drop-In в каталоге /etc/systemd/system/systemd-journald.service.d/10-debug.conf с текстом, представленным ниже, используйте:


[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

Чтобы перезапустить службу systemd-journald, используйте:


systemctl daemon-reload
systemctl restart systemd-journald
dmesg | grep systemd-journald

Отладка через Cloud-Config#

  1. Чтобы определить возможность Drop-In в Cloud-Config, используйте:


#cloud-config
oscore:
units:
- name: systemd-journald.service
drop-ins:
- name: 10-debug.conf
content: |
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
command: restart

  1. Запустите OSCore-Cloudinit или перезагрузите хост OS Core, чтобы применить изменения.

События мониторинга#

Чтобы настроить систему, администратору OS Core необходимо определить объем свободной памяти и свободного места на диске, возможность разделения жесткого диска или определения того, какие процессы запущены.

Просмотр системных процессов#

Использование команды ps#

Команда ps позволяет отображать информацию о запущенных процессах, а также создает статический список, то есть snapshot, который покажет, что именно происходит при выполнении команды. Если нужен постоянно обновляемый список запущенных процессов, используйте команду top.

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


ps ax

Для каждого перечисленного процесса команда ps ax отображает:

  • идентификатор процесса (PID);

  • связанный с ним терминал (TTY);

  • текущее состояние (STAT);

  • накопленное процессорное время (TIME);

  • имя исполняемого файла (COMMAND).

Пример представлен ниже:


~]$ ps ax
PID TTY      STAT   TIME COMMAND
1 ?        Ss     0:02 /usr/lib/systemd/systemd --system --deserialize 20
2 ?        S      0:00 [kthreadd]
3 ?        S      0:00 [ksoftirqd/0]
5 ?        S      0:00 [kworker/u:0]
6 ?        S      0:00 [migration/0]
[output truncated]

Чтобы отобразить владельца рядом с каждым процессом, используйте следующую команду:


ps aux

Помимо информации, предоставленной командой ps ax, ps aux отображает:

  • действительное имя пользователя владельца процесса (USER);

  • процент использования процессора (%CPU);

  • процент использования памяти (%MEM);

  • размер виртуальной памяти в килобайтах (VSZ);

  • объем физической памяти без замены в килобайтах (RSS);

  • время или дату запуска процесса.

Пример представлен ниже:


~]$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  53128  2988 ?        Ss   13:28   0:02 /usr/lib/systemd/systemd --system --deserialize 20
root         2  0.0  0.0      0     0 ?        S    13:28   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    13:28   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    13:28   0:00 [kworker/u:0]
root         6  0.0  0.0      0     0 ?        S    13:28   0:00 [migration/0]
[output truncated]

Также можно использовать команду ps в сочетании с grep, чтобы увидеть, запущен ли конкретный процесс.

Например, чтобы определить, работает ли Emacs, введите:


~]$ ps ax | grep emacs
 2625 ?        Sl     0:00 emacs

Полный список доступных параметров командной строки см. на странице руководства ps(1).

Использование команды top#

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

Чтобы запустить команду top, введите ее в командной строке:


top

Для каждого перечисленного процесса команда top отображает:

  • идентификатор процесса (PID);

  • эффективное имя пользователя владельца процесса (USER);

  • приоритет (PR);

  • значение nice (NI);

  • объем виртуальной памяти;

  • которую использует процесс (VIRT);

  • объем используемой процессом физической памяти без обмена (RES);

  • объем общей памяти, используемой в процессе (SHR);

  • процент использования процессора (%CPU);

  • процент использования памяти (%MEM);

  • накопленное процессорное время (TIME+);

  • имя исполняемого файла (COMMAND).

Пример представлен ниже:


~]$ top
top - 19:22:08 up  5:53,  3 users,  load average: 1.08, 1.03, 0.82
Tasks: 117 total,   2 running, 115 sleeping,   0 stopped,   0 zombie
Cpu(s):  9.3%us,  1.3%sy,  0.0%ni, 85.1%id,  0.0%wa,  1.7%hi,  0.0%si,  2.6%st
Mem:    761956k total,   617256k used,   144700k free,    24356k buffers
Swap:  1540092k total,    55780k used,  1484312k free,   256408k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  510 john      20   0 1435m  99m  18m S  9.0 13.3   3:30.52 gnome-shell
32686 root      20   0  156m  27m 3628 R  2.0  3.7   0:48.69 Xorg
 2625 john      20   0  488m  27m  14m S  0.3  3.7   0:00.70 emacs
    1 root      20   0 53128 2640 1152 S  0.0  0.3   0:02.83 systemd
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.18 ksoftirqd/0
    5 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kworker/u:0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.30 watchdog/0
    8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset
    9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs
   11 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 netns
   12 root      20   0     0    0    0 S  0.0  0.0   0:00.11 sync_supers
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 bdi-default
   14 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kintegrityd
   15 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kblockd

Инструменты системного мониторинга содержат полезные интерактивные команды, которые можно использовать с командой top. Для получения дополнительной информации обратитесь к top(1) странице руководства.

Просмотр памяти#

Использование команды free#

Команда free позволяет отображать объем свободной и использованной памяти в системе. Для этого введите следующую команду:


free

Команда free предоставляет информацию как о физической памяти (mem), так и о пространстве подкачки (swap). Он отображает общий объем памяти (total), а также объем используемой (used), свободной (free), общей (shared), в буферах ядра (buffers) и кешированной (cached) памяти. Например:


~]$ free
             total       used       free     shared    buffers     cached
Mem:        761956     607500     154456          0      37404     156176
-/+ buffers/cache:     413920     348036
Swap:      1540092      84408    1455684

По умолчанию команда free отображает значения в килобайтах. Чтобы отобразить значения в мегабайтах, предоставьте параметр командной строки -m:


free -m

Пример представлен ниже:


~]$ free -m
             total       used       free     shared    buffers     cached
Mem:           744        593        150          0         36        152
-/+ buffers/cache:        404        339
Swap:         1503         82       1421

Для получения дополнительной информации обратитесь к странице руководства free(1).

Просмотр блочных устройств и файловых систем#

Использование команды lsblk#

Команда lsblk позволяет отображать список доступных блочных устройств. Для этого введите эту команду в командной строке:


lsblk

Для каждого перечисленного блочного устройства команда lsblk отображает:

  • имя устройства (NAME);

  • основной и второстепенный номер устройства (MAJ:MIN);

  • если устройство съемное (RM);

  • каков его размер (SIZE);

  • если устройство доступно только для чтения (RO);

  • какой тип (TYPE);

  • где установлено устройство (MOUNTPOINT).

Пример представлен ниже:


~]$ lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0                           11:0    1  1024M  0 rom
vda                          252:0    0    20G  0 disk
|-vda1                       252:1    0   500M  0 part /boot
`-vda2                       252:2    0  19.5G  0 part
  |-vg_fedora-lv_swap (dm-0) 253:0    0   1.5G  0 lvm  [SWAP]
  `-vg_fedora-lv_root (dm-1) 253:1    0    18G  0 lvm  /

По умолчанию lsblk перечисляет блочные устройства в древовидном формате.

Чтобы отобразить информацию в виде обычного списка, добавьте параметр командной строки -l:


lsblk -l

Пример представлен ниже:


~]$ lsblk -l
NAME                     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0                       11:0    1  1024M  0 rom
vda                      252:0    0    20G  0 disk
vda1                     252:1    0   500M  0 part /boot
vda2                     252:2    0  19.5G  0 part
vg_fedora-lv_swap (dm-0) 253:0    0   1.5G  0 lvm  [SWAP]
vg_fedora-lv_root (dm-1) 253:1    0    18G  0 lvm  /

Для получения дополнительной информации по списку доступных параметров командной строки обратитесь на страницу руководства lsblk(8).

Использование команды blkid#

Команда blkid позволяет отображать информацию о доступных блочных устройствах. Для этого введите следующее в командной строке оболочки в качестве root:


blkid

Для каждого перечисленного блочного устройства команда blkid отображает доступные атрибуты, такие как универсальный уникальный идентификатор (UUID), тип файловой системы (TYPE) или метка тома (LABEL). Например:


~]# blkid /dev/vda1
/dev/vda1: UUID="4ea24c68-ab10-47d4-8a6b-b8d3a002acba" TYPE="ext4"

По умолчанию команда lsblk перечисляет все доступные блочные устройства. Чтобы отобразить информацию только о конкретном устройстве, укажите имя устройства в командной строке:


blkid device_name

Например, чтобы отобразить информацию о /dev/vda1, введите:


~]# blkid /dev/vda1 /dev/vda1: UUID="4ea24c68-ab10-47d4-8a6b-b8d3a002acba" TYPE="ext4"

Также можно использовать вышеуказанную команду с параметрами командной строки -p и -o Udev, чтобы получить более подробную информацию. Обратите внимание, что для запуска этой команды необходимы привилегии root:


blkid -po udev device_name

Например:


~]# blkid -po udev /dev/vda1 ID_FS_UUID=4ea24c68-ab10-47d4-8a6b-b8d3a002acba ID_FS_UUID_ENC=4ea24c68-ab10-47d4-8a6b-b8d3a002acba ID_FS_VERSION=1.0 ID_FS_TYPE=ext4 ID_FS_USAGE=файловая система ID_PART_ENTRY_SCHEME=dos ID_PART_ENTRY_TYPE=0x83 ID_PART_ENTRY_FLAGS=0x80 ID_PART_ENTRY_NUMBER=1 ID_PART_ENTRY_OFFSET=2048 ID_PART_ENTRY_SIZE=1024000 ID_PART_ENTRY_DISK=252:0

Полный список доступных параметров командной строки см. на blkid(8) странице руководства.

Использование команды partx#

  1. Команда partx позволяет отображать список разделов диска для перечисления таблиц разделов конкретного диска. Выполните команду с привилегией root с опцией -s, за которой следует имя устройства:


partx -s device_name

  1. Например, чтобы перечислить разделы на /dev/vda, введите:


~]# partx -s /dev/vda
NR   START      END  SECTORS  SIZE NAME UUID
 1    2048  1026047  1024000  500M
 2 1026048 41943039 40916992 19.5G

Полный список доступных параметров командной строки см. на partx(8) странице руководства.

Использование команды findmnt#

Команда findmnt позволяет отобразить список установленных в данный момент файловых систем. Для этого введите команду в командной строке:


findmnt

Для каждой перечисленной файловой системы команда findmnt отображает:

  • целевую точку монтирования (TARGET);

  • исходное устройство (SOURCE);

  • тип файловой системы (FSTYPE);

  • соответствующие параметры монтирования (OPTIONS).

Пример представлен ниже:


~]$ findmnt
TARGET                           SOURCE     FSTYPE   OPTIONS
/                                /dev/mapper/vg_fedora-lv_root
                                            ext4     rw,relatime,seclabel,data=o
|-/proc                          proc       proc     rw,nosuid,nodev,noexec,rela
| `-/proc/sys/fs/binfmt_misc     systemd-1  autofs   rw,relatime,fd=23,pgrp=1,ti
|-/sys                           sysfs      sysfs    rw,nosuid,nodev,noexec,rela
| |-/sys/kernel/security         securityfs security rw,nosuid,nodev,noexec,rela
| |-/sys/fs/selinux              selinuxfs  selinuxf rw,relatime
| |-/sys/fs/cgroup               tmpfs      tmpfs    rw,nosuid,nodev,noexec,secl
| | |-/sys/fs/cgroup/systemd     cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | |-/sys/fs/cgroup/cpuset      cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | |-/sys/fs/cgroup/cpu,cpuacct cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | |-/sys/fs/cgroup/memory      cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | |-/sys/fs/cgroup/devices     cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | |-/sys/fs/cgroup/freezer     cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | |-/sys/fs/cgroup/net_cls     cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | |-/sys/fs/cgroup/blkio       cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| | `-/sys/fs/cgroup/perf_event  cgroup     cgroup   rw,nosuid,nodev,noexec,rela
| |-/sys/kernel/debug            debugfs    debugfs  rw,relatime
| `-/sys/kernel/config           configfs   configfs rw,relatime
[output truncated]

По умолчанию findmnt перечисляет файловые системы в древовидном формате. Чтобы отобразить информацию в виде обычного списка, добавьте параметр командной строки -l:


findmnt -l

Пример представлен ниже:

~]$ findmnt -l
TARGET                     SOURCE     FSTYPE   OPTIONS
/proc                      proc       proc     rw,nosuid,nodev,noexec,relatime
/sys                       sysfs      sysfs    rw,nosuid,nodev,noexec,relatime,s
/dev                       devtmpfs   devtmpfs rw,nosuid,seclabel,size=370080k,n
/dev/pts                   devpts     devpts   rw,nosuid,noexec,relatime,seclabe
/dev/shm                   tmpfs      tmpfs    rw,nosuid,nodev,seclabel
/run                       tmpfs      tmpfs    rw,nosuid,nodev,seclabel,mode=755
/                          /dev/mapper/vg_fedora-lv_root
                                      ext4     rw,relatime,seclabel,data=ordered
/sys/kernel/security       securityfs security rw,nosuid,nodev,noexec,relatime
/sys/fs/selinux            selinuxfs  selinuxf rw,relatime
/sys/fs/cgroup             tmpfs      tmpfs    rw,nosuid,nodev,noexec,seclabel,m
/sys/fs/cgroup/systemd     cgroup     cgroup   rw,nosuid,nodev,noexec,relatime,r
[output truncated]

Также можно выбрать список только файловых систем определенного типа. Для этого добавьте параметр командной строки -t, за которым следует тип файловой системы:


type findmnt -t

Пример представлен ниже:


~]$ findmnt -l
TARGET                     SOURCE     FSTYPE   OPTIONS
/proc                      proc       proc     rw,nosuid,nodev,noexec,relatime
/sys                       sysfs      sysfs    rw,nosuid,nodev,noexec,relatime,s
/dev                       devtmpfs   devtmpfs rw,nosuid,seclabel,size=370080k,n
/dev/pts                   devpts     devpts   rw,nosuid,noexec,relatime,seclabe
/dev/shm                   tmpfs      tmpfs    rw,nosuid,nodev,seclabel
/run                       tmpfs      tmpfs    rw,nosuid,nodev,seclabel,mode=755
/                          /dev/mapper/vg_fedora-lv_root
                                      ext4     rw,relatime,seclabel,data=ordered
/sys/kernel/security       securityfs security rw,nosuid,nodev,noexec,relatime
/sys/fs/selinux            selinuxfs  selinuxf rw,relatime
/sys/fs/cgroup             tmpfs      tmpfs    rw,nosuid,nodev,noexec,seclabel,m
/sys/fs/cgroup/systemd     cgroup     cgroup   rw,nosuid,nodev,noexec,relatime,r
[output truncated]

Полный список доступных параметров командной строки см. на findmnt(8) странице руководства.

Использование команды df#

Команда df позволяет отображать подробный отчет об использовании дискового пространства системы. Для этого введите команду в командной строке:


df

Для каждой перечисленной файловой системы команда df отображает:

  • свое имя (Filesystem);

  • размер (1K-blocks или Size);

  • сколько места используется (Used);

  • сколько места все еще доступно (Available);

  • процент использования пространства (Use %);

  • где монтируется файловая система (Mounted).

Пример представлен ниже:


~]$ df
Filesystem                    1K-blocks    Used Available Use% Mounted on
rootfs                         18877356 4605476  14082844  25% /
devtmpfs                         370080       0    370080   0% /dev
tmpfs                            380976     256    380720   1% /dev/shm
tmpfs                            380976    3048    377928   1% /run
/dev/mapper/vg_fedora-lv_root  18877356 4605476  14082844  25% /
tmpfs                            380976       0    380976   0% /sys/fs/cgroup
tmpfs                            380976       0    380976   0% /media
/dev/vda1                        508745   85018    398127  18% /boot

По умолчанию команда df показывает размер раздела в блоках объемом 1 килобайт и объем используемого и доступного дискового пространства в килобайтах. Чтобы просмотреть информацию в мегабайтах и гигабайтах, предоставьте параметр командной строки -h, который заставляет df отображать значения в удобочитаемом формате:


df -h

Пример представлен ниже:


~]$ df -h
Filesystem                     Size  Used Avail Use% Mounted on
rootfs                          19G  4.4G   14G  25% /
devtmpfs                       362M     0  362M   0% /dev
tmpfs                          373M  256K  372M   1% /dev/shm
tmpfs                          373M  3.0M  370M   1% /run
/dev/mapper/vg_fedora-lv_root   19G  4.4G   14G  25% /
tmpfs                          373M     0  373M   0% /sys/fs/cgroup
tmpfs                          373M     0  373M   0% /media
/dev/vda1                      497M   84M  389M  18% /boot

Примечание: запись /dev/shm представляет собой систему виртуальной памяти файловой системы, где: /sys/fs/cgroup - файловая система Cgroup, а /run - содержит информацию о запущенной системе.

Полный список доступных параметров командной строки см. на df(1) странице руководства.

Использование команды du#

Команда du позволяет отображать объем пространства, используемого файлами в каталоге. Чтобы отобразить использование диска для каждого из подкаталогов в текущем рабочем каталоге, выполните команду без дополнительных параметров командной строки:


du

Пример вывода представлен ниже:


~]$ du
8       ./.gconf/apps/gnome-terminal/profiles/Default
12      ./.gconf/apps/gnome-terminal/profiles
16      ./.gconf/apps/gnome-terminal
[output truncated]
460     ./.gimp-2.6
68828   .

По умолчанию команда du отображает использование диска в килобайтах. Чтобы просмотреть информацию в мегабайтах и гигабайтах, предоставьте параметр командной строки -h, который заставляет утилиту отображать значения в удобном для чтения формате:


du -h

Пример представлен ниже:


~]$ du -h
8.0K    ./.gconf/apps/gnome-terminal/profiles/Default
12K     ./.gconf/apps/gnome-terminal/profiles
16K     ./.gconf/apps/gnome-terminal
[output truncated]
460K    ./.gimp-2.6
68M     .

В конце списка команда du всегда показывает общую сумму для текущего каталога. Чтобы отобразить только эту информацию, добавьте параметр -s:


du -sh

Пример представлен ниже:


~]$ du -sh
68M     .

Полный список доступных параметров командной строки доступен на странице руководства du(1).

Просмотр информации об оборудовании#

Использование команды lspci#

Команда lspci перечисляет все устройства PCI, присутствующие в системе, для этого введите команду в командной строке:


lspci

Пример представлен ниже:


~]$ lspci
00:00.0 Host bridge: Intel Corporation 82X38/X48 Express DRAM Controller
00:01.0 PCI bridge: Intel Corporation 82X38/X48 Express Host-Primary PCI Express Bridge
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02)
[output truncated]

Также существует возможность использования параметра -v в командной строке, чтобы отобразить более подробный вывод, впишите параметр -vv:


lspci -v|-vv

Например, чтобы определить производителя, модель и размер памяти видеокарты системы, введите:


~]$ lspci -v
[output truncated]

01:00.0 VGA compatible controller: nVidia Corporation G84 [Quadro FX 370] (rev a1) (prog-if 00 [VGA controller])
        Subsystem: nVidia Corporation Device 0491
        Physical Slot: 2
        Flags: bus master, fast devsel, latency 0, IRQ 16
        Memory at f2000000 (32-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        Memory at f0000000 (64-bit, non-prefetchable) [size=32M]
        I/O ports at 1100 [size=128]
        Expansion ROM at <unassigned> [disabled]
        Capabilities: <access denied>
        Kernel driver in use: nouveau
        Kernel modules: nouveau, nvidiafb

[output truncated]

Полный список доступных параметров командной строки доступен на странице руководства lspci(8).

Использование команды lsusb#

Команда lsusb позволяет отображать информацию о USB-шинах и подключенных к ним устройствах. Чтобы перечислить все USB-устройства, которые находятся в системе, введите следующее в командной строке:


lsusb

Команда отображает простой список устройств, например:

~]$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
[output truncated]
Bus 001 Device 002: ID 0bda:0151 Realtek Semiconductor Corp. Mass Storage Device (Multicard Reader)
Bus 008 Device 002: ID 03f0:2c24 Hewlett-Packard Logitech M-UAL-96 Mouse
Bus 008 Device 003: ID 04b3:3025 IBM Corp.

Также можно использовать параметр -v в командной строки для более подробного вывода:


lsusb -v

Пример представлен ниже:


~]$ lsusb -v
[output truncated]

Bus 008 Device 002: ID 03f0:2c24 Hewlett-Packard Logitech M-UAL-96 Mouse
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0         8
  idVendor           0x03f0 Hewlett-Packard
  idProduct          0x2c24 Logitech M-UAL-96 Mouse
  bcdDevice           31.00
  iManufacturer           1
  iProduct                2
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
[output truncated]

Полный список доступных параметров командной строки доступен на странице руководства lsusb(8).

Использование команды lspcmcia#

Команда lspcmcia позволяет перечислить все устройства PCMCIA, присутствующие в системе. Для этого введите команду в командной строке:


lspcmcia

Пример представлен ниже:


~]$ lspcmcia
Socket 0 Bridge:        [yenta_cardbus]         (bus ID: 0000:15:00.0)

Также можно использовать параметр -v командной строки для более подробного вывода:


lspcmcia -v|-vv

Пример представлен ниже:


~]$ lspcmcia -v
Socket 0 Bridge:        [yenta_cardbus]         (bus ID: 0000:15:00.0)
        Configuration:  state: on       ready: unknown

Полный список доступных параметров командной строки доступен на странице руководства lspcmcia(8).

Использование команды lscpu#

Команда lscpu позволяет перечислить информацию о процессорах, присутствующих в системе, включая количество процессоров, их архитектуру, поставщика, семейство, модель, кеш ЦП и т. д. Для этого введите команду в командной строке:


lscpu

Пример представлен ниже:


~]$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 23
Stepping:              7
CPU MHz:               1998.000
BogoMIPS:              4999.98
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              3072K
NUMA node0 CPU(s):     0-3

Полный список доступных параметров командной строки доступен на странице руководства lscpu(1).

Мониторинг производительности с помощью Net-SNMP#

Дополнительные ресурсы#

Дополнительные ресурсы:

Справочные страницы:

  • ps (1);

  • top (1);

  • free (1);

  • df (1);

  • du (1);

  • lspci (8);

  • snmpd (6);

  • /etc/snmp/snmpd.conf (5).

Часто встречающиеся проблемы и способы их устранения#

Доступ к восстановлению#

Если утерян или забыт закрытый ключ пары ключей SSH, которая использовалась для входа в OS Core, и отсутствуют пароли, настроенные для использования в командной строке, существует возможность повторного получения доступа к виртуальной машине в однопользовательском режиме при помощи аргумента single командной строки ядра.

  1. При загрузке системы в меню GRUB отредактируйте запись, добавив параметр single в список аргументов ядра.

  2. Нажмите Ctrl-X, чтобы возобновить загрузку.

  3. Подождите, пока система загрузится и появится командная строка.

  4. Установите или сбросьте пароль для целевого пользователя с помощью passwd утилиты.

  5. Перезагрузите систему с помощью команды /sbin/reboot -f.

Теперь вы сможете снова войти в систему с консоли. Оттуда можно, например, получить новый публичный ключ SSH, чтобы добавить ~/.ssh/authorized_keys или удалить старый. Также можно заблокировать установленный пароль (используя passwd -l).

Примечание: обратите внимание, что OS Core по умолчанию не разрешает вход по SSH через аутентификацию по паролю.

Доступ к аварийной консоли#

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

Конфигурация консоли по умолчанию#

Все образы OS Core поставляются с конфигурацией командной строки по умолчанию, которая предназначена для поддержки большинства виртуализированных и «bare metal» установок.

OS Core может иметь поддержку для выполнения установки на «bare metal». Существует возможность указания нескольких консолей; сообщения ядра появятся на всех из них, но только последнее указанное устройство будет использоваться в качестве интерактивной консоли переднего плана (т.е. /dev/console) для виртуальной машины.

Настройка консоли во время установки на «bare metal»#

Примечание: данная настройка является опциональной и регулируется пользователем.

Пример включения основной последовательной и дополнительной графической консоли:


sudo crio run --pull=always --privileged --rm \
-v /dev:/dev -v /run/udev:/run/udev -v .:/data -w /data \
quay.io/oscore/oscore-installer:release \
install /dev/vdb -i config.ign \
--console tty0 --console ttyS0,115200n8

Это настроит загрузчик GRUB и ядро для использования указанных консолей.

Настройка консоли с помощью Ignition#

Если OS Core запускается из образа на виртуальной машине, можно использовать Ignition для настройки консоли во время подготовки.

Пример включения основной последовательной и дополнительной графической консоли:


variant: fcos
version: 1.3.0
kernel_arguments:
should_exist:

# Порядок имеет значение, поэтому сгруппируйте оба аргумента в одну и ту же запись списка.

- console=tty0 console=ttyS0,115200n8
should_not_exist:
# Удалите все существующие значения по умолчанию. Отрегулируйте по мере необходимости.
- console=hvc0
- console=tty0
- console=ttyAMA0,115200n8
- console=ttyS0,115200n8
- console=ttyS1,115200n8

Это настроит ядро на использование указанных консолей. Загрузчик GRUB продолжит использовать прежнее значение по умолчанию. Ignition настроит консоль, затем перезагрузится с новой конфигурацией и продолжит подготовку узла.

Настройка консоли после установки#

Существует возможность настройки конфигурации консоли существующего узла через rpm-ostree.

Пример включения основной последовательной и дополнительной графической консолей, представлен ниже:


sudo rpm-ostree kargs --append=console=tty0 --append=console=ttyS0,115200n8 --reboot

rpm-ostree создаст новое развертывание с добавленными указанными аргументами ядра и перезагрузится с новой конфигурацией. Загрузчик GRUB продолжит использовать прежнее значение по умолчанию.

Отладка с помощью toolbox#

Образ OS Core минимален. Это означает, что он не включает в себя все инструменты для устранения неполадок, которые может включать обычная ОС. Вместо этого рекомендуется использовать контейнеры с утилитой панели инструментов, включенной в образ.

Toolbx — это утилита, позволяющая создавать привилегированные контейнеры, предназначенные для отладки и устранения неполадок вашего экземпляра. Это оболочка вокруг cri-o, которая запускает долго работающие контейнеры с монтированием по умолчанию и пространствами имен для отладки хост-системы.

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

Использование toolbox#

По умолчанию toolbox создает контейнеры на основе вашей текущей системы. Например, если вашей базовой системой является Core OS, то toolbox создаст контейнер на основе OS Core.

  1. Чтобы создать новый контейнер на основе текущей версии OS Core, выполните команду, как представлено ниже:


toolbox create

Эта команда выполнит поиск базового образа, который будет использоваться для сборки контейнера в вашей локальной системе (если локальное изображение не найдено, вам будет предложено загрузить соответствующий образ. Введите y и нажмите клавишу Ввод, чтобы загрузить образ).

  1. Перечислите все запущенные наборы инструментов, работающие на хосте. Это должно показать вам только что созданный набор инструментов:


toolbox list

  1. Как указано в выводе команды toolbox create, введите следующую команду, чтобы войти в свой набор инструментов.


toolbox enter

  1. Находясь в контейнере, используйте встроенный dnf менеджер пакетов для установки пакетов.

На примере ниже показана установка strace для просмотра системного вызова чтения, при помощи утилиты хоста toolbox.


sudo dnf install strace
# Some hosts directories are mounted at /run/host
strace -eread /run/host/usr/bin/toolbox list

После установки выйдите из контейнера и удалите его с хоста с помощью следующей команды:


toolbox rm --force fedora-toolbox-35

Примечание: Toolbox позволяет создавать наборы инструментов с вашими собственными образами.

Отладка сбоев ядра с помощью kdump#

kdump — это служба, которая создает аварийные dumps при сбое ядра. Он использует kexec для загрузки вторичного ядра (известного как ядро захвата), а затем экспортирует содержимое памяти ядра (известное как аварийный dump или vmcore) в файловую систему. Затем содержимое vmcore можно проанализировать, чтобы определить основную причину сбоя ядра.

Настройка kdump требует установки crashkernel аргумента ядра и включения службы kdump systemd. Память должна быть зарезервирована для аварийного ядра во время загрузки первого ядра. crashkernel=auto обычно не резервирует достаточно памяти в OS Core, поэтому рекомендуется указать crashkernel=300M. По умолчанию vmcore будет сохранен в формате /var/crash. Также можно записать dump в какое-либо другое место в локальной системе или отправить его по сети, отредактировав файл /etc/kdump.conf.

Подробнее о службе kdump см. в документе Руководство по системному администрированию Platform V SberLinux OS Server (SLO) в разделе «Сценарии администрирования».

Настройка kdump через Ignition#

Настройте конфигурации kdump, как представлено на примере ниже:


variant: fcos
version: 1.3.0
kernel_arguments:
should_exist:
- 'crashkernel=300M'
  systemd:
  units:
- name: kdump.service
  enabled: true

Настройка kdump после первоначального предоставления#

  1. Установите аргумент ядра crashkernel


sudo rpm-ostree kargs --append='crashkernel=300M'

  1. Включите службу kdump systemd.


sudo systemctl enable kdump.service

  1. Перезагрузите систему.


sudo systemctl reboot