saltstack的部署与使用

1. saltstack的介绍

1.1 saltstack的概念

  • saltstack是一个配置管理系统,能够维护预定义状态的远程节点。
  • saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。
  • saltstack是运维人员提高工作效率、规范业务配置与操作的利器。

1.2 saltstack的通信机制

SaltStack 采用 C/S模式,minion与master之间通过ZeroMQ消息队列通信,默认监听4505端口。
在这里插入图片描述

Salt Master运行的第二个网络服务就是ZeroMQ REP系统,默认监听4506端口。
在这里插入图片描述

1.2 saltstack的组件

1、Salt Master:中心管理系统。此系统用于将命令和配置发送到在受管系统上运行的Salt minion。

2、Salt Minions:被管理的系统。 该系统运行Salt minion,它从Salt master接收命令和配置。

3、Execution Modules:从命令行针对一个或多个受管系统执行临时命令。 对以下管理场景有帮助:

  • 实时监控,状态和盘点
  • 一次性命令和脚本
  • 部署关键更新

4、Formulas (States):一种系统配置的声明性或命令式表示。

5、Grains:系统变量。 Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。
您还可以为任何系统定义自定义grains。

6、Pillar:用户定义的变量。 这些安全变量被定义并存储在Salt Master中,然后使用目标“分配”给一个或多个minions。
pilla数据存储诸如端口,文件路径、配置参数和密码之类的值。

7、Top File:将formulas和pilla数据与Salt minions匹配。

8、Runners:在Salt master上执行的模块,用于执行支持任务。 Salt
runners报告作业状态、连接状态、从外部API读取数据,查询连接的Salt
minions等。例如,Orchestrate运行器协调跨多个系统的配置部署。

9、Returners:将Salt minions返回的数据发送到另一个系统,例如数据库。 Salt Returners可以在Salt
minion或Salt master上运行。

10、Reactor:在SaltStack环境中发生特定事件时触发相应的响应。

11、Salt SSH:在没有Salt minion的系统上通过SSH运行Salt命令。

2. saltstack的安装与配置

实验环境:
172.25.10.1 作为master
172.25.10.2 作为minion
172.25.10.3 作为minion

2.1 配置yum源

官网:https://www.saltstack.com/

设置官方yum仓库:
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

在这里插入图片描述

替换为阿里云镜像:
sudo sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-3000.repo

2.2 配置master

在server1中:

yum install -y salt-master#安装master端
在这里插入图片描述

systemctl enable salt-master --now#设置master自启动

2.3 配置minion

在server2&3中:

yum install -y salt-minion #安装master端

vim /etc/salt/minion 在minion端设置master主机的ip
master: 172.25.0.11

在这里插入图片描述

在这里插入图片描述

systemctl enable salt-minion --now #设置master自启动

2.4 配置master验证minion

yum install -y lsof.x86_64

当前没有minion连接:
在这里插入图片描述
salt-key -L查看等待验证的minion

salt-key -a server2添加server2的minion端

salt-key -A添加所有minion端

salt-key -d server2删除指定minion端

在这里插入图片描述

