zoukankan      html  css  js  c++  java
  • 01 . SaltStack部署配置及简单应用

    SaltStack简介

    SaltStack
    • saltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。
    • saltstack是使用Python语言开发的,同时也支持restAPI方便二次开发以及和它平台集成,同时官方也发布了一个Web管理界面halite。
    • Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。
    优点
    • 首先,他速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的
    • 其次,非常灵活,源码是python,方便理解和自定义模块(python 语言相对于其他的perl、ruby等还是很好理解的)
    • 命令简单,功能强大
    saltstack运行方式
    • Local
    • Master/Minion
    • Salt SSH

    saltstack三大功能
    • 远程执行
    • 配置管理
    • 云管理
    saltstack数据系统
    • Grains (静态数据)
    • pillar (动态数据)
    saltstack配置管理
    • SLS(YAML、Jinja)
    • Highstate
    • States Module

    部署配置SaltStack

    准备两台机器,这两台机器都关闭 selinux,清空防火墙规则。

    List
        CentOS7.3
        	epel-7.repo
        	salt-master
        	salt-minion
        # 依赖包
    			python
    			zeromq
    			pyzmp
    			pycrypto
    			msgpack-python
    			yaml
    			jinja2
    
    节点名 IP 软件版本 硬件 网络 说明
    Master 192.168.43.132 list 里面都有 2C4G Nat,内网 测试环境
    192.168.43.234 list 里面都有 2C4G Nat,内网 测试环境
    安装saltstack

    salt软件包需要epel源的支持,那么下载

    EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum clean all #清空缓存
    yum makecache #生成yum缓存
    
    
    # master 安装salt-master
    yum install salt-master -y
    
    
    # slave 安装salt-minion
    yum install salt-minion -y
    
    配置Saltstack
    # salt-master的配置文件是/etc/salt/master
    # salt-minion的配置文件是/etc/salt/minion
    # 配置文件中包含了大量可调整的参数,这些参数控制master和minion各个方面
    

    salt-master

    [root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
    interface: 0.0.0.0  #绑定到本地的0.0.0.0地址
    publish_port: 4505  #管理端口,命令发送
    user: root      #运行salt进程的用户
    worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
    ret_port: 4506  #执行结果返回端口
    pidfile: /var/run/salt-master.pid #pid文件位置
    log_file: /var/log/salt/master  #日志文件地址
    #自动接收minion的key
    auto_accept: False
    

    salt-minion

    [root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
    master: master
    master_port: 4506
    user: root
    id: slave
    acceptance_wait_time: 10
    log_file: /var/log/salt/minion
    
    启动验证服务
    systemctl start salt-minion
    systemctl start salt-master
    
    #检查salt状态
    systemctl status salt-minion
    systemctl status salt-master
    
    # 验证端口
    [root@master ~]# ss -atnlp
    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=883,fd=3))
    LISTEN     0      100       *:4505                  *:*                   users:(("salt-master",pid=1232,fd=13))
    LISTEN     0      100       *:4506                  *:*                   users:(("salt-master",pid=1244,fd=21))
    
    
    # salt-master默认监听两个端口
    4505   # publish_port 提供远程命令发送功能
    4506   # ret_port     提供认证,文件服务,结果收集等功能
    # 确保客户端可以通信服务器的此2个端口,保证防火墙允许端口通过。因此在测试环境直接关闭防火墙
    
    配置master认证minion

    master上接受minion密钥

    在minion启动后连接master会请求master为其签发证书,等待证书签发完成后,master可以信任minion,并且minion和master之间的通信是加密的。

    salt-master执行

    [root@master ~]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    slave  # 此时已出现slave
    Rejected Keys:
      
    # 此时slave已经出现在unaccepted keys中,说明minion已经和master联系,
    # 并且master已经获取了minion的公钥,等待下一步指令。
    

    检查master和minion的密钥匹配

    [root@master ~]# salt-key -f slave
    Unaccepted Keys:
    slave:  d4:97:1a:81:4d:88:d2:9b:0b:73:e3:66:07:7e:20:6c
                                    
    # 因此可确认密钥匹配,在master上接受密钥
    [root@master ~]# salt-key -a slave
    The following keys are going to be accepted:
    Unaccepted Keys:
    slave
    Proceed? [n/Y] y
    Key for minion slave accepted.
    
    
    # 确认接收秘钥后,检验minion秘钥是否被接收
    [root@master ~]# salt-key -L
    Accepted Keys:
    slave
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    
    salt-key常用命令
    [root@linux-node1 ~]# 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端/etc/salt/master配置
    auto_accept: True   #如果对Minion信任,可以配置master自动接受请求
    
    salt-key的使用
    # 列出当前所有的key
    [root@master ~]# salt-key 
    Accepted Keys:
    slave
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    
    # 添加指定minion的key
    [root@master ~]# salt-key  -a salt -y
    
    
    # 添加所有minion的key
    [root@master ~]# salt-key  -A  -y
    
    # 删除指定的key
    [root@master ~]# salt-key -d slave -y
    
    # 删除所有的key
    [root@master ~]# salt-key -D -y
    
    日常命令参数

    首先知道master和minion都安装了什么文件,然后才知道怎么操作

    # master端
    [root@master ~]# rpm -ql salt-master
    /etc/salt/master			# salt master主配置文件
    /usr/bin/salt					# salt master核心操作命令
    /usr/bin/salt-cp			# salt 文件传输命令
    /usr/bin/salt-key			# salt证书管理
    /usr/bin/salt-master	# salt master服务命令
    /usr/bin/salt-run			# salt master runner命令
    /usr/bin/salt-unity
    /usr/lib/systemd/system/salt-master.service
    /usr/share/man/man1/salt-cp.1.gz
    /usr/share/man/man1/salt-key.1.gz
    /usr/share/man/man1/salt-master.1.gz
    /usr/share/man/man1/salt-run.1.gz
    /usr/share/man/man1/salt-unity.1.gz
    /usr/share/man/man7/salt.7.gz
    
    
    # slave端
    [root@slave ~]# rpm -ql salt-minion
    /etc/salt/minion				# minion配置文件
    /usr/bin/salt-call			# 拉取命令
    /usr/bin/salt-minion		# minion服务命令
    /usr/lib/systemd/system/salt-minion.service  # minion启动脚本
    /usr/share/man/man1/salt-call.1.gz
    /usr/share/man/man1/salt-minion.1.gz
    

    第一条SaltStack命令

    第一条salt命令
    [root@master ~]# salt '*' test.ping
    slave:
        True
        
    [root@master ~]# salt '*' test.echo 'zhou'
    slave:
        zhou
    # salt是一个命令
    # * 表示目标主机, 在这里代表所有目标主机 
    # test.ping是salt远程执行的一个模块下面的方法。
    
    # 这是条很简单的探测minion主机存活命令,也是远程执行命令,我们通过master发送消息给"*"所有的minion,
    # 并且告诉他们运行salt内置的命令(也是python模块中的一个函数),返回true表示slave机器监控存活。
    
    [root@master ~]# salt '*' test.fib 50
    slave:
        |_
          - 0
          - 1
          - 1
          - 2
          - 3
          - 5
          - 8
          - 13
          - 21
          - 34
        - 5.00679016113e-06
    # test.fib生成斐波那契数列
    
    # 菲波那切数列定义是第0项是0,第1项是1,数列从第3项开始,每一项等于前两项之和。
    

    Salt命令组成结构

    完整的一个命令
    # 在命令行输入的命令都是     执行模块
    # 等到命令写入到文件中,             就叫做状态模块
    
    salt --help # 即可查看salt帮助
    [root@master 192.168.199.155 ~]$salt --help
    Usage: salt [options] '<target>' <function> [arguments]
    
    # salt命令 参数 目标 salt模块的函数 远程执行的参数
    
    
    # 完整的五部分命令
    # summary参数显示salt命令的概要
    [root@master ~]# salt --summary '*' cmd.run 'hostname'
    slave:
        slave
    
    
    -------------------------------------------
    Summary
    -------------------------------------------
    # of Minions Targeted: 1
    # of Minions Returned: 1
    # of Minions Did Not Return: 0
    -------------------------------------------
    
    
    # 列出salt的sys模块
    [root@master ~]# salt 'slave' sys.list_modules
    slave:
        - acl
        - aliases
        - alternatives
        - archive
        - artifactory
        - blockdev
        - btrfs
        - buildout
        - cloud
        - cmd
    
    远程执行命令模块
    [root@master ~]# salt 'slave' sys.list_modules
    
    # cmd是超级模块,所有shell命令都能执行
    [root@master ~]# salt 'slave' cmd.run 'ps -ef |grep python'
    slave:
        root        882      1  0 14:57 ?        00:00:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
        root       1220      1  0 15:13 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
        root       1223   1220  0 15:13 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
        root      13564      1  0 15:31 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
        root      13565  13564  0 15:31 ?        00:00:00 /bin/sh -c ps -ef |grep python
        root      13567  13565  0 15:31 ?        00:00:00 grep python
    
    远程安装nginx
    #在minion上安装nginx
    [root@master~]$salt 'slave' pkg.install "nginx"
    #卸载minion上的nginx
    [root@master~]$salt 'slave' pkg.remove "nginx"
    #检查pkg包的版本
    [root@master~]$salt 'slave' pkg.version "nginx"
    
    远程管理服务模块
    # 管理服务是系统管理员的重要任务,通过salt管理minion服务会很简单,使用service模块
    
    [root@master ~]# salt 'slave' service.start "nginx"
    slave:
        True
    [root@master ~]# salt 'slave' service.status "nginx"
    slave:
        True
    [root@master ~]# salt 'slave' service.stop "nginx"
    slave:
        True
    

    --out控制salt命令结果输出格式

    JSON

    [root@master ~]# salt --out=json '*' cmd.run_all 'hostname'
    {
        "slave": {
            "pid": 13780, 
            "retcode": 0, 
            "stderr": "", 
            "stdout": "slave"
        }
    }
    

    YAML

    [root@master ~]# salt --out=yaml '*' cmd.run_all 'hostname'
    slave:
      pid: 13786
      retcode: 0
      stderr: ''
      stdout: slave
    
  • 相关阅读:
    【XXE学习】XML外部实体注入
    记一次解密wireshark抓取的冰蝎通信流量
    weblogicSSRF漏洞复现
    解决docker删除加载失败的镜像报错
    【vulapps】Sturcts2 S2-037RCE漏洞复现
    【XSS-labs】level 16-20
    解决docker-compose下载过慢
    【XSS-labs】Level 11-15
    【XSS-labs】level 6-10
    [PHP]用PHP自己写一个基于zoomeye的api(偷懒必备quq)
  • 原文地址:https://www.cnblogs.com/you-men/p/13246253.html
Copyright © 2011-2022 走看看