saltstalk 安装和使用

saltstack

文章参考链接 https://www.cnblogs.com/yanjieli/p/10864648.html

saltstack 简介

saltstack是什么?
Salt是一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.
saltstack原理

Salt master主要负责向Salt minions发送命令,然后聚合并显示这些命令的结果。一个Salt master可以管理多个minion系统
Salt server与Salt minion通信的连接由Salt minion发起,这也意味着Salt minion上不需要打开任何传入端口(从而减少攻击)。Salt server使用端口4505和4506,必须打开端口才能接收到访问连接

salt的master会监听端口4505和4506,4505是salt用来发布信息的;4506是用来为salt客户端与服务端通信的端口监听返回数据。minion端不监听端口,在minion启动后会自动与master通过注册连接,通过后一直保持连接

salt的认证方式

Salt 的数据传输是通过 AES 加密,Master 和 Minion 之前在通信之前,需要进行认证。
Salt 通过认证的方式保证安全性,完成一次认证后,Master 就可以控制 Minion 来完成各项工作了.

1. minion 在第一次启动时候,会在 /etc/salt/pki/minion/ 下自动生成 minion.pem(private key) 和 minion.pub(public key), 
然后将 minion.pub 发送给 master

2.master 在第一次启动时,会在 /etc/salt/pki/master/ 下自动生成 master.pem 和 master.pub ;并且会接收到 minion 的 public key , 
通过 salt-key 命令接收 minion public key, 会在 master 的 /etc/salt/pki/master/minions目录下存放以 minion id 命令的 public key ;
验证成功后同时 minion 会保存一份 master public key 在 minion 的 /etc/salt/pki/minion/minion_master.pub里。

saltstack安装

yum安装

1.管理断安装salt-master
$ yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm  (官方)
$ yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm (阿里云-推荐)
$ yum -y install salt-master
$ systemctl enable salt-master
$ systemctl start salt-master

2.客户端安装salt-minion
$ yum -y install salt-minion
$ cp /etc/salt/minion{,.back}
$ sed -i '/#master: /c\master: salt-master' /etc/salt/minion (salt-master是管理端的ip或者主机名)
$ systemctl enable salt-minion
$ systemctl start salt-minion

saltstack使用

#salt-master端

[root@vm_225 ~]# salt-key                       # 查看相关的key
Accepted Keys:                   # 已经接受的key
Denied Keys:                     # 已经拒绝的key
Unaccepted Keys:                 # 还未接受的key
vm_224
Rejected Keys:                   # 已经拒绝的key

# 常用参数
-L  #查看KEY状态
-A  #允许所有
-D  #删除所有
-a  #认证指定的key
-d  #删除指定的key
-r  #注销掉指定key(该状态为未被认证)

# 添加所有的key
salt-key -A -y
# 添加指定的key
salt-key -a key_name -y

#如果觉得每次都需要手动去接受key麻烦,可以在master端配置自动接收key
#配置master自动接受请求认证(master上配置 /etc/salt/master)
auto_accept: True

salt的远程执行

#1.判断远程主机是否存活
[root@vm_225 ~]# salt '*' test.ping
vm_224:
    True                  #存活的标志True/False
* 表示目标主机,这里表示所有目标主机
test.ping test是saltstack中的一个模块,ping则是这个模块下面的一个方法

#2. 远程执行shell命令
格式: salt 'key_name' cmd.run 'uptime'

例子
[root@vm_225 ~]# salt 'vm_224' cmd.run 'uptime'
vm_224:
     15:11:23 up 32 days,  3:19,  3 users,  load average: 0.18, 0.17, 0.26

[root@vm_225 ~]# salt 'vm_224' cmd.run 'echo ${HOSTNAME}'
vm_224:
    vm_224

saltstack配置管理

salt通过state模块来进行文件的管理;通过yml语法来描述,后缀格式为.sls

remove vim:
  pkg.removed:
    - name: vim

如上所示,在yml语法中,使用缩进来表示层级关系,不建议使用tab键来缩进,除非你的编辑器设置了tab键为输入空格.
设置vim的tab键为空格的方式

set ts=4       #4个空格
set softtabstop=4
set shiftwidth=4
set expandtab

ts 表示一个 tab 显示出来是多少个空格的长度,默认 8
softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab时特别有用
shiftwidth 表示每一级缩进的长度,一般设置成跟 softtabstop 一样
当设置成 expandtab 时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进

实战编写

#1. 定义环境目录
在salt-master上的master配置文件中找到
# file_roots:
#   base:                                     #salt安装软件的默认环境
#     - /srv/salt/
#   dev:                                      #可以指定的环境目录
#     - /srv/salt/dev/services
#     - /srv/salt/dev/states
#   prod:                                     #可以指定的环境目录
#     - /srv/salt/prod/services
#     - /srv/salt/prod/states
#
#file_roots:
#  base:
#    - /srv/salt
# 创建上面的环境目录
mkdir /srv/salt/{dev,prod}/{services,states} -p
systemctl restart salt-master
#2. 实战编写
[root@localhost ~]$ cat /srv/salt/top.sls    # 编辑入口配置文件,文件名固定为top.sls
base:                                        # 指定使用哪个环境
  '*':                                       # 指定针对哪些主机进行操作
    - httpd                                  # 指定加载哪些sls文件

salt '*' state.highstate 会直接找到top文件入口去执行相关的操作.

[root@localhost ~]$ cat /srv/salt/httpd.sls  # 定义httpd.sls文件,以便让入口配置文件加载
httpd-service:                               # httpd-service 只是一个ID,方便我们查看
  pkg.installed:                             # pkg.installed 是一个包安装函数,- name 用来指定要安装的包的名字
    - names:                                 # service.running 也是一个函数,用来指定启动哪些服务,并设置开机启动
      - httpd
      - httpd-devel    
  service.running:
    - name: httpd
    - enable: True

posted @ 2021-09-10 16:31  少林寺驻峨眉山大神父  阅读(94)  评论(0编辑  收藏  举报