SaltStack--快速初学者

原创
小哥 3年前 (2022-11-02) 阅读数 7 #大杂烩

SaltStack--快速入门

saltstack快速入门 #

saltstack介绍 #

Salt,一种全新的基础设施管理方式,易于部署,几分钟就能运行,可扩展性好,易于管理数万台服务器,速度足够快,服务器之间的二级通信

主要功能
远程执行
配置管理
Stalstack官方文档

Saltstack原理 #

Salt 使用 server-agent 通信模型中,服务器端组件称为 Salt masteragent 被称为 Salt minion
Salt master 主要负责 Salt minions 发送命令,然后聚合并显示这些命令的结果。一个 Salt master 可以管理多个 minion 系统
Salt serverSalt minion 建立通信的连接 Salt minion 入会,这也意味着 Salt minion 无需打开任何传入端口(从而减少攻击)。 Salt server 使用端口 45054506 ,则必须打开端口才能接收访问连接。

  • Publisher (端口4505)所有 Salt minions 所有这些都需要建立一个发布者端口,该端口持续连接到它们所监听的消息。该命令通过该端口异步发送到所有连接,从而允许在大量系统上同时执行该命令。

  • Request Server (端口4506) Salt minios 根据需要连接到请求服务器,并将结果发送到 Salt master 并安全地获取所请求的文件或特定文件。 minion 相关数据值(称为 Salt pillar )。到此端口的连接已进入。 Salt masterSalt minion 之间是1:1(非异步)。

[root@salt-master ~]# lsof -i:4505 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME salt-mast 81121 root 16u IPv4 304019 0t0 TCP *:4505 (LISTEN) salt-mast 81121 root 18u IPv4 304082 0t0 TCP salt-master:4505->salt-minion03:37240 (ESTABLISHED) salt-mast 81121 root 19u IPv4 307610 0t0 TCP salt-master:4505->salt-minion01:47804 (ESTABLISHED) salt-mast 81121 root 20u IPv4 307611 0t0 TCP salt-master:4505->salt-minion02:58594 (ESTABLISHED)

快速安装 #

1.1 配置 yum 仓库

用官yum

[root@salt-master ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

或者使用阿里云的yum(建议使用速度更快的阿里云)

[root@salt-master ~]# yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm [root@salt-master ~]# sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo [root@salt-master ~]# yum clean all [root@salt-master ~]# yum makecache

1.2 安装Master并启动该服务

[root@salt-master ~]# yum -y install salt-master [root@salt-master ~]# systemctl enable salt-master [root@salt-master ~]# systemctl start salt-master

1.3 安装 Salt-Minion 指向 Salt-Master 网络地址

[root@salt-minion01 ~]# yum -y install salt-minion

可以使用主机名或IP地址

[root@salt-minion01 ~]# cp /etc/salt/minion{,.back} [root@salt-minion01 ~]# sed -i /#master: /c\master: salt-master /etc/salt/minion [root@salt-minion01 ~]# systemctl enable salt-minion [root@salt-minion01 ~]# systemctl start salt-minion

SaltStack认证方式 #

Salt 数据传输已经完成。 AES 加密, MasterMinion 在通信之前,需要进行身份验证。
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.pemmaster.pub ;并将收到 minionpublic 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 里。

Salt认证原则摘要

minion发送您自己的公钥master master身份验证后,发送您的公钥minion端

Master结束身份验证示例

1根据上面提到的认证原则,首先看看未认证的 masterminionpki 目录

master上查看

[root@salt-master ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master │   ├── master.pem │   ├── master.pub │   ├── minions │   ├── minions_autosign │   ├── minions_denied │   ├── minions_pre │   │   └── salt-minion01 │   └── minions_rejected └── minion

minion上查看

[root@salt-minion01 ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master └── minion ├── minion.pem └── minion.pub

2)salt-key 命令解释:

[root@salt-master ~]# salt-key -L Accepted Keys: #接受key Denied Keys: #拒绝的key Unaccepted Keys: #未加入的key Rejected Keys: #吊销的key

常用参数

-L #查看KEY状态 -A #允许所有 -D #删除所有 -a #指定的认证key -d #删除指定的key -r #核销指定的key(此状态未认证)

配置master自动接受请求身份验证(master上配置 /etc/salt/master)

auto_accept: True

3)salt-key 认证

列出所有当前key

[root@salt-master ~]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: salt-minion01 Rejected Keys:

添加指定minion的key

[root@salt-master ~]# salt-key -a salt-minion01 -y The following keys are going to be accepted: Unaccepted Keys: salt-minion01 Key for minion salt-minion01 accepted.

添加所有minion的key

[root@salt-master ~]# salt-key -A -y

[root@salt-master ~]# salt-key -L Accepted Keys: salt-minion01 Denied Keys: Unaccepted Keys: Rejected Keys:

4)以上鉴权完成后再检查 masterminionpki 目录

master上

