IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    自动化运维工具SaltStack安装

    C1G发表于 2023-03-11 14:47:22
    love 0

    一.SaltStack介绍

    1.常见的自动化运维工具介绍

    chef,ansible,saltstack,puppet;
    这几款都是自动化运维工具,可以用来提高运维管理效率,在这几款运维工具中目前主流的是ansible和saltstack。
    ansible和saltstack的区别在于ansible无需安装客户端,这也成为了ansible的一大优势。
    而saltstack则需要安装客户端,也可以不用安装,他们的适用场景也不一样,ansible适用于小型企业,管理较少的服务器时适用,saltstack则用于中大型企业,因为ansible无法并行执行saltstack则可以并行执行。
    但是这几款运维工具并不存在优劣,只是适用的场景的不同。

    语言的选择(puppet/chef vs ansible/saltstack)
    Puppet、Chef基于Ruby开发,ansible、saltstack基于python开发的
    运维开发语言热衷于python(后期可做二次开发),排除Puppet、Chef

    速度的选择 (ansible vs saltstack)
    ansible基于ssh协议传输数据,SaltStack使用消息队列zeroMQ传输数据。从网上数据来看,SaltStack比ansible快大约40倍。
    对比ansible,Saltstack缺点是需要安装客户端。为了速度建议选择SaltStack

    Ansible适合100台以下到200这样服务器规模应用
    SaltStack,适合几百台的规模!
    puppet适合上千台和几万台的规模

    2. 服务架构介绍

    saltstack是基于python开发的一套C/S自动化运维工具,通信采用了zeromq消息队列的(pub/sub),数据传输采用了AES(高级加密)保证安全性,认证采用了SSL方式.
    在SaltStack架构中服务器端叫作Master,客户端叫作Minion,传统C/S架构为:客户端发送请求给服务器端,服务器端接收到请求并且处理完成后再返回给客户端。在SaltStack架构中不仅有传统的C/S架构服务模式,而且有消息队列中的发布与订阅(pub/sub)服务模式。这使得SaltStack应用场景更加丰富。目前在实际环境中一般使用SaltStack的C/S架构进行配置管理。

    在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求,默认端口号:4506)和publish_port(发布消息,默认端口号:4505)的端口。当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。默认客户端请求id是socket.getfqdn()取到的值,也可以在Minion启动之前修改Minion的id值。

    SaltStack github地址:
    https://github.com/saltstack/salt
    SaltStack 官网文档地址:
    https://docs.saltproject.io/en/latest/

    3.saltstack四大功能与四大运行方式

    saltstack四大功能,分别是:

    远程执行 (批量执行命令)在master上执行命令时,会在所有的minion上执行。
    配置管理/状态管理 (描述想到达到的状态,saltstack就会去执行)
    云管理(cloud) 用于管理云主机
    事件驱动 被动执行的,当达到某个值会自动触发
    saltstack可以通过远程执行实现批量管理,并且通过描述状态来达到某些功能的目的。

    saltstack四大运行方式:

    local本地运行 (masterless模式)
    master/minion传统方式 这是saltstack的主要模式
    syndic 分布式
    salt ssh (agentless模式)

    Master:控制中心,salt命令运行和资源状态管理
    Minion : 需要管理的客户端机器,会主动去连接Mater端,并从Master端得到资源状态
    信息,同步资源管理信息
    States:配置管理的指令集
    Modules:在命令行中和配置文件中使用的指令模块,可以在命令行中运行
    Grains:minion端的变量,静态的
    Pillar:minion端的变量,动态的比较私密的变量,可以通过配置文件实现同步minions定义
    highstate:为minion端下发永久添加状态,从sls配置文件读取.即同步状态配置
    salt_schedule:会自动保持客户端配置
    Python API就是给Python提供的API使用,需要在SaltStack master上运行

    4.saltstack配置文件

    saltstack的配置文件在/etc/salt 目录

    saltstack配置文件说明:

    配置文件 说明
    /etc/salt/master 主控端配置文件
    /etc/salt/minion 受控端配置文件
    配置文件件/etc/salt/master默认的配置就可以很好的工作,故无需修改此配置文件

    配置文件/etc/salt/minion常用配置参数

    master:设置主控端的IP
    id:设置受控端主机的唯一标识符,可以是IP也可以是主机名或自取见名知意的单词等都可。
    在日常使用过程中,经常需要调整或修改Master配置文件,SaltStack大部分配置都已经指定了默认值,只需根据自己的实际需求进行修改即可。下面的几个参数是比较重要的

    max_open_files:可根据Master将Minion数量进行适当的调整
    timeout:可根据Master和Minion的网络状况适当调整
    auto_accept和autosign_file:在大规模部署Minion时可设置自动签证
    master_tops和所有以external开头的参数:这些参数是SaltStack与外部系统进行整合的相关配置参数
    saltstack的认证机制
    saltstack主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用salt-key命令来管理证书。

    master与minion的认证过程
    minion在第一次启动时会在/etc/salt/下生成/pki/minion目录,并在下面创建minion.pem(私钥)和minion.pub(公钥)。
    然后主动将minion.pub发送到master的/etc/salt/pki/master/minions.pre/下面,并且文件以minion的id文件内的数据命名,等待认证。
    在master上执行salt-key -L命令可以查看等待签证的minion。
    执行salt-key -A -y命令同意所有没有签证的minion。
    这时minion会在/etc/salt/pki/minion/下生成minion_master.pub文件,注这个是master的公钥文件。
    并且master会将/pki/master/minions.pre目录下的公钥转移到/pki/master/minions/目录下表示已经认证,这时master就可以管理minion了。

    二.安装部署SaltStack

    1.配置yum源

    cat /etc/issue.net
    CentOS release 6.7 (Final)

    在 Master 端和 Minion 端都需要安装 epel 的 yum源
    注意网上很多教程的centos6源都已过期,注意切换到存档源

    
    #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-archive-6.repo
    #wget http://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm
    #rpm -ivh epel-release-6-8.noarch.rpm 
    
    #Centos7源
    #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    

    安装Centos6源

    
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo
    wget -O /etc/yum.repos.d/salt.repo https://archive.repo.saltproject.io/yum/redhat/6/x86_64/saltstack-rhel6.repo
    sed -i 's/repo.saltstack.com/archive.repo.saltproject.io/g' /etc/yum.repos.d/salt*.repo
    yum clean expire-cache
    

    当前环境配置的示例ip
    Master: 192.168.0.11
    Minion: 192.168.0.73
    环境说明:

    主机名 IP 所需应用 系统
    master(控制节点) 192.168.0.11 salt-master salt-minion CentOS6.7
    minion01(被控节点) 192.168.0.12 salt-minion CentOS6.7

    2. master端安装salt-master

    当前python为2.6
    python -V
    Python 2.6.6

    yum list |grep salt

    PyYAML.x86_64 3.11-1.el6 @saltstack/6.7
    python-crypto.x86_64 2.6.1-2.el6 @saltstack/6.7
    python-futures.noarch 3.0.3-1.el6 @saltstack/6.7
    python-jinja2.noarch 2.7.3-1.el6 @saltstack/6.7
    python-markupsafe.x86_64 0.11-10.el6 @saltstack/6.7
    python-tornado.x86_64 4.2.1-1.el6 @saltstack/6.7
    python-zmq.x86_64 14.5.0-2.el6 @saltstack/6.7
    salt.noarch 2016.3.1-1.el6 @saltstack/6.7
    salt-minion.noarch 2016.3.1-1.el6 @saltstack/6.7
    zeromq.x86_64 4.0.5-4.el6 @saltstack/6.7
    python-salttesting.noarch 2015.7.10-1.el6 epel-archive
    salt-api.noarch 0.8.2-0.el6 epel-archive
    salt-cloud.noarch 0.8.8-1.el6 epel-archive

    注意切成 archive.repo.saltproject.io 后再安装.
    我这里之前安装过老版本salt-minion,现升级为3000.5,之前版本都有些安全漏洞.

    yum clean expire-cache

    yum install salt-master

    Installing:
    salt-master noarch 3000.5-1.el6 saltstack-repo 3.0 M
    Installing for dependencies:
    PyYAML27 x86_64 3.11-3.el6 saltstack-repo 152 k
    python27 x86_64 2.7.13-3.ius.el6 saltstack-repo 82 k
    python27-babel noarch 0.9.4-5.3.el6 saltstack-repo 1.4 M
    python27-backports x86_64 1.0-7.el6 saltstack-repo 5.1 k
    python27-backports-ssl_match_hostname noarch 3.4.0.2-4.el6 saltstack-repo 11 k
    python27-backports_abc noarch 0.5-11.el6 saltstack-repo 15 k
    python27-chardet noarch 3.0.4-8.el6 saltstack-repo 188 k
    python27-crypto x86_64 2.6.1-5.el6 saltstack-repo 501 k
    python27-futures noarch 3.0.3-3.el6 saltstack-repo 27 k
    python27-idna noarch 2.7-4.el6 saltstack-repo 102 k
    python27-ipaddress noarch 1.0.18-6.el6 saltstack-repo 36 k
    python27-jinja2 noarch 2.8.1-3.el6 saltstack-repo 284 k
    python27-libs x86_64 2.7.13-3.ius.el6 saltstack-repo 5.6 M
    python27-markupsafe x86_64 0.11-12.el6 saltstack-repo 24 k
    python27-msgpack x86_64 0.6.2-2.el6 saltstack-repo 83 k
    python27-psutil x86_64 5.4.2-1.ius.el6 saltstack-repo 383 k
    python27-pycurl x86_64 7.19.0-11.el6 saltstack-repo 76 k
    python27-pysocks noarch 1.6.8-7.el6 saltstack-repo 30 k
    python27-requests noarch 2.20.1-3.el6 saltstack-repo 120 k
    python27-setuptools noarch 36.6.0-1.ius.el6 saltstack-repo 605 k
    python27-singledispatch noarch 3.4.0.3-16.el6 saltstack-repo 19 k
    python27-six noarch 1.9.0-4.el6 saltstack-repo 29 k
    python27-urllib3 noarch 1.23-6.el6 saltstack-repo 180 k
    python27-zmq x86_64 14.5.0-4.el6 saltstack-repo 478 k
    Updating for dependencies:
    salt noarch 3000.5-1.el6 saltstack-repo 11 M
    salt-minion noarch 3000.5-1.el6 saltstack-repo 40 k

    Transaction Summary

    Install 25 Package(s)
    Upgrade 2 Package(s)

    Total download size: 24 M
    Is this ok [y/N]:

    以下可装可不装
    yum install salt-ssh
    yum install salt-syndic
    yum install salt-cloud
    yum install salt-api

    master只监听内网

    
    #手动编辑 vi /etc/salt/master
    #interface: 192.168.0.11
    #sed -i 's/#interface: 0.0.0.0/interface: 192.168.0.11/g' /etc/salt/master 
    echo 'interface: 192.168.0.11' >> /etc/salt/master 
    

    iptables开放内网端口4505和4506
    iptables -A INPUT -p tcp -m tcp -s 192.168.0.0/24 -m multiport –dports 4505,4506 -j ACCEPT
    /etc/init.d/iptables save

    启动
    /etc/init.d/salt-master start

    开机启动
    chkconfig salt-master on
    chkconfig –list salt-master

    查看当前salt版本
    salt –version
    salt 3000.5

    查看当前salt组件版本
    salt –versions-report
    Salt Version:
    Salt: 3000.5

    Dependency Versions:
    cffi: Not Installed
    cherrypy: Not Installed
    dateutil: Not Installed
    docker-py: Not Installed
    gitdb: Not Installed
    gitpython: Not Installed
    Jinja2: 2.8.1
    libgit2: Not Installed
    M2Crypto: Not Installed
    Mako: Not Installed
    msgpack-pure: Not Installed
    msgpack-python: 0.6.2
    mysql-python: Not Installed
    pycparser: Not Installed
    pycrypto: 2.6.1
    pycryptodome: Not Installed
    pygit2: Not Installed
    Python: 2.7.13 (default, May 8 2020, 22:36:22)
    python-gnupg: Not Installed
    PyYAML: 3.11
    PyZMQ: 14.5.0
    smmap: Not Installed
    timelib: Not Installed
    Tornado: 4.5.3
    ZMQ: 4.0.5

    System Versions:
    dist: centos 6.7 Final
    locale: UTF-8
    machine: x86_64
    release: 2.6———.el6.x86_64
    system: Linux
    version: CentOS 6.7 Final

    3.安装 minion 端

    在minion机
    配置yum源
    wget -O /etc/yum.repos.d/salt.repo https://archive.repo.saltproject.io/yum/redhat/6/x86_64/saltstack-rhel6.repo
    sed -i ‘s/repo.saltstack.com/archive.repo.saltproject.io/g’ /etc/yum.repos.d/salt.repo

    yum list |grep salt

    修复[Errno 14]ssl错误
    Loading mirror speeds from cached hostfile
    https://archive.repo.saltproject.io/yum/redhat/6/x86_64/latest/repodata/repomd.xml: [Errno 14] problem making ssl connection
    Trying other mirror.
    关闭salt源,修改salt.repo
    将里面的enabled=1改成enabled=0
    sed -i ‘s/enabled=1/enabled=0/g’ /etc/yum.repos.d/salt.repo
    sed -n ‘/^enabled=/p’ /etc/yum.repos.d/salt.repo

    yum -y install ca-certificates
    yum -y update curl nss
    如果还不行,那需要升级openssl等组件或者换个非https的源

    再次打开salt源
    sed -i ‘s/enabled=0/enabled=1/g’ /etc/yum.repos.d/salt.repo
    sed -n ‘/^enabled=/p’ /etc/yum.repos.d/salt.repo

    安装 salt-minion

    备份原配置文件,如果有的话
    mv /etc/salt/minion /etc/salt/minion.2016.bak

    yum clean expire-cache
    yum -y install salt-minion

    Dependencies Resolved

    Package Arch Version Repository Size

    Installing:
    salt-minion noarch 3000.5-1.el6 saltstack-repo 40 k
    Installing for dependencies:
    PyYAML27 x86_64 3.11-3.el6 saltstack-repo 152 k
    libyaml x86_64 0.1.3-4.el6_6 os 52 k
    python27 x86_64 2.7.13-3.ius.el6 saltstack-repo 82 k
    python27-babel noarch 0.9.4-5.3.el6 saltstack-repo 1.4 M
    python27-backports x86_64 1.0-7.el6 saltstack-repo 5.1 k
    python27-backports-ssl_match_hostname noarch 3.4.0.2-4.el6 saltstack-repo 11 k
    python27-backports_abc noarch 0.5-11.el6 saltstack-repo 15 k
    python27-chardet noarch 3.0.4-8.el6 saltstack-repo 188 k
    python27-crypto x86_64 2.6.1-5.el6 saltstack-repo 501 k
    python27-futures noarch 3.0.3-3.el6 saltstack-repo 27 k
    python27-idna noarch 2.7-4.el6 saltstack-repo 102 k
    python27-ipaddress noarch 1.0.18-6.el6 saltstack-repo 36 k
    python27-jinja2 noarch 2.8.1-3.el6 saltstack-repo 284 k
    python27-libs x86_64 2.7.13-3.ius.el6 saltstack-repo 5.6 M
    python27-markupsafe x86_64 0.11-12.el6 saltstack-repo 24 k
    python27-msgpack x86_64 0.6.2-2.el6 saltstack-repo 83 k
    python27-psutil x86_64 5.4.2-1.ius.el6 saltstack-repo 383 k
    python27-pycurl x86_64 7.19.0-11.el6 saltstack-repo 76 k
    python27-pysocks noarch 1.6.8-7.el6 saltstack-repo 30 k
    python27-requests noarch 2.20.1-3.el6 saltstack-repo 120 k
    python27-setuptools noarch 36.6.0-1.ius.el6 saltstack-repo 605 k
    python27-singledispatch noarch 3.4.0.3-16.el6 saltstack-repo 19 k
    python27-six noarch 1.9.0-4.el6 saltstack-repo 29 k
    python27-urllib3 noarch 1.23-6.el6 saltstack-repo 180 k
    python27-zmq x86_64 14.5.0-4.el6 saltstack-repo 478 k
    salt noarch 3000.5-1.el6 saltstack-repo 11 M
    zeromq x86_64 4.0.5-4.el6 saltstack-repo 568 k

    Transaction Summary

    Install 28 Package(s)

    Total download size: 22 M
    Installed size: 99 M
    Is this ok [y/N]:

    指定 master 的ip地址

    
    #替换#master: salt
    #sed -i 's/#master: salt/master: 192.168.0.11/g' /etc/salt/minion 
    #sed -i 's/master: 192.168.4.138/master: 192.168.0.56/g' /etc/salt/minion 
    

    推荐在尾部添加
    echo ‘master: 192.168.0.56’ >> /etc/salt/minion
    echo ‘environment: prd’ >> /etc/salt/minion
    echo ‘hash_type: sha256’ >> /etc/salt/minion

    再次确认master ip地址
    sed -n ‘/^master:/p’ /etc/salt/minion
    master: 192.168.0.11

    指定minion的id
    id默认为hostname,如需修改可以编辑minion配置文件的#id:
    sed -i ‘s/^#id:/id: c1g-w32/g’ /etc/salt/minion #注意id:后的空格

    推荐直接编辑id文件
    echo hostname >/etc/salt/minion_id

    查看当前版本
    salt-minion –version
    salt-minion 3000.5

    启动服务
    /etc/init.d/salt-minion start
    Starting salt-minion:root:c1g-w32 daemon: OK

    开机启动
    chkconfig salt-minion on
    chkconfig –list salt-minion

    关闭服务
    /etc/init.d/salt-minion stop

    查看当前id
    cat /etc/salt/minion_id

    如id错误,修改当前id
    echo ‘c1g-w32’ >/etc/salt/minion_id

    4.C/S认证

    在master机
    salt-key 密钥管理

    salt-key -L 查看当前需要接受的keys(master和minions都需要把服务开启)。
    //salt-key常用选项
    -L //列出所有公钥信息
    -a minion //接受指定minion等待认证的key
    -A //接受所有minion等待认证的key
    -r minion //拒绝指定minion等待认证的key
    -R //拒绝所有minion等待认证的key
    -f minion //显示指定key的指纹信息
    -F //显示所有key的指纹信息
    -d minion //删除指定minion的key
    -D //删除所有minion的key
    -y //自动回答yes

    查看当前证书情况
    salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    c1g-w32
    Rejected Keys:

    单独接受c1g-w32
    salt-key -ya c1g-w32

    The following keys are going to be accepted:
    Unaccepted Keys:
    c1g-w32
    Key for minion c1g-w32 accepted.

    再次查看
    salt-key -L
    Accepted Keys:
    c1g-w32
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:

    接受所有的minion证书
    salt-key -yA

    5.远程命令执行

    测试master和minion之间的通信是否正常
    salt “c1g-w32” test.ping
    c1g-w32:
    True

    salt “*” test.ping
    c1g-w32:
    True

    salt ‘*’ cmd.run ‘df -h’

    salt ‘*’ cmd.run ‘yum -y install tree’

    三.SaltStack 相关命令

    1.在master上配置nodegroup

    1.在/etc/salt/master的最下面加上default_include
    echo ‘default_include: master.d/*.conf’ >> /etc/salt/master

    2.编辑组
    不要用I@ 会匹配不到
    vim /etc/salt/master.d/group.conf
    nodegroups:
    proxy: ‘E@c1g-w0[1-7]’
    nginx: ‘E@c1g-w0[8-9] or E@c1g-w[1][0-9] or E@c1g-w2[0-3] or E@c1g-w3[3-6] or L@c1g-w31’
    bak: ‘L@c1g-w37’
    manage: ‘E@c1g-w2[4-8] or E@c1g-w3[0-2]’

    无需重启

    3.测试组
    salt -N proxy test.version
    salt -N nginx test.version
    c1g-w35:
    3000.5
    c1g-w36:
    3000.5

    salt命令使用

    salt远程执行命令
    //语法:salt [options] ” [arguments]

    //常用的options
    –version //查看saltstack的版本号
    –versions-report //查看saltstack以及依赖包的版本号
    -h //查看帮助信息
    -c CONFIG_DIR //指定配置文件目录(默认为/etc/salt/)
    -t TIMEOUT //指定超时时间(默认是5s)
    –async //异步执行
    -v //verbose模式,详细显示执行过程
    –username=USERNAME //指定外部认证用户名
    –password=PASSWORD //指定外部认证密码
    –log-file=LOG_FILE //指定日志记录文件

    //常用target参数
    -E //正则匹配
    -L //列表匹配
    -S //CIDR匹配网段
    -G //grains匹配
    –grain-pcre //grains加正则匹配
    -N //组匹配
    -R //范围匹配
    -C //综合匹配(指定多个匹配)
    -I //pillar值匹配

    查看所有的function:
    salt “c1g-w32” sys.doc cmd

    默认的规则是使用glob匹配minion id
    salt ‘‘ test.ping salt ‘node‘ test.ping
    正则表达式
    salt ‘node[1|2]’ test.ping
    salt ‘node[!2]’ test.ping
    salt -E ‘server[1-3]’ test.ping
    salt -E ‘node(1|2)’ test.ping
    指定列表
    salt -L ‘server2,server3’ test.ping
    指定ip
    salt -S ‘192.168.0.13’ test.ping
    指定ip段
    salt -S ‘192.168.0.0/24’ test.ping

    测试
    salt ‘*’ test.echo ‘hello’

    网络
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.network.html
    salt ‘‘ network.ping baidu.com # 使用ping命令测试到某主机的连通性 salt ‘‘ network.connect baidu.com 80 # #测试minion至某一台服务器的网络是否连通
    salt ‘‘ network.default_route #查看默认路由 network.get_route #查询到一个目标网络的路由信息 network.netstat #返回所有打开的端口和状态 network.routes #返回当前路由表 salt ‘‘ network.get_hostname # 获取主机名
    salt ‘‘ network.active_tcp # 返回所有活动的tcp连接 salt ‘‘ network.ip_addrs # 返回一个IPv4的地址列表
    salt ‘‘ network.get_fqdn # 查看主机的fqdn(完全限定域名) salt ‘‘ network.interfaces

    salt ‘‘ service.available sshd # 查看ssh服务是否可达 salt ‘‘ service.get_all # 查看所有启动的服务
    salt ‘‘ service.status nginx # 查看指定服务是否在线 salt ‘‘ state.show_top # 查看top_file情况
    salt ‘*’ disk.usage

    查看进程
    salt c1g-w01 cmd.run ‘ps aux|grep titanagent’
    c1g-w01:

    查看chconfig zabbix是否开启
    salt ‘c1g-w01’ cmd.run ‘chkconfig –list|grep zabbix_agentd’
    salt -N bak cmd.run ‘chkconfig –list|grep zabbix_agentd’
    salt ‘*’ cmd.run ‘chkconfig –list|grep zabbix_agentd’

    salt-run
    salt-run [options] [runner.func]
    salt-run manage.status ##查看所有minion状态
    salt-run manage.down ##查看所有没在线minion
    salt-run manged.up ##查看所有在线minion

    salt-call
    该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job
    salt-call [options] [arguments]
    salt-call test.ping ##自己执行test.ping命令
    salt-call cmd.run ‘ifconfig’ ##自己执行cmd.run函数

    文件分发salt-cp
    salt-cp命令用于复制一个文件到多个minion系统中。指定minion可以使用通配符、正则表达式、Grains等方法
    分发文件到minion上,不支持目录分发,通常在master运行
    salt-cp [options] ” SOURCE DEST
    salt-cp ‘‘ testfile.html /tmp salt-cp ‘node‘ /opt/index.html /tmp/a.html

    salt-cp ‘*’ /etc/hosts /etc #不用创建上面的sls即可实现(不建议此方法)

    更新nginx 的nginx.conf

    salt-cp ‘c1g-w3’ /srv/salt/prd/server/c1g-w3/opt/nginx/conf/nginx.conf /opt/nginx/conf/

    salt ‘c1g-w3’ cmd.run ‘/opt/nginx/sbin/nginx -t’
    salt ‘c1g-w3’ cmd.run ‘/opt/nginx/sbin/nginx -s reload’

    Saltstack配置管理

    修改file_root文件目录
    文件件中的flie_roots选项管理。Salt文件服务器的默认环境为为base环境,base环境必须定义,因为
    当环境没有明确指定时,文件下载就是从base环境中去找的。其配置如下:
    文件服务器在给minions传输文件时,是有搜索顺序的。配置说明:如果文件URL为:salt://httpd/httpd.conf。那么传输文件时,先搜
    索/srv/salt/base/httpd/httpd.conf,如果找到了,则下载;否则就使用 /srv/salt/failover/httpd/httpd.conf

    注意:
    如果minion里定义了environment,那么master里也要有对应的environment

    echo ‘environment: prd’ >> /etc/salt/minion

    否则出会现以下环境对不上的错误
    No matching salt environment for environment ‘prd’ found

    vim /etc/salt/master
    file_roots:
    base:
    – /srv/salt/base
    – /srv/salt/failover
    dev:
    – /srv/salt/dev
    – /srv/salt/base
    prd:
    – /srv/salt/prd
    – /srv/salt/base

    创建文件目录
    mkdir /srv/{salt,pillar}
    mkdir -p /srv/salt/{base,dev,prd,failover}/init/files

    编写.sls文件
    sls文件是YAML语言来进行描述的,请遵循YAML语法规范

    Online YAML Parser: Convert YAML to JSON or Python data structures.
    https://yaml-online-parser.appspot.com/

    The Official YAML Specification
    https://yaml.org/spec/1.2.2/
    WHAT IS YAML
    https://docs.saltproject.io/en/latest/topics/yaml/index.html

    规则一: 缩进
    Salt需要每个缩进级别由两个空格组成,不要使用tabs。
    如果你遇到“rendering sls files errors”等错误,请检查你的sls文件,确保没有Tab等非法符合

    规则二: 冒号
    字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。
    my_key: my_value

    映射到Python里面就是:
    {‘my_key’: ‘my_value’}
    不常见,通常情况下,一个key的value不是单一的,而是一个 列表 的values

    规则三: 短横杠
    想要表示列表项,使用一个短横杠加一个空格。
    key:

    • v1
    • v2
    • v3

    映射到Python里面就是:
    {‘key’: [v1,v2,v3]}
    这个在Salt很常见.

    规则四: 嵌套
    基本遵循2个空格的缩进,只有定义context,defaults选项的时候才使用四个空格作为缩进。用大括号的除外。

    批量修改/etc/resolv.conf文件示例
    file.manage
    https://docs.saltproject.io/en/latest/ref/states/all/salt.states.file.html#salt.states.file.managed
    cd /srv/salt/base
    vim init/dns.sls
    /etc/resolv.conf: #标签
    file.managed: #状态模块file的mamaged方法,用以实现
    – source: salt://init/files/resolv.conf #源文件resolv.conf
    – user: root #文件用户属主
    – group: root #文件数组
    – mode: 644 #文件权限

    init/files/resolv.conf 
    # Generated by NetworkManager
    nameserver 192.168.0.11
    nameserver 114.114.114.114
    

    top.sls文件是必需的
    vim top.sls
    base:
    ‘‘: – dns dev: ‘‘:
    – dns
    prd:
    ‘*’:
    – dns

    重启服务
    /etc/init.d/salt-master restart

    执行dns状态文件
    salt ‘c1g-w02’ state.sls init.dns

    c1g-w02:
    ----------
              ID: /etc/resolv.conf
        Function: file.managed
          Result: True
         Comment: File /etc/resolv.conf updated
         Started: 14:36:30.204689
        Duration: 70.436 ms
         Changes:   
                  ----------
                  diff:
                      --- 
                      +++ 
                      @@ -1,4 +1,4 @@
                      -; generated by /sbin/dhclient-script
                      +# Generated by NetworkManager
                       nameserver 192.168.0.11
                       nameserver 114.114.114.114
                      +
    
    Summary for c1g-w02
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    Total run time:  70.436 ms
    

    指定环境运行
    salt -N bak state.sls saltenv=’prd’ init.dns

    state高级状态默认从top文件中执行
    salt ‘c1g-w03’ state.highstate

    常用文档地址
    grains
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.grains.html
    user.list_users
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.useradd.html#salt.modules.useradd.list_users
    SALT.MODULES.CP
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.cp.html
    SALT.MODULES.CP
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.cron.html#module-salt.modules.cron
    SALT.MODULES.DISK
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.disk.html
    SALT.MODULES.DNSMASQ
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.dnsmasq.html
    SALT.MODULES.ELASTICSEARCH
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.elasticsearch.html
    SALT.MODULES.ETHTOOL
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.ethtool.html
    SALT.MODULES.FILE
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.file.html
    SALT.MODULES.HOSTS
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.hosts.html
    SALT.MODULES.HTTP
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.http.html
    SALT.MODULES.IPTABLES
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.iptables.html
    SALT.MODULES.LINUX_IP
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.linux_ip.html
    SALT.MODULES.LINUX_LVM

    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.linux_lvm.html
    SALT.MODULES.LINUX_SERVICE
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.linux_service.html
    SALT.MODULES.LOCALEMOD
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.localemod.html

    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.logrotate.html

    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.memcached.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.minion.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.network.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.nginx.html#

    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.pillar.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.rabbitmq.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.redismod.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.rsync.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.saltcheck.html#
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.saltutil.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.schedule.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.scp_mod.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.selinux.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.splunk.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.ssh.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.ssh_service.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.status.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.svn.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.system.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.timezone.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.useradd.html
    https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.varnish.html

    参考:
    https://www.cnblogs.com/0x00000/p/5790918.html
    https://tsov.net/uupee/23010/
    https://www.jianshu.com/p/9fc253c35189

    The post 自动化运维工具SaltStack安装 first appeared on C1G军火库.



沪ICP备19023445号-2号
友情链接