# Краткое руководство по Salt Stack *** - [Краткое руководство по Salt Stack](#краткое-руководство-по-salt-stack) - [Установка Salt](#установка-salt) - [Master на Альт сервер](#master-на-альт-сервер) - [Minion на CentOS Stream 9](#minion-на-centos-stream-9) - [Minion на Debian 12](#minion-на-debian-12) - [Minion на Альт Сервер 10.2](#minion-на-альт-сервер-102) - [Настройка master](#настройка-master) - [Настройка minion](#настройка-minion) - [Ключи](#ключи) - [Посмотреть все ключи](#посмотреть-все-ключи) - [Принять ключ конкретного миньона](#принять-ключ-конкретного-миньона) - [Принять ключи по маске идентификаторов](#принять-ключи-по-маске-идентификаторов) - [Показать только принятые ключи](#показать-только-принятые-ключи) - [Принять все предлагаемые ключи](#принять-все-предлагаемые-ключи) - [Удалить ключи по маске](#удалить-ключи-по-маске) - [Удалить конкретный ключ](#удалить-конкретный-ключ) - [Удалить все ключи](#удалить-все-ключи) - [Первый тест](#первый-тест) - [Сбор данных](#сбор-данных) - [Сбор всех данных](#сбор-всех-данных) - [Получение конкретных значений](#получение-конкретных-значений) - [Указание конкретных миньонов для запуска](#указание-конкретных-миньонов-для-запуска) - [По маске имён](#по-маске-имён) - [По зёрнам (`grains`) в качестве фильтров](#по-зёрнам-grains-в-качестве-фильтров) - [По группам узлов](#по-группам-узлов) - [Составные подстановки](#составные-подстановки) - [Источники](#источники) *** В качестве тестового стенда используется виртуальная лаборатория ![stand](./stand.png) ## Установка Salt процесс установки описан в документации ### Master на Альт сервер ```bash apt-get update && apt-get install -y salt-master salt-minion salt-api systemctl enable --now salt-master systemctl enable --now salt-minion ``` ### Minion на CentOS Stream 9 ```bash sudo rpm --import https://repo.saltproject.io/salt/py3/redhat/9/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub curl -fsSL https://repo.saltproject.io/salt/py3/redhat/9/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo sudo dnf install -y salt-minion sudo systemctl enable --now salt-minion ``` ### Minion на Debian 12 ```bash su - mkdir /etc/apt/keyrings curl -fsSL -o /etc/apt/keyrings/salt-archive-keyring-2023.gpg https://repo.saltproject.io/salt/py3/debian/12/amd64/SALT-PROJECT-GPG-PUBKEY-2023.gpg echo "deb [signed-by=/etc/apt/keyrings/salt-archive-keyring-2023.gpg arch=amd64] https://repo.saltproject.io/salt/py3/debian/12/amd64/latest bookworm main" | tee /etc/apt/sources.list.d/salt.list apt update apt install -y salt-minion systemctl enable --now salt-minion ``` ### Minion на Альт Сервер 10.2 ```bash su - apt-get update apt-get install -y salt-minion systemctl enable --now salt-minion ``` ## Настройка master Описание возможных директив конфигурационного файла приводится в файле `/etc/salt/master` или в документации Хорошим тоном является создание своих конфигурационных файлов в директории `*.d` ```bash vim /etc/salt/master.d/master.conf ``` ```bash # The network interface to bind to interface: 0.0.0.0 # The Request/Reply port # Для файлового сервера, аутентификации, возврата результатов и проч. ret_port: 4506 # The port minions bind to for commands, aka the publish port publish_port: 4505 # Писать статистику после выполнения команд cli_summary: true # Объединение узлов в группы # Пробелы в выборках нужно обрабатывать # НЕ правильно - 'G@os:CentOS Strem' # Правильно - 'G@os:CentOS?Stream' или 'P@os:CentOS\sStream' или 'G@os:CentOS*' nodegroups: alt: 'G@os:ALT' centos-stream: 'G@os:CentOS?Stream' centos: 'P@os:CentOS\sStream' debian: 'G@os:Debian' apt: 'deb-*' rpm: 'centos-*' worker_threads: 5 ``` ## Настройка minion ```bash cat /etc/salt/minion.d/minion.conf ``` ```bash # Адрес мастера master: 10.1.4.1 # Уникальный идентификатор миньона # по-умолчанию берётся hostname id: centos-minion-1 ``` ## Ключи Для аутентификации и авторизации в Salt используются пары ключей (закрытый, открытый). При включении службы миньона формируется пара ключей, открытый ключ отправляется на мастер. У мастера есть специальная утилита для работы с ключами - `salt-key` Некоторые примеры работы с ней: ### Посмотреть все ключи ```bash [root@alt-master ~]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: alt-minion-5 alt-minion-6 centos-minion-1 centos-minion-2 deb-minion-3 deb-minion-4 Rejected Keys: ``` ### Принять ключ конкретного миньона ```bash [root@alt-master ~]# salt-key -l accepted Accepted Keys: [root@alt-master ~]# salt-key -a centos-minion-1 The following keys are going to be accepted: Unaccepted Keys: centos-minion-1 Proceed? [n/Y] Key for minion centos-minion-1 accepted. ``` ### Принять ключи по маске идентификаторов ```bash [root@alt-master ~]# salt-key -a 'deb*' The following keys are going to be accepted: Unaccepted Keys: deb-minion-3 deb-minion-4 Proceed? [n/Y] Key for minion deb-minion-3 accepted. Key for minion deb-minion-4 accepted. ``` ### Показать только принятые ключи ```bash salt-key -l accepted ``` ### Принять все предлагаемые ключи ```bash salt-key -A ``` ### Удалить ключи по маске ```bash salt-key -d 'deb*' ``` ### Удалить конкретный ключ ```bash salt-key -d deb-minion-3 ``` ### Удалить все ключи ```bash salt-key -D ``` Для дальнейшей работы необходимо принять ключи миньонов *(уверены в том, что в текущем окружении только проверенные узлы)* ```bash [root@alt-master ~]# salt-key -A The following keys are going to be accepted: Unaccepted Keys: alt-minion-5 alt-minion-6 centos-minion-2 Proceed? [n/Y] Key for minion alt-minion-5 accepted. Key for minion alt-minion-6 accepted. Key for minion centos-minion-2 accepted. ``` Таким образом должен получиться такой вывод ```bash [root@alt-master ~]# salt-key -L Accepted Keys: alt-minion-5 alt-minion-6 centos-minion-1 centos-minion-2 deb-minion-3 deb-minion-4 Denied Keys: Unaccepted Keys: Rejected Keys: ``` ## Первый тест ```bash [root@alt-master ~]# salt '*' test.ping centos-minion-2: True deb-minion-3: True deb-minion-4: True centos-minion-1: True alt-minion-6: True alt-minion-5: True ------------------------------------------- Summary ------------------------------------------- # of minions targeted: 6 # of minions returned: 6 # of minions that did not return: 0 # of minions with errors: 0 ------------------------------------------- ``` ## Сбор данных grains - зёрна, переменные, которые получает мастер с миньона ```bash [root@alt-master ~]# salt 'alt-minion-6' grains. grains.append grains.delval grains.fetch grains.get grains.item grains.ls grains.set grains.setvals grains.delkey grains.equals grains.filter_by grains.has_value grains.items grains.remove grains.setval ``` двойной Tab покажет возможные варианты команды ### Сбор всех данных ```bash salt 'alt-minion-6' grains.items ``` ### Получение конкретных значений ```bash salt 'alt-minion-6' grains.item ipv4 ``` ```bash salt 'alt-minion-6' grains.item os ``` ```bash salt 'alt-minion-6' grains.item cpuarch ``` ## Указание конкретных миньонов для запуска ### По маске имён ```bash salt 'deb-*' test.ping ``` `*` - и прочие подстановочные символы необходимо оборачивать кавычками, иначе оболочка их будет интерпретировать по-своему - Glob-подстановки ### По зёрнам (`grains`) в качестве фильтров **Пробелы в выборках нужно обрабатывать** **НЕ правильно** - `'G@os:CentOS Strem'` **Правильно** - `'G@os:CentOS?Stream'` **Правильно** - `'P@os:CentOS\sStream'` **Правильно** - `G@os:CentOS*` ```bash salt -G 'os:ALT' test.ping ``` ```bash salt -G 'G@os:CentOS?Stream' test.ping ``` ### По группам узлов Группы узлов необходимо заранее создать в настройках мастера ```bash salt -N debian test.ping ``` ### Составные подстановки ```bash deb_ip=$(salt 'deb-minion-3' network.ipaddrs --out=newline_values_only) salt -C "( G@os:CentOS* and alt* ) or S@${deb_ip}" test.ping ``` ## Источники