Руководство администратора#
Сценарии администрирования#
Настройка пользователей#
Пользователь по умолчанию#
По умолчанию в компоненте Базовая ОС (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
Если доверяете пользователю, можно предоставить права администратора с помощью команды
visudo. Командаvisudoпроверяет синтаксис файла перед фактической перезаписью sudoers файла. Эту команду следует запускать от имени root, чтобы избежать потери доступа sudo в случае сбоя. Вместо непосредственного редактирования /etc/sudo.conf можно создать новый файл в/etc/sudoers.d/каталоге. При запускеvisudoтребуется указать, какой файл нужно отредактировать,-fаргументом. Например, введите команду:
# visudo -f /etc/sudoers.d/user1
Далее добавьте строку:
user1 ALL=(ALL) NOPASSWD: ALL
Убедитесь, что 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 включен, он содержит два режима:
Принудительный.
Разрешающий.
В принудительном режиме SELinux применяет загруженные политики. SELinux запрещает доступ на основе правил политики SELinux и разрешает только явно разрешенные взаимодействия. Принудительный режим является самым безопасным режимом SELinux и является режимом по умолчанию после установки.
В разрешающем режиме SELinux не применяет загруженные политики. SELinux не запрещает доступ, но сообщает о действиях, нарушающих правила, в журнал /var/log/audit/audit.log. Разрешающий режим является режимом по умолчанию во время установки. Разрешающий режим также полезен, например, при устранении неполадок.
Обеспечение требуемого состояния SElinux#
По умолчанию SELinux работает в принудительном режиме.
Примечание: рекомендуем поддерживать систему в принудительном режиме. В целях отладки установите SELinux в разрешающий режим.
Следуйте этой процедуре, чтобы изменить состояние и режим SELinux в системе.
Процедура
Отобразите текущий режим SELinux:
$ getenforce
Чтобы временно установить 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 - управляет не только сетевыми службами, но и программами пользователя.
Чтобы режим 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.
Если установлен флаг
--kubeconfig, используйте только указанный файл.Определите первый контекст для взаимодействия с кластером DropApp:
Используйте флаг
--contextкомандной строки, если контекст присутствует.Используйте
current-contextиз объединенных файлов kubeconfig.
На этом этапе допускается незаполненный контекст.
Определите кластер DropApp и пользователя (user). На этом этапе допускается неопределенность контекста.
Определение пользователя к кластеру DropApp выполняется дважды: один раз для пользователя и один раз для кластера DropApp:
Используйте флаг командной строки, если контекст существует:
--userили--cluster.Если контекст уже заполнен, удалите пользователя или кластер DropApp из контекста.
Примечание: пользователь и кластер DropApp могут быть не заполненными на этом этапе.
Определите актуальную информацию о кластере DropApp для использования. На этом этапе актуальная информация не определена. Создайте атрибуты информации о кластере DropApp при помощи следующих флагов командной строки:
--server,--certificate-authority,--insecure-skip-tls-verify.
Если в объединенных файлах kubeconfig существуют какие-либо атрибуты информации о кластере DropApp, используйте их. Если местоположение сервера не определено, то произойдет сбой.
Определите фактическую информацию о пользователе для использования. Создайте информацию о пользователе, используя те же правила создания информации о кластере 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
Синтаксис |
Описание |
|---|---|
|
Прикрепить к запущенному контейнеру |
|
Создать новый контейнер |
|
Запустить команду в работающем контейнере |
|
Отобразить информацию о версии среды выполнения |
|
Вывести список образов |
|
Отобразить состояние одного или нескольких контейнеров |
|
Вернуть статус одного или нескольких образов |
|
Вернуть информацию о файловой системе образа |
|
Отобразить состояния одного или нескольких pods |
|
Получить журналы контейнера |
|
Перенаправить локальный порт на pod |
|
Вывести список контейнеров |
|
Извлечь образ из реестра |
|
Запустить новый контейнер внутри тестовой среды |
|
Запустить новый pod |
|
Удалить один или несколько контейнеров |
|
Удалить один или несколько образов |
|
Удалить один или несколько pods |
|
Вывести список pods |
|
Запустить один или несколько созданных контейнеров |
|
Отобразить информацию о среде выполнения контейнера |
|
Остановить один или несколько запущенных контейнеров |
|
Остановить один или несколько запущенных pod |
|
Обновить один или несколько запущенных контейнеров |
|
Получить и установить параметры конфигурации crictl |
|
Показать статистику использования ресурсов контейнера(ов) |
|
Показать статистику использования ресурсов pods |
|
Вывести код завершения оболочки bash |
|
Вывести контрольную точку одного или нескольких запущенных контейнеров |
|
Вывести список команд или справку для одной команды |
Сценарии использования 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
Загрузите 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.
Запустите 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
Убедитесь, что 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
Запустите рабочую среду 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 обработчиком.
Извлеките образ
busybox:
$ crictl pull busybox
Image is up to date for busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
Перечислите образы и убедитесь, что выбранный образ
busyboxзагружен:
$ crictl images
IMAGE TAG IMAGE ID SIZE
busybox latest 8c811b4aec35f 1.15MB
k8s.gcr.io/pause 3.1 da86e6ba6ca19 742kB
Создайте контейнер с файлом конфигурации:
$ 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
Перечислите контейнеры и убедитесь, что созданный контейнер находится в статусе
Created:
$ crictl ps -a
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
3e025dd50a72d busybox 32 seconds ago Created busybox 0
Запустите стартовый контейнер:
$ crictl start 3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60
3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60
Убедитесь, что контейнер находится в состоянии
Running:
$ crictl ps
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
3e025dd50a72d busybox About a minute ago Running busybox 0
Выполните команду в контейнере:
crictl exec -i -t 3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60 ls
bin dev etc home proc root sys tmp usr var
Создайте и запустите контейнер одной командой:
$ 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
Выведите список контейнеров и убедитесь, что 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#
Запишите приведенную ниже конфигурацию 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 ненастоящие и приведены для примера.
Запустите 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 ~]$
Если необходимо подключение через 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, поэтому ошибка происходит намеренно, чтобы проиллюстрировать работу вспомогательных сообщений.
Если система запущена без сбоев, проверьте сервис
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!
Проверьте состояние контейнера, который был запущен службой 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
Установите пары ключ/значение в 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
}
]
}
}
После этих шагов настройка является завершенной.
Очистка#
Для очистки выйдите из 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
Повторно включите SMT (Simultaneous multithreading - одновременная многопоточность) на уязвимых процессорах:
$ sudo rpm-ostree kargs --delete=mitigations=auto,nosmt
Обновите существующую систему с
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#
Чтобы определить возможность 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
Запустите 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#
Команда
partxпозволяет отображать список разделов диска для перечисления таблиц разделов конкретного диска. Выполните команду с привилегией root с опцией-s, за которой следует имя устройства:
partx -s device_name
Например, чтобы перечислить разделы на
/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 командной строки ядра.
При загрузке системы в меню GRUB отредактируйте запись, добавив параметр
singleв список аргументов ядра.Нажмите Ctrl-X, чтобы возобновить загрузку.
Подождите, пока система загрузится и появится командная строка.
Установите или сбросьте пароль для целевого пользователя с помощью passwd утилиты.
Перезагрузите систему с помощью команды
/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.
Чтобы создать новый контейнер на основе текущей версии OS Core, выполните команду, как представлено ниже:
toolbox create
Эта команда выполнит поиск базового образа, который будет использоваться для сборки контейнера в вашей локальной системе (если локальное изображение не найдено, вам будет предложено загрузить соответствующий образ. Введите y и нажмите клавишу Ввод, чтобы загрузить образ).
Перечислите все запущенные наборы инструментов, работающие на хосте. Это должно показать вам только что созданный набор инструментов:
toolbox list
Как указано в выводе команды
toolbox create, введите следующую команду, чтобы войти в свой набор инструментов.
toolbox enter
Находясь в контейнере, используйте встроенный 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 после первоначального предоставления#
Установите аргумент ядра crashkernel
sudo rpm-ostree kargs --append='crashkernel=300M'
Включите службу kdump systemd.
sudo systemctl enable kdump.service
Перезагрузите систему.
sudo systemctl reboot