Jusene's Blog

Saltstack 学习笔记(一)

字数统计: 1.1k阅读时长: 5 min
2018/04/24 Share

SaltStack基本架构

  • 第一种: master-minion,这种架构master和所有minion都直接连接,minion接受来自master的指令,完成命令执行或配置管理。
  • 第二种: master-syndic-minion,这种架构中master通过sydic对minion进行管理,可以进行多级扩展。
  • 第三种: 无master的minion,这种架构中minion不受任何master控制,通过本地运行即可完成相关工作。

    安装Saltstack

1
~]# yum install -y salt-master
2
~}# yum install -y salt-minion

Salt master启动默认会监听两个端口,4505(publish port)提供远程执行命令发送功能,4506( ret port)为Salt Master Ret接口,支持认证,文件服务,结果收集等功能。

Salt master的配置文件是/etc/salt/master,Salt minion的配置文件是/etc/salt/minion

配置salt-master和salt-minion,在/etc/salt/minion的配置中master: masterid: minion-one

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

salt-master

1
~]# salt-key -L  #查看key
2
~]# salt-key -f minion- one  #查看秘钥的指纹码,确保与minion相互匹配

salt-minion

1
~]# salt-call --local key.finger  #查看秘钥指纹码

salt-master

1
~]# salt-key -a monion-one    #master接受该秘钥
2
~]# salt-key -L

对于很多minion的情况下,可以在/etc/salt/master配置文件中自动接受key:

1
auto_accept: True

相关命令

1
~]# salt '*' test.ping    #探测主机是否存活
2
~]# salt '*' sys.list_functions test   #列出test模块包含的其他函数
3
~]# salt '*' sys.doc test.echo   #获得函数的用法
4
~]# salt '*' sys.list_modules    #列出所以模块

目标定位字符串:

  • 正则匹配: salt -E “^minion-.*” test.ping
  • 列表匹配: salt -L ‘minion-one,minion-two’ test.ping
  • 分组匹配: salt -N minions test.ping minions写在master的配置文件中
  • Grains匹配: salt -G ‘os:CentOS’ test.ping
  • Pillars匹配: salt -I ‘role:web’ test.ping
  • 复合匹配: salt -C ‘minion-* and G@os:CentOS not E@.*-two$’ test.ping
  • Grains PCRE: salt -P ‘os:(RedHat|Fedora|CentOS)’ test.ping
  • subnet address: salt -S ‘192.168.1.0/24’ test.ping

自定义granins:

1
~]# salt 'minion-one' grains.setval cpu_num 8
2
~]# salt 'minion-one' grains.items    # 查看全部grains的值
3
~]# salt 'minion-one' grains.item os  # 查看特定grains的值
4
~]# vim /etc/salt/grains  #写在minion的服务器,重启也将生效
5
cpu_num: 8
6
~]# salt 'minion-one' grains.delval cpu_num
7
``` 
8
9
自定义pillars:
10
```bash
11
~]# salt 'minion-one' pillar.items   #查看全部pillars的值
12
~]# salt 'minion-one' pillar.item role  #查看单个数据的命令
  • 远程命令执行模块
    1
    ~]# salt '*' cmd.run "ps aux|wc -l"
    2
    ~]# salt '*' cmd.run_all "ps aux|wc -l" #更详细的信息
  • 安装包管理
    1
    ~]# salt '*' pkg.install "httpd"
    2
    ~]# salt '*' pkg.version "httpd"
    3
    ~]# salt '*' pkg.remove "httpd"
  • 管理服务模块
    1
    ~]# salt '*' service.status httpd
    2
    ~]# salt '*' service.start httpd
    3
    ~]# salt '*' service.stop httpd
  • 文件管理模块
    1
    ~]# salt '*' file.stats /etc/fstab
    2
    ~]# salt '*' file.chown /etc/fstab root root
  • 用户管理模块
    1
    ~]# salt '*' user.add name <uid> <gid> <groups> <home> <shell>
    2
    ~]# salt '*' user.delete name
    3
    ~}# salt '*' user.info root

state模块

1
~]# salt '*' pkg.install "httpd"
2
state状态
3
~]# vim apache.sls
4
install_httpd;
5
   pkg.installed:
6
      - name: httpd
7
~]# salt '*' state.sls apache

执行模块和状态模块,之间的主要区别,执行模块的是过程式的,而状态模块则是描述性的,即执行模块在目标主机执行相同的逻辑和指令,而描述模块只是进行必要的工作,使minion上达到指定的状态。

常用的状态模块用法

1
~]# salt '*' sys.list_state_modules   #列出所有状态模块
2
~]# salt '*' sys.list_state_functions pkg  #列出指定模块的函数用法
3
~]# salt '*' sys.state_doc file.managed
  • file模块
    下发文件

    1
    /etc/fstab
    2
       file.managed:
    3
         - source:
    4
           - salt: ///etc/fstab
    5
         - user: root
    6
         - group: root
    7
         - mode: 644

    创建目录

    1
    /ops/foo/bar:
    2
       file.directory:
    3
          - user: root
    4
          - group: root
    5
          - mode: 755
    6
          - makedirs: True

    建立软连接

    1
    /etc/grub.conf:
    2
        file.symlink:
    3
           - target: /boot/grub/grub.conf

    下发整个目录

    1
    /opt/code/flask:
    2
       file.recurse:
    3
          - source: salt:///code/flask
    4
          - include_empty: True
  • pkg模块
    软件安装

    1
    pkgs:
    2
        pkg.installed: 
    3
          - pkgs:
    4
            - httpd
    5
            - mysql-server: '=5.6'

    安装rpm包

    1
    pkgs:
    2
        pkg.installed:
    3
          - sources:
    4
            - httpd: salt:///rpms/httpd.rpm
    5
            - mysqd: http://rpms.com/mysqld.rpm
    6
            - wget: ftp://frp.com/wget.rpm
    7
            - qax: /rpms/qax.rpm
  • service模块
    启动redis服务

    1
    redis:
    2
      service.running:
    3
        - enable: True
    4
        - reload: True
    5
        - watch:
    6
          - pkg: redis
  • cron模块

    1
    date > /tmp/crondtest:
    2
        cron.present:
    3
           - user: root
    4
           - minute: '*/5'
  • user模块

    1
    user.present:
    2
        - fullname: jusene
    3
        - shell: /bin/bash
    4
        - home: /home/jusene
    5
        - uid: 4000
    6
        - gid: 4000
    7
        - groups:
    8
          - wheel
  • sysctl模块

    1
    vm.swappiness:
    2
       sysctl.present:
    3
          - value: 0
  • pip模块

    1
    django:
    2
        pip.installed:
    3
           - name: django >= 2.0
    4
           - require:
    5
             - pkg: python-pip

使用requisites对状态进行排序

通过require指定执行顺序,通过watch指定当改变时触发,这两个可以完成却大多数的顺序控制。

CATALOG
  1. 1. SaltStack基本架构
  2. 2. 安装Saltstack
  3. 3. 相关命令
  4. 4. state模块
    1. 4.1. 常用的状态模块用法
    2. 4.2. 使用requisites对状态进行排序