SaltStack配置管理

    States是SaltStack中的配置语言,在平常进行配置管理时须要编写大量的States文件。好比咱们须要安装一个包,而后管理一个配置文件,最后保证某个服务正常运行。前端

    1.查看全部states列表web

# 要查看Minion支持的全部states列表
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_state_modules
salt-minion-1:
    - acl
    - alias
    - alternatives
    - archive
    - artifactory
    - at
    - augeas
    - blockdev
    - buildout
    - cloud
    - cmd
    - composer
    - cron
    - disk
    - environ
    - event
    - file
    - gem
    - gnomedesktop
    - grafana
    - grains
    - group
    - hipchat
    - host
    - http
    - incron
    - ini
    - iptables
    - jboss7
    - keyboard
    - kmod
    - libvirt
    - locale
    - lvm
    - lxc
    - modjk
    - modjk_worker
    - module
    - mongodb_database
    - mount
    - network
    - openstack_config
    - pagerduty
    - pip
    - pkg
    - pkgng
    - pkgrepo
    - powerpath
    - pyenv
    - quota
    - rbenv
    - rvm
    - salt
    - schedule
    - serverdensity_device
    - service
    - slack
    - smtp
    - ssh_auth
    - ssh_known_hosts
    - stateconf
    - status
    - supervisord
    - sysctl
    - syslog_ng
    - test
    - timezone
    - user
    - vbox_guest
    - virtualenv
    - winrepo

    2.查看指定States的全部functionsql

# 查看file.states的全部function
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_state_functions file
salt-minion-1:
    - file.absent
    - file.accumulated
    - file.append
    - file.blockreplace
    - file.comment
    - file.copy
    - file.directory
    - file.exists
    - file.managed
    - file.missing
    - file.mknod
    - file.mod_run_check_cmd
    - file.patch
    - file.prepend
    - file.recurse
    - file.rename
    - file.replace
    - file.serialize
    - file.symlink
    - file.touch
    - file.uncomment
# 指定查看states用法
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.state_doc file
# 查看指定states的指定function用法
[root@salt-master-1 ~]# salt 'salt-minion-1' sys.state_doc file.absent

    3.states的流程mongodb

        编写top.sls文件(非必须)docker

        编写state.sls文件shell

    在大规模的配置管理工做中,咱们须要编写大量的states.sls文件。top.sls是states系统的入口文件,它在大规模配置管理工做中负责指定哪些设备调用哪些states.sls文件。好比咱们维护着一套LAMP架构,咱们编写不少states.sls文件,这个时候我须要一键部署整个LAMP环境,这里就须要states.sls的top.sls入口文件去指定web服务器和DB机器分别起引用哪些states.sls文件。服务器

[root@salt-master-1 ~]# cat /srv/salt/one.sls
/tmp/foo.conf:                                #id
    file.managed:                             #file states 的managed function
        - source: salt://foo.conf             #文件来源
        - user: root                          #文件属主
        - group: root                         #文件属组
        - mode: 644                           #文件属性
        - backup: minion                      #备份原文件
[root@salt-master-1 ~]# echo "SaltStack is good" >> /srv/salt/foo.conf
[root@salt-master-1 ~]# salt 'salt-minion-1' state.sls one
salt-minion-1:
----------
          ID: /tmp/foo.conf
    Function: file.managed
      Result: True
     Comment: File /tmp/foo.conf updated
     Started: 07:40:18.079922
    Duration: 14.378 ms
     Changes:
              ----------
              diff:
                  New file
              mode:
                  0644

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1

    以上列举了对Minion机器的简单文件管理。下面来介绍使用top.sls入口文件同时对多台机器进行一个简单的配置管理。架构

