zoukankan      html  css  js  c++  java
  • saltstack二次开发(一)

    Saltstack简介

    Salt是一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的包被安装,指定的服务在运行),一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据,开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单。Saltstack(中国用户组 www.saltstack.cn )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

    Saltstack的优势

    有master端和minion端,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况。
    有封装好的http-api,我们可以直接启动salt-api就可以通过http协议进行调用。不需要自己进行第二次的封装。

    安装

    基于centos6和centos7的差异,在两个不同的操作系统中安装saltstack也是不一样的。参考网址:https://docs.saltstack.com/en/latest/topics/installation/rhel.html
    Centos6需要先安装扩展源,然后在进行安装。

    Master端(192.168.127.165)

    安装
    yum install –y salt-master
    yum install –y salt-api
    
    vi /etc/salt/master
    interface: 192.168.127.165
    
    启动
    systemctl start salt-master

    Minion端(192.168.127.166)

    安装
    yum install  -y salt-minion
    
    vi /etc/salt/minion
    master:  192.168.127.165
    其中有一个id选项,这个id虽然不定义也没有关系,如果不定义,那么master会以客户端的hostname来显示,一旦定义了就按id定义的名字来显示了,这个id可以不和hostname一致,但定义了id后,也应该在/etc/hosts里面定义记录。 启动 systemctl start salt-minion

    源码安装:http://note.youdao.com/noteshare?id=881bbdbb6fd7bca9f74360aa052b79a4&sub=EEDE33154E13432FA9198021015C5C25

    saltstack的密钥安装

    Master与Minion认证

    minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。

    salt-key -L  或者salt-key 显示所有的key
    salt-key -D  删除所有认证主机id证书
    salt-key -d  keys_values -y
    salt-key -A  接收所有id证书请求
    salt-key -a id 接受单个id证书请求

    在Master上执行:

    [root@k8s-master /]# salt-key
    Accepted Keys:
    k8s-node1  # 因为我在Minion上没有定义id,所以这里显示的是客户端的hostname
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:

    Saltstack远程执行命令

    1.-E, --pcre,通过正则表达式进行匹配

    salt -E 'web(9|10)*' test.ping -t 1

    2. -L, --list, 主机id进行过滤

    salt -L "*app*" cmd.run "df -h" 

    3. -G, --grain, 根据被控主机的grains信息进行过滤

    salt -G 'role:nginx' cmd.run "ls /export"

    4. -I, --pillar, 根据被控主机的pillar信息进行过滤

    salt -I 'myname:xiang' test.ping -t 5

    5. -S, --ipcidr, 根据minion的ip地址进行匹配

    salt -S 192.168.1.1 test.ping
    salt -S 192.168.1.0/24 test.ping
    salt -S 192.168.0.0/16 test.ping
    salt -S 192.0.0.0/8 test.ping

    6.检查客户端是否挂掉

    salt-run manage.status |head
    salt-run manage.down
    
    例子:
    [root@k8s-master ~]# salt-run manage.status
    down:
    up:
        - k8s-node1

    测试一:salt "*" test.ping  # 检测通讯是否正常

    [root@k8s-master ~]# salt "*" test.ping
    k8s-node1:
        True

    测试二:salt-run "*" cmd.run "df -h"   # 远程执行命令

    [root@k8s-master ~]# salt "*" cmd.run "df -h"
    k8s-node1:
        Filesystem               Size  Used Avail Use% Mounted on
        /dev/mapper/centos-root   17G  1.2G   16G   7% /
        devtmpfs                 478M     0  478M   0% /dev
        tmpfs                    489M   12K  489M   1% /dev/shm
        tmpfs                    489M   13M  476M   3% /run
        tmpfs                    489M     0  489M   0% /sys/fs/cgroup
        /dev/sda1               1014M  125M  890M  13% /boot
        tmpfs                     98M     0   98M   0% /run/user/0

    说明: 这里的 * 必须是在 master 上已经被接受过的客户端,可以通过 salt-key 查到,通常是我们已经设定的 id 值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 web10、web11, 那我们可以写成  salt 'web*'    salt 'web1[02]'  salt -L 'web10,web11'   salt -E 'web(10|11)' 等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持 grains 和 pillar,分别加 -G 和 -I 选项,下面会介绍到。

    Saltstack的几种模块介绍

    runner模块

    在master端执行,用于执行在master端执行的一些module
    [root@k8s-master ~]# salt-run manage.status
    down:
    up:
        - k8s-node1

    module 模块

    通过master同步到minion端, 在minion执行。
    salt-call saltutil.sync_modules  # 同步到minion端
    salt-call saltutil.sync_all

    grains模块

    记录minion的属性key:value
    [root@k8s-master ~]# salt "*" grains.ls
    k8s-node1:
        - SSDs
        - biosreleasedate
        - biosversion
        - cpu_flags
        - cpu_model
        - cpuarch
        - domain
        ......

    自定义grians(在minion上定义的)
    grains是在minion启动时搜集一些信息,如操作系统类型,网卡,内核版本,cpu架构等
    salt "*" grains.ls 列出所有grains项目名字
    salt "*app.*" grains.items 列出所有grains项目以及值
    grains的信息并不是动态的,并不会实时变化,它只是在minion启动时收集到的
    我们可以根据grains收集到的一些信息,做一些配置管理工作
    在minion上:vim /etc/salt/grains
    role: nginx
    env: test
    重启service salt-minion restart
    获取grians:
    salt "*" grains.item role env
    或者:
    salt -G "*" role:nginx cmd.run "hostname“
    salt "*" grains.items

     

    pillar模块

    记录所有minion通用的属性,如cpu、内存、磁盘等信息,然后同步到master端
    salt-call saltutil.refresh_pillar # minion端
    salt '*' saltutil.refresh_pillar  # master端

    pillar(在master上定义)(yaml语法)
    在配置文件中找pillar的文件路径:

    
    

    找到以后,mkdir /export/salt/pillar
    vim top.sls
    base:
    "*":
    - test
    vim test.sls
    conf: xiang
    然后刷新pillar: salt '*' saltutil.refresh_pillar
    验证:salt '*' pillar.items conf
    或者: salt -I 'conf:xiang' test.ping

    cmd模块

    [root@k8s-master ~]# salt  '*' cmd.run "df -h"
    k8s-node1:
        Filesystem               Size  Used Avail Use% Mounted on
        /dev/mapper/centos-root   17G  1.2G   16G   7% /
        devtmpfs                 478M     0  478M   0% /dev
        tmpfs                    489M   12K  489M   1% /dev/shm
        tmpfs                    489M   13M  476M   3% /run
        tmpfs                    489M     0  489M   0% /sys/fs/cgroup
        /dev/sda1               1014M  125M  890M  13% /boot
        tmpfs                     98M     0   98M   0% /run/user/0

    ping模块

    [root@k8s-master ~]# salt '*' test.ping
    k8s-node1:
        True

    cp模块

    file_roots: 
    base:
    - /export/salt/root
    salt根目录:在master中file_roots定义的路径,salt://test.txt相当于/export/salt/root/test.txt
    salt '192.168.127.166' cp.get_file salt://nscd.conf /tmp/xiang.txt

    cron模块

    salt '*' cron.raw_cron root     # 查看定时任务
    salt '*' cron.set_job root '*' '*' '*' '*' 1 /export/scripts/rm_log.sh 
    salt '*' cron.rm_job root /export/scripts/rm_log.sh  

    dnsutil模块

    salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 jack.com
    salt '*' dnsutil.hosts_remove /etc/hosts jack.com

    file模块

    salt '*' file.chown /etc/passwd root root
    salt '*' file.copy /path/to/src /path/to/dst
    salt '*' file.file_exists /etc/hosts
    salt '*' file.directory_exists /etc/
    salt '*' file.get_mod /etc/passwd
    salt '*' file.set_mod /etc/passwd 0644
    salt '*' file.mkdir /tmp/test
    salt '*' file.sed /export/servers/nginx/conf/nginx.conf 'debug' 'warn'
    salt '*' file.append /tmp/test.txt "welcome jack"
    salt '*' file.remove /tmp/1.txt

    network模块

    salt '*' network.dig www.qq.com
    salt '*' network.ping www.qq.com
    salt '*' network.ip_addrs

    pkg包管理模块

    管理yum, apt-get等
    salt '*' pkg.install php   # 安装php
    salt '*' pkg.remove php    # 移除php
    salt '*' pkg.upgrade       # 升级所有的软件包

    service模块

    salt '*' service.enable nginx    # 使nginx可用
    salt '*' service.disable nginx   # 使nginx不可用
    salt '*' service.restart nginx   # 重启nginx
  • 相关阅读:
    Scala中的构造器和高阶函数
    Scala中的元组
    Scala中的Map
    Scala中的If判断&While&For循环
    [改善Java代码]asList方法产生的List对象不可更改
    [改善Java代码]避开基本类型数组转换列表陷阱
    [改善Java代码]枚举和注解结合使用威力更大
    [改善Java代码]枚举项的数量限制在64个以内
    [改善Java代码]用枚举实现工厂方法模式更简洁
    [改善Java代码]在switch的default代码块中增加AssertionError错误
  • 原文地址:https://www.cnblogs.com/yangjian319/p/9234319.html
Copyright © 2011-2022 走看看