slatstack自动化运维

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了slatstack自动化运维相关的知识,希望对你有一定的参考价值。

saltstack
?saltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。
?saltstack是使用python语言开发的,同时也支持restAPI方便二次开发以及和它平台集成,同时官方也发布了一个Web管理界面halite。
优点:
?首先,他速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的
?其次,非常灵活,源码是python,方便理解和自定义模块(python 语言相对于其他的perl、ruby等还是很好理解的)
?命令简单,功能强大
saltstack运行方式
?Local
?Master/Minion
?Salt SSH
本文使用Master/Minion运行方式。
saltstack三大功能
?远程执行
?配置管理
?云管理
saltstack数据系统
?Grains (静态数据)
?pillar (动态数据)
saltstack配置管理
?SLS(YAML、Jinja)
?Highstate
?States Module
Saltstack 批量部署nginx
实验环境:
准备三台机器,这三台机器都关闭 selinux,清空防火墙规则。
IP地址:192.168.88.100 主机名:master.saltstack.com
IP地址:192.168.88.101 主机名:web01.saltstack.com
IP地址:192.168.88.102 主机名:web02.saltstack.com
主机名使用FQDN,完全合格域名,不然会有错误
vi /etc/hosts //要做各台主机的hosts映射
192.168.88.100 master.saltstack.com
192.168.88.101 web01.saltstack.com
192.168.88.102 web02.saltstack.com
分别为三台机器添加epel源。//注意使用Centos7.4默认官方源

yum install -y epel-release 安装epel源

服务器安装:
yum -y install salt-master

安装完成修改主配置文件:
vi /etc/salt/master
修改如下:
15行 interface: 192.168.88.100 //监听master地址
215行 auto_accept: True //避免要运行salt-key来确认证书认证
416行
file_roots:
base:

  • /srv/salt //saltstack文件根目录位置,目录需要创建
    706行组分类:
    nodegroups:
    group1: ‘web01.saltstack.com‘
    group2: ‘web02.saltstack.com‘

552行 pillar_opts: True //开启pillar功能
529行
pillar_roots:
base:

  • /srv/pillar //pillar的主目录,需要创建

cat /etc/salt/master | grep -v ^$ | grep -v ^# //查看对主配置文件做的更改

启动服务器:
systemctl start salt-master
systemctl enable salt-master

netstat -anpt | egrep ‘4505|4506‘
技术分享图片
创建salt与pillar文件根目录:
mkdir /srv/salt
mkdir /srv/pillar

----------以下在被控端上操作----------
在两台上分别配置:
yum -y install salt-minion

vi /etc/salt/minion
修改配置如下:
16行 master: 192.168.88.101 //指定主控端IP
78行 id: web01.saltstack.com //指定被控端主机名

启动被控端服务
systemctl start salt-minion

在主控端测试与被控端的通信状态!
salt ‘‘ test.ping
技术分享图片
salt ‘
‘ cmd.run ‘df -h‘ //远程执行命令

salt-key //查看在 master 上已经被接受过的客户端
技术分享图片
Saltstack几个重要的组件:
grains
grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等静态信息。
grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的

pillar
pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。

State
他是saltstack的最核心功能,通过预先指定好的sls文件对被控主机进行管理:包/文件/网络配置/系统服务/系统用户等。

首先介绍grains
查看被控主机上grains所有值:
salt ‘web01.saltstack.com‘ grains.items

自定义 grains的方法有两种(客户端自定义配置和服务端写脚本定义):
1.客户端配置(缺点:每台都得去配置,机器多了配置起来不方便)
2.服务端写Python脚本

服务端写Python脚本:
salt-key

mkdir /srv/salt/_grains
cd /srv/salt/_grains/
vi mytest.py
插入测试脚本:
#!/usr/bin/env python

* coding:utf-8 *

import os

def my_test():
grains = {}
grains[‘say‘] = ‘hello world‘
return grains

def my_test1():
grains = {}
with os.popen(‘free -m‘) as f:
grains[‘mem_usage‘] = f.read()
return grains
salt ‘*‘ saltutil.sync_all //同步文件

在被控端查看同步效果:
技术分享图片

接着:
salt ‘*‘ sys.reload_modules //刷新模板

检测效果:
salt ‘‘ grains.item say
salt ‘
‘ grains.item mem_usage
技术分享图片
技术分享图片
同时检验web01和web02上的sawp
技术分享图片技术分享图片
pillar管理模板参考连接文章

配置管理安装Apache
下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:
修改配置文件
vi /etc/salt/master // 打开如下内容的注释406行
file_roots:
base:

  • /srv/salt/
    注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。

mkdir /srv/salt
vi /srv/salt/top.sls
base:
‘*‘:

  • apache
    注意:这里的‘*‘,表示在所有的客户端执行 apache 模块。

vi /srv/salt/apache.sls
apache-service:
pkg.installed:

  • names: // 如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行
    • httpd
    • httpd-devel
      service.running:
  • name: httpd
  • enable: True
    注意:apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动。

重启服务

systemctl restart salt-master

执行命令

salt ‘*‘ state.highstate

技术分享图片

并且被控端已经运行了httpd服务
网址测试:访问88.101被控端

技术分享图片

测试成功!

以上是关于slatstack自动化运维的主要内容,如果未能解决你的问题,请参考以下文章

开发自动化运维架构六要素

关于自动化运维的实践×××

北京联通自动化运维提升私有云运维效率

CMDB和运维自动化

游戏运维的最佳实践:搜狐畅游自动化运维之旅!

自动化运维界的苹果之ITGo自动化运维管理平台