saltstack

  • 1.saltstack(C/S架构)安装与配置
    • 1.1 master端安装
    • 1.2 一主两从的搭建
    • 1.3 查看salt master进程的详细信息
    • 1.4 minion_id的状态
  • 2. saltstack远程执行
    • 2.1 命令行形式
    • 2.2 脚本文件形式
      • 2.2.1 脚本文件的默认书写位置
      • 2.2.2 书写脚本文件例子
    • 2.3 编写远程执行模块
  • 3. grains
    • 3.1 信息查询
    • 3.2 自定义grains项
      • 3.2.1 server2上定义roles
      • 3.2.2 server3上使用grains文件定义roles
    • 3.3 编写grains模块
    • 3.4 grains匹配运用
      • 3.4.1 在target中匹配minion
      • 3.4.2 在top文件中匹配
  • 4. server3部署nginx小实验
  • 5. Jinja模板
    • 5.1 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.pingTargets也可以使用正则表达式:# salt -E 'server[1-3]' test.pingTargets也可以指定列表:# 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 httpdsalt内置的执行模块列表: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.slshttpd:                    # 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-mysqlfile.managed:   ##模块- source: salt://apache/index.html- name: /var/www/html/index.htmlservice.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.pydef 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.pydef 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.slsbase:'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.confnginx-service:user.present:- name: nginx- shell: /sbin/nologin- home: /usr/local/nginx- createhome: falsefile.managed:- source: salt://nginx/files/nginx.service- name: /usr/lib/systemd/system/nginx.serviceservice.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-develfile.managed:- source: salt://nginx/files/nginx-1.18.0.tar.gz- name: /mnt/nginx-1.18.0.tar.gzcmd.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-mysqlfile.managed:- source: salt://apache/files/httpd.conf- name: /etc/httpd/conf/httpd.confservice.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-mysqlfile.managed:- source: salt://apache/files/httpd.conf- name: /etc/httpd/conf/httpd.confservice.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


saltstack自动化运维(大规模使用)(一)---C/S架构grainsjinja相关推荐

  1. SaltStack自动化运维(一)——简介与架构解析

    前言 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位. SaltStack提供了一个动态基础设施通信总线用于 ...

  2. 七天学会SALTSTACK自动化运维 (3)

    七天学会SALTSTACK自动化运维 (3) 导读 SLS TOP.SLS MINION选择器 SLS文件的编译 总结 参考链接 导读 SLS SLS (aka SaLt State file) 是 ...

  3. saltstack自动化运维部署--安装apache\原码安装nginx服务

    对saltstack自动化运维部署的认识 原理 SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台,管理端称为 Master,客户端称为 Minion.SaltStack 具备 ...

  4. saltstack 自动化运维管理

    一.简介 saltstack是一个配置管理系统,能够维护预定义状态的远程节点. saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据. saltstack是运维人员提高工作效 ...

  5. SaltStack 自动化运维详解

    一.自动化运维工具对比 使用所需软件配置单个服务器是一项相当简单的任务. 但是,如果许多服务器需要安装相同或相似的软件和配置,则该过程将需要大量的工时才能完成,这会耗尽您本已紧张的资源.如果没有某种形 ...

  6. 系统封装工具_去工具化/脚本化理解,自动化运维落地最佳实践之业务/架构/模型/方法...

    本文转载自:互联网运维杂谈 近年来后端IT也呈现更复杂的形态,底层IT架构逐渐开放平台化.云化,上层应用微服务化等等,虚拟化.云平台.容器PaaS和云原生框架都进入到IT运行环境中,而传统业务依然运行 ...

  7. puppet、Ansible、SaltStack 自动化运维工具简单对比

    puppet: 有产品线已经在用,优点是历史悠久,比较成熟,在可远程可本地,功能强劲,不过这厮批量执行功能没得,为了批量执行个命令写个配置文件,好像有点大刀砍蚊子腿的感觉了,而且有客户端在,和授权系统 ...

  8. 部署 SaltStack 自动化运维工具,并简易批量安装 httpd 服务

    SaltStack 介绍 SaltStack 是一个基于 Python 开发的一套架构配置管理工具,采用 C/S模式,server端就是salt的master,client端就是minion,mini ...

  9. Saltstack自动化运维详解(数据系统 jinja模板 job管理)

    文章目录 1. saltstack 的数据系统 1.1 SaltStack组件之Grains 1.grains使用方法 信息查询 查询某个key值 用Grains来匹配minion 2.自定义grai ...

最新文章

  1. NASA宣布在火星上发现了3种有机分子
  2. 参数等效模型可以用于_干货分享电池单体产热特性及热模型标定分析(2)
  3. SQL Server 索引和表体系结构(三)
  4. php ajax loading图片居中显示,PHP语言入门之PHP+ajax实现登录按钮加载loading效果
  5. 怎么解锁blockinput锁定的键盘_“键盘云”--锐角云母公司(Acute angle)又一款矿渣神器...
  6. Freemarker 的常见控制结构写法(ZT)
  7. 地球会随着人口增加而变重吗
  8. 软考初级程序员常见类型题,错题个人笔记
  9. 汽车Bootloader原理
  10. 2021年第4季度记账理财应用监测,头部集聚加强,领跑者转型发展
  11. Windows下VS2015编译caffe(CPU ONLY)
  12. 关于生成树的一些小东西
  13. web富文本编辑器的选择のxheditor
  14. 使用狸窝全能视频转换器实现给视频添加水印
  15. Java中对中国标准时间进行格式化(yyyy-MM-dd HH:mm:ss)两种方法
  16. Protege-OWL API中文版
  17. 天使与海豚的爱情故事
  18. 高校教材管理系统mysql_高校教材管理系统的设计与实现
  19. ZIP压缩包密码加密、解密
  20. Docker服务正常运行一段时间后突然无法访问问题排查

热门文章

  1. 不识最大自然数等使课本有一系列重大根本错误
  2. 基于SECS协议开发的简明教程(4)
  3. 微信小程序(应用号)开发新闻客户端的实战课程
  4. 0.5mm的焊锡丝能吃多大电流_大孔隙TiENTA/SnO2Sb flowthrough 模式阳极对反渗透浓缩液的电化学氧化: 降解性能、能效和毒性评价...
  5. html5 当中nav怎么用,html5中nav标签的使用
  6. 碳纤维转子电机是什么技术?
  7. 为什么在 Java 中用 (low+high)1 代替 (low+high)/2 或 (low+high)1 来计算平均值呢?好在哪里?...
  8. macos配置ssh别名登陆并免密登录
  9. 数据解析(Data Parsing)有什么作用?
  10. 被编进教材的Python必须第一,不接受反驳!