saltstack教程

安装saltstack

配置yum源

curl https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo >Centos-vault-8.5.2111.repo
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.repo | sudo tee /etc/yum.repos.d/salt.repo

安装salt

#master
yum install salt-master
#minion
yum install salt-minion

minion节点创建配置文件

minion_ip=$(hostname -I | awk '{print $1}')
cat > /etc/salt/minion << EOF
master: 192.168.1.21
id: $minion_ip
EOF

xxxxxxxxxx calicoctl node statusshell

#master
systemctl enable salt-master
systemctl start salt-master
#minion
systemctl enable salt-minion
systemctl start salt-minion

配置saltstack

查看来自客户端的key

$ salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
rke01
Rejected Keys:

接受来自rke01的key

$ salt-key -a rke01
The following keys are going to be accepted:
Unaccepted Keys:
rke01
Proceed? [n/Y] y
Key for minion rke01 accepted.

测试访问客户端

$ salt 'rke01' test.ping
rke01:
True

执行shell命令

salt rke01 cmd.run ls /root
rke01:
anaconda-ks.cfg
contrib

删除节点

salt-key -d rke01

如果minion和master认证失败使用以下命令清理环境并重启服务

#minion
rm -rf /etc/salt/pki/*
rm -rf /var/cache/salt/minion/*
#master
rm -rf /etc/salt/pki/master/*
rm -rf /var/cache/salt/master/*

组管理

编辑/etc/salt/master配置文件,添加k8s主机组

nodegroups:
k8s:
'L@192.168.1.17,192.168.1.16'

测试访问定义的k8s主机组

$ salt -N k8s test.ping
192.168.1.21:
True

状态管理

关键字 描述
State /srv/salt目录的文件用来定义salt state,处理需要执行的任务。比如有一个common目录,salt默认加载common/common.sls,如果该文件不存在才回去找init.sls文件。
include 加载文件,比如:include: deploy
require 表示state会等待列表中定义的每一项state执行成功之后才会执行
watch 当配置文件发生变更时执行任务,比如复制配置文件,如果配置文件发生变化执行重启服务任务
onchanges 只有当state成功完成并且有变化发生时,关联到onchanges的任务才会执行。
onfail 当state运行失败时关联的任务才会执行。
prereq 只有关联的任务发生变化才会运行

项目目录结构

/srv/
├── deploy.py
└── salt
├── common
│?? └── tasks
│?? └── init.sls
└── top.sls

入口文件top.sls定义内容

base:
'*':
- common.tasks.init

/srv/salt/roles/common/tasks/init.sls引入其他文件

include:
- common.tasks.deploy

/srv/salt/common/tasks/deploy.sls文件编写具体任务

debug_test_message:
cmd.run:
- name: "echo test"

运行salt状态文件

salt "*" state.apply

自定义变量

Grain和Pillar提供了一种允许在Minion中使用用户自定义变量的方案。Grain定义在指定的Minion上,而Pillar则定,义在Master上。它们都可以通过静态(statically)或动态(dynamically)的方式进行定义。但是Grain常用于提供不常修改的数据,至少是不重启Minion就不,会变,而Pillar更倾向于动态数据。

Grain

获取minion所有属性

salt "*" grains.items

获取节点操作系统属性

salt "*" grains.get lsb_distrib_codename

为minion添加或修改属性

salt "*" grains.setval hostname salt-minion

设置minion操作系统类型

salt "*" grains.setval os_family RedHat

pillar

pillar跟state一样,pillar根目录为/srv/pillar,根目录下创建top.sls

base:
"*":
- common

/srv/pillar/common/init.sls定义要配置的变量

role: common

如果pillar文件有变动需要先同步到minion

salt "*" saltutil.refresh_pillar

获取自定义的pillar所有变量

salt "*" pillar.get role

模板动态渲染

获取pillar role变量

debug_pillar_msg:
cmd.run:
- name: "echo pillar role: {{ pillar['role'] }}"

如果要获取一个不存在的变量可以为其设置一个默认值括号内第一个元素为变量名称,第二个元素为变量默认值

debug_pillar_version:
cmd.run:
- name: "echo pillar version: {{ salt['pillar.get']('version','v1.1.1') }}"

使用代码块获取变量

{% set version = 'v10.10.10' %}

debug_pillar_version:
cmd.run:
- name: "echo {{ version }}"

模块

查看所有模块

salt "*" sys.list_modules

查看cmd模块的所有function

salt "*" sys.list_functions cmd

查看cmd模块的用法

salt "*" sys.doc cmd

查看系统信息

salt "*" grains.items

获取指定的信息

salt "*" grains.get cpu_model
文章作者: 慕容峻才
文章链接: https://www.acaiblog.top/saltstack教程/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿才的博客
微信打赏
支付宝打赏