Saltstack 介绍、安装、配置语法(一)

Slatstack 介绍

官网:https://saltstack.com/

官方源:http://repo.saltstack.com/  (介绍各操作系统安装方法)

 yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm   #cenyos7官方yum源

 

saltstack功能介绍
三大功能:

1.远程执行
2.配置管理(配置某个服务状态)
3.云管理 (对接openstack)


saltstack的优点
(1)、部署简单,方便
(2)、支持大部分UNIX/Linux及Windows环境;
(3)、主从集中化管理;
(4)、配置简单、功能强大、扩展性强;
(5)、主控端(master)和被控端(minion)基于证书认证,安全可靠;
(6)、支持API及自定义模块,可通过Python轻松扩展。

staltstack的四种运行方式:
1.Local
2. Minion/Master C/S
3.Syndic - 类似于zabbix proxy
4. Salt SSH

一.安装saltstack   

服务端 

yum install salt-master salt-minion -y

客户端

yum install salt-minion -y

启动服务端

systemctl start salt-master

systemctl enable salt-master

配置客户端

vim /etc/salt/minion
master: 10.0.0.11   #可以是主机名需要解析(指定服务端的IP地址),冒号有空格
id: # 每台主机的唯一标识,不配置默认为主机名

启动客户端  

systemctl start salt-minion

systemctl enable salt-minion

 

注意事项

minion配置中有一个id配置,默认是hostname,如果id配置和hostname不一致会导致无法进行通信,那么当hostname做了修改,或者错误的时候该怎么配置呢?
①关闭salt-minion  
②salt-key -d id  在master上删除minion的id  
③minion上删除pki目录 
④minion上删除minion_id文件
⑤修改完成,启动minion
#此处必须先停掉minion修改,并删除相应的文件,否则会默认地去查找原先的配置,已踩坑

#以下是刚装完查看minion_id变成了www.test123.com。进行修改成linux-node2.example.com
[root@linux-node2 salt]# cat minion_id 
www.test123.com
[root@linux-node2 salt]# systemctl stop salt-minion
[root@linux-node2 salt]# rm -rf pki
[root@linux-node2 salt]# rm -rf minion_id 
[root@linux-node2 salt]# systemctl start salt-minion
[root@linux-node2 salt]# cat minion_id 
linux-node2.example.com

  

 - master和minion启动后pki介绍

第一次启动minion在/etc/salt下生成pki文件目录

包含minion的公钥minion.pub和私钥minion.pem

第一次启动master在/etc/salt下生成pki文件目录,因为之前在配置文件/etc/salt/

包含master的公钥master.pub和私钥master.pem

linux-node1.example.com和linux-node2.example.com为minion的公钥,名称为id名minions_pre为预认证目录

通过查看MD5之可知,minions_pre目录下的文件就是客户端上的公钥

 

 - 认证过程

salt-key

 salt-key命令介绍:
-L  列出所有
-d 删除指定的支持通配符
-D 删除所有
-A 添加所有
-a 指定添加

Accepted Keys 已同意的key

Denied Keys 拒绝的key

Unaccepted Keys 未认证的key

[root@7mini-node1 ~] salt-key -a 7mini-node2   #指定认证某台机器
[root@7mini-node1 ~] salt-key -a 7mini*  # 通配符

说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all

验证是否认证

 两台minion已认证成功,此时再次查看master pki文件目录,minion的公钥文件放入了minions目录下

 

再次查看minion pki文件目录,存在minion_master.pub公钥文件

 - 远程执行

语法: 命令 目标 模块.方法 方法参数

检查所有主机状态

salt '*' test.ping   #常用

检查指定主机状态

[root@7mini-node1 salt]# salt "7mini-node2" test.ping                       
7mini-node2:
    True

指定主机,远程执行shell命令

salt "7mini-node2" cmd.run "ls -lrt /root"

  

  

- 状态模块

state 写一个描述文件。格式:YAML ,后缀:.sls

YAML介绍 (重要)

YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。(可以查看百度百科介绍)

格式:数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。

salt管理理解YAML介绍 https://docs.saltstack.com/en/latest/topics/yaml/index.html


YAML:三板斧
1、 缩进   (2个空格,不能使用Tab)
2、 冒号 key: value (注意key后面需要有空格)
3、 短横线 – list1   - list2  可以写多个
  
缩进和冒号表示层级关系:
冒号表示key: value   表示层级关系

短横线 – list      列表,后面都有空格

/etc/salt/master配置文件也是YAML语法

- master配置

vim /etc/salt/master
file_roots  # 定义base、测试、灰度、生产环境配置文件路径,base名称不能改

设置base、测试、灰度、生产环境

[root@linux-node1 ~]# vim /etc/salt/master     #定义yaml文件放的位置,base环境是必备的
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  test:
    - /srv/salt/test
  prod:
    - /srv/salt/prod
[root@7mini-node1 ~]# systemctl restart salt-master.service

  

创建目录

[root@7mini-node1 ~]# mkdir -p /srv/salt/{base,dev,test,prod}

  

- sls文件创建

apache.sls,放入到/srv/salt/base/web目录下

[root@linux-node1 ~]# cd /srv/salt/base/
[root@linux-node1 base]# mkdir web
[root@linux-node1 web]# vim apache.sls    #编写安装apache的YAML文件
apache-install:
  pkg.installed:---------->模块pkg,方法installed,会匹配操作系统进行选择安装的方法
    - name: httpd--------->装的包的名称

apache-service:----------->id要唯一
  service.running:-------->状态模块service,running为模块的方法
    - name: httpd--------->管理服务的名称
    - enable: True-------->设置开机自动启动

[root@7mini-node1 ~]# salt '7mini-node2' state.sls web.apache
#如果apache.sls的位置是在prod目录下,需要在后面增加saltenv=prod
#salt '7mini-node2' state.sls web.apache saltenv=prod

- top.sls文件

实现自动化安装,需要写一个top.sls
[root@linux-node1 base]# pwd
/srv/salt/base
[root@linux-node1 base]# vim top.sls    #必须在base环境下写
base:
  'linux-node1.example.com':
    - web.apache
  'linux-node2.example.com':
    - web.apache
****************************
如果只有一个任务在全部机子上执行,也可以:
base:
  '*'
    - web.apache
****************************
[root@linux-node1 ~]# salt '*' state.highstate   #去top.sls读取,*代表通知哪些主机

salt '*' state.highstate test=True   #在不想影响当前主机的运行情况,可以使用test=True 进行预测试
原文地址:https://www.cnblogs.com/jimmy-xuli/p/9124810.html