saltstack高效运维

saltstack

  • salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。

      不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。 

      Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。

1.saltstack的运行方式

  • Local 本地运行,交付管理
  • Master/Minion <<< 常用方式
  • Salt SSH 不需要客户端

参考学习:https://www.cnblogs.com/pyyu/p/9465608.html

2.salt部署基本架构

  • 在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。
  • salt架构中的一种就是master > minion。

saltstack高效运维

  • 在远程执行系统中,salt用python通过函数调用完成任务。

    运行salt依赖包

    python
    zeromq
    pyzmp
    pycrypto
    msgpack-python
    yaml
    jinja2

3.YAML讲解

语法规则
    大小写敏感
    使用缩进表示层级关系   
    缩进时禁止tab键,只能空格
    缩进的空格数不重要,相同层级的元素左侧对其即可
    # 表示注释行
yaml支持的数据结构
    对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict    冒号表示 key: value   key冒号后必须有
    数组: 一组按次序排列的值,又称为序列sequence 列表list     短横线  - list1
    纯量: 单个不可再分的值

对象:键值对
yaml
    first_key:
      second_key:second_value

python
    {
        'first_key':{
            'second_key':'second_value',
        }
    }

4.代码实现:

  • 环境准备:

    准备2台机器:
      192.168.58.137    master
      192.168.58.138    minion1
    minion可以由多台机器,这里拿一台机器演示
    
  • master和minion 分别需要安装不同的软件包

    master上:
      yum install salt-master -y
    
    minions上:
      yum install salt-minion -y
  • master和minion1配置hosts文件

    [root@master ~]# vi /etc/hosts
    
    192.168.58.137    master
    192.168.58.138    minion1
    
    #通过Xshell左下角全部会话口:ping master 或者 ping minion1
    #有回应表示能ping通,表示DNS解析都过了
    
    iptables -F    将三台机器关闭防火墙服务
    systemctl disable firewalld  永久关闭防火墙
    • 清空vim --->dG
  • 修改配置前先备份:master minion

    [root@minionl ~]# cp /etc/salt/minion /etc/salt/minion.bck
    
    [root@master ~]# cp /etc/salt/master /etc/salt/master.bck
  • 修改salt-master以及salt-minion的配置文件

minion1配置修改如下
    master: master
    master_port: 4506
    user: root
    id: s21minion1
    acceptance_wait_time: 10
    log_file: /var/log/salt/minion
        
#master: master     #填写master的主机名,
#master_port: 4506      #填写master接收响应的端口号
#user: root         #以root执行
#id: s21minion2         #这个id是,master在管理minion界面中,显示的名字
        
        
master修改如下 
    interface: 0.0.0.0
    publish_port: 4505
    user: root
    worker_threads: 5
    ret_port: 4506
    pidfile: /var/run/salt-master.pid
    log_file: /var/log/salt/master
        
        
  • 分别启动minion和master
systemctl start salt-master 
systemctl start salt-minion
  • 通过秘钥检查,master是否管理了 minion
salt-key -L   #列出master管控的所有key信息 

Accepted Keys:  #已接收的密钥
Denied Keys:    #拒绝密钥
Unaccepted Keys:    #发现密钥
s21minion1
Rejected Keys:
  • 检查master上的秘钥和minion是否一致
在master上敲打:   salt-key -f s21minion1
在minion上敲打 :  salt-call --local key.finger


[root@master ~]# salt-key -f  s21minion1
Unaccepted Keys:
s21minion1:  fd:27:e6:20:7b:32:74:64:39:fb:9e:d8:de:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:76:39:d3:c2:b4:c8:67:eb

[root@minionl ~]# salt-call --local key.finger
local:
fd:27:e6:20:7b:32:74:64:39:fb:d6:05:62:53:1f:0b:8e:5c:c4:4d:d4:c2:b4:c8:67:eb

#密钥都一样表示没有问题
  • 在master上接收,所有的秘钥
salt-key  -A   #接收所有未被管控的秘钥

[root@master ~]# salt-key -A
  • salt的第一个命令,验证minion机器是否存活
[root@master ~]# salt "*" test.ping 

s21minion1:
    True
#返回True表示存活

#转换json展示:
[root@master ~]# salt "*" --out=json test.ping 
{
    "s21minion1": true
}
  • 列出salt命令的详细信息
[root@master ~]# salt "*" --summary cmd.run "hostname" 
s21minion1:
    minionl
    
#cmd是超级模块,所有shell命令都能执行
#返回所有minion的主机名字.
  • 通过操作master远程安装Nginx
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#cmd是超级模块,所有shell命令都能执行
  • 通过操作master远程启动Nginx
[root@master ~]# salt "*" cmd.run "yum install nginx -y"
#浏览器访问http://192.168.58.138/    有响应页面,成功
  • 查看minion的 Nginx的版本号
[root@master ~]# salt "*" pkg.version "nginx"
s21minion1:
    1:1.12.2-3.el7
  • 关闭Ngnix
[root@master ~]# salt "*" service.stop "nginx"
s21minion1:
    True
  • Grains人为是描述minion本身固有的静态属性数据,列出主机所有Grains数据
[root@master 192.168.11.72 ~]$salt 'slave' grains.items
  • 返回s21mimion1的ip
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4
s21minion1:
    ----------
    fqdn_ip4:
        - 192.168.58.138
[root@master ~]# salt "s21minion1" grains.item fqdn_ip4 --out=json

#生成json格式
{
    "s21minion1": {
        "fqdn_ip4": [
            "192.168.58.138"
        ]
    }
}

5.在python中执行salt

import salt.client
local = salt.client.LocalClient()
local.cmd("s21minion1","cmd.run",["touch /tmp/heihei"])
  • 此时在s21minion1输入:
[root@minionl ~]# cd /tmp
[root@minionl tmp]# ls
heihei  vmware-root
#可以看到创建heihei文件
上一篇:saltstack编写自定义模块


下一篇:SUSE DeepSea / Salt 部署工具简介 - Storage6