精华内容
下载资源
问答
  • SaltStack

    2017-05-26 18:44:03
    SaltStack

    SaltStack

    展开全文
  • saltstack

    2020-02-11 19:25:48
    文章目录1.saltstack介绍1.1自动化运维工具1.2 saltstack特点1.3 saltstack服务架构2. saltstack四大功能与四大运行方式3.saltstack组件介绍4. saltstack的安装与最小化配置4.1 saltstack配置文件5.saltstack认证...

    1.saltstack介绍

    1.1自动化运维工具

    作为一个运维人员,很大一部分工作是在业务的配置管理和状态维护以及版本发布上,而当业务场景及公司规模上了一定规模后,人为手工的去做这些工作将变得极其困难,此时我们将需要利用一些自动化运维的工具来达到批量管理的目的。

    常用的自动化运维工具有:

    • puppet
    • ansible
    • saltstack

    此三款属同类工具,皆可用来提高运维管理的效率,但它们又各有优势,目前主流的自动化运维工具是ansiblesaltstack。其中ansible无需安装客户端,这是其最大的优势,而saltstack则需要安装客户端工具,类似zabbixagent。应用场景方面,ansible常用于小型企业,而saltstack则常用于中大型企业,因为ansible无法并行执行而saltstack可以并行。但不论其特点如何,本质上均属同类,所以只需要掌握一种即可轻松胜任运维工作。

    1.2 saltstack特点

    • 基于python开发的C/S架构配置管理工具
    • 底层使用ZeroMQ消息队列pub/sub方式通信
    • 使用SSL证书签发的方式进行认证管理,传输采用AES加密

    1.3 saltstack服务架构

    saltstack架构中服务器端叫Master,客户端叫Minion

    MasterMinion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求)和publish_port(发布消息)的端口。

    Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。

    saltstack除了传统的C/S架构外,其实还有一种叫做masterless的架构,其不需要单独安装一台 master 服务器,只需要在每台机器上安装 Minion端,然后采用本机只负责对本机的配置管理机制服务的模式

    2. saltstack四大功能与四大运行方式

    SaltStack有四大功能,分别是:

    • 远程执行
    • 配置管理/状态管理
    • 云管理
    • 事件驱动
      SaltStack可以通过远程执行实现批量管理,并且通过描述状态来达到实现某些功能的目的。
      SaltStack四大运行方式:
    • local本地运行
    • Master/Minion传统方式
    • Syndic分布式
    • Salt ssh

    3.saltstack组件介绍

    组件 功能
    Salt Master 用于将命令和配置发送到在受管系统上运行的Salt minion
    Salt Minions 从Salt master接收命令和配置
    Execution Modules 从命令行针对一个或多个受管系统执行的临时命令。对…有用:
    1. 实时监控,状态和库存
    2. 一次性命令和脚本
    3. 部署关键更新
    Formulas (States) 系统配置的声明性或命令式表示
    Grains Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。
    Pillar 用户定义的变量。这些安全变量被定义并存储在Salt Master中,然后使用目标“分配”给一个或多个Minion。
    Pillar数据存储诸如端口,文件路径,配置参数和密码之类的值。
    Top File 将Formulas (States)和Salt Pillar数据与Salt minions匹配。
    Runners 在Salt master上执行的模块,用于执行支持任务。Salt runners报告作业状态,连接状态,从外部API读取数据,查询连接的Salt minions等。
    Returners 将Salt minions返回的数据发送到另一个系统,例如数据库。Salt Returners可以在Salt minion或Salt master上运行。
    Reactor 在SaltStack环境中发生事件时触发反应。
    Salt Cloud / Salt Virt 在云提供商/虚拟机管理程序上提供系统,并立即将其置于管理之下。
    Salt SSH 在没有Salt minion的系统上通过SSH运行Salt命令。

    4. saltstack的安装与最小化配置

    环境说明:

    主机类型 ip 要安装的应用
    控制机(master) 192.168.174.150 salt
    salt-cloud
    salt-master
    salt-minion
    salt-ssh
    salt-syndic
    被控机(minion) 192.168.174.222 salt-minion

    官方yum源地址:https://repo.saltstack.com

    • 配置控制机
    //首先关闭防火墙及selinux,修改唯一主机名,配置网络仓库
    //安装主控所需应用
    [root@salt1 ~]# yum -y install salt salt-cloud salt-master salt-minion salt-ssh salt-syndic
    安装过程略。。。
    
    //修改主控端配置文件
    [root@salt1 ~]# sed -i '/^#master:/a master: 192.168.174.150' /etc/salt/minion
    [root@master ~]# sed -n '/^master/p' /etc/salt/minion
    master: 192.168.174.150
    
    //启动主控端的salt-master和salt-minion,并设置开机自启
    [root@salt1 ~]# systemctl start salt-master salt-minion
    [root@salt1 ~]# systemctl enable salt-master salt-minion
    
    [root@salt1 ~]# ss -tanl
    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    LISTEN     0      128     *:22                  *:*                  
    LISTEN     0      100    127.0.0.1:25                  *:*                  
    LISTEN     0      100     *:4505                *:*                  
    LISTEN     0      100     *:4506                *:*                  
    LISTEN     0      128    :::22                 :::*                  
    LISTEN     0      100       ::1:25                 :::*
    
    • 在被控机上安装salt-minion客户端
    //首先关闭防火墙及selinux,修改唯一主机名,配置网络仓库
    //安装salt-minion
    [root@salt2 ~]# yum -y install salt-minion
    安装过程略。。。
    
    //修改被控端配置文件
    [root@salt2 ~]# sed -i '/^#master:/a master: 192.168.69.201' /etc/salt/minion
    [root@salt2 ~]# sed -n '/^master/p' /etc/salt/minion
    master: 192.168.174.150
    [root@salt2 ~]# systemctl start salt-minion
    [root@salt2 ~]# systemctl enable salt-minion
    

    4.1 saltstack配置文件

    saltstack的配置文件在/etc/salt目录
    saltstack配置文件说明:

    配置文件 说明
    /etc/salt/master 主控端(控制端)配置文件
    /etc/salt/minion 受控端配置文件

    配置文件/etc/salt/master默认的配置就可以很好的工作,故无需修改此配置文件。
    配置文件/etc/salt/minion常用配置参数

    • master: 设置主控端的ip
    • id: 设置受控端本机的唯一标识符,可以是ip也可以是主机名或自取某有意义的单词

    在日常使用过程中,经常需要调整或修改Master配置文件,SaltStack大部分配置都已经指定了默认值,只需根据自己的实际需求进行修改即可。下面的几个参数是比较重要的

    • max_open_files:可根据Master将Minion数量进行适当的调整
    • timeout:可根据Master和Minion的网络状况适当调整
    • auto_accept和autosign_file:在大规模部署Minion时可设置自动签证
    • master_tops和所有以external开头的参数:这些参数是SaltStack与外部系统进行整合的相关配置参数

    5.saltstack认证机制

    saltstack主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用salt-key命令来管理证书。
    salt-minion与salt-master的认证过程:

    • minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成一对密钥,然后将公钥发给master
    • master收到minion的公钥后,通过salt-key命令接受该公钥。此时master的/etc/salt/pki/master/minions目录将会存放以minion id命名的公钥,然后master就能对minion发送控制指令了
    //salt-key常用选项
        -L      //列出所有公钥信息
        -a minion    //接受指定minion等待认证的key
        -A      //接受所有minion等待认证的key
        -r minion    //拒绝指定minion等待认证的key
        -R      //拒绝所有minion等待认证的key
        -f minion   //显示指定key的指纹信息
        -F      //显示所有key的指纹信息
        -d minion   //删除指定minion的key
        -D      //删除所有minion的key
        -y      //自动回答yes
    
    //查看当前证书情况
    [root@salt1 salt]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    salt1
    salt2
    Rejected Keys:
    
    //接受指定minion的新证书
    [root@salt1 salt]# salt-key -ya 'salt2'
    The following keys are going to be accepted:
    Unaccepted Keys:
    salt2
    Key for minion salt2 accepted.
    [root@salt1 salt]# salt-key -L
    Accepted Keys:
    salt2
    Denied Keys:
    Unaccepted Keys:
    salt1
    Rejected Keys:
    
    //接受所有minion的新证书
    [root@salt1 salt]# salt-key -yA
    The following keys are going to be accepted:
    Unaccepted Keys:
    salt1
    Key for minion salt1 accepted.
    [root@salt1 salt]# salt-key -L
    Accepted Keys:
    salt1
    salt2
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    

    6.saltstack远程执行

    //测试指定minion主机是否存活
    [root@salt1 salt]# salt 'salt2' test.ping
    salt2:
        True
    //测试所有minion主机是否存活
    [root@salt1 salt]# salt '*' test.ping
    salt2:
        True
    salt1:
        True
    

    7. salt命令的使用

    //语法:salt [options] '<target>' <function> [arguments]
    
    //常用的options
        --version       //查看saltstack的版本号
        --versions-report   //查看saltstack以及依赖包的版本号
        -h      //查看帮助信息
        -c CONFIG_DIR   //指定配置文件目录(默认为/etc/salt/)
        -t TIMEOUT      //指定超时时间(默认是5s)
        --async     //异步执行
        -v      //verbose模式,详细显示执行过程
        --username=USERNAME     //指定外部认证用户名
        --password=PASSWORD     //指定外部认证密码
        --log-file=LOG_FILE     //指定日志记录文件
        
    //常用target参数
        -E      //正则匹配
        -L      //列表匹配 
        -S      //CIDR匹配网段
        -G      //grains匹配
        --grain-pcre    //grains加正则匹配
        -N      //组匹配
        -R      //范围匹配
        -C      //综合匹配(指定多个匹配)
        -I      //pillar值匹配
    
    //示例
    [root@salt1 salt]# salt -E 'salt' test.ping
    salt2:
        True
    salt1:
        True
        
    [root@salt1 salt]# salt -L salt1,salt2 test.ping 
    salt2:
        True
    salt1:
        True
        
    [root@salt1 salt]# salt -S '192.168.174.0/24' test.ping
    salt2:
        True
    salt1:
        True
    
    [root@salt1 salt]# salt -G 'os:redhat' test.ping
    salt1:
        True
    salt2:
        True
    
    展开全文
  • Saltstack

    2021-01-20 17:18:37
    saltstack安装与配置3. saltstack远程执行3.1 sls文件编写规则3.2 命令行模式:3.3 文件模式3.4 编写远程执行模块4. grains和piller详解4.1 grains 中小规模一般用ansible,大规模用saltstack,配置相对更复杂 1. ...


    中小规模一般用ansible,大规模用saltstack,配置相对更复杂

    1. 环境准备

    删除以往虚拟机,新建rhel7.6虚拟机
    在server1,2,3上:

    yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
    sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-3000.repo
    yum install -y salt-master.noarch
    #替换为阿里镜像
    

    2. saltstack安装与配置

    在server1上开启服务:

    systemctl enable --now salt-master.service
    

    开启后可看到4505,4506两个端口:
    在这里插入图片描述
    在sever2,3上安装salt-minion:

    yum install -y salt-minion.noarch
    

    修改minion配置文件,指定master地址

    vim /etc/salt/minion
    
    master: 172.25.119.1
    
    
    systemctl enable --now salt-minion.service			#设置开机自启
    

    此时server1不允许连接:
    在这里插入图片描述
    允许所有列出的服务器连接:
    salt-key -A
    在这里插入图片描述
    此时可以看到4505端口establish:
    在这里插入图片描述

    losf可以看出linux内核打开的文件连接数

    yum install -y lsof
    

    在这里插入图片描述
    添加完server3后:
    在这里插入图片描述
    在这里插入图片描述
    测试salt:
    在这里插入图片描述

    yum install -y python-setproctitle.x86_64显示pyhon进程名称

    3. saltstack远程执行

    3.1 sls文件编写规则

    在这里插入图片描述
    在这里插入图片描述

    3.2 命令行模式:

    1.为server2安装apache:

    salt server2 pkg.install httpd
    salt server2 cmd.run 'rpm -q httpd'
    salt 'server2' service.start httpd
    

    在这里插入图片描述
    2.编写apache发布页:

    echo server2 > index.html
    salt-cp server2  index.html /var/www/html
    salt server2 file.stats /var/www/html
    curl server2
    

    在这里插入图片描述

    3.3 文件模式

    1. 文件编写规则
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.安装apache

    mkidr /srv/salt/apache
    cat install.sls
    
    httpd:
      pkg.installed
    
    
    salt server2 state.sls apache.install
    

    在这里插入图片描述
    3. 一次安装多个包

    apache:
      pkg.installed:
        - pkgs:
          - httpd
          - php
          - php-mysql
    

    在这里插入图片描述
    注:删除的时候只会删除指定的程序,并不会删除安装的依赖性,不是完全的还原

    4. 添加文件管理:

    apache:
      pkg.installed:
        - pkgs:
          - httpd
          - php
          - php-mysql
      file.managed:
        - source: salt://apache/files/index.html
        - name:  /var/www/html/index.html
    

    在这里插入图片描述

    cd files/
    cat index.html
    server2
    server2
    server2
    

    在这里插入图片描述
    结果发生改变,通过校验md5码判断文件是否改变

    5. 添加服务项

    分开声明

    apache:
      pkg.installed:
        - pkgs:
          - httpd
          - php
          - php-mysql
    
    /var/www/html/index.htmli:
      file.managed:
        - source: salt://apache/files/index.html
    
    httpd:
      service.running
    

    在这里插入图片描述
    放一起:

    apache:
      pkg.installed:
        - pkgs:
          - httpd
          - php
          - php-mysql
    
      file.managed:
        - source: salt://apache/files/index.html
        - name: /var/www/html/index.html
    
      service.running:
        - name: httpd
    

    在这里插入图片描述
    6.修改端口,触发重启

    cat /srv/salt/apache/install.sls
    
    apache:
      pkg.installed:
        - pkgs:
          - httpd
          - php
          - php-mysql 
    
      file.managed:
        - source: salt://apache/files/index.html
        - name: /var/www/html/index.html
    
      service.running:
        - name: httpd
        - enable: true
        - watch: 
          - file: /etc/httpd/conf/httpd.conf
    
    /etc/httpd/conf/httpd.conf:
      file.managed:
        - source: salt://apache/files/httpd.conf
    
    
    vim /srv/salt/apache/files/httpd.conf
    Listen 8080
    
    salt server2 state.sls apache.install
    

    运行结果:
    在这里插入图片描述
    查看server2端口:
    在这里插入图片描述
    另一种写法:

    apache:
      pkg.installed:
        - pkgs:
          - httpd
          - php
          - php-mysql
    
      file.managed:
        - source: salt://apache/files/httpd.conf
        - name: /etc/httpd/conf/httpd.conf
    
      service.running:
        - name: httpd
        - enable: true
        - watch:
          - file: apache
    

    结果相同:
    在这里插入图片描述

    3.4 编写远程执行模块

    在这里插入图片描述
    在这里插入图片描述

    mkdir /srv/salt/_modules					#创建模块目录
    vim mydisk.py								#编写模块文件
    def df():
        return __salt__['cmd.run']('df -h')
    
    salt server2 saltutil.sync_modules			#封装模块
    

    在这里插入图片描述

    4. grains和piller详解

    4.1 grains

    1.简介
    在这里插入图片描述
    2.常用命令

    salt server2 grains.ls			#列出所有的key
    salt server2 grains.items		#列出所有的key和值
    salt server2 grains.item ipv4	#指定key的值
    

    3.1在minion端自定义grains

    cd /etc/salt
    vim minion
    
    systemctl restart salt-minion.service
    

    在这里插入图片描述

    测试:
    在这里插入图片描述
    3.2 创建文件自定义grains
    在这里插入图片描述

    vim /etc/salt/grains
    
    roles:
      - ngins
    
    salt server3 saltutil.sync_grains		#刷新
    										#因为未改变主配置文件,所以不需要重启
    

    测试:
    在这里插入图片描述

    3.3 编写grains模块

    在这里插入图片描述

    mkdir /srv/salt/_grains
    cd /srv/salt/_grains/
    cat mygrains.py
    
    def my_grain():
      grains = {}
      grains['salt'] = 'stack'
      grains['hello'] = 'world'
      return grains
    
    salt '*' saltutil.sync_grains		#需要进行同步
    

    在这里插入图片描述
    4.grains匹配应用
    4.1 在target中匹配minion:
    在这里插入图片描述
    4.2 在top文件中匹配

    mkdir nginx
    cd nginx/
    vim init.sls
    
    base:
      'roles:apache':
        - match: grains
        - apache
      'roles:nginx':
        - match: grains
        - nginx 
    

    在server1下的/files上准备好nginx文件:

    cp nginx-1.18.0.tar.gz /srv/salt/nginx/files/
    
    cat top.sls 
    base:
      'roles:apache':
        - match: grain
        - apache
      'roles:nginx':
        - match: grain
        - nginx 
    
    salt '*' state.highstate
    

    结果:
    在这里插入图片描述

    5.配置server3的nginx

    cat nginx/init.sls
    nginx-install:
      pkg.installed:
        - pkgs:
          - gcc
          - pcre-devel
          - openssl-devel
      file.managed:
        - source: salt://nginx/files/nginx-1.18.0.tar.gz
        - name: /mnt/nginx-1.18.0.tar.gz
      cmd.run:
        - name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
        - creates: /usr/local/nginx
    

    在这里插入图片描述
    添加判断后:
    在这里插入图片描述
    cd nginx/files
    scp server3:/usr/local/nginx/conf/nginx.conf .

    cat nginx.service 
    
    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    vim /nginx/nginx.conf
    
    user  nginx;
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,775
精华内容 5,110
热门标签
关键字:

saltstack