24.1 自动化运维介绍
24.2 saltstack安装
24.3 启动saltstack服务
24.4 saltstack配置认证
24.5 saltstack远程执行命令
24.6 grains
24.7 pillar
24.8 安装配置httpd
24.9 配置管理文件
24.10 配置管理目录
24.11 配置管理远程命令
24.12 配置管理计划任务
24.13 其余命令
24.14 salt-ssh使用html
1、自动化运维介绍python
认识自动化运维:linux
传统运维效率低,大多工做人为完成 传统运维工做繁琐,容易出错 传统运维每日重复作相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面全部问题
常见自动化运维工具nginx
一、Puppet (www.puppetlabs.com) 基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。 二、Saltstack(官网 https://saltstack.com,文档docs.saltstack.com ) 基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时很是快捷,配置和使用比puppet容易,能实现puppet几乎全部的功能。 三、Ansible (www.ansible.com ) 更加简洁的自动化运维工具,不须要在客户端上安装agent,基于python开发。能够实现批量操做系统配置、批量程序的部署、批量运行命令。
2、saltstack安装shell
saltstack介绍https://docs.saltstack.com/en/latest/topics/index.html
可使用salt-ssh远程执行,相似ansible,
也支持c/s模式,下面咱们将讲述该种模式的使用,须要准备两台机器:
183.3为服务端,183.33为客户端vim
设置hostname以及hosts,001和002,hostname这里不须要设置安全
vim /etc/hosts 实验须要,两台机器都须要设置 192.168.183.3 001 192.168.183.33 002
两台机器所有安装saltstack yum源:bash
yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm yum list |grep salt 001上执行 yum install -y salt-master salt-minion 002上执行 yum install -y salt-minion
3、启动salt相关服务服务器
可参考: https://blog.51cto.com/luzhi1024/1731904
编辑配置文件架构
master(001):
vim /etc/salt/master 修改interface监听地址为本机ip: interface: 192.168.183.3 修改auto_accept 自动接收minion的key: auto_accept: True vim /etc/salt/minion master: 192.168.183.3
minion端(002):修改为master的服务器ip
vim /etc/salt/minion master: 192.168.183.3
启动服务:
001 :
systemctl start salt-master systemctl start salt-minion /var/log/salt/master 日志目录 服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通讯的端口
002:
salt-master监听端口,经过TCP/IP和salt-minion通讯,可是salt-minion不监听端口 systemctl start salt-minion
4、saltstack配置认证
master端和minion端通讯须要创建一个安全通道,传输过程须要加密,因此得配置认证,才能进行通讯,也是经过密钥对来加密解密的 minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中pem为私钥,.pub为公钥,它会在发起认证时把公钥传输给master master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,经过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub
以上过程须要借助salt-key工具来实现
salt-key命令用法:
-a 后面跟主机名,认证指定主机 -A 认证全部主机 -r 跟主机名,拒绝指定主机 -R 拒绝全部主机 -d 跟主机名,删除指定主机认证 -D 删除所有主机认证 -y 省略掉交互,至关于直接按了y
执行以下命令 salt-key -a 002 // -a后面跟主机名,能够认证指定主机 此处设置了hosts显示002 此时能够看到minion的hostname已经获取到了,说明安装成功。 绿色的是经过的 粉色的是被拒绝的 Unaccepted是默认的,默认可以识别到的
重启systemctl restart salt-minion 会自动让master端识别minion端,两台机器都执行
使用 salt-key -A 认证全部主机
此时已经接收了001和002的公钥,所在位置:
ls /etc/salt/pki/master/minions
而且两边的公钥是一致的
salt-key -D 主机所有删除,而且/etc/salt/pki/master/minions目录下文件也会删除
5、saltstack远程执行命令
salt '*' test.ping //这里的*表示全部已经签名的minion端,也能够指定一个主机名,test.ping测试对方机器是否存活
salt '*' cmd.run "hostname" 调用系统上的命令,用户为当前所在用户
说明:
这里的*必须是在master上已经被接受过认证的客户端,能够经过salt-key查到,一般是咱们已经设定的id值。关于这部份内容,它支持通配、列表以及正则。
好比两台客户端aming-01,aming-02, 那咱们能够写成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多个机器用逗号分隔,并且须要加-L,使用正则必需要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项。
grains是在minion启动时收集到的一些信息,好比操做系统类型、网卡ip、内核版本、cpu架构等。 grains的信息并非动态的,并不会实时变动,它是在minion启动时收集到的。 咱们能够根据grains收集到的一些信息,作配置管理工做。 grains支持自定义信息。以下:自定义grains
salt '002' grains.ls 列出002上全部的grains项目名字
salt '002' grains.items 列出002上全部grains项目以及值
minion上:
vim /etc/salt/grains //添加: role: nginx env: test 重启minion服务: systemctl restart salt-minion
master上:
获取grains:
salt '*' grains.item role env
能够借助grains的一些属性信息来执行命令
salt -G role:nginx cmd.run 'hostname'
pillar和grains不同,是在master上定义的,而且是针对minion定义的一些信息。像一些比较重要的数据(密码)能够存在pillar里,还能够定义变量等。
master上:
配置自定义pillar
vim /etc/salt/master
找到以下配置://去掉前面的注释 pillar_roots: base: #此行前面有两个空格 - /srv/pillar #此行前面有4个空格
systemctl restart salt-master
mkdir /srv/pillar vim /srv/pillar/test.sls 建立一个子配置文件,内容以下sls为后缀 conf: /etc/123.conf k为conf,value为/etc/123.conf,注意冒号后面的空格,和自定义grains同样
vi /srv/pillar/top.sls //入口文件,内容以下 base: '002': #此行前面有两个空格,针对的机器,主机名 - test #此行前面有4个空格,要加载的配置文件
若是有多个文件能够写多行
在编辑vim /srv/pillar/test2.sls 写入 dir: /data/123
当更改完pillar配置文件后,咱们能够经过刷新pillar配置来获取新的pillar状态:
salt '*' saltutil.refresh_pillar 验证: salt '*' pillar.item conf salt '*' pillar.item conf dir 能够写多个
也能够这样定义top.sls
002对应test,001对应test2
在刷新,验证
pillar一样能够用来做为salt的匹配对象。好比 salt -I 'conf:/etc/123.conf' test.ping
8、安装配置httpd
使用saltstack ,安装配置httpd
master上:
vim /etc/salt/master //搜索找到 file_roots 打开以下内容的注释: file_roots: 找到目录,做为总入口,在目录下作配置 base: #前面有两个空格 - /srv/salt #前面有4个空格
mkdir /srv/salt ; cd /srv/salt vim /srv/salt/top.sls //定义总入口文件,加入以下内容 base: '*': #*全部机器,前面有两个空格 - httpd #须要建立一个httpd的sls文件,前面有4个空格 意思是,在全部的客户端上执行httpd模块 重启 systemctl restart salt-master
master上:
vim /srv/salt/httpd.sls //加入以下内容,这个就是httpd模块的内容
httpd-service: pkg.installed: - names: //要安装的包的名字,这里若是只有一个服务,那么就能够写成 –name: httpd 不用再换行写了。 - httpd - httpd-devel service.running: 启动服务的模块 - name: httpd - enable: True
说明:
httpd-service是id的名字,自定义的。
pkg.installed 为包安装函数,下面是要安装的包的名字。
service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。
执行: salt 'aminglinux-02' state.highstate //执行过程会比较慢,由于客户端上在yum install httpd httpd-devel
state.highstate 此命令会去/srv/salt目录下找top.sls文件
ls /lib/systemd/system/httpd.service 会在002的该目录下生成httpd服务文件,而且服务启动
9、saltstack – 配置管理文件
master上:
vim /srv/salt/test.sls //加入以下内容
file_test: file.managed: - name: /tmp/tobe.com 对方机器的文件路径 - source: salt://test/123/1.txt 来源文件目录,salt://等于/srv/salt/,source指定文件从哪里拷贝 - user: root - group: root - mode: 600 权限
说明:第一行的file_test为自定的名字,表示该配置段的名字,能够在别的配置段中引用它,source指定文件从哪里拷贝,这里的salt://test/123/1.txt至关因而/srv/salt/test/123/1.txt
默认找top.sls文件
mkdir -p /srv/salt/test/123 cp /etc/passwd /srv/salt/test/123/1.txt vim /srv/salt/top.sls //以下内容 base: '*': - test 执行: salt '002' state.highstate
此时002上有/tmp/tobe.com,而且内容与权限和/srv/salt/test/123/1.txt的内容一致
10、配置管理目录
master上:
vim /srv/salt/test_dir.sls //加入以下内容
file_dir: file.recurse: - name: /tmp/testdir 对方机器上的目录 - source: salt://test/123 在master上的源目录 - user: root 属主 - file_mode: 640 文件权限 - dir_mode: 750 目录权限 - mkdir: True - clean: True //加上它以后,源删除文件或目录,目标也会跟着删除,不然不会删除 修改top.sls, vim /srv/salt/top.sls //改成以下内容 base: '*': - test_dir 执行: salt '002' state.highstate 检查002上是否有/tmp/testdir,检查里面的目录、文件以及权限 说明:这里有一个问题,若是source对应的目录里有空目录的话,客户端上不会建立该目录 执行: salt '002' state.highstate
11、配置管理远程命令
master上
vim /srv/salt/shell_test.sls //加入以下内容
shell_test: cmd.script: - source: salt://test/1.sh 脚本在master的路径 - user: root
vim /srv/salt/test/1.sh //加入以下内容
#!/bin/bash touch /tmp/111.txt if [ ! -d /tmp/1233 ] 判断1233目录是否存在,不存在则建立 then mkdir /tmp/1233 fi
更改top.sls内容
增长:
- shell_test
执行: salt '002' state.highstate
检查是否有/tmp/111.txt和/tmp/1233
12、配置管理计划任务
master上
vim /srv/salt/cron_test.sls //加入以下内容
cron_test: cron.present: - name: /bin/touch /tmp/111.txt - user: root - minute: '*' - hour: 20 - daymonth: '*' - month: '*' - dayweek: '*'
注意,*须要用单引号引发来。固然咱们还可使用file.managed模块来管理cron,由于系统的cron都是以配置文件的形式存在的。
top.sls
增长: - cron_test 执行: salt '002' state.highstate
002上检查cron,会看到提示# Lines below here are managed by Salt, do not edit
咱们不能随意改动它,不然就无法删除或者修改这个cron了。
想要删除该cron,须要增长:
cron.absent: - name: /bin/touch /tmp/111.txt 注意空格 执行: salt '002' state.highstate
二者不能共存,要想删除一个cron,那以前的present就得去掉。
此时002上已经没有了
十3、其它可能会用到的命令
cp.get_file 拷贝master上的文件到客户端 salt '*' cp.get_file salt://test/1.txt /tmp/123.txt cp.get_dir 拷贝目录 salt '*' cp.get_dir salt://test/conf /tmp/ //会自动在客户端建立conf目录,因此后面不要加conf,若是写成 /tmp/conf/ 则会在/tmp/conf/目录下又建立conf salt-run manage.up 显示存活的minion salt '*' cmd.script salt://test/1.sh 命令行下执行master上的shell脚本
十4、salt-ssh使用
salt-ssh不须要对客户端作认证,客户端也不用安装salt-minion,它相似pssh/expect.
安装很简单yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
yum install -y salt-ssh
vim /etc/salt/roster //增长以下内容
001: host: 192.168.183.3 user: root passwd: xxxx root的密码 002: host: 192.168.183.33 user: root passwd: xxxx 执行: salt-ssh --key-deploy '*' -r 'w' //第一次执行的时候--key-deploy会自动把本机的公钥放到对方机器上,而后就能够把roster里面的密码去掉
第一次执行:(带密码)
第二次执行:(不带密码)此时已经把公钥推送过去了