[root@salt-master-1 ~]# cat /srv/salt/top.sls
base:                        # base环境
    '*':                     # Target
        - one                # 引用one.sls或者one/init.sls states文件
    'salt-minion-1':         # Target
        - two                # 引用two.sls或者two/init.sls states文件
    'salt-minion-2':         # Target
        - three              # 引用three.sls或者three/init.sls states文件

    而后咱们新建三个states文件:one.sls、two.sls、three.sls,最后咱们就可使用state.highstate命令同时对salt-minion-1和salt-minion-2两台机器进行配置管理。app

    4.执行结果处理composer

    Return组件能够理解为SaltStack系统对执行Minion返回后的数据进行存储或者返回给其它程序,它支持多种存储方式,好比用Mysql、Mongodb、Redis等,经过Return咱们能够对SaltStack的每次记录进行操做记录,对之后日志审计提供数据来源。

[root@salt-master-1 ~]# salt 'salt-minion-1' sys.list_returners
salt-minion-1:
    - carbon
    - couchdb
    - etcd
    - hipchat
    - local
    - local_cache
    - multi_returner
    - slack
    - smtp
    - sqlite3
    - syslog

    Return流程:Return是在Master端触发任务,而后Minion接受处理任务后直接与Return存储服务器创建链接,而后把数据Return到存储服务器。关于这点,要注意整个过程都是Minion端操做存储服务器,因此要确保Minion端的配置跟依赖包是正确的。

    5.jobs

    在SaltStack里面执行任何一个操做都会在Master上产生一个jid号。Minion端会cache目录下的proc目录建立一个以jid为名称的文件,这个文件里面的内容就是这次操做的记录,当操做处理完成后该文件会自动删除。而Master端会记录每次操做的详细信息,这个记录都是存到在Master端cache目录下jobs下。下面经过实例了解平常job管理,目前SaltStack提供salt-run跟module两种方式来管理job

    1)经过salt-run来管理job

[root@salt-master-1 ~]# salt-run -d | grep jobs
'jobs.active:'                                      # 查看当前正在运行的jobs
    Return a report on all actively running jobs from a job id centric
        salt-run jobs.active
'jobs.list_job:'                                    # 指定jid查看jobs详细信息
        salt-run jobs.list_job 20130916125524463507
'jobs.list_jobs:'                                   # 查看全部jobs信息
    List all detectable jobs and associated functions
        salt-run jobs.list_jobs
'jobs.lookup_jid:'                                  # 指定jid查询jobs结果
        salt-run jobs.lookup_jid 20130916125524463507
        salt-run jobs.lookup_jid 20130916125524463507 outputter=highstate
'jobs.print_job:'                                   # 指定jid查询jobs详细信息
        salt-run jobs.print_job 20130916125524463507

    2)经过SaltStack Module来管理job

    salt-run对job管理功能比较局限,不支持kill某个job,下面介绍SaltStack自带的Module来管理job

[root@salt-master-1 ~]# salt \* sys.doc saltutil | grep job
'saltutil.find_cached_job:'            # 查询job cache信息
    Return the data for a specific cached job id
        salt '*' saltutil.find_cached_job <job id>
'saltutil.find_job:'                   # 查看job信息
    Return the data for a specific job id
        salt '*' saltutil.find_job <job id>
'saltutil.kill_job:'                   # 杀掉job
    Sends a kill signal (SIGKILL 9) to the named salt job's process
        salt '*' saltutil.kill_job <job id>
        salt '*' saltutil.runner jobs.list_jobs
'saltutil.signal_job:'                 # 发送指定信号
    Sends a signal to the named salt job's process
        salt '*' saltutil.signal_job <job id> 15
'saltutil.term_job:'                   # 删掉job
    Sends a termination signal (SIGTERM 15) to the named salt job's process
        salt '*' saltutil.term_job <job id>

    6.Mine

    Mine是SaltStack收集Minion数据存储到Master的一个组件,它的功能与Grains有些相似,Mine能够指定任何Minion模块去采集数据。可是Master只能存储Minion收集上来的最近一段的数据,Mine的主要应用场景是配合前端负载均衡动态获取Mine汇报信息,来动态生成配置文件。

    例如:官网经过mine.get指定业务设备的网卡地址动态生成haproxy.cfg文件。Mine还支持get docker容器的地址,可简单实现动态添加业务。

    Mine的配置目前支持两种方式,第一种是经过Minion配置文件中定义,另外一种是经过模块的方式去下发Mine采集任务。

相关文章
相关标签/搜索