saltstack(1)环境部署、(2)Grains

本文详细介绍了如何使用SaltStack进行分布式系统的安装和配置管理,包括SaltStack的yum源配置、Master和Minion的安装、Grains的定义与使用。在部署Apache服务的过程中,演示了如何编写和调用SLS文件实现软件安装、配置及服务启动,并通过Grains进行主机角色的定义和匹配,实现不同主机的差异化配置。此外,还讲解了自定义Grains模块的编写和应用。
摘要由CSDN通过智能技术生成


一、saltstack部署

1.安装和启动

  • saltstack是一个配置管理系统,能够维护预定义状态的远程节点。是一个分布式远程执行系统,用来在远程结点上执行命令和查询数据。并行的。
  • 运维的核心是降低成本和提高效率
  • 准备三个纯净的虚拟机server1,2,3;server1是master,server2,3是minion
  • 包括安装、配置、管理
1)准备yum源
[root@server11 yum.repos.d]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
#阿里云镜像:https://developer.aliyun.com/mirror/saltstack?spm=a2c6h.13651102.0.0.3e221b118vroAq
[root@server11 yum.repos.d]# vim salt-3000.repo #改成阿里云的源http://mirrors.aliyun.com/saltstack
[salt-3000]
name=SaltStack 3000 Release Channel for Python 2 RHEL/Centos $releasever
baseurl=http://mirrors.aliyun.com/saltstack/yum/redhat/7/$basearch/3000
failovermethod=priority
enabled=1
gpgcheck=0

在这里插入图片描述

2)master和minion安装包
[root@server11 yum.repos.d]# yum install -y salt-master.noarch
[root@server11 yum.repos.d]# systemctl enable --now  salt-master
[root@server12 salt]# yum install -y salt-minion.noarch
[root@server12 ~]# cd /etc/salt/
[root@server12 salt]# ls
[root@server12 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写

在这里插入图片描述

[root@server12 salt]# systemctl enable --now salt-minion.service 

%server13也弄minion
[root@server13 salt]# yum install -y salt-minion.noarch
[root@server13 ~]# cd /etc/salt/
[root@server13 salt]# ls
[root@server13 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写
[root@server13 salt]# systemctl enable --now salt-minion.service 

3)master端执行命令允许minion连接

master端有安全认证,需要同意连接

[root@server11 yum.repos.d]# salt-key -L
Accepted Keys:
server12
server13
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@server11 yum.repos.d]# salt-key -A#a是指定节点,A是指定所有
The following keys are going to be accepted:
Unaccepted Keys:
server12 server13
Proceed? [n/Y] y
Key for minion server12 server13 accepted.

在这里插入图片描述

4)master端测试与minion端的连接:
[root@server11 yum.repos.d]# yum install lsof -y
[root@server11 yum.repos.d]# lsof -i :4505
[root@server11 yum.repos.d]# salt '*' test.ping#*是指—L列出来的所有主机,检测一下是否有响应

在这里插入图片描述

[root@server11 yum.repos.d]# yum install python-setproctitle.x86_64 -y #安装后重起salt-master
[root@server11 yum.repos.d]# systemctl restart salt-master.service
[root@server12 salt]# pwd
/etc/salt
[root@server12 salt]# ls#在启动一个minion端时会产生一个minion_id文件,来记录主机名
cloud         cloud.deploy.d  cloud.profiles.d   master    minion    minion_id  proxy    roster
cloud.conf.d  cloud.maps.d    cloud.providers.d  master.d  minion.d  pki        proxy.d
[root@server12 salt]# cat minion_id #如果要改主机名。则改完主机名后要删掉该文件,重新生成
server12

2.配置和使用

1)salt使用语句(salt内置模块的调用)

具体参考官网:http://docs.saltstack.cn/ref/states/all/index.html

[root@server11 yum.repos.d]# salt server* test.ping
[root@server11 yum.repos.d]# salt server12 test.ping

在这里插入图片描述

[root@server11 yum.repos.d]# salt 'server12' sys.doc pkg|grep pkg.install#查看服务使用命令
[root@server11 ~]# salt server12 pkg.install httpd
[root@server11 ~]# salt 'server12' service.start httpd

在这里插入图片描述

[root@server11 ~]# salt 'server12' sys.doc file #查看文件使用命令
[root@server11 ~]# cat index.html 
server12
[root@server11 ~]# salt-cp server12 index.html /var/www/html/#上传文件
2) saltstack配置文件

SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。

  • sls文件命名:

    • sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。
    • 使用子目录来做组织是个很好的选择。
    • init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls 就是表示apache.
    • 如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache
  • 编写规则:缩进(不能用tab键)、冒号、短横杠(具体在官方文档中查看)

  • 创建一个sls文件:

vim /srv/salt/apache.sls
httpd: # ID声明
  pkg: # 状态声明
  - installed # 函数声明
