SaltStack快速了解

1. 介绍

基于Python开发的一套C/S架构配置管理工具,底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证书签发的方式进行认证管理。

2. 环境准备

2.1 安装

本文采用salt-bootstrap方式安装。salt-bootstrap是SaltStack的一个单独项目,主要用于解决多平台一键部署SaltStack环境

下载安装脚本

curl -L https://bootstrap.saltstack.com -o install_salt.sh

安装salt-master

sh install_salt.sh -M #安装最新stable版本的salt-master和salt-minion

安装salt-minion

sh install_salt.sh #安装最新stable版本的salt-minion

2.2 配置

(1) 所有master和minion节点配置hosts文件(生产环境使用DNS)

主机名 IP 说明
node1 172.16.37.23 Master
node2 172.16.37.35 Minion
node3 172.16.37.41 Minion
node4 172.16.37.39 Minion
node5 172.16.37.43 Minion

(2) Master防火墙规则

salt master启动后默认会监听两个端口:

4505/tcp,publish_port,提供远程执行命令发送功能

4506/tcp,ret_port,用于文件服务、认证、结果搜集等功能接口

(3) Minion配置

修改/etc/salt/minion

a) 修改minion的master

找到如下行’#master: salt’,取消注释,修改为实际master主机名

master: node1

b) 为minion指定id

找到如下行’#id:’,取消注释,并设置为minion的主机名(不一定要和主机名一样),如

id: node2

重启salt master和salt minion

systemctl restart salt-master salt-minion # Master
systemctl restart salt-minion             # Minion

2.3 证书管理

SaltStack使用SSL签证的方式进行安全认证、通信加密

Minion第一次启动后会在/etc/salt/pki/minion生成公钥秘钥,然后将公钥发送给Master,等待Master接受

Master为其签发证书后才能与该Minion建立通信

相关命令

#查看证书签发情况
salt-key -L

#为node2签发证书
salt-key -a node2

#为所有等待接受的Minion签发证书
salt-key -A

3. 远程执行命令

salt ‘目标机器’ 函数 [参数](详细用法见’salt -h’)

在所有Minion远程执行test模块中的ping函数( /usr/lib/python2.7/site-packages/salt/modules/test.py ,该函数直接返回True)

salt ‘*’ test.ping

查看函数说明

salt ‘node2’ sys.doc test.ping

远程命令执行模块cmd( /usr/lib/python2.7/site-packages/salt/modules/cmdmod.py )

salt ‘*’ cmd.run “hostname”

列出cmd模块的函数

salt ‘node2‘ sys.list_functions cmd

查看函数说明

salt ‘node2‘ sys.doc cmd.run

原理都是在匹配的目标机器执行python模块中的函数,可以编写自定义的python模块推送到Minion上按上述方式执行

4. 状态系统

4.1 状态系统说明

通过SLS(SaLt State)文件描述Minion要达到什么状态,底层由SaltStack的状态模块保证Minion处于该状态

以安装httpd服务为例,采用执行远程命令的方式如下:

salt ‘node2’ pkg.install httpd

而采用状态文件进行描述如下:

然后通过状态模块确保目标机器中httpd服务处于pkg.installed的状态:

salt ‘node2’ state.apply apache

两者都达到了在目标机器部署httpd服务的目的,但是执行远程命令的方式每次都会执行相同的逻辑和指令,而状态文件则是根据描述让Minion处于指定状态,当前状态和所需状态不同时才执行相关操作

执行远程命令的方式属于执行模块。查看所有执行模块

salt ‘node2‘ sys.list_modules

查看pkg执行模块中的所有函数

salt ‘node2‘ sys.list_functions pkg

状态文件的方式属于状态模块。查看所有状态模块

salt ‘node2‘ sys.list_state_modules

查看pkg状态模块中的所有函数

salt ‘node2‘ sys.list_state_functions pkg

4.2 Highstate

highstate通过top.sls文件作为入口对模块和主机进行管理