[root@salt-master ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master │   ├── master.pem │   ├── master.pub │   ├── minions │   │   └── salt-minion01 │   ├── minions_autosign │   ├── minions_denied │   ├── minions_pre │   └── minions_rejected └── minion

minion上

[root@salt-minion01 ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master └── minion ├── minion_master.pub ├── minion.pem └── minion.pub

Saltstack远程执行 #

远程执行是 Saltstack 核心功能之一。主要用途 salt 将模块批次添加到选定的 minion 终端执行相应的命令,得到返回结果。

1、判断 saltminion 主机是否处于活动状态

[root@salt-master ~]# salt * test.ping salt-minion02: True salt-minion03: True salt-minion01: True

salt saltstack随之而来的命令。

* 表示目标主机,其中所有目标主机

test.ping test是saltstack其中的一个模块,ping它是此模块下面的方法。

2、 saltstack 使用 cmd.run 模块远程执行shell命令

在指定的目标中minion节点运行uptime命令

[root@salt-master ~]# salt salt-minion02 cmd.run uptime salt-minion02: 18:13:08 up 28 min, 2 users, load average: 0.00, 0.04, 0.13

Saltstack配置管理 #

Salt 通过 State 文件管理模块; YAML 要描述的语法,后缀是 .sls 的文件

1、了解 YAML 参考: http://docs.saltstack.cn/topics/yaml/index.html

remove vim: pkg.removed:

  • name: vim
  • 带有ID并且每个函数调用的行都带有冒号(:)结束。
  • 每个函数调用都会被调用。ID在下面缩进两个空格。
  • 参数以列表的形式传递给每个函数。
  • 包含函数参数的每一行都以两个空格缩进开头,后跟一个连字符,然后是一个额外的空格。
  • 如果参数采用单个值,则名称和值在同一行中,用冒号和空格分隔。
  • 如果参数需要列表,则列表从下一行开始并缩进两个空格。

2、配置 sals ,定义环境 参考文档

定义环境目录

[root@salt-master ~]# vim /etc/salt/master file_roots: base:

  • /srv/salt/base dev:
  • /srv/salt/dev prod:
  • /srv/salt/prod

    创建上面定义的目录

    [root@salt-master ~]# mkdir -p /srv/salt/{base,dev,prod}

    重启服务

    [root@salt-master ~]# systemctl restart salt-master

3,写下第一个 sls 文件

在base在环境中编写第一个安装。apache的sls文件

[root@salt-master ~]# cd /srv/salt/base/ [root@salt-master base]# cat apache.sls apache-install: pkg.installed:

  • name: httpd

apache-service: service.running:

  • name: httpd
  • enable: True

在dev在环境中编写安装程序。ftp的sls文件

[root@salt-master base]# cd /srv/salt/dev/ [root@salt-master dev]# cat vsftpd.sls vsftpd-install: pkg.installed:

  • name: vsftpd

vsftpd-service: service.running:

  • name: vsftpd
  • enable: True

4、使用 salt 命令的 state 状态模块使 minion 应用配置

让所有的minion都安装apache(由于salt默认环境为base,因此您可以在以后直接指定调用。apache.sls文件,不加后缀sls)

[root@salt-master ~]# salt * state.sls apache

让所有的minion都安装vsftpd(saltenv指定环境)

[root@salt-master ~]# salt * state.sls vsftpd saltenv=dev

5、使用 salt 的高级状态使不同的主机可以应用不同的配置。

topfile条目文件只能放置在base环境

[root@salt-master ~]# cat /srv/salt/base/top.sls base: salt-minion01:

  • apache salt-minion03:
  • apache dev: salt-minion02:
  • vsftpd salt-minion03:
  • vsftpd

6、使用 salt 该命令执行高级状态,这将 top.sls 作为条目文件,调用

将高级状态应用于所有主机

[root@salt-master ~]# salt * state.highstate

Saltstack常用配置 #

1、 Salt Master配置
Salt Master 终点轮廓 /etc/salt/master ,常用配置如下:

interface: //指定bind 的地址(默认为0.0.0.0) publish_port: //指定发布端口(默认为4505) ret_port: //指定结果返回端口, 与minion在配置文件中master_port对应(默认为4506) user: //指定master进程的运行用户,如果调整, 您需要调整一些目录的权限。(默认为root) timeout: //指定timeout时间, 如果minion规模较大或网络条件较差,建议增加此值。(默认5s) keep_jobs: //minion执行结果返回master, master将被缓存到本地cachedir目录,此参数指定缓存持续的时间。,在VIEWABLE之间执行的结果将占用磁盘空间。(默认为24h) job_cache: //master是否缓存执行结果,如果规模大的话(超过5000台),建议使用其他方法存储jobs,关闭此选项(默认为True) file_recv : //是否允许minion传输文件master 上(默认是Flase) file_roots: //指定file server目录, 默认为: file_roots:
base:

  • /srv/salt
    pillar_roots : //指定pillar 目录, 默认为: pillar_roots:
    base:
  • /srv/pillar
    log_level: //日志级别 支持的日志级别包括garbage, trace, debug, info, warning, error, ‘critical ’ ( 默认为’warning’)

2、 Salt Minion 终点轮廓 /etc/salt/minion ,常用配置如下:

master: //指定master 主机(默认为salt) master_port: //指定发送的身份验证和执行结果。master哪个端口, 与master在配置文件中ret_port对应(默认为4506) id: //指定本minion的标识, salt内部使用id作为标识(默认为主机名。) user: //指定运行minion的用户.由于安装包的原因,启动服务等操作需要特权用户。, 推荐使用root( 默认为root) cache_jobs : //minion是否缓存执行结果(默认为False) backup_mode: //在文件操作中(file.managed 或file.recurse) 时, 如果文件发送更改,指定备份目录.当前有效 providers : //指定相应的模块providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5 renderer: //在配置管理系统中指定呈现器。(默认值为:yaml_jinja ) file_client : //指定file clinet 默认情况下要去哪里(remote 或local) 寻找文件(默认值为remote) loglevel: //指定日志级别(默认为warning) tcp_keepalive : //minion 是否与master 保持keepalive 检查, zeromq3(默认为True)

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除