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'
  • 相关阅读:
    计蒜客 移除数组中的重复元素 (双指针扫描)
    计蒜客 寻找插入位置 (二分查找)
    poj 1007 DNA Sorting
    全排列函数 nyoj 366(next_permutation()函数)
    nyoj 202 红黑树
    nyoj 92 图像有用区域
    nyoj 82 迷宫寻宝(一)
    nyoj 58 最少步数
    nyoj 43 24 Point game
    nyoj 42 一笔画问题
  • 原文地址:https://www.cnblogs.com/zhaohuhu/p/9548886.html
Copyright © 2011-2022 走看看