使用highstate,可以用top.sls组织多个状态文件,对模块进行拆分和复用,实现多环境的配置和管理等

如下举例对highstate进行说明

file_roots默认只有一个base环境,位于/srv/salt,top.sls就在base环境的根目录下。目录结构如下:

在top.sls中指定状态文件或状态文件子目录

top.sls中引用了myapp,它会按如下顺序引用:如果存在myapp.sls则引用myapp.sls,如果不存在,则引用myapp目录下的init.sls。我们采用子目录的方式对目录进行规划

在myapp/init.sls中include与myapp相关的各个状态文件(可以把状态文件拆分成多个,在此处include)

.myconf对应与init.sls同目录的myconf.sls状态文件,在该文件中对Minion的/tmp/myconf.txt状态进行描述

在files/myconf.txt中写入任意内容,执行如下命令让Minion处于描述的状态

salt ‘node2‘ state.apply

参考:

(1) https://docs.saltstack.com/en/latest/topics/tutorials/states_pt1.html

(2) https://docs.saltstack.com/en/latest/topics/tutorials/starting_states.html

5. Grains

SaltStack中记录Minion静态信息的组件(OS类型、CPU核数、内存大小、IP地址等),在Minion启动时采集汇报给Master,因此Grains通常存储的是静态、不常变化的数据,存储在Minion本地

Minion可以操作自己的Grains数据(增删改)

可通过如下命令查看每项Grains数据:

salt ‘node2‘ grains.items

6. Pillar

与Grains类似,但Pillar存储的是相对经常变化的数据,存储在Master本地

Minion只能查看自己的Pillar数据

可通过如下命令查看每项Pillar数据:

salt ‘node2‘ pillar.items

7. Jinja

Python模板引擎,通过与Grains和Pillar的结合定义动态的配置

比如,不同的Minion通过fqdn可以获取各自不同的主机名

接下来我们可以通过Grains创建动态配置,让每个目标机器中的/tmp/myconf.txt显示自己的主机名

修改状态文件中的file描述,指定template为jinja

#cat dev/myapp/myconf.sls
conf1:
  file.managed:
    - name: /tmp/myconf.txt
    - source: salt://nginx/files/myconf.txt
    - user: root
    - group: root
    - mode: 644
    - template: jinja

在source对应的文件中通过 {{ grains[‘ITEM’] }} 的方式引用Grains数据

#cat dev/myapp/files/myconf.txt
[BASE] /srv/salt/dev
My hostname is {{ grains[‘fqdn‘] }}

让所有Minion处于描述的状态

salt ‘*‘ state.apply

参考:

(1)    https://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.html

8. 多环境的配置和管理

如下以在不同环境的主机中放置不同内容的/tmp/myconf.txt文件为例进行说明

为了便于区分不同环境,先修改各Minion的id加入环境标识

修改master的file_root配置( /etc/salt/master )

file_roots:
  base:
   - /srv/salt/base
  dev:
    - /srv/salt/dev
  prod:
    - /srv/salt/prod

在多环境下,每个环境的根目录下维护各自的top.sls

top.sls中指明自己的环境,匹配的目标机器,包含的状态文件/子目录等

top.sls中引用了myapp,它会按如下顺序引用:如果存在myapp.sls则引用myapp.sls,如果不存在,则引用myapp目录下的init.sls。我们采用子目录的方式对目录进行规划。在init.sls中指定该子目录中的状态文件

.myconf对应与init.sls同目录的myconf.sls状态文件,在该文件中对Minion的/tmp/myconf.txt状态进行描述

分别在base、dev、prod环境的myconf.txt中写入不同内容,执行如下命令让不同环境的Minion处于对应的描述状态

salt ‘*‘ state.apply  # 默认base环境

salt ‘*‘ state.apply saltenv=dev # dev环境

salt ‘*‘ state.apply saltenv=prod # prod环境

参考:

(1)    https://docs.saltstack.com/en/latest/topics/tutorials/states_pt4.html

