saltstack基本使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
saltstack基本使⽤⽬录
1.1 准备实验环境:安装系统
1) 硬件配置如下
2) 先把光标放到“install CentOS 7”, 按 Tab键编辑内核参数,添加(net.ifnames=0 biosdevname=0) 作⽤: 是⽹卡名称 eth0 这样的格式
3) 建议安装语⾔改成简体中⽂,其他保持默认即可
4) 设置完root密码等待安装完成重启即可完成系统安装
5) 配置 VMware NAT 模式默认地址池
编辑-----> 虚拟⽹络编辑器
1.2 克隆⼀台虚拟机完成使⽤环境
1) 配置⽹卡
vi /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
systemctl disable firewalld
systemctl disable NetworkManager
2)设置主机名
vi /etc/hostname
3)设置主机名解析
vi /etc/hosts
192.168.56.11 linux-node1
192.168.56.12 linux-node2
4)设置DNS
vi /etc/resolv.conf
nameserver 192.168.56.2
5)安装最新epel yum 源
6)yum安装⼀些基础包
yum -y install net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap
7)关闭selinux
vim /etc/selinux/config
SELINUX=disabled
8)重启系统
yum update -y && reboot # 升级所有包同时也升级软件和系统内核, 并重启
9)确认是否⼀些服务是否已按计划关闭
getenforce # selinux是否关闭
firewall-cmd --state # 防⽕墙是否关闭
1.2 克隆⼀台虚拟机完成使⽤环境
注:克隆虚拟机必须要先关闭(shutdown)
1)右键“管理” -------》 “克隆” ----》
2)选择从哪个状态创建克隆
3)克隆类型(创建完整克隆)
4)新建虚拟机名称
5) 点击 “完成” 即可完成虚拟机克隆
6) 对克隆的虚拟机 node2 进⾏⼀些简单修改
vim /etc/hostname # 1、修改主机名
vi /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.56.12
reboot
1.3 saltstack 介绍
1、saltstack说明
1)salt是⼀个异构平台基础设置管理⼯具(虽然我们通常只⽤在Linux上),使⽤轻量级的通讯器ZMQ
2)⽤Python写成的批量管理⼯具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有⼀个强⼤的远程执⾏命令引擎
3)也有⼀个强⼤的配置管理系统,通常叫做Salt State System。
4)主要作⽤: 远程执⾏、配置管理、事件驱动
a. 远程执⾏: 及⽀持 使⽤agent ⽀持 使⽤ssh远程执⾏
b. 配置管理: 如果⽤salt描述nginx,没有就会帮你安装,如果nginx配置不对就会帮你改对(保证机器状态和你描述⼀致)
5)特点:即可⽀持 agent ⽅式,也⽀持 ssh⽅式
2、基本原理
1)SaltStack 采⽤ C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信
2)minion上线后先与master端联系,把⾃⼰的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
3)master可以发送任何指令让minion执⾏了,salt有很多可执⾏模块,⽐如说cmd模块,在安装minion的时候已经⾃带了,它们通常位于你的python库中
3、saltstack具体步骤如下
1)Salt stack的Master与Minion之间通过ZeroMq进⾏消息传递,使⽤了ZeroMq的发布-订阅模式,连接⽅式包括tcp,ipc
2)salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取⼀个Jodid,根据jobid获取命令执⾏结果。
3)master接收到命令后,将要执⾏的命令发送给客户端minion。
4)minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理
5)minion._handle_aes发起⼀个本地线程调⽤cmdmod执⾏ls命令。
线程执⾏完ls后,调⽤minion._return_pub⽅法,将执⾏结果通过消息总线返回给master
6)master接收到客户端返回的结果,调⽤master._handle_aes⽅法,将结果写的⽂件中
7)salt.client.LocalClient.cmd_cli通过轮询获取Job执⾏结果,将结果输出到终端。
4、saltstack认证原理
1)salt-master和salt-minion第⼀次启动时会在 /etc/salt/pki/master⽬录下⽣成公钥和私钥⽤于⾝份验证
[root@linux-node1 master]# cd /etc/salt/pki/master
[root@linux-node1 master]# ll -lh
-r-------- 1 root root 1.7K Jan 7 05:36 master.pem
-rw-r--r-- 1 root root 450 Jan 7 05:36 master.pub
2)所有未认证minion的私钥都会放到master的 /etc/salt/pki/master/minions_pre/ ⽂件夹下
3)当minion通过认证后就会放到 /etc/salt/pki/master/minions ⽂件夹下
4)master通过在认证的同时会把⾃⼰的公钥发送给minion, minion会放到 /etc/salt/pki/minion/minion_master.pub 5)这样就实现了双向密钥交换
1.4 saltstack 安装
1、在linux-node1 中安装saltstack master 和 minion
yum -y install salt-master salt-minion
/etc/salt/master(master配置⽂件)
/etc/salt/minion(minion配置⽂件)
2、在linux-node2 中安装saltstack minion
yum -y install salt-minion
/etc/salt/minion(minion配置⽂件)
3、在linux-node1中配置 salt-minion
vim /etc/salt/minion
#master: salt 修改为(master: 192.168.56.11) ----》配置master IP
#id: 修改为(id: ) ---》告诉master⾃⼰是谁,默认会读取当前主机名
注:saltstack是以主机名区分不同 agent 需保证主机名唯⼀
4、在linux-node2中配置 salt-minion
vim /etc/salt/minion
#master: salt 修改为(master: 192.168.56.11) ----》配置master IP
#id: 修改为(id: ) ---》告诉master⾃⼰是谁,默认会读取当前主机名
5、启动linux-node1中salt-maser 和 salt-minion
systemctl start salt-master # 启动salt-master
systemctl enable salt-master # 设置salt-master开机⾃启动
systemctl start salt-minion # 启动
systemctl enable salt-minion # 开机⾃启动
6、启动linux-node2中salt-minion
systemctl start salt-minion # 启动
systemctl enable salt-minion # 开机⾃启动
7、认证
salt-key # 在master中查看所有key的状态
salt-key -a # 认证 的key
salt-key -A # ⼀次性认证所有key
8、远程执⾏测试
salt \* test.ping # 测试saltstack minion与master的连通性
salt \* cmd.run 'df -h' # 在所有minion中批量执⾏ df -h 命令
1.5 saltstack 常⽤模块
1、cmd.run (远程执⾏)
功能: 实现远程命令执⾏
salt '*' cmd.run 'free -m'
2、cp模块
功能: 实现远程⽂件、⽬录复制,下载Url⽂件等操作
# 1、master配置同步根⽬录(YAML语法,1. 每⼀级使⽤两个空格 2. 短横线表⽰列表)vim /etc/salt/master
file_roots:
base:
- /srv/salt
dev:
- /srv/salt/dev
systemctl restart salt-master # 需要重启master
# 2、创建同步⽬录⽂件夹,和测试⽂件 /srv/salt/test.sh
mkdir -p /srv/salt/dev
vim /srv/salt/test.sh #创建测试⽂件
# 3、将 /srv/salt/ 下的test.sh⽂件同步到所有minion
salt '*' cp.get_file salt://test.sh /tmp/test.sh
# 4、创建⽬录 makedirs(当分发的位置在⽬标主机上不存在时,⾃动创建该⽬录)
salt '*' cp.get_file salt://test.sh /aaa/test.sh makedirs=True
# 5、将 /srv/salt 中的testdir ⽬录复制到所有minion
mkdir /srv/salt/testdir/
salt '*' cp.get_dir salt://testdir /aaa/
# 6、下载百度⾸页内容保存到所有minion中
salt '*' cp.get_url /tmp/index.html
3、状态管理(神笔马良)
1)修改 /etc/salt/master ⽂件
# 1、master配置同步根⽬录(YAML语法,1. 每⼀级使⽤两个空格 2. 短横线表⽰列表)vim /etc/salt/master
file_roots:
base:
- /srv/salt
dev:
- /srv/salt/dev
systemctl restart salt-master # 需要重启master
2)在 /srv/salt/ 下配置状态管理
[root@linux-node1 /]# vim /srv/salt/web/apache.sls
# 1.描述了要装⼀个httpd服务
apache-install: # 这个是⼀个名称,可以随便写
pkg.installed: # pkg是状态模块,installed是状态模块中的⽅法
- name: httpd # 描述了我在⾥要装⼀个httpd包
# 2.描述了httpd服务是启动状态,并且是开机⾃启动状态
apache-service: # 这个是⼀个名称,可以随便写
service.running: # 描述了httpd服务是运⾏的状态
- name: httpd
- enable: True # 描述httpd服务开机⾃动启动
3)在 salt-master中执⾏命令让 linux-node2按照描述完成按照
[root@linux-node1 web]# salt state.sls web.apache
1)通过远程执⾏,通知node2进⾏配置管理
2)state.sls # 远程执⾏的⼀个⽅法
3)web.apache # 执⾏web⽬录下的apache⽂件
4、grains.item模块
功能:获取机器基本信息(cpu、内存)
# 1、查看系统版本
[root@linux-node1 salt]# salt '' grains.item os
:
----------
os:
CentOS
# 2、查看cpu型号
[root@linux-node1 salt]# salt '' grains.item cpu_model :
----------
cpu_model:
Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
# 3、获取ipv4地址
[root@linux-node1 salt]# salt '' grains.item fqdn_ip4
:
----------
fqdn_ip4:
- 192.168.56.11
# 4、查询内核版本
[root@linux-node1 salt]# salt '' grains.item kernelrelease :
----------
kernelrelease:
3.10.0-957.1.3.el7.x86_64
# 5、查看主机名
[root@linux-node1 salt]# salt '' grains.item nodename :
----------
nodename:
# 6、查看系统版本号 centos6、centos7等
[root@linux-node1 salt]# salt '' grains.item osmajorrelease :
----------
osmajorrelease:
# 7、查看salt版本
[root@linux-node1 salt]# salt '' grains.item saltversion :
----------
saltversion:
2018.3.3
# 8、查看cpu数据量
[root@linux-node1 salt]# salt '' grains.item num_cpus :
----------
num_cpus:
# 9、查看内存⼤⼩
[root@linux-node1 salt]# salt '' grains.item mem_total :
----------
mem_total:
# 10、查看ipv4地址
[root@linux-node1 salt]# salt '' grains.item ipv4
:
----------
ipv4:
- 127.0.0.1
- 192.168.56.11
grains.item获取主机基本信息
grains.item获取主机基本信息
5、Service模块
salt '*' service.reload nginx
1.6 salt ssh 详解
1、安装(master和minion中都需要安装)
yum -y install salt-ssh
2、配置花名册,配置要管理的机器
vim /etc/salt/roster
# Sample salt-ssh config file
#web1:
# host: 192.168.42.1 # The IP addr or DNS hostname
# user: fred # Remote executions will be executed as user fred
# passwd: foobarbaz # The password to use for login, if omitted, keys are used
# sudo: True # Whether to sudo to root, not enabled by default
#web2:
# host: 192.168.42.2
:
host: 192.168.56.11
user: root
passwd: chnsys@2016
port: 22
:
host: 192.168.56.12
user: root
passwd: chnsys@2016
port: 22
/etc/salt/roster
/etc/salt/roster
3、常⽤命令
salt-ssh '*' test.ping -i # 使⽤salt⾃⾝模块
salt-ssh '*' cmd.run 'df -lh'
salt-ssh '*' -r 'ifconfig' # 执⾏原⽣shell命令
-r, –raw, –raw-shell # 直接使⽤shell命令
–priv #指定SSH私有密钥⽂件
–roster #定义使⽤哪个roster系统,如果定义了⼀个后端数据库,扫描⽅式,或者⽤户⾃定义的的roster系统,默认的就是/etc/salt/roster⽂件
–roster-file #指定roster⽂件
–refresh, –refresh-cache #刷新cache,如果target的grains改变会⾃动刷新
–max-procs #指定进程数,默认为25
-i, –ignore-host-keys #当ssh连接时,忽略keys
–passwd #指定默认密码
–key-deploy #配置keys 设置这个参数对于所有minions⽤来部署ssh-key认证,
这个参和–passwd结合起来使⽤会使初始化部署很快很⽅便。
当调⽤master模块时,并加上参数 –key-deploy 即可在minions⽣成keys,下次开始就不使⽤密码salt-ssh命令⽤法
salt-shh命令⽤法
1.7 salt Grains
1、grains作⽤
grains是minion第⼀次启动的时候采集的静态数据,可以⽤在salt的模块和其他组件中。
其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报⼀次的。
grains 的作⽤是在每个minion中配置 key value进⾏标识,使批量执⾏时可以区分
salt 'linux-node1*' grains.ls # grains⽀持通配符
2、salt grains原⽣命令
1. salt '*' grains.items # 查看minion的全部静态变量
2. salt '*' grains.ls # 显⽰grains的变量名称
3. salt '*' grains.item os # 显⽰某⼀个变量
4. salt '*' grains.get ip4_interfaces:eth0 # 直接获取内容
5. salt -G 'os:CentOs' test.ping # 所有os的centos的 执⾏test.ping (-G就是grains) 3、⾃定义grains:需要重启 minion
# 1、编辑 minion ⽂件,配置⾓⾊名
vim /etc/salt/minion
'''
grains:
roles: apache
'''
# 2、重启minion
systemctl restart salt-minion
# 3、查看所有机器都有哪些roles
[root@linux-node1 ~]# salt '*' grains.item roles
:
----------
roles:
apache
:
----------
roles:
# 4、让所有⾓⾊为apache的机器执⾏命令'w',-G表⽰以grains进⾏⽬标选择
salt -G 'roles:apache' cmd.run 'w'
⾃定义grains:需要重启 minion
⾃定义grains: 需要重启 minion
4、⾃定义grains:⽆需重启minion
# 1、在minion中新建⽂件/etc/salt/grains,添加⼀个 key value
vim /etc/salt/grains
'''
test-grains: test-grains-value
'''
# 2、让minion到所有grains中读取配置
salt '*' saltutil.sync_grains
# 3、查看所有 key为test-grains的minion
[root@linux-node1 ~]# salt '*' grains.item test-grains
:
----------
test-grains:
test-grains-value
:
----------
test-grains:
# 4、让所有key=test-grains value=test-grains-value 的机器执⾏命令'w',-G表⽰以grains进⾏⽬标选择salt -G 'test-grains:test-grains-value' cmd.run 'w'
⾃定义grains:⽆需重启minion
⾃定义grains: ⽆需重启 minion
1.8 salt Pillar
1、Salt Pillar
1. 存储位置:存储在master端,存放需要提供给minion的信息,minion每次需要动态从master获取
2. 应⽤场景:敏感信息,每个minion只能访问master分配给⾃⼰的 pillar
2、在master配置⽂件中指定pillar位置
vim /etc/salt/master
'''
pillar_roots:
base:
- /srv/pillar
'''
systemctl restart salt-master
mkdir /srv/pillar
cd /srv/pillar
3、编辑⼀个pillar⽂件
需求:在centos(httpd)和Ubuntu(apache2)都需要apache服务,但是两种操作系统安装的包名不同vim /srv/pillar/apache.sls # 编辑⼀个pillar⽂件
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
4、指定这个pillar⽂件给那个minion使⽤
vim top.sls # 指定这个pillar⽂件给那个minion使⽤
base:
'':
- apache
5、确认 pillar中配置的items是否⽣效
[root@linux-node1 pillar]# salt '*' pillar.items
:
----------
:
----------
apache:
httpd
6、 Salt Grains 与 Salt Pillar ⽐较。