SaltStack安装踩坑之路

一 背景

公司禁用ansible,机器越来越多,想试试 SaltStack到底有多块,如何适合上千台机器

官方centos7安装:http://docs.saltstack.cn/topics/installation/rhel.html

二 安装

网上很多教程使用阿里云 , 估计epel源不能用,报错:

No package salt-master available.

stackover给了答案,原文链接:https://stackoverflow.com/questions/24775841/yum-install-gives-no-package-available

Please follow steps mentioned on link to install salt-master

http://docs.saltstack.com/en/latest/topics/installation/rhel.html # 官方文档

it will not be available in default repository

 

 点进去找到centos7的 文档,网址:https://repo.saltproject.io/#rhel

sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
sudo yum clean expire-cache
yum install salt-master -y # 我看到中间会安装python36
sudo yum install salt-minion -y
sudo yum install salt-ssh -y
sudo yum install salt-syndic -y
sudo yum install salt-cloud -y
sudo yum install salt-api -y
systemctl start salt-minion
systemctl enable salt-minion
systemctl enable salt-master.service && systemctl restart salt-master.service

安装客户端

sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
sudo yum clean expire-cache
sudo yum install salt-minion -y
systemctl restart salt-minion
systemctl enable salt-minion

三 使用:

原文: https://www.cnblogs.com/wangyajian/p/11549078.html

# 配置 master 和minion

cat /etc/salt/master
master: 10.0.0.251
user: root

cat /etc/salt/minion | grep -v ^$ | grep -v ^#
master: 10.0.0.251
user: root
id: agent251 # 这个ip不写的话默认使用主机名称作为ip 就配置在cat /etc/salt/minion_id

# 下发密钥

# sudo salt-key --list-all  # 查看所有密钥
# salt-key --accept-all -y # 下发所有密钥

# 下面是简写
salt-key -L 
salt-key -A -y

# 测试

sudo salt '*' test.ping
sudo salt 'agent251' test.ping
sudo salt 'agent252' test.ping
注:
master 秘钥对默认存储在/etc/salt/pki/master/master.pub  /etc/salt/pki/master/master.pem
master 端认证的公钥存储在:/etc/salt/pki/master/minions/
minion 秘钥对默认存储在/etc/salt/pki/minion/minion.pub  /etc/salt/pki/minion/minion.pem
minion 存放的master公钥/etc/salt/pki/minion/minion_master.pub
minion_id 默认存储在/etc/salt/minion_id #?

四 报错排查

Minion did not return. [No response]
    The minions may not have all finished running and any remaining minions will return upon completion. To look up the return data for this job later, run the following command:
    
    salt-run jobs.lookup_jid 20210517224159109068
1. 查看minion端的日志信息
[root@iZbp150ikdomqe3b32qaubZ salt]# cat /var/log/salt/minion

[root@iZbp150ikdomqe3b32qaubZ salt]# systemctl restart salt-minion.service
[root@iZbp150ikdomqe3b32qaubZ salt]# cat /var/log/salt/minion 
2018-05-26 18:03:22,963 [salt.utils       ][ERROR   ][21937] DNS lookup of 'salt' failed.
2018-05-26 18:03:22,963 [salt.minion      ][ERROR   ][21937] Master hostname: 'salt' not found. Retrying in 30 seconds
2018-05-26 18:03:52,986 [salt.utils       ][ERROR   ][21937] DNS lookup of 'salt' failed.
2018-05-26 18:07:23,176 [salt.minion      ][ERROR   ][21937] Master hostname: 'salt' not found. Retrying in 30 seconds
2018-05-26 18:07:30,020 [salt.crypt       ][ERROR   ][22002] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate

根据报错信息分析:
minion大概的意思就是,minion端拿到的key与master端的不符,验证无法通过。
解决方法是删除minion端的key,再重新与master进行连接和认证。

2. 删除minion端的salt-master秘钥信息
[root@salt-slave-node1 minion]# pwd
/etc/salt/pki/minion
[root@salt-slave-node1 minion]# ls
minion_master.pub  minion.pem  minion.pub
[root@salt-slave-node1 minion]# rm -rf minion_master.pub 

