salt/README.md

385 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Краткое руководство по 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
процесс установки описан в документации <https://docs.saltproject.io/salt/install-guide/en/latest/index.html>
### 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
```
[вверх](#краткое-руководство-по-salt-stack)
### 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
```
[вверх](#краткое-руководство-по-salt-stack)
### Minion на Альт Сервер 10.2
```bash
su -
apt-get update
apt-get install -y salt-minion
systemctl enable --now salt-minion
```
## Настройка master
Описание возможных директив конфигурационного файла приводится в файле `/etc/salt/master` или в документации <https://docs.saltproject.io/en/latest/ref/configuration/master.html>
Хорошим тоном является создание своих конфигурационных файлов в директории `*.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
```
[вверх](#краткое-руководство-по-salt-stack)
## Настройка minion
<https://docs.saltproject.io/en/latest/ref/configuration/minion.html>
```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:
```
[вверх](#краткое-руководство-по-salt-stack)
### Принять ключ конкретного миньона
```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:
```
[вверх](#краткое-руководство-по-salt-stack)
## Первый тест
```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
```
[вверх](#краткое-руководство-по-salt-stack)
## Указание конкретных миньонов для запуска
### По маске имён
```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
```
[вверх](#краткое-руководство-по-salt-stack)
[вверх](#краткое-руководство-по-salt-stack)
## Источники
<https://www.youtube.com/watch?v=6zY41M2anrY></br>
<https://gitlab.com/bergentroll-docs/saltstack-tutorial></br>
<https://docs.saltproject.io/en/latest/contents.html></br>