zoukankan      html  css  js  c++  java
  • Saltstack 和 Salt-API 安装配置及使用

    CentOS 7 安装 saltstack

    salt介绍

      salt是一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)。一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据。开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单。

      saltstack(中国用户组www.saltstack.cn)基于Python开发,c/s架构支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

      saltstack的优势:有master端和minion端,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况;有封装好的http-api,可以直接启动salt-api就可以通过http协议进行调用。不需要进行第二次的封装。

    salt安装

    1.安装epel yum源

    1 yum -y install epel-release 
    2 yum clean all 
    3 yum makecache

    2.安装 salt-master并配置

    1 salt-master 安装: yum -y install salt-master
    2 salt-master 配置:
    3 修改minion配置文件 vim /etc/salt/master
    4 interface: 10.0.0.15   
    5 或者
    6 [root@localhost salt]# sed -i 's/#interface: 0.0.0.0/interface: 10.0.0.15/g' /etc/salt/master
    7 [root@localhost salt]# sed -e '/^$/d;/^#/d;' /etc/salt/master
    8 interface: 10.0.0.15

    3.安装 salt-minion 并配置

    1 salt-minion 安装: yum -y install salt-minion
    2 salt-minion 配置:
    3 修改minion配置文件 vim /etc/salt/minion
    4 master: 192.168.56.11   可以是主机名需要解析(指定服务端的IP地址)
    5 id:   唯一标识符,可以不配,不配默认就是主机名
    6 或者
    7 [root@localhost salt]# sed -i 's/#master: salt/master: 10.0.0.15/g' /etc/salt/minion
    8 [root@localhost salt]# sed -e '/^$/d;/^#/d;' /etc/salt/minion
    9 master: 10.0.0.15

    4.启动 salt-master 和 salt-minion

    1 启动master:
    2 [root@localhost salt]# systemctl start salt-master
    3 [root@localhost salt]# systemctl status salt-master
    4 
    5 启动minion:
    6 [root@localhost salt]# systemctl start salt-minion
    7 [root@localhost salt]# systemctl status salt-minion

    5.测试 saltstack (接下来都在 salt-master 端操作)

    1、查看 minion 列表(这时候 10.0.0.129是红色的,表示未通过认证,10.0.0.15是绿色的,表示通过认证了)

    2、认证所有 key,当然你也可以通过 
    salt-key -a 10.0.0.129 指定某台 minion 进行认证 key,或者salt-key -A进行所有认证key

    3、接着继续查看 minion 列表 (这时候10.0.0.129 已经变为绿色,说明 key 已被添加)

    4、简单测试(通过 salt-master 进行检测)

    可以ping到 10.0.0.129 返回值为 True,说明 salt-master 和 salt-minion 可以通讯,安装到此结束。

    saltstack的设置

    1.master与minion的认证

    1 minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。
    2 master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
    3   常用指令:
    4 
    5   salt-key -L 或者salt-key 显示所有的key
    6   salt-key -D :删除所有认证主机id证书
    7   salt-key -d keys_values -y
    8   salt-key -A:接收所有id证书请求
    9   salt-key -a id :接受单个id证书请求

    2.saltstack远程执行机器

     11)-E, --pcre,通过正则表达式进行匹配:
     2   salt -E 'web(9|10)*' test.ping -t 1
     32)-L, --list, 主机id进行过滤:
     4   salt -L "*app*" cmd.run "df -h" 
     53) -G, --grain, 根据被控主机的grains信息进行过滤
     6   salt -G 'role:nginx' cmd.run "ls /export"
     74) -I, --pillar, 根据被控主机的pillar信息进行过滤
     8   salt -I 'myname:xiang' test.ping -t 5
     95) -S, --ipcidr, 根据minion的ip地址进行匹配
    10   salt -S 192.168.1.1 test.ping
    11   salt -S 192.168.1.0/24 test.ping
    12   salt -S 192.168.0.0/16 test.ping
    13   salt -S 192.0.0.0/8 test.ping
    146)检查客户端是否挂掉:
    15   salt-run manage.status |head
    16   salt-run manage.down

    3.saltstack配置文件详解

    1 saltstack占用两个端口4505和4506:
    2 确保master端的4505和4506端口开通
    3 Minion的key确实别master接受
    4 通过test.ping 模块,双方都可以ping通
    5 

    4.saltstack的几种模块介绍

     1 Runner 模块     在master端执行的  salt-run
     2 Module 模块    通过master同步到minion端, 在minion执行
     3        salt-call saltutil.sync_modules
     4        salt-call saltutil.sync_all:包括:beacons:
     5        clouds:    engines:    grains:    log_handlers:    modules:
     6        output:    proxymodules:    renderers:    returners:    sdb:
     7        states:    utils:
     8 
     9 Grins 模块    记录minion的属性key:value
    10 Pillar模块      记录所有minion通用的属性,然后同步到minion端
    11       salt-call saltutil.refresh_pillar
    12       salt ‘*’ saltutil.refresh_pillar
    13 
    14  cmd模块       salt  ‘*’ cmd.run “df -h”
    15  ping模块  salt ‘*’ test.ping –t 5
    16   cp 模块
    17       file_roots: 
    18       base:
    19       - /export/salt/root
    20       salt根目录:在master中file_roots定义的路径,salt://test.txt相当于/export/salt/root/test.txt
    21       salt 'wms5test1.app.172.17.23.176' cp.get_file salt://nscd.conf /tmp/xiang.txt  
    22 
    23  
    24 
    25 cron模块:
    26       salt '*' cron.raw_cron root     (查看定时任务)
    27       salt '*' cron.set_job root '*' '*' '*' '*' 1 /export/scripts/rm_log.sh 
    28       salt '*' cron.rm_job root /export/scripts/rm_log.sh   (写全没效果)
    29 
    30 
    31 dnsutil模块
    32       salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 xiang.com
    33       salt '*' dnsutil.hosts_remove /etc/hosts xiang.com
    34 
    35 file模块:
    36       salt '*' file.chown /etc/passwd root root
    37       salt '*' file.copy /path/to/src /path/to/dst
    38       salt '*' file.file_exists /etc/hosts
    39       salt '*' file.directory_exists /etc/
    40       salt '*' file.get_mod /etc/passwd
    41       salt '*' file.set_mod /etc/passwd 0644
    42       salt '*' file.mkdir /tmp/test
    43       salt '*' file.sed /export/servers/nginx/conf/nginx.conf 'debug' 'warn'
    44       salt '*' file.append /tmp/test.txt "welcome xiang"
    45       salt '*' file.remove /tmp/1.txt
    46 
    47 network模块:
    48       salt '*' network.dig www.qq.com
    49       salt '*' network.ping www.qq.com
    50       salt '*' network.ip_addrs
    51 
    52 pkg包管理模块:
    53       管理yum, apt-get等
    54       salt '*' pkg.install php
    55       salt '*' pkg.remove php
    56       salt '*' pkg.upgrade    (升级所有的软件包)
    57 
    58 service模块
    59       salt '*' service.enable nginx
    60       salt '*' service.disable nginx
    61       salt '*' service.restart nginx
    62 
    63 Grains模块
    64       自定义grians(在minion上定义的)
    65       grains是在minion启动时搜集一些信息,如操作系统类型,网卡,内核版本,cpu架构等
    66       salt "*" grains.ls    列出所有grains项目名字
    67       salt "*app.*" grains.items  列出所有grains项目以及值
    68       grains的信息并不是动态的,并不会实时变化,它只是在minion启动时收集到的
    69       我们可以根据grains收集到的一些信息,做一些配置管理工作
    70       在minion上:vim /etc/salt/grains
    71       role: nginx
    72       env: test
    73       重启service salt-minion restart
    74       获取grians:
    75       salt "*" grains.item role env
    76       或者:
    77       salt -G "*" role:nginx cmd.run "hostname“
    78       salt ‘*’grains.items
    79 
    80 Pillar模块
    81       pillar(在master上定义)(yaml语法)
    82       在配置文件中找pillar的文件路劲:
    83 
    84       找到以后,mkdir  /export/salt/pillar
    85       vim top.sls
    86       base:
    87       "*":
    88       - test
    89       vim test.sls
    90       conf: xiang
    91       然后刷新pillar: salt '*' saltutil.refresh_pillar
    92       验证:salt '*' pillar.items conf
    93       或者: salt -I 'conf:xiang' test.ping

    Salt-API安装配置及使用(Python3使用saltstack和salt-api)

    安装 salt-api

    1 yum install salt-api -y

    salt-api配置

    生成自签名证书(用于ssl)

    1 cd  /etc/pki/tls/certs
    2 # 生成自签名证书, 过程中需要输入key密码及RDNs
    3 make testcert
    4 cd /etc/pki/tls/private/
    5 # 解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码
    6 openssl rsa -in localhost.key -out localhost_nopass.key

    创建用于salt-api的用户

    1 useradd -M -s /sbin/nologin salt-api
    2 echo "salt-api" | passwd salt-api —stdin

    修改/etc/salt/master文件

    1 sed -i '/#default_include/s/#default/default/g' /etc/salt/master  
    2 mkdir /etc/salt/master.d 

    新增配置文件/etc/salt/master.d/api.conf

    1 cat /etc/salt/master.d/api.conf
    2 rest_cherrypy:
    3   port: 8000
    4   ssl_crt: /etc/pki/tls/certs/localhost.crt
    5   ssl_key: /etc/pki/tls/private/localhost_nopass.key

    新增配置文件/etc/salt/master.d/eauth.conf

    1 cat /etc/salt/master.d/eauth.conf  
    2 external_auth:  
    3   pam:  
    4     salt-api:  
    5       - .*  
    6       - '@wheel'  
    7       - '@runner' 

    启动salt-master and salt-api

    1 systemctl start salt-master
    2 systemctl start salt-api

    安装一个salt client

    1 yum install salt-minion -y
    2 修改配置
    3 sed -i "/^#master: salt/c master: 192.168.104.76"  /etc/salt/minion
    4 启动 client
    5 systemctl start salt-minion

    master 上接受key

     1 [root@node76 salt]# salt-key -L
     2 Accepted Keys:
     3 Denied Keys:
     4 Unaccepted Keys:
     5 node76
     6 Rejected Keys:
     7 [root@node76 salt]# salt-key -A
     8 The following keys are going to be accepted:
     9 Unaccepted Keys:
    10 node76
    11 Proceed? [n/Y] Y
    12 Key for minion node76 accepted.
    13 [root@node76 salt]# salt-key -L
    14 Accepted Keys:
    15 node76
    16 Denied Keys:
    17 Unaccepted Keys:
    18 Rejected Keys:

    api使用

    使用curl 获取token

     1  curl -k https://192.168.104.76:8000/login -H "Accept: application/x-yaml"  -d username='salt-api' -d password='salt-api'  -d eauth='pam'
     2 return:
     3 - eauth: pam
     4   expire: 1520269544.2591
     5   perms:
     6   - .*
     7   - '@wheel'
     8   - '@runner'
     9   start: 1520226344.259099
    10   token: 593a7224f988f28b84d58b7cda38fe5e5ea07d98
    11   user: salt-api
    参数解释:
     1 --sslv3 指定sslv3版本
     2 -k      忽略证书获取https内容
     3 -s      指定使用静默(silent)方式
     4 -i      指定SaltAPI收到服务器返回的结果同时显示HTTP Header。
     5 -H      指定一个特定的Header给远端服务器,当SaltAPI 需要发送appliton-tion/json Header时。会以我们希望的JSON格式返回结果
     6 -d      想远端服务器发送POST请求,以key=value的格式发送 ,注意key=v时,必须紧挨=号两边
     7 
     8 
     9 获取token后就可以使用token通信
    10 注:重启salt-api后token改变

    测试minion端的联通性

    1 下面功能类似于“salt '*' test.ping”:
    2 curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9" -d client='local' -d tgt='*' -d fun='test.ping' 
    3 return:
    4 - node76: true
    参数解释:
     1 client : 模块,python处理salt-api的主要模块,‘client interfaces <netapi-clients> 2     local : 使用‘LocalClient <salt.client.LocalClient>’ 发送命令给受控主机,等价于saltstack命令行中的'salt'命令
     3     local_async : 和local不同之处在于,这个模块是用于异步操作的,即在master端执行命令后返回的是一个jobid,任务放在后台运行,通过产看jobid的结果来获取命令的执行结果。
     4     runner : 使用'RunnerClient<salt.runner.RunnerClient>' 调用salt-master上的runner模块,等价于saltstack命令行中的'salt-run'命令
     5     runner_async : 异步执行runner模块
     6     wheel : 使用'WheelClient<salt.wheel.WheelClient>', 调用salt-master上的wheel模块,wheel模块没有在命令行端等价的模块,但它通常管理主机资源,比如文件状态,pillar文件,salt配置文件,以及关键模块<salt.wheel.key>功能类似于命令行中的salt-key。
     7     wheel_async : 异步执行wheel模块
     8     备注:一般情况下local模块,需要tgt和arg(数组),kwarg(字典),因为这些值将被发送到minions并用于执行所请求的函数。而runner和wheel都是直接应用于master,不需要这些参数。
     9 tgt : minions
    10 fun : 函数
    11 arg : 参数
    12 expr_form : tgt的匹配规则
    13     'glob' - Bash glob completion - Default
    14     'pcre' - Perl style regular expression
    15     'list' - Python list of hosts
    16     'grain' - Match based on a grain comparison
    17     'grain_pcre' - Grain comparison with a regex
    18     'pillar' - Pillar data comparison
    19     'nodegroup' - Match on nodegroup
    20     'range' - Use a Range server for matching
    21     'compound' - Pass a compound match string

    执行远程命令

    1 下面功能类似于“salt '*' cmd.run ifconfig”:
    2 curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9" -d client='local' -d tgt='*' -d fun='cmd.run'   -d arg='uptime'
    3 return:
    4 - node76: ' 13:18:46 up 161 days,  2:23,  1 user,  load average: 0.15, 0.09, 0.10'

    使用state.sls

     1 下面功能类似于“salt '*' state.sls ifconfig”:
     2  curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9" -d client='local' -d tgt='*' -d fun='state.sls' -d arg='ifconfig'
     3 return:
     4 - node76:
     5         cmd_|-ifconfig_|-ifconfig_|-run:  
     6       __run_num__: 0  
     7       changes:  
     8         pid: 30954  
     9         retcode: 0  
    10         stderr: ''  
    11         stdout: "eth2      Link encap:Ethernet  HWaddr 00:50:56:B5:5C:28  
           
    12                inet addr:192.168.90.63  Bcast:192.168.90.255  Mask:255.255.255.0
      
    13                     inet6 addr: fe80::250:56ff:feb5:5c28/64 Scope:Link
              
    14             UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:825051  
    15            errors:0 dropped:0 overruns:0 frame:0
              TX packets:434351 errors:0  
    16            dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000  
    17            
              RX bytes:60353823 (57.5 MiB)  TX bytes:27062672 (25.8 MiB)
      
    18           
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1   
    19            Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP  
    20            LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:808 errors:0  
    21            dropped:0 overruns:0 frame:0
              TX packets:808 errors:0 dropped:0  
    22            overruns:0 carrier:0
              collisions:0 txqueuelen:0 
               
    23            RX bytes:59931 (58.5 KiB)  TX bytes:59931 (58.5 KiB)"  
    24       comment: Command "ifconfig" run  
    25       duration: 11.991  
    26       name: ifconfig  
    27       result: true  
    28       start_time: '13:59:06.334112'  

    使用Targeting

    1 下面功能类似于"salt -L '192.168.90.61,192.168.90.63' test.ping"
    2  curl -k https://192.168.104.76:8000 -H "Accept: application/x-yaml" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9"  -d client='local' -d tgt='node76'  -d expr_form='list'  -d fun='test.ping' 
    3 return:
    4 - node76: true

    以json格式输出

    1 curl -k https://192.168.104.76:8000 -H "Accept: application/json" -H "X-Auth-Token: ded897184a942ca75683276c29d787ea71c207a9"  -d client='local' -d tgt='node76'  -d fun='cmd.run' -d arg='uptime'
    2 {"return": [{"node76": " 13:25:20 up 161 days,  2:30,  1 user,  load average: 0.01, 0.06, 0.08"}]}

    使用jobs

     1  curl -k -s https://192.168.104.76:8000/jobs/20180306112645047796 -H "Accept: application/x-yaml" -H "X-Auth-Token: a7f8b2fab2bfb05334f8a314d97925c1bec1d14c" 
     2 info:
     3 - Arguments:
     4   - uptime
     5   Function: cmd.run
     6   Minions:
     7   - node76
     8   Result:
     9     node76:
    10       return: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07,
    11         0.08'
    12   StartTime: 2018, Mar 06 11:26:45.047796
    13   Target: node76
    14   Target-type: glob
    15   User: salt-api
    16   jid: '20180306112645047796'
    17 return:
    18 - node76: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07, 0.08'
    19 #结果
    20 curl -k -s https://192.168.104.76:8000/jobs/20180306112645047796 -H "Accept: application/x-yaml" -H "X-Auth-Token: a7f8b2fab2bfb05334f8a314d97925c1bec1d14c" 
    21 info:
    22 - Arguments:
    23   - uptime
    24   Function: cmd.run
    25   Minions:
    26   - node76
    27   Result:
    28     node76:
    29       return: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07,
    30         0.08'
    31   StartTime: 2018, Mar 06 11:26:45.047796
    32   Target: node76
    33   Target-type: glob
    34   User: salt-api
    35   jid: '20180306112645047796'
    36 return:
    37 - node76: ' 11:26:45 up 162 days, 31 min,  1 user,  load average: 0.12, 0.07, 0.08'
  • 相关阅读:
    Balance的数学思想构造辅助函数
    1663. Smallest String With A Given Numeric Value (M)
    1680. Concatenation of Consecutive Binary Numbers (M)
    1631. Path With Minimum Effort (M)
    1437. Check If All 1's Are at Least Length K Places Away (E)
    1329. Sort the Matrix Diagonally (M)
    1657. Determine if Two Strings Are Close (M)
    1673. Find the Most Competitive Subsequence (M)
    1641. Count Sorted Vowel Strings (M)
    1679. Max Number of K-Sum Pairs (M)
  • 原文地址:https://www.cnblogs.com/zhaohuhu/p/9548886.html
Copyright © 2011-2022 走看看