saltstack自动化运维(大规模使用)(一)---C/S架构&grains&jinja

1.saltstack(C/S架构)安装与配置

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

1.1 master端安装

阿里镜像站

saltstack官网

saltstack中文文档

本机配置的是红帽7对应的saltstack ,使用的python2。
[root@server1 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm   ##配置仓库,官方源
[root@server1 ~]# yum install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm    ##阿里源


[root@server1 ~]# yum install salt-master.noarch -y  ##安装master端
[root@server1 ~]# systemctl enable --now salt-master.service ##设置开机启动
[root@server1 ~]# netstat -antlp ##查看4505 4506端口
实验环境使用纯净的虚拟机,以免发生冲突!!!(新建一个虚拟机)

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

1.2 一主两从的搭建

## 一主就是1.1安装的master
## 下面设置俩从
## server1操作
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
redhat.repo  rhel7.6.repo  salt-3000.repo
[root@server1 yum.repos.d]# scp salt-3000.repo server2:/etc/yum.repos.d/
[root@server1 yum.repos.d]# scp salt-3000.repo server3:/etc/yum.repos.d/   ##发送仓库文件到server2.3
## server2和3操作,修改仓库文件,gpgcheck=0(server2和server3一样的操作,只做server2)
[root@server2 ~]# yum list salt-*
[root@server2 ~]# yum install -y salt-minion.noarch


[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# ls
cloud           cloud.maps.d       master    minion.d  proxy.d
cloud.conf.d    cloud.profiles.d   master.d  pki       roster
cloud.deploy.d  cloud.providers.d  minion    proxy
## master 和minion文件都有,但是只需要编辑minion文件即可
[root@server2 salt]# vim minion
## 编辑内容  16行 master: 172.25.13.1
[root@server2 salt]# systemctl enable --now salt-minion.service

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

在这里插入图片描述

## master端执行命令允许minion连接:
netstat -antlp     ##查看端口是否和4505连接
salt-key --help   
salt-key -L        ##查看accept状态
salt-key -A		   ##建立连接
salt-key -L		   ##查看accept状态
netstat -antlp	   ##查看状态
yum install lsof -y 
lsof -i :4505
##一些基本的测试内容
[root@server1 ~]# salt '*' test.ping
server3:
    True
server2:
    True
[root@server1 ~]# salt '*' cmd.run hostname
server3:
    server3
server2:
    server2
[root@server1 ~]# salt '*' cmd.run "ip addr show eth0"
显示内容不写了

测试链接成功与否

看到链接的是4506端口,不对
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
添加server3
在这里插入图片描述
salt的一些基本命令,和ansible -m 差不多
在这里插入图片描述
在这里插入图片描述

1.3 查看salt master进程的详细信息

[root@server1 ~]# yum install python-setproctitle.x86_64 -y
[root@server1 ~]# systemctl restart salt-master.service 
[root@server1 ~]# ps ax

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

1.4 minion_id的状态

[root@server2 salt]# cd /etc/salt/
[root@server2 salt]# ls
cloud           cloud.maps.d       master    minion.d   proxy
cloud.conf.d    cloud.profiles.d   master.d  minion_id  proxy.d
cloud.deploy.d  cloud.providers.d  minion    pki        roster
[root@server2 salt]# cat minion_id    ##相当于主机名,如果修改了主机名,这个文件需要删除,才可以再次生效。
server2[root@server2 salt]# 

在这里插入图片描述

2. saltstack远程执行

2.1 命令行形式

- 远程执行shell命令(类似于ansible 远程执行)
- 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
	# salt 'server2' pkg.remove httpd
	salt内置的执行模块列表:
	http://docs.saltstack.cn/ref/modules/all/index.html
[root@server1 ~]# salt 'server2' sys.doc pkg | grep pkg.install ##sys.doc 是查看帮助的命令
[root@server1 ~]# salt server2 pkg.install httpd  ##远程安装httpd
[root@server1 ~]# salt server2 cmd.run 'rpm -q httpd' ## 通过cmd.run命令查看http安装成功与否
[root@server1 ~]# salt 'server2' service.start httpd ##服务模块
## 测试cp模块
[root@server1 ~]# vim index.html 
[root@server1 ~]# cat index.html 
server2
[root@server1 ~]# salt-cp server2 index.html /var/www/html
server2:
    ----------
    /var/www/html/index.html:
        True
[root@server1 ~]# salt server2 file.stats /var/www/html  ##将server1上的index.html复制到server2上并查看状态
[root@server1 ~]# curl server2
server2


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

2.2 脚本文件形式

- 了解YAML语法
-  规则一: 缩进
	Salt需要每个缩进级别由两个空格组成,不要使用tabs。
	规则二: 冒号
	字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
	my_key: my_value
	规则三: 短横杠
	想要表示列表项,使用一个短横杠加一个空格。
	  - list_value_one
	  - list_value_two
- 配置管理
- 创建一个sls文件:(文件书写格式)
	# vim /srv/salt/apache.sls
	httpd:                 	# ID声明
	  pkg:                  	# 状态声明
	    - installed           	# 函数声明
	指定主机执行:
	# salt server2 state.sls apache
- Salt 状态系统的核心是SLS,或者叫SaLt State 文件。
	SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
	sls文件命名:
	sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。
	使用子目录来做组织是个很好的选择。
	 init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以``apache/init.sls`` 就是表示``apache``.
	如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache.

2.2.1 脚本文件的默认书写位置

[root@server1 ~]# cd /etc/salt/
[root@server1 salt]# ls
cloud           cloud.maps.d       master    minion.d  proxy.d
cloud.conf.d    cloud.profiles.d   master.d  pki       roster
cloud.deploy.d  cloud.providers.d  minion    proxy
[root@server1 salt]# vim master

## 默认目录需要自己新建
[root@server1 srv]# pwd
/srv
[root@server1 srv]# mkdir salt   ##建立默认目录
[root@server1 srv]# cd salt/
[root@server1 salt]# ls
[root@server1 salt]# mkdir apache   ## 创建模块目录
[root@server1 salt]# cd apache/   ##每一个脚本文件,建立一个目录,方便管理

在这里插入图片描述

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

2.2.2 书写脚本文件例子

[root@server1 ~]# mv index.html  /srv/salt/apache/   移动刚才的测试文件到目录下
[root@server1 ~]# cd /srv/salt/apache/
[root@server1 apache]# ls
index.html
[root@server1 apache]# vim install.sls  ##脚本文件以sls结尾
## 书写脚本不可以使用tab,必须是俩个空格

模块参考过程
在这里插入图片描述

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

实验

[root@server1 ~]# mv index.html  /srv/salt/apache/
[root@server1 ~]# cd /srv/salt/apache/
[root@server1 apache]# ls
index.html
[root@server1 apache]# vim install.sls
[root@server1 apache]# cat install.sls 
	apache:
	  pkg.installed:  ##模块
	    - pkgs:
	      - httpd
	      - php
	      - php-mysql
	  file.managed:   ##模块
	    - source: salt://apache/index.html
	    - name: /var/www/html/index.html
	  service.running:   ##模块
	    - name: httpd
[root@server1 apache]# salt server2 state.sls apache.install ##远程执行,执行不需要必须在salt目录,任何位置都可以执行

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

查看server2看看是不是执行成功,文件是否传送成功

[root@server2 salt]# cd /var/cache/salt/minion/
accumulator/ extmods/     files/       proc/        
[root@server2 salt]# cd /var/cache/salt/minion/files/
[root@server2 files]# ls
base
[root@server2 files]# cd base/apache/
[root@server2 apache]# ls
index.html  install.sls
[root@server2 apache]# md5sum index.html  ##看是不是和md5码是否和server1上的一致

在这里插入图片描述

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

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

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

2.3 编写远程执行模块

- 创建模块目录:
	# mkdir /srv/salt/_modules
	编写模块文件:
	# vim /srv/salt/_modules/mydisk.py
	def df():
	    return __salt__['cmd.run']('df -h')
	同步模块:
	# salt server2 saltutil.sync_modules
- 运行模块:
	# salt server2 mydisk.df

在这里插入图片描述

3. grains

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

3.1 信息查询

- 信息查询
- 	用于查询minion端的IP、FQDN等信息。
	默认可用的grains:
	# salt '*' grains.ls	

- 查看每一项的值:
	# salt '*' grains.items

- 取单项的值:
	# salt server3 grains.item ipv4
	# salt server3 grains.item fqdn   ##主机名

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

3.2 自定义grains项

3.2.1 server2上定义roles

- 在/etc/salt/minion中定义:
	# vim /etc/salt/minion   #直接修改配置文件
		grains:
		  roles:
		    - apache
	重启salt-minion,否则数据不会更新:
	# systemctl  restart salt-minion	

在这里插入图片描述

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

3.2.2 server3上使用grains文件定义roles

- 在/etc/salt/grains中定义:(server3上)
	# vim /etc/salt/grains: 
		roles:
		  - nginx
	同步数据:(server1)
	# salt server3 saltutil.sync_grains
	查询自定义项:(server1)
	# salt server3 grains.item roles

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.3 编写grains模块

- 在salt-master端创建_grains目录:
	# mkdir /srv/salt/_grains
	# vim /srv/salt/_grains/my_grain.py
	def my_grain():
	    grains = {}
	    grains['salt'] = 'stack'
	    grains['hello'] = 'world'
	    return grains
	# salt '*' saltutil.sync_grains	#同步grains到minion端

在这里插入图片描述

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

3.4 grains匹配运用

- 在target中匹配minion:
	# salt -G roles:apache test.ping
- 在top文件中匹配:
	# vim /srv/salt/top.sls
	base:
	  'roles:apache':
	    - match: grain
	    - apache.install

3.4.1 在target中匹配minion

在这里插入图片描述

3.4.2 在top文件中匹配

分别在server2和server3上配置apache和nginx
在这里插入图片描述
在这里插入图片描述

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

编写top文件

在这里插入图片描述
执行top文件

在这里插入图片描述

4. server3部署nginx小实验

- top文件
- 		server2部署apache
- 		server3部署nginx

nginx.service文件下载地址

vim init.sls   ##负责初始化文件
vim install.sls ##负责安装
salt '*' state.highstate  ##执行top脚本


## cat init.sls 
include:
  - nginx.install

/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
## 	cat install.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

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

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

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

5. Jinja模板

5.1 Jinja模板使用方式

- Jinja最基本的用法是使用控制结构包装条件:
	# vim /srv/salt/test.sls
	/mnt/testfile:
	  file.append:
	    {% if grains['fqdn'] == 'server2' %}
	    - text: server2
	    {% elif grains['fqdn'] == 'server3' %}
	    - text: server3
	    {% endif %}

grains可以查看很多item
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

- Jinja在普通文件的使用:
	# vim /srv/salt/init.sls、
		/var/www/html/index.html:
		  file.managed:
		    - source: salt://apache/files/index.html
		    - template: jinja   ##必须写的,核心步骤
		    - context:
		      NAME: test
[root@server1 apache]# cat init.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: /etc/httpd/conf/httpd.conf

#/etc/httpd/conf/httpd.conf:
#  file.managed:
#    - source: salt://apache/files/httpd.conf
/var/www/html/index.html:
  file.managed:
    - source: salt://apache/files/index.html
    - template: jinja
    - context:
      NAME: test


[root@server1 apache]# ls
files  init.sls
[root@server1 apache]# cd files/
[root@server1 files]# ls
httpd.conf  index.html
[root@server1 files]# vim index.html 
[root@server1 files]# cat index.html 
{{ NAME }}    ##引用变量
[root@server1 files]# salt server2 state.sls apache

在这里插入图片描述

在这里插入图片描述

测试

在这里插入图片描述

小实验1:引用变量

[root@server1 apache]# vim init.sls 
[root@server1 apache]# cat init.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: /etc/httpd/conf/httpd.conf

#/etc/httpd/conf/httpd.conf:
#  file.managed:
#    - source: salt://apache/files/httpd.conf
/var/www/html/index.html:
  file.managed:
    - source: salt://apache/files/index.html
    - template: jinja
#    - context:
#      NAME: test


[root@server1 files]# pwd
/srv/salt/apache/files
[root@server1 files]# cat index.html 
{{ grains['os'] }} - {{ grains['fqdn'] }}
[root@server1 files]# salt server2 state.sls apache

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

小实验2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值