[root@server11 srv]# vim /etc/salt/master #可以看到所有文件的根目录是/srv/salt,所以需要创建
[root@server11 ~]# cd /srv/
[root@server11 srv]# ls
[root@server11 srv]# mkdir salt
[root@server11 salt]# pwd
/srv/salt
3)调用配置文件执行安装
[root@server11 srv]# cd /srv/salt/
[root@server11 salt]# mkdir apache
[root@server11 salt]# mv ~/index.html apache/
[root@server11 salt]# cd apache/
[root@server11 apache]# pwd
/srv/salt/apache
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls 
httpd:
  pkg.installed 
[root@server11 apache]# salt server12 state.sls apache.install#调用文本。不用加后缀
%安装多个
[root@server11 apache]# vim install.sls 
[root@server11 apache]# cat install.sls 
apache:
  pkg.installed:
  - pkgs:
    - httpd
    - php
    - php-mysql
[root@server11 apache]# salt server12 state.sls apache.install

在这里插入图片描述在这里插入图片描述

[root@server11 apache]# mkdir files
[root@server11 apache]# mv index.html files/
##文件操作,所有的目录都是基于/srv/salt/
[root@server11 apache]# vim install.sls 
[root@server11 apache]# cat install.sls 
apache:
  pkg.installed:
  - pkgs:
    - httpd
    - php
    - php-mysql
  file.managed:
    - source: salt://apache/files/index.html
    - name: /var/www/html/index.html
[root@server11 apache]# salt server12 state.sls apache.install
4)查看saltstack调用index.html的工作原理
[root@server12 salt]# yum install tree -y
[root@server12 salt]# cd /var/cache/salt/
[root@server12 salt]# tree .

在这里插入图片描述

[root@server12 salt]# cd minion/files/base/apache/files/
[root@server12 files]# ls
index.html
[root@server12 files]# md5sum index.html 
f493e0f9f1dba0d3e0da7ce811875763  index.html


[root@server11 apache]# vim  files/index.html
[root@server11 apache]# cat files/index.html 
server12
server12
[root@server11 apache]# salt server12 state.sls apache.install
                  @@ -1 +1,2 @@
                   server12
                  +server12
[root@server11 apache]#  md5sum files/index.html
02f29ea0b1c28693e91a843cf6057b95  files/index.html
[root@server12 files]# md5sum index.html #在server11中改变index文件,执行install.sls,会发现server12会发生相应改变,且md5sum与server11中的一致
02f29ea0b1c28693e91a843cf6057b95  index.html

saltstack的工作原理: 每个文件都有自己的md5sum(md5码)。saltstack通过发布订阅系统,将sls文件推送到远程主机的本地(saltstack有自己的缓存目录/var/cache/salt),在本地执行sls文件。

5)service.running:模块
[root@server11 apache]# vim install.sls 
[root@server11 apache]# cat 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
[root@server11 apache]# salt server12 state.sls apache.install

在这里插入图片描述

6)一个完整的sls文件:安装、配置、启动
[root@server11 apache]# 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: true
    - watch:
      - file: apache
[root@server11 apache]# salt server12 state.sls apache.install
#在server12中查看结果
[root@server12 ~]# netstat -antlp#已改成8080
tcp6       0      0 :::8080                   :::*                    LISTEN      3667/httpd

在这里插入图片描述在这里插入图片描述

7)如果同时存在apache.sls 和 apache/init.sls,则子目录 apache/init.sls 被忽略,apache.sls将被用来表示 apache.
[root@server11 apache]# mv install.sls init.sls
[root@server11 apache]# salt server12 state.sls apache#默认的读取init.sls
#apache.sls和init.sls同时存在在apache目录下,执行salt server12 state.sls apache时先找apache.sls,忽略init.sls

在这里插入图片描述

二、Grains

  • grains官方手册:http://docs.saltstack.cn/topics/grains/index.html
  • Grains是SaltStack的一个组件,存放在SaltStack的minion端。
    当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当
    minion重启时才会进行数据的更新。
    由于grains是静态数据,因此不推荐经常去修改它。
    应用场景:
    信息查询,可用作CMDB。
    在target中使用,匹配minion。
    在state系统中使用,配置管理模块。

1.编写远程执行模块

[root@server11 salt]# mkdir /srv/salt/_modules
[root@server11 salt]# cd _modules/
[root@server11 _modules]# ls
[root@server11 _modules]# pwd
/srv/salt/_modules
[root@server11 _modules]# vim mydisk.py
[root@server11 _modules]# cat mydisk.py 
def df():
    return __salt__['cmd.run']('df -h')

[root@server12 ~]# cd /var/cache/salt/minion/
[root@server12 minion]# tree .

在这里插入图片描述

[root@server11 _modules]# salt server12 cmd.run df
[root@server11 _modules]# salt server12 saltutil.sync_modules#推到minion端server12
server12:
    - modules.mydisk
[root@server11 _modules]# salt server12 mydisk.df

在这里插入图片描述

2信息查询:

[root@server11 _modules]# salt '*' grains.ls#默认可用的grains
[root@server11 _modules]# salt '*' grains.item#查看每一项的值
[root@server11 _modules]# salt server12 grains.item ipv4#取单项的值

3.grains定义的三种方法

