• Saltstack入门


    saltstack主要的用途

    • 远程执行命令
    • 配置管理
    • 主机信息管理

    saltstack安装

    1. 使用pip安装 (目前saltstack只支持py2)
    2. 使用系统的包管理安装,如yum,apt-get,zypper等
    3. 源码安装

    推荐使用系统的包管理安装,我使用的是opensuse,因此使用zypper安装。服务端安装salt-master,客户端安装salt-minion

    saltstack启动

    1. 服务端启动,修改/etc/salt/master文件,将interface(服务端监听ip)设置成服务端的Ip,然后执行systemctl start salt-master
    2. 修改客户端的/etc/salt/minion,将master改成服务端的主机名或ip,然后执行systemctl start salt-minion

    saltstack认证

    1. 当salt-minion启动后,客户端会生成公钥(minion.pub)和私钥(minion.pem),然后将公钥发送给服务端
    2. 服务端收到客户端发送的公钥后,可以使用salt-key -L 查看所有的Key。
    3. 使用salt-key -a接受客户端发送的key(指定主机名),也可以使用salt-key -A接受所有的key,接着就可以对客户端发送指令了。
    4. 测试 salt "*" test.ping,如果所有主机都返回true,则没有问题

    salt命令使用

    salt "目标" 模块.方法

    目标(target)

    1. *代表所有的主机
    2. 'shell正则',如

    'node*.example.com'
    3. pcre正则,使用时,需要加上-E参数 如

    -E 'node(1|2).exaple.com'
    4. Group,在/etc/salt/master中定义group,使用时加上-N参数,如

    -N 'group1'
    5. list,通过逗号分隔的列表来指定多个minion,列表中的项不使用正则或pcre正则。使用-L,如

    -L 'node1.example.com,node2.exaple.com'
    6. subnet,通过指定一个ipv4或一个CIDR的Ipv4子网列表来指定目标。如

    -S '192.168.1.0/24'
    7. grains。minion在启动的时候会收集机器的cpu架构、主机名、操作系统等机器信息,这些信息称为grains,grians是键值对,因此键名和键值都要指定,通过冒号进行分隔。如

    -G 'os:Ubuntu'
    8. pillar。pillar的内容在下面会进行具体介绍,先认为它和grains一样即可。

    -I 'my_var: my_value'
    9. 混合。混合目标允许一个命令中指定多种类型,想指定其他类型,则需要在前面追加类型简单和@符号。如

    -C 'G@os:ubuntu,E@node(1|2).example.com,S@192.168.1.0/24'

    模块方法

    指定target后,接下来需要声明需要运行的方法。在测试过程中使用了test.ping方法,当然也可以指定其他方法。方法包含两部分:通过.来分隔

    Modeule.func

    在salt命令中,模块方法紧跟target,也可以在最后给方法加上参数

    salt 'target' Module.func [args]

    一些常用的模块方法

    • pkg.install
    • file.manager
    • service.running

    还有很多,具体可以查阅saltstack官方文档

    Grain

    grain会在minion进行启动时进行加载,并缓存在内存中。
    查看Minion中都有哪些Grain数据

    salt '*' grains.items

    想查看某个特定的grain,可以将对应的名字当作参数传递给grains.item

    salt '*' grains.item os_family

    也可以自定义grain。在/etc/salt/minion中添加

    grains:
      Foo: bar
      var: value
    
    

    上面这是老版本的配置方法,现在依然可用,但是不建议使用。更常用的方法是将自定义的静态Grain存在一个叫在grain的文件中:/etc/salt/grains,除了不需要grains的声明外,其他和以前的方法一样.

    Foo: bar
    var: value
    

    pillar

    在大多数场景中,pillar和grain是差不多的,但最大的区别就是:pillar是在master上进行定义,而grain是在minion中。

    定义pillar

    1. 修改配置文件/etc/salt/master,
      搜索pillar_roots.这一段定义了环境和他对应的pillar路径。如
    pillar_roots:
        base:
          - /srv/salt/pillar
    

    base就是环境的名称,我们可以定义很多个环境,如开发环境 dev,生产环境 prod等。/srv/pillar是base环境的pillar文件的路径。

    1. 重启master服务

    2. 编辑pillar需要的top.sls文件(yaml格式),如

    base:
        '*':
          - apache
    

    首先声明一个环境,然后是一个target,最后是target需要使用的sls文件
    apache.sls

    port: 80
    
    1. 查看所有的pillar数据

    salt '*' pillar.items

    SLS

    SLS代指salt state,首先要在/etc/salt/master中声明SLS的环境和环境所对应的路径,默认在/srv/salt。然后在/srv/salt下要声明一个top.sls文件,用于将SLS拉在一起并指定在哪个环境下为哪些Minion提供SLS文件。如

    base:
      '*':
        - apache
        - nginx
    dev:
      'node1.example.com':
        - haproxy
        - keepalived
    

    在这个top.sls中,声明了两个环境 ,base和dev。base指定所有的Minion执行apache和nginx的state,dev指定node1执行haproxy和keepalived的state。

    SLS目录组织

    SLS的文件名可以是top.sls中指定的文件名,如apache.sls、nginx.sls等;也可以是init.sls,但是要放在State的目录下,如apache/init.sls、nginx/init.sls。

    使用SLS进行配置管理

    在SLS文件中,第个小节的Key称为ID,如果小节中没有显示声明name属性,那么ID会作为name。ID必须全局唯一

    httpd:
      pkg:
        - installed
    httpd-conf:
      file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://files/httpd.conf
        - user :root
        - group: root
    

    上面定义了两个小节,首先安装httpd这个包,因为没有显示的声明name,所有httpd即是ID,也是name;接着将/srv/salt/files/httpd.conf复制到minion下的/etc/httpd/conf/httpd.conf,并设置用户和组。这里显示的声明了ID:httpd-conf。salt://files/httpd.conf代表在当前环境下的files目录下的httpd.conf

    执行SLS

    salt '*' state.highstate

    这条命令执行/srv/salt/top.sls和他里面定义的所有SLS

    SLS进阶

    1. 使用依赖.
    httpd-conf:
        file.managed:
          - name: /etc/httpd/conf/httpd.conf
          - source: salt://files/httpd.conf
          - require:
            - pkg: httpd
    httpd:
        pkg:
          - install
    

    在复制配置文件之前,需要前安装httpd

    1. watch。在上面的例子中,httpd在第一次执行后就己经安装,如果之后配置又发生了变更,httpd需要重启才行,而watch可以监控文件是否发生变化,如果发生变化可以自动重启或reload
    service.running:
        - name: httpd
        - require:
          - pkg: httpd
        - watch:
          - file: httpd-conf
        - reload: True
    

    这一段中监控httpd-conf这个ID下的file。

    1. unless。只有当条件不成立时,才会执行name指向的命令
    nginx-source-install:
      cmd.run:
        - name: ./configure && make && make install
        - unless: test -d /usr/local/nginx
    

    当/usr/local/nginx这个目录不存在时,才会执行name指向的命令

    1. include,引用其他的SLS文件
    include:
      - apache
      - nginx
    
  • 相关阅读:
    Appium入坑前必看,附爬虫心得
    app爬虫神器--mitmproxy,mitmdump和appium的安装使用
    小米手机安装charles 证书 无法安装证书,与iphone的unkown,无法联网问题
    mac安装于启动Grafana
    charles单单抓不到google beowser的包
    charles Failed to install helper
    常规反爬复习总结
    FakeUserAgentError('Maximum amount of retries reached') 解决办法
    Java--Set的三个具体实现类
    Java集合--接口
  • 原文地址:https://www.cnblogs.com/baitutu/p/7138843.html
Copyright © 2020-2023  润新知