SaltStack部署实践(1) - 配置管理与高级状态

目录

一、salt master-minion模式部署

#master和minion下载

#配置master管理minion

#通信原理

二、salt salt-ssh模式部署

#安装配置管理

#使用ssh远程执行

三、salt配置管理

#master目录规划

#先搞个apache服务sls脚本

#执行sls

四、salt高级状态

#开启高级状态

#编写计划脚本

#先测试没问题再执行


一、salt master-minion模式部署

特性:
远程执行、配置管理、云管理、事件驱动

master---node1---192.168.56.11
master---node2---192.168.56.12

#master和minion下载

[root@linux-node1 ~]# yum install -y epel-release salt-master salt-minion
[root@linux-node1 ~]# systemctl start salt-master
[root@linux-node2 ~]# yum install -y epel-release salt-minion

#配置master管理minion

[root@linux-node1-2 ~]# vi /etc/salt/minion 
 #master: salt  修改  master: 192.168.56.11
[root@linux-node1-2 ~]# systemctl start salt-minion
#master通过id识别minion,默认主机名,可通过minion中id选项配置
[root@linux-node2 salt]# cat /etc/salt/minion_id 
linux-node2.example.com  
#minion启动后会以id形式发送管理请求到master
[root@linux-node1 salt]# tree /etc/salt/pki/master/minions_pre/
/etc/salt/pki/master/minions_pre/
├── linux-node1.example.com
└── linux-node2.example.com
#master同意请求
[root@linux-node1 salt]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
linux-node1.example.com
linux-node2.example.com
Proceed? [n/Y] Y
Key for minion linux-node1.example.com accepted.
Key for minion linux-node2.example.com accepted.
#master查看节点
[root@linux-node1 salt]# salt "*" test.ping
linux-node2.example.com:
    True
linux-node1.example.com:
    True

#通信原理

#Salt使用发布-订阅模式与受管系统进行通信。连接由Salt Minion发起,这意味着受控端不需要监听端口。Salt Master使用的端口为4505 和4506,必须打开它们才能接受传入连接。
4505:所有Salt Minion建立与发布者端口的持久连接,并监听消息。命令通过此端口异步发送到所有连接,这使命令可以同时在大量系统上执行。
4506:Salt Minion根据需要,连接到服务器,将结果发送到Salt Master,并安全地请求文件和minion 特定的数据值(salt pillar)。

[root@linux-node1 salt]# lsof -n -i:4505
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 19120 root   13u  IPv4  52032      0t0  TCP *:4505 (LISTEN)
salt-mast 19120 root   15u  IPv4  55867      0t0  TCP 192.168.56.11:4505->192.168.56.11:41386 (ESTABLISHED)
salt-mast 19120 root   16u  IPv4  55878      0t0  TCP 192.168.56.11:4505->192.168.56.12:38952 (ESTABLISHED)

二、salt salt-ssh模式部署

传统salt基础设施中,由minions主动链接master,master并不会存储minion的网络和主机配置。而基于ssh链接时,这个规则就需要改变,因为master必须通过ssh去链接他的minion。salt-ssh可以独立运行的,不需要minion端。salt-ssh可以代替expect之类的密码推送脚本,看起来功能不比expect差 。 salt-ssh 用的是sshpass进行密码交互的。

但是:

1、salt-ssh是串行的,效率低于master-minion模式

2、要求服务器支持ssh服务

#安装配置管理

[root@linux-node1 base]# yum install -y salt-ssh 
[root@linux-node1 base]# cat /etc/salt/roster     
linux-node1:
  host: 192.168.56.11
  user: root
  passwd: 123456
linux-node2:
  host: 192.168.56.12
  user: root
  passwd: 123456

#使用ssh远程执行

#加- i自动认证,不加的话参考一下
[root@linux-node1 base]# salt-ssh '*' -r 'uptime' -i 
[root@linux-node1 base]# salt-ssh '*' -r 'uptime'
linux-node1.example:
    ----------
    retcode:
        254
    stderr:
    stdout:
        The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
        The authenticity of host '192.168.56.11 (192.168.56.11)' can't be established.
        ECDSA key fingerprint is SHA256:Zpw1uMG0zaEdDsyD2O9nj3mYjTwTrgzQ8uh50cN2Oqs.
        ECDSA key fingerprint is MD5:76:9d:4e:60:7b:38:cf:ef:f9:df:a3:0b:8b:17:ae:e7.
        Are you sure you want to continue connecting (yes/no)?

#此时ssh有验证访问机制,临时关闭解决

[root@linux-node1 base]# vim  /etc/ssh/ssh_config
StrictHostKeyChecking ask修改为no
[root@linux-node1 base]# systemctl restart sshd
特别注意:
salt-ssh第一次执行是根据roster文件里配置的账号密码推送密码,来实现自动交互的。
执行完了后会在目标服务器里面,追加master端(即源机器)的key。
然后就可以删除roster里面的passwd密码条目并且改回ssh规则了,不影响后批量操作的执行。

三、salt配置管理

#master目录规划

创建配置文件读取目录,可分开发、测试、项目等环境配置(base为默认目录)

[root@linux-node1 ~]# mkdir -p /srv/salt/{base,dev.test.prod}
[root@linux-node1 ~]# vim /etc/salt/master
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  test:
    - /srv/salt/test
  prod:
    - /srv/salt/prod
[root@linux-node1 ~]# systemctl restart salt-master

#先搞个apache服务sls脚本

[root@linux-node1 ~]# vim /srv/salt/base/web/apache.sls 
apache:
  pkg.installed:
    - name: httpd
  service.running:
    - name: httpd
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - user: root
    - group: root
    - mode: 644
解释说明:
apache:id声明,在所有环境(base、prod)下全局唯一
pkg:状态模块
.:引用关系
installed:模块中的方法
::代表层级关系
name:可以理解为参数,后面跟的是参数值
file.managed:文件管理模块,必须要有source指定文件的来源路径
name :节点需要管理的文件目录(minion目录)
source:要载入到节点的源文件,salt://代表着环境的根路径,这的根路径为:/srv/salt/base/(master目录)
user、group、mode:分别指定文件的所属者,所属组和权限
以上的文件还可以使用分id的写法:
apache-install:
  pkg.installed:
    - name: httpd

apache-service:
  service.running:
    - name: httpd

apache-config:
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/files/httpd.conf
    - user: root
    - group: root
    - mode: 644


#执行sls

#建议先yum update否则时间较长

[root@linux-node1 base]# salt 'linux-node2*' state.sls web.apache

四、salt高级状态

#上述每个脚本都要执行一遍太繁琐,可以通过指定计划脚本执行
#高级状态即统一规定哪些节点做什么操作,避免繁琐执行,统一规划

#开启高级状态

[root@linux-node1 web]# vi  /etc/salt/master
开放 state_top: top.sls

#编写计划脚本

[root@linux-node1 base]# cat /srv/salt/base/top.sls
base:
  'linux-node1-example.com':
    - web.apache
  'linux-node2-example.com':
    - web.apache

#先测试没问题再执行

#在不想影响当前主机的运行情况,可以使用test=True 进行预测试
#通常我们所有高级状态或者sls脚本都要提前测试无误才可以

[root@linux-node1 base]# salt '*' state.highstate test=True

#执行高级状态模块
#执行highstate后,系统默认搜索base目录下之前配置的top.sls

[root@linux-node1 base]# salt '*' state.highstate

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章