方法1,在/etc/salt/minion中定义
[root@server12 salt]# cd /etc/salt/
[root@server12 salt]# ls
[root@server12 salt]# vim minion
改动:
grains:
  roles:
    - apache

在这里插入图片描述

[root@server12 salt]# systemctl restart salt-minion.service #重启salt-minion,否则数据不会更新
[root@server11 _modules]# salt server12 grains.item roles
server12:
    ----------
    roles:
        - apache
方法2,在/etc/salt/grains中定义
[root@server13 salt]# pwd
/etc/salt
[root@server13 salt]# vim grains
[root@server13 salt]# cat grains 
roles:
  - nginx
[root@server11 _modules]# salt server12 saltutil.sync_grains#静态的,需要同步数据
server12:
[root@server11 _modules]# salt '*' grains.item roles#查找自定义项

在这里插入图片描述

方法3,编写grains模块,在salt-master端创建_grains目录
[root@server11 _modules]# mkdir /srv/salt/_grains
[root@server11 _modules]# cd /srv/salt/_grains
[root@server11 _grains]# vim mygrain.py
[root@server11 _grains]# cat mygrain.py
def my_grain():
    grains = {}
    grains['salt'] = 'satck'
    grains['hello'] = 'world'
    return grains
[root@server11 _grains]# salt '*' saltutil.sync_grains

在这里插入图片描述

4.grains匹配运用

1)指令匹配
[root@server11 _grains]# salt -G roles:apache test.ping#在target中匹配minion
[root@server11 _grains]# salt -G roles:nginx test.ping
[root@server11 _grains]# salt -G salt:satck test.ping

在这里插入图片描述

2)在top文件中匹配,在指定的节点中创建应用,不同的主机中部署不同的grains
[root@server11 _grains]# pwd
/srv/salt/_grains
[root@server11 _grains]# cd ..
[root@server11 salt]# pwd
/srv/salt
[root@server11 salt]# vim top.sls
[root@server11 salt]# cat top.sls #server12上有apache,server13上有nginx
base:
  'roles:apache':
    - match: grain
    - apache
  'roles:nginx':
    - match: grain
    - nginx

[root@server11 salt]# mkdir nginx
[root@server11 salt]# cd nginx/
[root@server11 nginx]# pwd
/srv/salt/nginx
[root@server11 nginx]# mkdir files
[root@server11 nginx]# cd files/
[root@server11 files]# pwd
/srv/salt/nginx/files
[root@server11 files]# ls
nginx-1.18.0.tar.gz
[root@server11 files]# cd ..
[root@server11 nginx]# vim init.sls 
[root@server11 nginx]# cat init.sls 
nginx:
  file.managed:
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
    - name: /mnt/nginx-1.18.0.tar.gz

[root@server11 nginx]# salt '*' state.highstate

#查看运行结果
[root@server13 salt]# cd /mnt/
[root@server13 mnt]# ls
nginx-1.18.0.tar.gz

在这里插入图片描述在这里插入图片描述

3)server12配置apache;server13配置nginx
[root@server11 salt]# cd /srv/salt/nginx/
[root@server11 nginx]# ls
files  init.sls
[root@server11 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#判断有没有这个目录
[root@server11 nginx]# salt server13 state.sls nginx

[root@server11 nginx]# scp server13:/usr/local/nginx/conf/nginx.conf .
root@server13's password: 
nginx.conf                                              100% 2656     1.9MB/s   00:00    
[root@server11 nginx]# mv nginx.conf files/
[root@server11 nginx]# cd files/
[root@server11 files]# ls
nginx-1.18.0.tar.gz  nginx.conf
[root@server11 files]# vim nginx.conf
#改正用户: 
user  nginx;

在这里插入图片描述
搜索nginx systemed,看官方写法:

[root@server11 files]# vim nginx.service
[root@server1 files]# cat nginx.service 
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

[root@server11 files]# cd ..
[root@server11 nginx]# vim init.sls 
[root@server11 nginx]# cat 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
/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf

nginx-service:
  user.present:
    - name: nginx
    - shell: /sbin/nologin
    - home: /usr/local/nginx
    - createhome: false
  file.managed:
    - source: salt://nginx/files/nginx.service
    - name: /usr/lib/systemd/system/nginx.service
  service.running:
    - name: nginx
    - enable: true
    - reload: true
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

[root@server11 nginx]# salt server13 state.sls  nginx

[root@server13 ~]# ps aux#查看用户登陆
nginx     7405  0.0  0.0  46320  2024 ?        S    01:03   0:00 nginx: worker process

在这里插入图片描述

4)安装和配置分开
[root@server11 nginx]# cp init.sls install.sls
[root@server11 nginx]# vim install.sls 

在这里插入图片描述

[root@server11 nginx]# vim init.sls 
[root@server1 nginx]# cat init.sls 

在这里插入图片描述

#两个文件一起推
[root@server11 nginx]# salt server13 state.sls nginx.install
[root@server11 nginx]# cd ..
[root@server11 salt]# ls
apache  _grains  _modules  nginx  top.sls
[root@server11 salt]# salt '*' state.highstate#运行install和init
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值