saltstack(配置、编写远程执行模块、grains、Jinja模板)

简介

saltstack是一个配置管理系统,能够维护预定义状态的远程节点
saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据
saktstack是运维人员提高工作效率、规范业务配置与操作的利器
salt的核心功能
1.使命令发送到远程系统是并行的而不是串行的
2.使用安全加密的协议
3.使用最小最快的网络载荷
4.提供简单的编程接口
salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。

saltstack通信机制

SaltStack采用C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口
salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口

关闭firewalld selinux状态为disable
在server1
安装rpm包
yum install http://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
此时在/etc/yum.repo目录下就会有一个salt-3000.repo文件
在这里插入图片描述
如果下载速度慢就将路径换为阿里云的路径
sed -i “s/repo.saltstack.com/mirrors.aliyun.com/saltstack/g” /etc/yum.repos.d/salt-3000.repo
yum list salt-*列出salt的所有相关软件
安装master
yum install salt-master.noarch -y
将server1的salt-3000.repo方送给server2和server3,并将server2和server3的gpgcheck值改为0
在这里插入图片描述
在这里插入图片描述

在server2和server3中分别安装salt-minion
cd /etc/salt
vim mimon
将16行改为
master: 172.25.18.1
在这里插入图片描述
开启服务
systemctl enable --now salt-minion.service
server2和server3做以上相同步骤

在server1上
重启服务
systemctl restart salt-master.service
此时就可以看到4056的端口
在这里插入图片描述
列出主机
salt-key -L
此时可以看到server2和server3没有key
在这里插入图片描述
所以给server2和server3key
salt-key -A
在这里插入图片描述
此时可以测试一下
salt ‘*’ test.ping
在这里插入图片描述
yum install lsof -y
yum install python-setproctitle.x86_64 -y ##可以让进程更详细
在这里插入图片描述

配置

在server1中
salt server2 pkg.install httpd ##远程在server2上安装httpd
在这里插入图片描述
salt server2 cmd.run ‘rpm -q httpd’ ##查看httpd包
在这里插入图片描述
salt ‘server2’ service.start httpd ##远程开启server2的httpd服务
在这里插入图片描述
编写一个index.html文件
server2
在这里插入图片描述
salt-cp server2 index.html /var/www/html ##远程将文件发送到server2的/var/www/html目录下
在这里插入图片描述
访问server
在这里插入图片描述
可以看到server2,说明发送成功

cd /srv/
mkdir salt
cd salt/
mkdir apache
cd apache/
mv /root/index.html .
vim install.sls
apache:
pkg.installed:
- name: httpd
salt server2 state.sls apache.install ##执行该文件,让其在server2上安装httpd
在这里插入图片描述
在这里插入图片描述
安装多个应用
vim install.sls
在这里插入图片描述
salt server2 state.sls apache.install ##执行该文件,让其在server2上安装这3个应用
在这里插入图片描述
在当前目录下建立files文件夹,将index.html放进该目录
远程将index.html发送到server2的/var/www/html目录下
vim install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql

file.managed:
- source: salt://apache/files/index.html
- name: /var/www/html/index.html
在这里插入图片描述
salt server2 state.sls apache.install ##执行文件,让其发送
在这里插入图片描述
修改index.html内容
server2
server2
server2
然后重新发送salt server2 state.sls apache.install
此时server2的文件就变了
在这里插入图片描述
md5sum files/index.html ##查看server1上index.html的md5码
在这里插入图片描述
md5sum /var/www/html/index.html ##查看server2上index.html的md5码
在这里插入图片描述
可以发现两个md5码是一样的
vim install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql

file.managed:
- source: salt://apache/files/index.html
- name: /var/www/html/index.html

service.running:
- name: httpd
在这里插入图片描述
salt server2 state.sls apache.install ##执行该文件

修改端口
vim install.sls
apache:
pkg.installed:
- pkgs:
- httpd
- php
- php-mysql

file.managed:
- source: salt://apache/files/httpd.conf
- name: /etc/httpd/conf/httpd.conf

service.running:
- name: httpd
- enable: ture
- watch:
- file: apache
在这里插入图片描述
cd files/
scp server2:/etc/httpd/conf/httpd.conf .
在这里插入图片描述
vim httpd.conf
将端口修改为8080
在这里插入图片描述
salt server2 state.sls apache.install 执行
此时在server2上的端口就被修改为8080
在这里插入图片描述

mv install.sls init.sls ##将intall.sls的名字修改为init.sls
此时再次执行时直接+目录名字即可,即salt server2 state.sls apache
在这里插入图片描述
当/srv/salt下有apache.sls文件时,/srv/salt/apache/init.sls文件就不会被执行,/srv/salt/apache.sls的优先级高

编写远程执行模块

创建模块目录
mkdir /srv/salt/modules
编写模块文件
cd /srv/salt/modules
vim mydisk.py
def df():
return__salt
’cmd.run’
在这里插入图片描述
同步数据
salt server2 saltutil.sync_modules
执行
salt server2 mydisk.df

