salt/README.md

368 lines
11 KiB
Markdown
Raw Normal View History

2024-03-13 15:50:41 +03:00
# Краткое руководство по Salt Stack
2024-03-20 16:37:15 +03:00
***
- [Краткое руководство по 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)
- [Ключи](#ключи)
2024-03-20 17:53:24 +03:00
- [Посмотреть все ключи](#посмотреть-все-ключи)
- [Принять ключ конкретного миньона](#принять-ключ-конкретного-миньона)
- [Принять ключи по маске идентификаторов](#принять-ключи-по-маске-идентификаторов)
- [Показать только принятые ключи](#показать-только-принятые-ключи)
- [Принять все предлагаемые ключи](#принять-все-предлагаемые-ключи)
- [Удалить ключи по маске](#удалить-ключи-по-маске)
- [Удалить конкретный ключ](#удалить-конкретный-ключ)
- [Удалить все ключи](#удалить-все-ключи)
2024-03-20 16:37:15 +03:00
- [Первый тест](#первый-тест)
2024-03-20 17:53:24 +03:00
- [Сбор данных](#сбор-данных)
- [Сбор всех данных](#сбор-всех-данных)
- [Получение конкретных значений](#получение-конкретных-значений)
- [Указание конкретных миньонов для запуска](#указание-конкретных-миньонов-для-запуска)
- [По маске имён](#по-маске-имён)
- [По зёрнам (`grains`) в качестве фильтров](#по-зёрнам-grains-в-качестве-фильтров)
- [По группам узлов](#по-группам-узлов)
- [Составные подстановки](#составные-подстановки)
2024-03-20 16:37:15 +03:00
- [Источники](#источники)
***
2024-03-13 15:50:41 +03:00
В качестве тестового стенда используется виртуальная лаборатория
2024-03-13 15:53:40 +03:00
![stand](./stand.png)
2024-03-13 15:50:41 +03:00
2024-03-20 14:06:12 +03:00
## Установка 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
```
### 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` или в документации <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
2024-03-20 17:53:24 +03:00
# Объединение узлов в группы
# Пробелы в выборках нужно обрабатывать
# НЕ правильно - '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-*'
2024-03-20 14:06:12 +03:00
worker_threads: 5
```
## Настройка 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
# Уникальный идентификатор миньона
2024-03-20 15:01:17 +03:00
# по-умолчанию берётся hostname
2024-03-20 14:06:12 +03:00
id: centos-minion-1
```
2024-03-20 15:01:17 +03:00
## Ключи
2024-03-20 14:06:12 +03:00
2024-03-20 15:01:17 +03:00
Для аутентификации и авторизации в Salt используются пары ключей (закрытый, открытый). При включении службы миньона формируется пара ключей, открытый ключ отправляется на мастер.
2024-03-20 14:06:12 +03:00
2024-03-20 15:01:17 +03:00
У мастера есть специальная утилита для работы с ключами - `salt-key`
Некоторые примеры работы с ней:
2024-03-20 17:53:24 +03:00
### Посмотреть все ключи
2024-03-20 15:01:17 +03:00
```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:
```
2024-03-20 17:53:24 +03:00
### Принять ключ конкретного миньона
2024-03-20 15:01:17 +03:00
```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.
```
2024-03-20 17:53:24 +03:00
### Принять ключи по маске идентификаторов
2024-03-20 15:01:17 +03:00
```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.
```
2024-03-20 17:53:24 +03:00
### Показать только принятые ключи
2024-03-20 15:01:17 +03:00
```bash
salt-key -l accepted
```
2024-03-20 17:53:24 +03:00
### Принять все предлагаемые ключи
2024-03-20 15:01:17 +03:00
```bash
salt-key -A
```
2024-03-20 17:53:24 +03:00
### Удалить ключи по маске
2024-03-20 15:01:17 +03:00
```bash
salt-key -d 'deb*'
```
2024-03-20 17:53:24 +03:00
### Удалить конкретный ключ
2024-03-20 15:01:17 +03:00
```bash
salt-key -d deb-minion-3
```
2024-03-20 17:53:24 +03:00
### Удалить все ключи
2024-03-20 15:01:17 +03:00
```bash
salt-key -D
```
2024-03-20 15:17:23 +03:00
Для дальнейшей работы необходимо принять ключи миньонов *(уверены в том, что в текущем окружении только проверенные узлы)*
2024-03-20 15:01:17 +03:00
```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
-------------------------------------------
```
2024-03-20 14:06:12 +03:00
2024-03-20 17:53:24 +03:00
## Сбор данных
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
```
2024-03-20 14:06:12 +03:00
## Источники
<https://www.youtube.com/watch?v=6zY41M2anrY></br>
2024-03-20 15:17:48 +03:00
<https://gitlab.com/bergentroll-docs/saltstack-tutorial></br>
<https://docs.saltproject.io/en/latest/contents.html></br>
2024-03-20 15:17:23 +03:00