saltstack自动化运维

实验环境:
准备三台机器,这三台机器都关闭 selinux,清空防火墙规则。
systemctl stop firewalld
setenforce 0

hostnamectl set-hostname master.saltstack.com
hostnamectl set-hostname web01.saltstack.com
hostnamectl set-hostname web02.saltstack.com

vi /etc/hosts
192.168.80.100 master.saltstack.com
192.168.80.101 web01.saltstack.com
192.168.80.102 web02.saltstack.com

分别为三台机器添加epel源,本地有官方源。
yum install -y epel-release 安装epel源

服务器安装:(主控端)
yum -y install salt-master salt-minion

客户端安装
yum -y install salt-minion

客户端安装
yum -y install salt-minion

服务端和客户端都要配置
vi /etc/salt/minion +16
master: 192.168.80.100

分别修改三台机器minion文件中的的id为自己的主机名
vi /etc/salt/minion +78
id: master.saltstack.com

vi /etc/salt/minion
id: web01.saltstack.com

vi /etc/salt/minion
id: web02.saltstack.com

一定先开启主的
systemctl start salt-master
systemctl enable salt-master

systemctl start salt-minion
systemctl enable salt-minion

salt-key -L 查看待认证的服务器
saltstack自动化运维_第1张图片
Accepted Keys:认证通过
Denied Keys:旧的的认证
Unaccepted Keys:等待认证
Rejected Keys:拒绝认证

手动添加认证:
认证的方式是salt-key -a 客户端id
salt-key -a web01.saltstack.com
在这里插入图片描述
这个可能没有空格原因

salt-key -a web02.saltstack.com

salt-key -a master.saltstack.com

说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件。

salt-key -L
saltstack自动化运维_第2张图片

注意,如果你想修改id的话,需要先删除服务端的id,使用salt-key -d id名称就行,修改客户端文件,重启客户端服务后,需要重新认证。这里需要注意一下,老的版本需要删除客户端的/etc/salt/minion_id的内容,修改配置文件的id,重启服务才生效。因为第一次启动的时候它会生成这个文件,以后再不会读minion这个配置文件了,直接读minion_id这个文件。

在主控端
测试与被控端的通信状态!
salt ‘*’ test.ping
saltstack自动化运维_第3张图片

salt ‘*’ cmd.run ‘df -hT’ //远程执行命令
saltstack自动化运维_第4张图片

安装完成修改主配置文件:
vi /etc/salt/master
修改如下:
416行3行去掉#
file_roots:
base:
- /srv/salt #saltstack文件根目录位置,目录需要创建

710行组分类:
nodegroups:
group1: ‘web01.saltstack.com’
group2: ‘web02.saltstack.com’

552行 pillar_opts: True //开启pillar功能

529行
pillar_roots:
base:
- /srv/pillar //pillar的主目录,需要创建

grep -v ^# /etc/salt/master | grep -v ^$ //查看对主配置文件做的更改
saltstack自动化运维_第5张图片
启动服务器:
systemctl start salt-master 一定先启动主的
netstat -anpt | egrep ‘:4505|:4506’
saltstack自动化运维_第6张图片
创建salt与pillar文件根目录:
mkdir /srv/salt
mkdir /srv/pillar

注:
Saltstack几个重要的组件:

grains
grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。
grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的

pillar
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

State
他是saltstack的最核心功能,通过预先指定好的sls文件对被控主机进行管理:包/文件/网络配置/系统服务/系统用户等。

查看被控主机上grains所有值:(每次minion在启动是都会获取客户端信息)

salt ‘’ grains.ls 列出所有的 grains 项目名字
salt '
’ grains.items (静态数据)
salt ‘*’ pillar.items (动态数据)
saltstack自动化运维_第7张图片

自定义 grains的方法有两种(客户端自定义配置和服务端写脚本定义):
1.客户端配置(缺点:每台都得去配置,机器多了配置起来不方便)
vi /etc/salt/grains // 添加如下,注意冒号后有空格
role: nginx
env: test
myname: primum est
或者
vi /etc/salt/minion +12
去掉这行内容的注释
default_include: minion.d/*.conf

cd /etc/salt/minion.d/
vi custom_grains.conf // 添加下面内容
grains:
role:
nginx
env:
test
myname:
primum est

重启minion服务

systemctl restart salt-minion

服务端获取 grains
salt ‘web*’ grains.item role env myname // 列出多个
saltstack自动化运维_第8张图片

salt ‘web*’ grains.get myname // 列出单个
在这里插入图片描述
salt ‘web*’ grains.item myname
saltstack自动化运维_第9张图片

grains 在远程执行命令时很方便。我们可以按照 grains 的一些指标来操作。比如把所有的 web 服务器的 grains 的 role 设置为 nginx,那这样我们就可以批量对 nginx 的服务器进行操作了:

salt -G role:nginx cmd.run ‘hostname’
在这里插入图片描述
salt -G os:CentOs cmd.run ‘hostname’
saltstack自动化运维_第10张图片

2.服务端写Python脚本

服务端写Python脚本:
salt-key

mkdir -p /srv/salt/grains
cd /srv/salt/grains/
vi mytest.py
插入测试脚本:
#!/usr/bin/env python
#
*
coding:utf-8 *

import os

def my_test():
grains = {}
grains[‘say’] = ‘hello world’
return grains

def my_test1():
grains = {}
with os.popen(‘free -m’) as f:
grains[‘mem_usage’] = f.read()
return grains

salt ‘*’ saltutil.sync_all //同步文件到客户端
saltstack自动化运维_第11张图片

在被控端查看同步效果:
[root@web01 ~]# ll /var/cache/salt/minion/extmods/grains/
总用量 8
-rw------- 1 root root 265 4月 20 10:30 mytest.py
-rw------- 1 root root 613 4月 20 10:30 mytest.pyc

接着:
服务端刷新模块
salt ‘’ sys.reload_modules //刷新模板
saltstack自动化运维_第12张图片
检测效果:
salt '
’ grains.item say
saltstack自动化运维_第13张图片
salt ‘*’ grains.item mem_usage
saltstack自动化运维_第14张图片

pillar管理模板
服务端自定义配置 pillar
vi /srv/pillar/test.sls // 自定义配置文件,内容如下

conf: /etc/mum.conf
myname: primum est

vi /srv/pillar/top.sls // 总入口文件,内容如下
base:
‘*’:
- test

重启master

systemctl restart salt-master

注意:当更改完 pillar 配置文件后,我们可以通过刷新 pillar 配置来获取新的 pillar 状态:

salt ‘*’ saltutil.refresh_pillar
saltstack自动化运维_第15张图片
验证:

salt ‘web01.saltstack.com’ pillar.items
saltstack自动化运维_第16张图片

salt ‘web01.saltstack.com’ pillar.item conf
在这里插入图片描述

配置管理安装Apache
下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:
注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。

vi /srv/salt/top.sls

base:
‘web01.saltstack.com’:
- apache
注意:若换成 ‘*’,则表示在所有的客户端执行 apache 模块。

vi /srv/salt/apache.sls

apache-service:
pkg.installed:
- names: // 如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True

注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动。

重启服务
systemctl restart salt-master
systemctl restart salt-minion
执行命令
salt ‘web01.saltstack.com’ state.highstate
saltstack自动化运维_第17张图片

并且被控端已经运行了httpd服务
网址测试:访问被控端ip地址
http://192.168.80.101/
saltstack自动化运维_第18张图片

以上saltstack自动化运维安装httpd服务安装完成

你可能感兴趣的:(自动化运维)