美高梅开户-美高梅官方网站开户

您的位置:美高梅开户 > 服务器运维 > Saltstack入门教程

Saltstack入门教程

发布时间:2019-08-15 20:27编辑:服务器运维浏览(56)

    Saltstack 快速入门教程,Saltstack入门教程

    查看grains的功能

    ➜ ~ sudo salt "cn1" sys.list_functions pillar 
    cn1: 
      - pillar.data 
      - pillar.ext 
      - pillar.fetch 
      - pillar.file_exists 
      - pillar.get 
      - pillar.item 
      - pillar.items 
      - pillar.keys 
      - pillar.ls 
      - pillar.obfuscate 
      - pillar.raw 
    

    Pillar数据跟特定的Minion关联,可以用来传递Minion自己的信息。管理员也可以自定义自己的pillar来管理minion。

    14.Saltstack 常用命令

    安装saltstack

    4.1 Salt minion配置

    用vi/vim打开/etc/salt/minion,找到配置选项master所在行,一般在第16行。修改内容,去掉#,冒号后有一个空格,将salt更改为master。

    示例操作如下:

    [[email protected] ~]# vi /etc/salt/minion

    [[email protected] ~]# vi /etc/salt/minion

    # Set the location of the salt master server. If the master server cannot be
    # resolved, then the minion will fail to start.
    master: master
    

    如果找不到master对应的行,可以直接在文件尾部添加一行master: mastermaster: 192.168.1.160

    也可以使用sed命令直接修改配置文件

    [[email protected] ~]# sed -i 's/#master: salt/master: 192.168.1.160/g' /etc/salt/minion
    

    使用帮助

    sys.doc 类似于linux的man命令,可以显示minion模块的详细使用说明。如:

    sudo salt ‘qianlnk’ sys.doc test
    

    查看minion qianlnk上test模块的更多信息。

    10.states文件

    salt states的核心是sls文件,该文件使用YAML语法定义了一些k/v的数据。

    sls文件存放根路径在master配置文件中定义,默认为/srv/salt,该目录在操作系统上不存在,需要手动创建。

    在salt中可以通过salt://代替根路径,例如你可以通过salt://top.sls访问/srv/salt/top.sls。

    在states中top文件也由master配置文件定义,默认为top.sls,该文件为states的入口文件。 一个简单的sls文件如下:

    apache:
     pkg.installed
     service.running
       - require:
         - pkg: apache
    

    说明:此SLS数据确保叫做”apache”的软件包(package)已经安装,并且”apache”服务(service)正在运行中。

    • 第一行,被称为ID说明(ID Declaration)。ID说明表明可以操控的名字。
    • 第二行和第四行是State说明(State Declaration),它们分别使用了pkg和service states。pkg state通过系统的包管理其管理关键包,service state管理系统服务(daemon)。 在pkg及service列下边是运行的方法。方法定义包和服务应该怎么做。此处是软件包应该被安装,服务应该处于运行中。
    • 第六行使用require。本方法称为”必须指令”(Requisite Statement),表明只有当apache软件包安装成功时,apache服务才启动起来

    salt-master是通过写sls配置管理minion上重复指令的,服务状态等等。

    salt states的核心是sls文件,该文件使用YAML语法定义了一些k/v的数据。sls文件存放根路径在master配置文件中定义,默认为/srv/salt,该目录在操作系统上不存在,需要手动创建。

    [[email protected] ~]# mkdir -p /srv/salt/base
    

    基本的配置

    文件 /etc/salt/master

    interface: 192.168.199.86
    

    文件 /etc/salt/minion

    master: 192.168.199.86
    id: qianlnk # minion的识别ID,可以是IP,域名,或是可以通过DNS解析的字符串
    

    8.管理对象属性

    Grains是SaltStack组件中非常重要的组件之 一,因为我们在做配置部署的过程中会经常使用 它,Grains是SaltStack记录Minion的一些静态信息 的组件,我们可以简单地理解为Grains里面记录着 每台Minion的一些常用属性,比如CPU、内存、磁 盘、网络信息等,我们可以通过grains.items查看某 台Minion的所有Grains信息,Minions的Grains信息 是Minions启动的时候采集汇报给Master的,在实际 应用环境中我们需要根据自己的业务需求去自定义 一些Grains

    自定义pillar

    在master的sls文件中定义,master配置需要指定pillar的目录。

    pillar_roots: 
      base: 
      - /srv/pillar 
    
    ➜ pillar git:(master) ✗ pwd
    /srv/pillar
    
    ➜ pillar git:(master) ✗ cat top.sls 
    base:
      '*':
      - data
      - git
    
    ➜ pillar git:(master) ✗ cat data/init.sls
    roles: webserver
    ➜ pillar git:(master) ✗ cat git.sls
    {% if grains[‘os’] == ‘CentOs’ %}
    git: git
    {% elif grains[‘os’] == ‘Debian’ %}
    git: git-core
    {% endif %}
    

    默认情况下,master配置文件中的所有数据都会添加到pillar中,且对所有的minion可用。如果要禁止这一个默认值,可以设置master文件中的选项:
    pillar_opts: False

    pillar跟sls一样有自己的top.sls文件作为入口来组织其他的pillar。base中 “×”制定所有minion拥有pillar:mongodb、zookeeper、kafka、supervisor, 然后是各个minion组有自己的init.sls。kafka.sls中定义kafka对应的一些信息。

    修改完pillar文件后需要用以下的命令刷新以下minion的信息:

    ➜ pillar git:(master) ✗ sudo salt 'cn1' saltutil.refresh_pillar 
    cn1: 
      True 
    

    2.准备工作

    准备两台机器,这两台机器都关闭 selinux,清空 iptables 规则并保存。 master:192.168.1.160 slaver:192.168.1.161

    更新软件源

    [[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    [[email protected] ~]# yum makecache fast
    Loaded plugins: fastestmirror
    HuaDongBD                                                                                                                                            | 2.9 kB  00:00:00     
    base                                                                                                                                                 | 3.6 kB  00:00:00     
    extras                                                                                                                                               | 3.4 kB  00:00:00     
    os                                                                                                                                                   | 3.6 kB  00:00:00     
    updates                                                                                                                                              | 3.4 kB  00:00:00     
    updates/7/x86_64/primary_db                                                                                                                          | 7.8 MB  00:00:07     
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Metadata Cache Created
    [[email protected] ~]#
    

    master接受minion的key

    > sudo salt-key -L                
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    qianlnk
    Rejected Keys:
    
    > sudo salt-key -a qianlnk
    The following keys are going to be accepted:
    Unaccepted Keys:
    qianlnk
    Proceed? [n/Y] y
    Key for minion qianlnk accepted.
    
    > sudo salt-key -L        
    Accepted Keys:
    qianlnk
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    

    8.1通过Minion配置文件定义Grains

    先介绍下比较简单的Grains自定义方法,就是通过Minion配置文件定义

    Minions的Grains信息是在Minions服务启动的时候汇报给Matser的,所以我们需要修改好Minion配置文 件后重启Minion服务。在Minion的/etc/salt/minion配置文件中默认有一些注释行。这里就是在Minion上 的minion配置文件中如何定义Grains信息例子。下面只需根据自动的需求按照以下格式去填写相应的 键值对就行,大家注意格式就行,SaltStack的配置文件的默认格式都是YAML格式:

    # Custom static grains for this minion can be specified here and used in SLS
    # files just like all other grains. This example sets 4 custom grains, with
    # the 'roles' grain having two values that can be matched against.
    #grains:
    #  roles:
    #    - webserver
    #    - memcache
    #  deployment: datacenter4
    #  cabinet: 13
    #  cab_u: 14-15
    

    为了统一管理Minion的Grains信息,需要把这 些注释复制到minion.d/grains文件中

    自定义 grains,客户端上配置

    [[email protected] ~]# vi /etc/salt/minion
    
    # Custom static grains for this minion can be specified here and used in SLS
    # files just like all other grains. This example sets 4 custom grains, with
    # the 'roles' grain having two values that can be matched against.
    grains:
      roles:
        - nginx
      env:
        - test
      myname:
        - hadron
    #  deployment: datacenter4
    #  cabinet: 13
    #  cab_u: 14-15
    

    重启salt-minion

    [[email protected] ~]# ps -aux|grep salt-minion
    root      38792  0.0  0.1 231928 15388 pts/0    S    02:32   0:00 /usr/bin/python /usr/bin/salt-minion restart
    root      38795  0.5  0.3 547648 28872 pts/0    Sl   02:32   0:00 /usr/bin/python /usr/bin/salt-minion restart
    root      43928  0.3  0.1 231928 15384 pts/0    S    02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
    root      43933  1.8  0.3 547648 28784 pts/0    Sl   02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
    root      45693  0.0  0.0 112648   960 pts/0    S    02:34   0:00 grep --color=auto salt-minion
    root      50604  0.0  0.1 231928 15384 pts/0    S    Aug17   0:00 /usr/bin/python /usr/bin/salt-minion start
    root      50607  0.0  0.3 760916 29024 pts/0    Sl   Aug17   0:48 /usr/bin/python /usr/bin/salt-minion start
    root      92074  0.0  0.1 231928 15388 pts/0    S    01:58   0:00 /usr/bin/python /usr/bin/salt-minion restart
    root      92077  0.0  0.3 547916 26832 pts/0    Sl   01:58   0:01 /usr/bin/python /usr/bin/salt-minion restart
    [[email protected] ~]# kill 38792 43928 45693 50604
    -bash: kill: (45693) - No such process
    [[email protected] ~]# ps -aux|grep salt-minion
    root      43933  1.2  0.3 547648 28784 pts/0    Sl   02:34   0:00 /usr/bin/python /usr/bin/salt-minion restart
    root      46529  0.0  0.0 112648   956 pts/0    S    02:35   0:00 grep --color=auto salt-minion
    root      92074  0.0  0.1 231928 15388 pts/0    S    01:58   0:00 /usr/bin/python /usr/bin/salt-minion restart
    root      92077  0.0  0.3 547916 26832 pts/0    Sl   01:58   0:02 /usr/bin/python /usr/bin/salt-minion restart
    [1]   Terminated              salt-minion start
    [3]-  Terminated              salt-minion restart
    [4]   Terminated              salt-minion restart
    [[email protected] ~]# kill 92077 92074 43933
    -bash: kill: (43933) - No such process
    [[email protected] ~]# ps -aux|grep salt-minion
    root      48215  0.0  0.0 112648   960 pts/0    S    02:36   0:00 grep --color=auto salt-minion
    [2]   Terminated              salt-minion restart
    [[email protected] ~]# salt-minion restart &
    [1] 49052
    [[email protected] ~]# 
    

    服务端获取 grains

    [[email protected] ~]# salt 'nb1' grains.item role env myname
    nb1:
        ----------
        env:
            - test
        myname:
            - hadron
        role:
            - nginx
    [[email protected] ~]# 
    [[email protected] ~]# salt 'nb1' grains.item role
    nb1:
        ----------
        role:
            - nginx
    [[email protected] ~]#
    

    注意:grains 在远程执行命令时很方便。我们可以按照 grains 的一些指标来操作。比如把所有的 web 服务器的 grains 的 role 设置为 nginx,那这样我们就可以批量对 nginx 的服务器进行操作了:

    [[email protected] ~]# salt -G role:nginx cmd.run 'hostname'
    nb1:
        nb1
    [[email protected] ~]# 
    
    [[email protected] ~]# salt -G os:CentOS cmd.run 'hostname'
    nb1:
        nb1
    nb0:
        nb0
    nb2:
        nb2
    [[email protected] ~]#
    

    针对管理对象Target的操作,Module

    • 查看所有的module列表
    sudo salt "cn1" sys.list_modules  
    cn1: 
      - aliases 
      - alternatives 
      - archive 
      - artifactory 
    ... 
    
    • 查看指定module的所有function
    ➜ pillar git:(master) ✗ sudo salt "cn1" sys.list_functions cmd 
    cn1: 
      - cmd.exec_code 
      - cmd.exec_code_all 
      - cmd.has_exec 
      - cmd.powershell 
      - cmd.retcode 
      - cmd.run 
      - cmd.run_all 
      - cmd.run_bg 
      - cmd.run_chroot 
      - cmd.run_stderr 
      - cmd.run_stdout 
      - cmd.script 
      …
    
    • 查看指定module用法
    ➜ pillar git:(master) ✗ sudo salt "cn1" sys.doc cmd 
    cmd.exec_code: 
    
      Pass in two strings, the first naming the executable language, aka - 
      python2, python3, ruby, perl, lua, etc. the second string containing 
      the code you wish to execute. The stdout will be returned. 
    
      CLI Example: 
    
      salt '*' cmd.exec_code ruby 'puts "cheese"' 
    

    4.配置

    各种匹配的详细说明

    • minion ID
    sudo salt ‘cn1’ test.ping
    
    • 通配符(*)
    sudo salt ‘cn1’ test.ping
    # 匹配所有的minion 
    sudo salt '*' test.ping 
    
    # 匹配ID开头为cn的minion 
    sudo salt 'cn*' test.ping 
    
    # 匹配cn1、cn2、cn3、cn4、cn5 
    sudo salt 'cn[1-5]' test.ping 
    
    # 匹配web-x, web-y, web-z 
    sudo salt 'web-[x-z]' test.ping 
    
    • 正则表达式
    # 如: 匹配ID为assassin-production,assassin-sandbox 
    sudo salt -E 'assassin-[production|sandbox]' test.ping 
    
    # 在state中也可以这么用 
    base: 
      'assassin-[production|sandbox]' 
        - match: pcre 
        - webserver 
    
    • 列表匹配
    # 对一些有特殊要求的minion可以手动指定ID作为Target 
    sudo salt -L 'cn1, cn2, cn23' test.ping 
    
    • grains匹配
    # 如 测试所有操作系统为ubuntu的为minion 
    sudo salt -G 'os:Ubuntu' test.ping 
    
    # 查看CPU架构是x86_64的minion的cpu个数 
    sudo salt -G 'cpuarch:x86_64' grains.item numcpus 
    
    
    # 在top.sls中使用 
    'node_type:web' 
      - match: grain 
      - webserver 
    'node_type:mysql' 
      - match: grain 
      - database 
    
    • pillar匹配
      # pillar匹配跟grains差不多, 不过将grains对象换成pillar 
    sudo salt -I 'somekey:specialvalue' test.ping 
    
    • 组匹配
    # 节点分组需要先在top.sls或者master配置文件中定义好。
    nodegroups: 
     group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com' 
     group2: 'G@os:Debian and foo.domain.com' 
     group3: 'G@os:Debian and N@group1' 
     group4: 
     - 'G@foo:bar' 
     - 'or' 
     - 'G@foo:baz' 
    
    sudo salt -N group1 test.ping 
    
    # 在top.sls中: 
    base: 
      group1: 
      - match: nodegroup 
      - webserver 
    
    • CIDR匹配
    # 指定192.168.1.0/24网段内的minion 
    sudo salt -S '192.168.1.0/24' test.ping 
    
    • 复合匹配
    salt -C 'G@os:Ubuntu or L@cn1,cn2' test.ping
    

    最后,有时候匹配到的minion会很多,如果直接全部执行master可能会挂机。
    所以我们可以分批执行:

    # 一次10个minion执行 
    sudo salt '*' -b 10 test.ping 
    
    # 一次25%执行 
    sudo salt -G 'os:Ubuntu' --batch-size 25% test.ping 
    

    1.介绍

    Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet 和 Chef 的功能,更加强大,更适合大规模批量管理服务器,并且它比 Puppet 更容易配置。 三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。

    sls中使用

    #在top.sls中使用 
    
    'os:Ubuntu': 
      - match: grain 
      - webserver 
    
    在top.sls入口中对系统是Ubuntu的服务器执行webserver.sls里定义的状态信息。 
    

    8.2 pillar

    pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

    (1)服务端自定义配置 pillar

    [[email protected] ~]# vim /etc/salt/master
    

    找到如下内容,

    #pillar_roots:
    #  base:
    #    - /srv/pillar
    #
    

    去掉#号,修改为

    pillar_roots:
      base:
        - /srv/pillar
    
    [[email protected] ~]# mkdir /srv/pillar
    

    自定义配置文件,内容如下

    [[email protected] ~]# vim /srv/pillar/test.sls
    [[email protected] ~]# cat /srv/pillar/test.sls
    conf: /etc/test123.conf
    myname: hadron
    [[email protected] ~]# 
    

    总入口文件,内容如下

    [[email protected] ~]# vim /srv/pillar/top.sls
    [[email protected] ~]# cat /srv/pillar/top.sls
    base:
      'nb1':
        - test
    [[email protected] ~]#
    

    重启master

    [[email protected] ~]# ps -aux|grep salt-master
    root      29178  0.0  0.3 313076 26816 pts/3    S    Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
    root      29242  0.5  0.4 407192 32856 pts/3    Sl   Aug17   1:24 /usr/bin/python /usr/bin/salt-master start
    root      29243  0.0  0.2 395004 22692 pts/3    Sl   Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
    root      29244  0.0  0.3 395004 24292 pts/3    Sl   Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
    root      29245  0.0  0.2 313076 22016 pts/3    S    Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
    root      29250  0.0  0.3 1204752 28560 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
    root      29251  0.0  0.3 1205064 28624 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
    root      29252  0.0  0.3 1205068 28596 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
    root      29255  0.0  0.3 1205068 28648 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
    root      29258  0.0  0.3 1205072 28584 pts/3   Sl   Aug17   0:01 /usr/bin/python /usr/bin/salt-master start
    root      29261  0.0  0.2 689932 22668 pts/3    Sl   Aug17   0:00 /usr/bin/python /usr/bin/salt-master start
    root      93354  0.0  0.0 112652   960 pts/2    S    03:07   0:00 grep --color=auto salt-master
    [[email protected] ~]# kill 29178 29242 29243 29244 29245 29250 29251 29252 29255 29258 29261
    

    在单独终端启动

    [[email protected] ~]# salt-master start
    

    注意:当更改完 pillar 配置文件后,我们可以通过刷新 pillar 配置来获取新的 pillar 状态

    [[email protected] ~]# salt '*' saltutil.refresh_pillar
    nb1:
        True
    nb0:
        True
    nb2:
        True
    [[email protected] ~]# 
    

    验证

    [[email protected] ~]# salt 'nb1' pillar.items
    nb1:
        ----------
        conf:
            /etc/test123.conf
        myname:
            hadron
    [[email protected] ~]# salt 'nb1' pillar.item conf
    nb1:
        ----------
        conf:
            /etc/test123.conf
    [[email protected] ~]# salt 'nb1' pillar.item myname
    nb1:
        ----------
        myname:
            hadron
    [[email protected] ~]# 
    

    pillar 同样可以用来作为 salt 的匹配对象

    [[email protected] ~]# salt -I 'conf:/etc/test123.conf' test.ping
    nb1:
        True
    [[email protected] ~]# salt -I 'conf:/etc/test123.conf' cmd.run 'w'
    nb1:
         03:17:08 up 67 days, 14:25,  1 user,  load average: 0.02, 0.12, 0.24
        USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
        root     pts/0    hadron           Mon21   24:44   2.38s  0.16s -bash
    [[email protected] ~]#
    

    grains&pillar

    11.1文件管理

    (1)服务端配置

    [[email protected] ~]# vim /srv/salt/top.sls
    [[email protected] ~]# cat /srv/salt/top.sls
    base:
      'nb1':
        - apache
      'nb2':
        - filetest
    [[email protected] ~]# 
    

    新建 filetest.sls 文件

    [[email protected] ~]# vim /srv/salt/filetest.sls
    [[email protected] ~]# cat /srv/salt/filetest.sls
    file-test:
      file.managed:
        - name: /tmp/filetest.txt
        - source: salt://test/123/1.txt
        - user: root
        - group: root
        - mode: 644
    [[email protected] ~]# 
    

    注意:第一行的 file-test 为自定的名字,表示该配置段的名字,可以在别的配置段中引用它;source指定文件从哪里拷贝,这里的 test 目录相当于是 /srv/salt/test 目录;name指定远程客户端要生成的文件。

    新建所要测试的源文件

    [[email protected] ~]# mkdir -p /srv/salt/test/123/
    [[email protected] ~]# echo "file test" > /srv/salt/test/123/1.txt
    [[email protected] ~]#
    

    执行命令:

    [[email protected] ~]# salt 'nb2' state.highstate
    nb2:
    ----------
              ID: file-test
        Function: file.managed
            Name: /tmp/filetest.txt
          Result: True
         Comment: File /tmp/filetest.txt updated
         Started: 03:59:13.664379
        Duration: 505.159 ms
         Changes:   
                  ----------
                  diff:
                      New file
                  mode:
                      0644
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    [[email protected] ~]# 
    

    (2)客户端验证

    [[email protected] ~]# cat /tmp/filetest.txt 
    file test
    [[email protected] ~]# 
    

    Salt state的top文件

    top.sls是state系统的入口文件,它在大规模配置管理工作中负责指定哪些设备调用哪些states.sls文件。top.sls是salt state默认的sls文件,在未做特别制定的时候salt state会默认调用top.sls来执行。如:

    sudo salt ‘cn1’ state.hightate
    

    top.sls需要手动创建,位置则是salt state树定义的目录/srv/salt下。

    3.1 服务端安装

    yum install -y epel-release

    yum install -y salt-master salt-minion

    [[email protected] ~]# yum install -y epel-release
    [[email protected] ~]# yum install -y salt-master salt-minion
    

    调试Salt

    # 开启debug日志
    salt-minion -l debug
    
    # 设置超时
    salt ‘*’ state.highstate -t 60
    

    14.3 显示存活的客户端

    [[email protected] ~]# salt-run manage.up
    - nb0
    - nb1
    - nb2
    [[email protected] ~]# 
    

    配置

    master:
    https://docs.saltstack.com/en/latest/ref/configuration/master.html
    http://arlen.blog.51cto.com/7175583/1423997

    minion:
    https://docs.saltstack.com/en/latest/ref/configuration/minion.html
    http://arlen.blog.51cto.com/7175583/1424008

    15.问题

     [[email protected] ~]# salt-master start
    [ERROR   ] An extra return was detected from minion nb1, please verify the minion, this could be a replay attack
    [ERROR   ] An extra return was detected from minion nb1, please verify the minion, this could be a replay attack
    

    执行一次命令,返回两个值

     [[email protected] ~]# salt '*' cmd.run   'df -h'
    nb1:
        Filesystem           Size  Used Avail Use% Mounted on
        /dev/mapper/cl-root   48G  4.3G   44G   9% /
        devtmpfs             3.9G     0  3.9G   0% /dev
        tmpfs                3.9G   24K  3.9G   1% /dev/shm
        tmpfs                3.9G  385M  3.5G  10% /run
        tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
        /dev/sda1           1014M  139M  876M  14% /boot
        /dev/mapper/cl-home   24G   33M   24G   1% /home
        tmpfs                781M     0  781M   0% /run/user/0
    nb1:
        Filesystem           Size  Used Avail Use% Mounted on
        /dev/mapper/cl-root   48G  4.3G   44G   9% /
        devtmpfs             3.9G     0  3.9G   0% /dev
        tmpfs                3.9G   24K  3.9G   1% /dev/shm
        tmpfs                3.9G  385M  3.5G  10% /run
        tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
        /dev/sda1           1014M  139M  876M  14% /boot
        /dev/mapper/cl-home   24G   33M   24G   1% /home
        tmpfs                781M     0  781M   0% /run/user/0
    nb0:
        Filesystem           Size  Used Avail Use% Mounted on
        /dev/mapper/cl-root   48G   27G   22G  55% /
        devtmpfs             3.9G     0  3.9G   0% /dev
        tmpfs                3.9G   16K  3.9G   1% /dev/shm
        tmpfs                3.9G  394M  3.5G  11% /run
        tmpfs                3.9G     0  3.9G   0% /sys/fs/cgroup
        /dev/sda1           1014M  139M  876M  14% /boot
        /dev/mapper/cl-home   24G   33M   24G   1% /home
        tmpfs                781M     0  781M   0% /run/user/0
        /dev/loop0           7.8G  7.8G     0 100% /var/ftp/iso-home
    [[email protected] ~]#
    

    问题产生的原因在node2节点上重复启动

     [[email protected] ~]# salt-minion start
    ^C[WARNING ] Stopping the Salt Minion
    [WARNING ] Exiting on Ctrl-c
    [[email protected] ~]# 
    

    ctrl c终止第二次的salt-minion启动即可。

    查看state modules的详细使用

    # 1、查看所有states列表
    sudo salt ‘cn1’ sys.list_state_modules
    
    # 2、 查看指定state的所有function
    sudo salt ‘cn1’ sys.list_state_functions cmd
    
    # 3、查看指定states的用法
    sudo salt ‘cn1’ sys.state_doc cmd
    
    # 4、查看指定state指定function的用法
    sudo salt ‘cn1’ sys.state_doc cmd.run
    

    13.1 建立 cron

    (1)编辑 top.sls 文件

    [[email protected] ~]# vim /srv/salt/top.sls
    [[email protected] ~]# cat /srv/salt/top.sls
    base:
      'nb1':
        - crontest
      'nb2':
        - shelltest
    [[email protected] ~]#
    

    (2)编辑 crontest.sls 文件

    [[email protected] ~]# vim /srv/salt/crontest.sls
    [[email protected] ~]# cat /srv/salt/crontest.sls
    cron-test:
      cron.present:
        - name: /bin/touch /tmp/111.txt
        - user: root
        - minute: '*'
        - hour: 20
        - daymonth: 1-10
        - month: '3,5'
        - dayweek: '*'
    [[email protected] ~]#
    

    注意,*需要用单引号引起来。当然我们还可以使用 file.managed 模块来管理 cron,因为系统的 cron都是以配置文件的形式存在的。

    (3)执行命令

    [[email protected] ~]# salt 'nb1' state.highstate
    nb1:
    ----------
              ID: cron-test
        Function: cron.present
            Name: /bin/touch /tmp/111.txt
          Result: True
         Comment: Cron /bin/touch /tmp/111.txt added to root's crontab
         Started: 02:47:51.454886
        Duration: 1478.963 ms
         Changes:   
                  ----------
                  root:
                      /bin/touch /tmp/111.txt
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    [[email protected] ~]# 
    

    (4)客户端验证

    [[email protected] ~]# crontab -l
    00      03      *       *       *       ntpdate 192.168.1.81
    00      03      *       *       *       ntpdate 192.168.1.81
    00      03      *       *       *       ntpdate 192.168.1.81
    00      03      *       *       *       ntpdate 192.168.1.81
    00      03      *       *       *       ntpdate 192.168.1.160
    # Lines below here are managed by Salt, do not edit
    # SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
    * 20 1-10 3,5 * /bin/touch /tmp/111.txt
    [[email protected] ~]# 
    

    什么是grains?

    Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。

    14.1拷贝文件到客户端

    [[email protected] ~]# salt 'nb1' cp.get_file salt://apache.sls /tmp/cp.txt
    nb1:
        /tmp/cp.txt
    [[email protected] ~]#
    
    [[email protected] ~]# cat /tmp/cp.txt 
    apache-service:
      pkg.installed:
        - names:
          - httpd
          - httpd-devel
      service.running:
        - name: httpd
        - enable: True
    [[email protected] ~]# 
    

    saltstack简介

    12.1远程执行命令

    (1)接着编辑之前的 top.sls 文件

    [[email protected] ~]# vim /srv/salt/top.sls
    [[email protected] ~]# cat /srv/salt/top.sls
    base:
      'nb1':
        - cmdtest
      'nb2':
        - filedir
    [[email protected] ~]# 
    

    (2)新建 cmdtest.sls 文件

    [[email protected] ~]# vim /srv/salt/cmdtest.sls
    [[email protected] ~]# cat /srv/salt/cmdtest.sls
    cmd-test:  
      cmd.run:
        - onlyif: test -f /tmp/1.txt
        - names:
          - touch /tmp/cmdtest.txt
          - mkdir /tmp/cmdtest
        - user: root
    [[email protected] ~]# 
    

    条件 onlyif 表示若 /tmp/1.txt文件存在,则执行后面的命令;可以使用 unless,两者正好相反。

    [[email protected] ~]# echo "hello" > /tmp/1.txt
    [[email protected] ~]# cat /tmp/1.txt 
    hello
    [[email protected] ~]#
    

    (3)执行命令

    [[email protected] ~]# salt 'nb1' state.highstate
    nb1:
    ----------
              ID: cmd-test
        Function: cmd.run
            Name: touch /tmp/cmdtest.txt
          Result: True
         Comment: Command "touch /tmp/cmdtest.txt" run
         Started: 02:23:07.347360
        Duration: 565.866 ms
         Changes:   
                  ----------
                  pid:
                      7209
                  retcode:
                      0
                  stderr:
                  stdout:
    ----------
              ID: cmd-test
        Function: cmd.run
            Name: mkdir /tmp/cmdtest
          Result: True
         Comment: Command "mkdir /tmp/cmdtest" run
         Started: 02:23:07.913505
        Duration: 208.682 ms
         Changes:   
                  ----------
                  pid:
                      7245
                  retcode:
                      0
                  stderr:
                  stdout:
    
    Summary
    ------------
    Succeeded: 2 (changed=2)
    Failed:    0
    ------------
    Total states run:     2
    [[email protected] ~]#
    

    (4)验证

    [[email protected] ~]# ll /tmp|grep cmd
    drwxr-xr-x 2 root root   6 Aug 21 02:23 cmdtest
    -rw-r--r-- 1 root root   0 Aug 21 02:23 cmdtest.txt
    [[email protected] ~]# 
    

    基本术语

    说明
    master 控制中心,salt命令运行和资源状态管理端
    minions 需要管理的客户端机器,会主动连接master端,并从master端得到资源状态信息,同步资源管理信息
    states 配置管理的指令集
    grains minion端的静态变量
    pillar minion端的动态变量
    highstate 给minion永久添加状态,从sls配置文件读取
    salt schedule 自动保持客户端配置

    11.2目录管理

    (1)接着编辑之前的 top.sls 文件

    修改为如下

    [[email protected] ~]# vim /srv/salt/top.sls
    [[email protected] ~]# cat /srv/salt/top.sls
    base:
      'nb1':
        - apache
      'nb2':
        - filedir
    [[email protected] ~]#
    

    (2)新建 filedir.sls 文件

    [[email protected] ~]# vim /srv/salt/filedir.sls
    [[email protected] ~]# cat /srv/salt/filedir.sls
    file-dir:
      file.recurse:
        - name: /tmp/testdir
        - source: salt://test/123
        - user: root
        - file_mode: 644
        - dir_mode: 755
        - mkdir: True
        - clean: True
    [[email protected] ~]#
    

    clean: True 源删除文件或目录,目标也会跟着删除,否则不会删除。可以默认设置为 False

    (3)新建所要测试的源目录

    /srv/salt/test/123已经存在,且有一个文件

    [[email protected] ~]# ls /srv/salt/test/123
    1.txt
    [[email protected] ~]# cat /srv/salt/test/123/1.txt 
    file test
    

    (4)执行命令

    [[email protected] ~]# salt 'nb2' state.highstate
    nb2:
    ----------
              ID: file-dir
        Function: file.recurse
            Name: /tmp/testdir
          Result: True
         Comment: Recursively updated /tmp/testdir
         Started: 01:38:38.129930
        Duration: 392.34 ms
         Changes:   
                  ----------
                  /tmp/testdir/1.txt:
                      ----------
                      diff:
                          New file
                      mode:
                          0644
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    [[email protected] ~]#
    

    (5)客户端验证

    [[email protected] ~]# ls /tmp
    filetest.txt                     Jetty_0_0_0_0_16010_master____.6nvknp        Jetty_localhost_40934_datanode____.k20t6j
    hadoop-root-journalnode.pid      Jetty_0_0_0_0_16030_regionserver____.45q9os  Jetty_nb2_50070_hdfs____xjgcrn
    hadoop-unjar4050493136279788948  Jetty_0_0_0_0_8042_node____19tj0x            systemd-private-bd8f0cf7c19147208fb1f2948ed5483f-vmtoolsd.service-LQvsNz
    hsperfdata_root                  Jetty_0_0_0_0_8480_journal____.8g4awa        testdir
    [[email protected] ~]# ls /tmp/testdir/
    1.txt
    [[email protected] ~]# 
    

    (6)测试增删功能

    在服务端新建newDir目录以及文件a,删除1.txt 文件

    [[email protected] ~]# cd /srv/salt/test/123
    [[email protected] 123]# mkdir newDir
    [[email protected] 123]# echo "Hello" > newDir/a
    [[email protected] 123]# rm -rf 1.txt
    

    (7)再次执行命令

    [[email protected] ~]# salt 'nb2' state.highstate
    nb2:
    ----------
              ID: file-dir
        Function: file.recurse
            Name: /tmp/testdir
          Result: True
         Comment: Recursively updated /tmp/testdir
         Started: 01:45:59.688250
        Duration: 442.358 ms
         Changes:   
                  ----------
                  /tmp/testdir/newDir:
                      ----------
                      /tmp/testdir/newDir:
                          New Dir
                  /tmp/testdir/newDir/a:
                      ----------
                      diff:
                          New file
                      mode:
                          0644
                  removed:
                      - /tmp/testdir/1.txt
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    [[email protected] ~]#
    

    (8)再次验证

    [[email protected] ~]# ls /tmp/testdir/
    newDir
    [[email protected] ~]# ls /tmp/testdir/newDir/
    a
    [[email protected] ~]#
    

    注意的是要成功创建newDir目录,前提是newDir目录下要有文件;如若没有,客户端是不会创建newDir目录的。

    Salt state树

    # 在/etc/salt/master中配置file_roots
    file_roots: 
      base: 
      - /srv/salt 
    

    本文由美高梅开户发布于服务器运维,转载请注明出处:Saltstack入门教程

    关键词: 美高梅开户

上一篇:企业用户面对BSM时的思考,BSM的实施之路

下一篇:没有了