grains

简介
grains是saltstack的一个组件,存放在saltstack的minion端
当salt-minion启动时会把收集到的数据静态存放在grains中,只有当minion重启时才会进行数据的更新
由于grains是静态数据,因此不推荐经常去修改它
应用场景:
1.信息查询
2.在target中使用,匹配minion
3.在state系统中使用,配置管理模块
salt server2 grains.item ipv4 ##得到server2的ip
在这里插入图片描述
在server2中
cd /etc/salt
vim minion
grains:
roles:
- apache
在这里插入图片描述
systemctl restart salt-minion.service

此时在server1上
salt server2 grains.item roles
就可以看到刚才添加的roles
在这里插入图片描述

mkdir /srv/salt/_grains
cd _grains/
vim mygrains.py
def my_grains():
grains = {}
grains[‘salt’] = ‘stack’
grains[‘hello’] = ‘world’
return grains
在这里插入图片描述
salt ‘’ grains.item salt
salt '
’ grains.item hello
此时是没有值的,因为没有同步到server2和server3
salt ‘’ saltutil.sync_grains ##同步值到server2和server3
在这里插入图片描述
salt '
’ grains.item salt
salt ‘*’ grains.item hello
在这里插入图片描述

salt -G roles:apache test.ping
salt -G salt:stack test.ping
在这里插入图片描述

grains匹配运用

cd /srv/salt
vim top.sls
base:
‘roles:apache’:
- match: grain
- apache
‘roles:nginx’:
- match: grain
- nginx
在这里插入图片描述
mkdir nginx
cd nginx
vim init.sls
nginx:
file.managed:
- source: salt://nginx/files/nginx-1.18.0.tar.gz
- name: /mnt/nginx-1.18.0.tar.gz
在这里插入图片描述
mkdir files
cd files
在此目录下下载nginx-1.18.0.tar.gz
在这里插入图片描述
在server3中
cd /etc/salt/
vim grains
roles:

  • nginx
    在这里插入图片描述
    systemctl restart salt-minion.service
    salt ‘*’ state.highstate

在server1中
cd /srv/salt/nginx
vim init.sls
nginx-install:
pkg.installed:
- pkgs:
- gcc
- pcre-devel
- openssl-devel
file.managed:
- source: salt://nginx/files/nginx-1.18.0.tar.gz
- name: /mnt/nginx-1.18.0.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/nginx
在这里插入图片描述
cd files
下载nginx.service

在server3中
cd /mnt/nginx-1.18.0/conf
scp nginx.conf server1:/srv/salt/nginx/files

salt server3 state.sls nginx ##执行

vim init.sls
在这里插入图片描述
salt server3 state.sls nginx ##运行
此时用curl命令访问server3,可以看到它的发布目录
在这里插入图片描述
但是在server3上查看它的运行情况,发现它是以nobody的身份运行
在这里插入图片描述
修改为以nginx的身份运行
vim /srv/salt/nginx/files/nginx.conf
在这里插入图片描述
vim init.sls
在这里插入图片描述
salt server3 state.sls nginx ##运行
此时再次查看可以看到它是以nginx的身份运行
在这里插入图片描述
分离安装步骤
cp init.sls install.sls
vim install.sls
在这里插入图片描述
vim init.sls
在这里插入图片描述
此时就可以只安装,不进行其它操作
salt server3 state.sls nginx.install
执行所以操作
salt server3 state.sls nginx

此时可以通过角色来匹配server2和server3
在这里插入图片描述
salt ‘*’ state.highstate ##高级推,完成所有操作

Jinja模板

简介
jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作
通过jinja模板可以为不同服务器定义各自的变量
两种分割符:{ %…%}和{{ … }},前者用于执行诸如for循环或赋值的语句,后者把表达式的结果打印到模板上

在server1中
cd /srv/salt
vim test.sls
在这里插入图片描述
salt ‘*’ state.sls test ##执行
此时在server3上就可以看到testfile文件
在这里插入图片描述
在server1中
cd /srv/salt/apache
vim init.sls
在这里插入图片描述
vim files/index.html ##取操作系统的名字
在这里插入图片描述
salt server2 state.sls apache ##执行
此时在server2中可以看到所取的内容
在这里插入图片描述
也可以同时取多个值
在这里插入图片描述
在这里插入图片描述
运用变量
vim init.sls
在这里插入图片描述
vim files/index.html
在这里插入图片描述
salt server2 state.sls apache
在server2端也可以看到结果
在这里插入图片描述
取ip
在这里插入图片描述
在这里插入图片描述
运用变量改变端口
在server1上
vim init.sls
在这里插入图片描述
vim files/httpd.conf
在这里插入图片描述
salt server2 state.sls apache ##执行
此时在server2上就可以看到80端口
而且不能访问本机,因为配置文件被修改,只能访问指定的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值