(如果hostname与minion端中minion_id中的名称不符合,需要删除salt-key和minion_id后,重启master重新验证

yum install -y python-setproctitle.x86_64可以在ps中查看更详细的内容

systemctl restart salt-master
在这里插入图片描述
在这里插入图片描述
再次查看minion端通过验证:
在这里插入图片描述
在这里插入图片描述

3. saltstack远程执行

3.1 salt命令的组成

salt命令由三个主要部分组成:
salt '<target>' <function>[arguments]

target: 指定哪些minion,默认的规则是使用glob匹配minion id。

salt '*' test.ping

Targets也可以使用正则表达式:

salt -E 'server[1-3]' test.ping

Targets也可以指定列表:

salt -L 'server2,server3' test.ping

在这里插入图片描述
在这里插入图片描述
funcation是module提供的功能,Salt内置了大量有效的functions.

salt '*' cmd.run 'uname -a'
在这里插入图片描述
arguments通过空格来界定参数:

 salt 'server2' sys.doc pkg #查看模块文档
 salt 'server2' pkg.install httpd

在这里插入图片描述

[root@server1 ~]# salt server2 cmd.run 'rpm -q httpd'
server2:
    httpd-2.4.6-88.el7.x86_64
[root@server1 ~]# salt server2 cmd.run 'rpm -qa | grep httpd'
server2:
    httpd-tools-2.4.6-88.el7.x86_64
    httpd-2.4.6-88.el7.x86_64

在这里插入图片描述

3.2 编写远程执行模块

1.编辑master配置文件:
vim /etc/salt/master

file_roots:
  base:
    - /srv/salt

重启master服务:
systemctl restart salt-master

/srv/salt/为salt数据的根目录

2.创建模块目录:
`mkdir /srv/salt/_modules

在这里插入图片描述
在这里插入图片描述
3.编写模块文件:
vim /srv/salt/_modules/mydisk.py

def df():   
    return __salt__['cmd.run']('df -h')

在这里插入图片描述

4.同步模块:
salt server saltuil.sync_modules

5.运行模块:
salt server2 mydisk.df

mydisk 模块名
df 方法

在这里插入图片描述
tree /var/cache/salt 模块文化会被缓存到minion端的/var/cache中

在这里插入图片描述

3.3 了解Yaml语法

  • 规则一: 缩进
    Salt需要每个缩进级别由两个空格组成,不要使用tabs。

  • 规则二: 冒号
    字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
    my_key: my_value

  • 规则三: 短横杠
    想要表示列表项,使用一个短横杠加一个空格
    -list_value_one
    -list_value_two

3.4 配置管理(sls)

1.创建sls文件

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

2.Salt 状态系统的核心是SLS,或者叫SaLt State 文件。

3.sls文件命名:sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。

4.推荐使用子目录来做组织是个很好的选择。

5.init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls 就是表示apache

注意:如果同时存在apache.sls 和apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache。

创建一个sls文件:

vim /srv/salt/apache.sls

httpd:                    # ID声明,同时也是软件包的名称 
   pkg:                   # 状态声明
     -installed           # 函数声明

也可以写成这种形式:

vim /srv/salt/apache.sls

httpd:     #也可以写成这种形式
   pkg.installed  

也可以写成这种形式:
vim /srv/salt/apache.sls

web:
  pkg.installed:
    - pkgs:
      - httpd
      - php    #也可以装多个包

注意:在安装包时会自动安装依赖性,在卸载时则不会卸载依赖性,只会满足所需要的状态

指定主机执行:

salt server2 state.sls apache

2.创建top文件

top是一个高级状态,可以对应不同的节点有不同的操作
vim /srv/salt/top.sls

base:
  '*':
      - apache

批量执行:
salt '*' state.highstate

3.使用子目录配置管理

mkdir /var/salt/apache建立子目录
vim /var/salt/apache/install.sls
salt server2 state.sls apache.install

注意:可以在任意目录下执行

在这里插入图片描述

也可以更简单:
cd /srv/salt/apache
mv install.sls init.sls init.sls为入口文件
salt server2 state.sls apache

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

4.sls示例

1)配置httpd

vim /srv/salt/apache/init.sls

web:
  pkg.installed:
    - pkgs:
      - httpd
      - php

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

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: web ##触发;注意这样的调用只能有一次

也可以换一种写法:

web:
  pkg.installed:
    - pkgs:
      - httpd
      - php

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

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

mkdir /srv/salt/apache/file
scp server2:/etc/httpd/conf/httpd.conf /srv/salt/apache/file/
salt server2 state.sls apache

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

2)配置nginx

方法1:
mkdir /srv/salt/nginx
mkdir /srv/salt/nginx/files
vim /srv/salt/nginx/files/nginx.service启动脚本文件

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.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

vim /srv/salt/nginx/files/nginx.conf

#user  nobody;
worker_processes  2; ##设置work进程数

vim /srv/salt/nginx/init.sls

nginx-install:
  pkg.installed:   #安装包
    - pkgs:
      - openssl-devel
      - pcre-devel
      - gcc

  file.managed:
    - name: /mnt/nginx-1.18.0.tar.gz  #制定包的位置
    - source: salt://nginx/files/nginx-1.18.0.tar.gz

  cmd.run:
    - name: cd /mnt/ && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./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:
  file.managed:
    - name: /usr/lib/systemd/system/nginx.service
    - source:   #启动脚本salt://nginx/files/nginx.service 

  service.running:
    - name: nginx
    - enable: True
    - reload: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

方法2:

vim /srv/salt/nginx/init.sls

include:
  - nginx.install

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf
    
nginx-service:
  file.managed:
    - name: /usr/lib/systemd/system/nginx.service
    - source: salt://nginx/files/nginx.service

  service.running:
    - name: nginx
    - enable: True
    - reload: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

vim /srv/salt/nginx/install.sls

nginx-install:
  pkg.installed:
    - pkgs:
      - openssl-devel
      - pcre-devel
      - gcc

  file.managed:
    - name: /mnt/nginx-1.18.0.tar.gz
    - source: salt://nginx/files/nginx-1.18.0.tar.g

  cmd.run:
    - name: cd /mnt/ && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx

salt server3 state.sls nginx

3)top文件配置不同主机安装不同程序

vim /srv/salt/top.sls

base:
  'server2':
    - httpd.service
  'server3':
    - nginx.service

在这里插入图片描述

salt server3 state.sls nginx.install

在这里插入图片描述
scp nginx.service root@172.25.10.1:/srv/salt/nginx/files

在这里插入图片描述
salt server2 state.sls nginx.service

在这里插入图片描述

salt '*' state.highstate高级状态

在这里插入图片描述

4.saltstack的数据系统:grains&pillar

grains与pillar是saltstack的数据系统。

4.1 grains(静态)

1. grains的介绍

Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
由于grains是静态数据,因此不推荐经常去修改它。

应用场景:
信息查询,可用作CMDB。
在target中使用,匹配minion。
在state系统中使用,配置管理模块

2. grains的信息查询

salt server2 grains.ls
在这里插入图片描述

salt server2 grains.items
salt server2 grains.item username查询主机名
salt server3 grains.item fqdn查询域名
salt server3 grains.item ipv4查询IP

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

3. 自定义grains项

在minion端(方法一)

vim /etc/salt/minion

grains:
  roles: apache

systemctl restart salt-minion.service
在master端查看:salt server2 grains.item roles

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
=在这里插入图片描述
在minion端(方法二)

vim /etc/salt/grains 创建grains文件

roles: nginx

在master端同步数据:
salt server3 saltutil.sync_grains

在master端查看:
salt server3 grains.item roles
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在master端:
mkdir /srv/salt/_grains
vim /srv/salt/_grains/my_grain.py

def my_grain():
    grains = {}
    grains['website'] = 'webser'
    grains['hello'] = 'world'
    return grains

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

salt '*' saltutil.sync_grains

在这里插入图片描述

salt server2 grains.item salt查看数据
salt server2 grains.item hello

在这里插入图片描述

4. grains匹配运用

target中匹配

salt -G roles:apache cmd.run hostname -G通过grains
salt -G roles:nginx cmd.run hostname
salt -G salt:website cmd.run hostname
salt -G hello:hello cmd.run hostname

在这里插入图片描述
在top文件中匹配

vim /srv/salt/top.sls

base:
  'roles:apache':
    - match: grain
    - httpd
  'roles:nginx':
    - match: grain
    - nginx

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

salt '*' state.highstate

在这里插入图片描述

4.2 pillar(动态)

1. pillar的介绍

  • pillar和grains一样也是一个数据系统,但是应用场景不同。
  • pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。
  • pillar更加适合在配置管理中运用。

2. 自定义pillar项

vim /etc/salt/master(这里是默认设置)

pillar_roots: 
  base:
    - /srv/pillar

mkdir /srv/pillar定义pillar基础目录
vim /srv/pillar/packages.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
{% elif grains['fqdn'] == 'server3' %}
package: apache
{% endif %}

vim /srv/pillar/top.sls

base:
  '*':
    - packages

salt '*' saltutil.refresh_pillar刷新pillar数据
salt '*' pillar.items查询pillar数据
salt '*' pillar.item packkages

在这里插入图片描述

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

3.pillar的数据匹配

命令行中匹配

salt -I package:httpd cmd.run hostname

在这里插入图片描述

state系统中使用

vim /srv/salt/apache/init.sls

web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}
      - php

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

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

salt server2 state.sls apache

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值