时间: 2024-11-02 07:30:13

SaltStack快速了解的相关文章

SaltStack实战之SaltStack快速入门

SaltStack实战之SaltStack快速入门 1. SaltStack介绍 1.1 SaltStack常用网址 1.2 SaltStack运行方式 1.3 SaltStack三大功能 2. SaltStack部署 2.1 SaltStack master配置 2.2 SaltStack minion配置 2.3 SaltStack认证 2.4 saltsatck远程执行 2.5 saltsatck配置管理 1. SaltStack介绍 Salt,一种全新的基础设施管理方式,部署轻松,在几分

saltstack快速入门

SALTSTACK是什么? Salt是一种和以往不同的基础设施管理方法,它是建立在大规模系统高速通讯能力可以大幅提升的想法上.这种方法使得Salt成为一个强大的能够解决基础设施中许多特定问题的多任务系统.远程执行引擎是Salt的核心,它能够为多组系统创建高速.安全的双向通讯网络.基于这个通许系统,Salt提供了一个非常快速.灵活并且容易使用的配置管理系统,称之为“Salt States”.通过部署SaltStack环境,我们可以在成千上万台服务器上做到批量执行命令,根据不同业务特性进行配置集中化

saltstack学习 01:saltstack快速安装

以下是redhat6和centos6的安装过程, centos5的同学直接跳到后面.超快的安装方法. 1. 安装源 1.1 安装epel源 # cd /usr/local/src/ # wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm 1.2 安装rpmforge 这步很重要,在redhat 6和centos 6的

Saltstack快速部署

Saltstack 批量部署工具     关于Saltstack是什么东西?有什么作用?我们在这里就不做介绍了,如果有不懂的同学们可以去网络搜索下:了解相关的技术信息. 本次们的主机分部为:    1.Master:192.168.30.131    2.Slave-1:192.168.30.132    3.Slave-2:192.168.30.133 首先,在安装Saltstack之前,我们先来初始我们使用的CentOS环境,及安装所需的基础软件: 以下操作在三台主机上都要操作:1.安装编译

saltstack 快速安装配置

saltstack_quickstart.sh ## 0.Introduction Salt is: -- a configuration management system, capable of maintaining remote nodes in defined states (for example, ensuring that specific packages are installed and specific services are running) -- a distrib

Saltstack快速安装

RHEL/CentOS下安装SaltStack 对于Centos和RedHat用户,使用yum安装时最直接和快捷的.首先需要安装EPEL仓库.For RHEL/CentOS 6rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm Salt Master安装: [[email protected] ~]#yum install -y salt-master python-setproct

saltstack 快速入门

三种模式 Local Master/minion Salt ssh 三大功能 远程执行 配置管理 云管理 配置系统环境 cat /etc/redhat-release CentOS release 6.6 (Final) setenforce 0 /etc/init.d/iptables stop [[email protected] ~]# cat /etc/hosts 127.0.0.1   localhost localhost.localdomain localhost4 localho

saltstack第一波《快速入门》

saltstack课程总结 第1章 saltstack快速入门 1.1 快速安装 项目,VM1: saltstack-node1.example.com,VM2: saltstack-node2.example.com 安装角色,master && minion,minion IP(eth0),10.0.0.21,10.0.0.22 网关(eth0),10.0.0.2,10.0.0.2 DNS,8.8.8.8, 114.114.114.114,8.8.8.8, 114.114.114.11

通过Python利用saltstack进行生成服务器资产清单

前言:人工去对每一台服务器的硬件信息并记录早已经过去了,无论通过脚本还是自动化工具都是可以进行一次编写到处抓取的,本文主要使用saltstack作为使用工具,然后利用其提供的APi编写所需的Python脚本~~ 需求如下:生成服务器主机名,IP地址,内存,CPU核数,操作系统,数据盘配额,主要运行服务 saltstack快速入门,可参考:http://youerning.blog.51cto.com/10513771/1708964 这里主要用到saltstack的grains,就是saltst