zoukankan      html  css  js  c++  java
  • 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。

    • 在远程执行系统中,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文件
    
  • 相关阅读:
    常用的清理 Kubernetes 集群命令
    mask彻底禁用systemctl服务
    ansibleplaybook指定role limit
    极速理解设计模式系列:16.迭代器模式(Iterator Pattern)
    极速理解设计模式系列:19.备忘录模式(Memento Pattern)
    极速理解设计模式系列:8.策略模式(Strategy Pattern)
    极速理解设计模式系列:6.适配器模式(Adapter Pattern)
    PostSharp AOP编程:2.PostSharp的OnMethodBoundaryAspect类基本组成
    极速理解设计模式系列:18.访问者模式(Visitor Pattern)
    极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
  • 原文地址:https://www.cnblogs.com/xujunkai/p/11567016.html
Copyright © 2011-2022 走看看