3. 重新验证秘钥测试
[root@iZwz9bhan5nqzh979qokrkZ pki]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
iZbp150ikdomqe3b32qaubZ
izwz9f8xrvty50quc2gq50z
Rejected Keys:
[root@iZwz9bhan5nqzh979qokrkZ pki]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
iZbp150ikdomqe3b32qaubZ
izwz9f8xrvty50quc2gq50z
Proceed? [n/Y] Y
Key for minion iZbp150ikdomqe3b32qaubZ accepted.
Key for minion izwz9f8xrvty50quc2gq50z accepted.
[root@iZwz9bhan5nqzh979qokrkZ pki]# salt '*' test.ping
izwz9f8xrvty50quc2gq50z:
    True
iZbp150ikdomqe3b32qaubZ:
    True

重新认证:

salt minion 和salt master之间重新建立认证
修改了minion端的id之后 比如修改了hostname之后,

minion端会将minion的id 存放在/etc/salt/minion_id

文件中,重启不会改变。所以要重新认证就需要以下2步:

1、清空minion_id

>/etc/salt/minion_id

2.删除minion存放masterkey的文件pki文件夹下所以的东西

rm -rf /etc/salt/pki/*

3.重启minion

service salt-minion restart

在master端:

删除pki文件之后,重启即可:

rm -rf /etc/salt/pki/*
service salt-master restart

之后就可以salt-key看到新的minion id了。

 

 

扩展:  Jenkins 集成 saltstack

参考:https://cloud.tencent.com/developer/article/1523261

 

 

 

附录:

salt-master配置文件详解

interface: 192.168.28.141       #绑定到本地的某个网络地址 
publish_port: 4505              #默认端口4505,设置master与minion通信端口 
user: root                      #运行salt进程的用户 
max_open_files: 100000          #master可以打开的最大句柄数 
worker_threads: 5               #启动用来接收或应答minion的线程数 
ret_port: 4506                  #master用来发送命令或接受minions的命令执行返回信息
pidfile: /var/run/salt-master.pid #指定master的pid文件位置 
root_dir: /                     #该目录为salt运行的根目录,改变它可以使salt从另外一个目录运行,好比chroot 
pki_dir: /etc/salt/pki/master   #存放pki认证密钥 
cachedir: /var/cache/salt       #存放缓存信息,salt工作执行的命令信息 
verify_env: True                #启动验证和设置权限配置目录 
keep_jobs: 24                   #保持工作信息的过期时间,单位小时 
job_cache: True                 #设置master维护的工作缓存.当minions超过5000台时,它将很好的承担这个大的架构 
timeout: 5                      #master命令执可以接受的延迟时间 
output: nested                  #salt命令的输出格式 
minion_data_cache: True         #关于minion信息存储在master上的参数,主要是pilar和grains数据 
auto_accept: False              #默认值False. master自动接受所有发送公钥的minion 
file_recv: False                #允许minion推送文件到master上 
file_recv_max_size: 100         #默认值100,设置一个hard-limit文档大小推送到master端 
state_top: top.sls              #状态入口文件 
renderer: yaml_jinja            #使用渲染器用来渲染minions的状态数据 
failhard: False                 #当单个的状态执行失败后,将会通知所有的状态停止运行
salt命令详解

salt "*" sys.list_modules   # 查看所有模块

# salt -h
Usage: salt [options] '<target>' <function> [arguments]

Options(选项):

      --version : 查看saltstack软件的版本号。

      --versions-report : 查看saltstack软件以及依赖包的版本号。

      -h, --help : 查看帮助信息。

      --saltfile=SALTFILE:指定saltfile的路径。 如果没有通过,将在当前工作目录中搜索一个。

      -c CONFIG_DIR, --config-dir=CONFIG_DIR:指定配置文件的目录(默认是/etc/salt/)。

      -t TIMEOUT, --timeout=TIMEOUT:指定超时时间默认是5秒。

      --hard-crash:捕捉到original异常不退出默认关闭。

      -s, --static:以组的形式返回所有minion的数据。

      -p, --progress:显示进度图,需要progressbar的python包。

      --failhard :在第一个执行错误返回之后停止批处理。

      --async : 异步执行。

      --subset=SUBSET : 对目标minions的随机子集执行程序. minions在执行前会先验证是否存在该命名的函数,再去执行

      -v, --verbose : 打开命令详细,显示jid和活动的工作查询

      --hide-timeout : 隐藏超时时间。

      --show-jid : 显示任务的jid。

      -b BATCH, --batch=BATCH, --batch-size=BATC : 按照百分比执行任务。

      -a EAUTH, --auth=EAUTH, --eauth=EAUTH, --external-auth=EAUTH : 指定外部认证方式。

      -T, --make-token : 生成master token.

      --return=RETURNER : 设置一种替代方法。 默认情况下,salt将从命令将返回数据发送回主服务器,但返回数据可以重定向到任意数量的系统,数据库或应用程序。

      --return_config=RETURNER_CONF : 指定命令返回的设置文件。

      -d, --doc, --documentation : 查看指定模式或所有模块文档。

      --args-separator=ARGS_SEPARATOR :   指定发送命令跟命令参数的分隔符,当用户想把一个命令当作参数发送给另一个命令执行时。

      --summary :  显示汇总信息。

      --username=USERNAME : 指定外部认证的用户名。

      --password=PASSWORD :  指定外部认证的密码。

      --metadata=METADATA :  将元数据传递给Salt,用于搜索作业。

Logging Options(日志相关参数):

      -l LOG_LEVEL, --log-level=LOG_LEVEL : 指定日志级别。

      --log-file=LOG_FILE : 指定日志记录文件

      --log-file-level=LOG_LEVEL_LOGFILE : 日志文件日志记录级别。'all', 'garbage', 'trace', 'debug', 'info', 'warning', 'error','critical', 'quiet'. 默认: 'warning'.

Target Options(目标选择选项):

      -E, --pcre : 正则匹配

      -L, --list:  列表匹配,目标表达式将被解释为以逗号分隔的列表。

      -G, --grain:  grains匹配。

      --grain-pcre :grains加正则匹配。

      -N, --nodegroup:组匹配。

      -R, --range:范围匹配。

      -C, --compound : 综合匹配(指定多个匹配,空格隔开)。

      -I, --pillar : pillar值匹配。

      -J, --pillar-pcre : pillar加正则匹配。

      -S, --ipcidr : minions网段地址匹配。

Output Options(输出参数):
      --out=OUTPUT, --output=OUTPUT : 使用指定的输出器从'salt'命令打印输出。 内置的是 'key', 'yaml',  'overstatestage', 'newline_values_only', 'pprint',  'txt', 'raw', 'virt_query', 'compact', 'json', 'highstate', 'nested', 'quiet', 'no_return'.

      --out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT :   在空格中打印由提供的值缩进的输出。 负值禁用缩进。 仅适用于支持缩进的输出器。

      --out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE : 输出到指定文件。

      --out-file-append, --output-file-append :  输出附加到指定的文件。

      --no-color, --no-colour :  关闭所有的颜色显示。

      --force-color, --force-colour : 强制输出颜色显示。

      --state-output=STATE_OUTPUT, --state_output=STATE_OUTPUT : 覆盖配置的state_output值输出,指定state格式(full, terse, mixed, changes or filter)输出,默认值是full。

salt-key命令详解
# salt-key -h

Actions:
     -l ARG, --list=ARG:显示指定状态的key(支持正则表达式)

     -L, --list-all :列出所有公钥。"--list all"已经弃用。

     -a ACCEPT, --accept=ACCEPT: 接受指定的公钥(除了挂起的密钥之外,使用--include-all匹配拒绝的密钥),支持正则表达式。

     -A, --accept-all :接收所有等待认证的key。

     -r REJECT, --reject=REJECT :拒绝指定等待认证的key(支持正则表达式)

     -R, --reject-all:拒绝所有等待认证的key。

     --include-all: 显示所有状态的key。

     -p PRINT, --print=PRINT :打印指定的公钥支持正则表达式。

     -P, --print-all:打印所有的公钥。

     -d DELETE, --delete=DELET:删除指定的key。

     -D, --delete-all:删除所有的key。

     -F, --finger-all:显示所有key的指纹信息。
查找模块
salt '*' -d|grep ":" |grep disk

查找某个模块拥有的方法
salt 'agent1' sys.list_functions test

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值