SaltStack-----安装,远程执行,grains,pillar,jinja模板
Posted S4061222
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack-----安装,远程执行,grains,pillar,jinja模板相关的知识,希望对你有一定的参考价值。
一.saltstack
SaltStack是一个服务器基础架构集中化管理平台
,具备配置管理、远程执行、监控
等功能,一般可以理解为简化版的puppet和加强版的func。SaltStack基于Python语言实现
,结合轻量级消息队列
(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等。
1.简介
• saltstack是一个配置管理系统,能够维护预定义状态的远程节点。
• saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。
• saltstack是运维人员提高工作效率、规范业务配置与操作的利器。
2. Salt的核心功能
• 使命令发送到远程系统是并行
的而不是串行的
• 使用安全加密的协议
• 使用最小最快的网络载荷
• 提供简单的编程接口
• Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。
3. saltstack的通信机制
• SaltStack 采用 C/S模式,minion与master之间通过ZeroMQ消息队
列通信,默认监听4505
端口。
• Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听 4506
端口。
4.工作原理
• SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信
• minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信
• master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。
• 这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt ‘*’ cmd.run 'uptime’的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的
。
二.安装
实验环境:
三台新的虚拟机(网络,主机名称,软件仓库,selinux和firewall关闭,彼此解析)
[root@server1 ~]#cat /etc/yum.repos.d/salt.repo
[salt]
name=salt 3000
baseurl=http://172.25.28.250/3000
gpgcheck=0
[root@server1 ~]# scp /etc/yum.repos.d/salt.repo server2:/etc/yum.repos.d/
[root@server1 ~]# scp /etc/yum.repos.d/salt.repo server3:/etc/yum.repos.d/
1.服务端server1
server1安装salt-master ,开机自启动服务
2.客户端server2和server3
安装salt-minion,修改配置文件,启动salt-minion服务
[root@server3 ~]# yum install salt-minion -y
[root@server3 ~]# vim /etc/salt/minion
[root@server3 ~]# systemctl enable --now salt-minion.service
编辑配置文件,使得minion指向master
3.saltstack服务端(master)和客户端(minion)的连接
server1上查看端口: 4505和4506端口(agent传回)
server1添加minion端的key
[root@server1 ~]# salt-key -L #查看
[root@server1 ~]# salt-key -A #添加所有节点的key
[root@server1 ~]# salt-key -a server2/server3 #指定节点
master端测试通信
[root@server1 ~]# salt '*' test.ping ###测试通信
下载lsof查看,master端查看端口连接
[root@server1 ~]# yum install lsof -y
[root@server1 ~]# lsof -i :4505 #查看端口连接
默认4505端口开启并指向minion端,连接方式为established
4.相互交换公钥
server端(server1)给minion端(server2和server3)的公钥
minion端(server2和server3)给server端(server1)的公钥
5.安装python-setproctitle进程详细查看工具,重启salt-master服务,查看进程
[root@server1 minions]# yum install python-setproctitle.x86_64 -y
[root@server1 minions]# systemctl restart salt-master.service
[root@server1 minions]# ps ax # 显示python进程简要作用
三. saltstack远程执行
1.shell命令式远程执行
salt server? test.ping
salt server2 cmd.run hostname
salt server2 cmd.run uname
salt server2 cmd.run 'uname -a'
salt server2 pkg.version salt-minion
salt server2 pkg.install 'httpd'
salt server2 pkg.version 'httpd'
salt server2 cmd.run 'systemctl start httpd'
salt server2 service.stop httpd
2.模块化远程执行
要作模块化执行,首先创建目录,在 /srv 创建 salt目录,/srv/salt/目录下创建 _modules目录,此目录下编写master主配置文件 /srv/salt/_modules/my_disk.py
[root@server1 srv]# mkdir salt
[root@server1 salt]# mkdir /srv/salt/_modules
[root@server1 _modules]# vim my_disk.py
服务端给server2同步模块
[root@server1 _modules]# salt server2 saltutil.sync_modules
#连接模块
minion端安装tree,可以看到server端的文件已同步
[root@server2 minion]# yum install -y tree
[root@server2 minion]# cd ..
[root@server2 salt]# tree minion/
server端远程执行minion端(server2)df 函数中内容
[root@server1 _modules]# salt server2 my_disk.df
3.配置管理的三种方式+apache
(1) 配置管理方式一
ls /srv/salt/apache/apache.sls
[root@server1 apache]# salt server2 state.sls apache/apache
(2) 配置管理方式二
[root@server1 apache]# cp apache.sls init.sls
[root@server1 apache]# ls /srv/salt/apache/init.sls
[root@server1 apache]# salt server2 state.sls apache
apache:目录即识别/srv/salt/apache中的init.sls
(3) 配置管理方式三
/srv/salt/apache.sls 和 /srv/salt/apache/init.sls,执行时优先选择外部sls文件
apache:目录即识别/srv/salt/apache.sls
4.server端远程执行:server2安装httpd,php,启动httpd
[root@server1 apache]# vim init.sls
httpd:
pkg.installed:
- pkgs:
- httpd #安装http
- php #安装php服务
service.running:
- name: httpd #开启http服务
[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# salt server2 state.sls apache
缓存位置:var/cache/master/jobs/
四.grains匹配运用:在server3部署nginx
master端在/src/salt/下创建nginx目录
master端在远程在server3执行
[root@server1 nginx]# pwd
/srv/salt/nginx
[root@server1 nginx]# ls
init.sls nginx-1.20.1.tar.gz
[root@server1 nginx]# vim init.sls
[root@server1 nginx]# salt server3 state.sls nginx
nginx-install:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel
file.managed:
- name: /mnt/nginx-1.20.1.tar.gz
- source: salt://nginx/nginx-1.20.1.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.20.1.tar.gz && cd nginx-1.20.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
- create: /usr/local/nginx
create的作用:执行后的动作不用再次执行
server3端查看进程
编写nginx启动模块
include:
- nginx
nginx-user:
user.present:
- name: nginx
- shell: /sbin/nologin
- home: /usr/local/nginx
- createhome: false
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/nginx.conf
nginx-service:
file.managed:
- name: /usr/lib/systemd/system/nginx.service
- source: salt://nginx/nginx.service
service.running:
- name: nginx
- enable: true
- reload: true
- watch:
- file: /usr/local/nginx/conf/nginx.conf
server端修改nginx.server文件
测试:
五.grains:静态
1.信息查询
[root@server1 ~]# salt server2 grains.ls
[root@server1 ~]# salt server2 grains.item ipv4
2.自定义grains项:方式一
server2:在/etc/salt/minion中定义
3.自定义grains项:方式二
server3:在/etc/salt/grains中定义
4.自定义grains项:方式三
在salt-master端创建_grains目录
[root@server1 _grains]# salt '*' saltutil.sync_grains ##同步grains到minion端
首先编写一个test.py进行测试
在salt-master端创建_grains目录:
server2安装httpd,server3安装并启动nginx
六.pillar:动态 + jinjia模板
一个模板匹配所有的节点
自定义pillar项
pillar数据匹配
Jinja模板
[root@server1 salt]# vim test.sls
/mnt/testfile:
file.append:
{% if grains['fqdn'] == 'server2' %}
- text: server2
{% elif grains['fqdn'] == 'server3' %}
- text: server3
{% else %}
- text: demo
{% endif %}
方式一:
测试:
方式二:
[root@server1 apache]# pwd
/srv/salt/apache
[root@server1 apache]# ls
httpd.conf init.sls
[root@server1 apache]# vim httpd.conf
[root@server1 apache]# vim init.sls
[root@server1 apache]# cd -
/srv/pillar
[root@server1 pillar]# ls
pkgs.sls top.sls
[root@server1 pillar]# vim pkgs.sls
测试:
以上是关于SaltStack-----安装,远程执行,grains,pillar,jinja模板的主要内容,如果未能解决你的问题,请参考以下文章