文档章节

自动化运维,saltstack安装、启动、配置、远程执行命令,grains,pillar,安装配置httpd,配置管理文件、目录、远程命令、计划任务,其他命令,salt-ssh使用

t
 tobej
发布于 07/23 23:08
字数 3214
阅读 20
收藏 0

 

24.1 自动化运维介绍
24.2 saltstack安装
24.3 启动saltstack服务
24.4 saltstack配置认证
24.5 saltstack远程执行命令
24.6 grains
24.7 pillar
24.8 安装配置httpd
24.9 配置管理文件
24.10 配置管理目录
24.11 配置管理远程命令
24.12 配置管理计划任务
24.13 其他命令
24.14 salt-ssh使用

 

一、自动化运维介绍

认识自动化运维:

传统运维效率低,大多工作人为完成
传统运维工作繁琐,容易出错
传统运维每日重复做相同的事情
传统运维没有标准化流程
传统运维的脚本繁多,不能方便管理
自动化运维就是要解决上面所有问题

常见自动化运维工具

1、Puppet (www.puppetlabs.com)
基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
2、Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )
基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
3、Ansible (www.ansible.com )
更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。

二、saltstack安装

saltstack介绍https://docs.saltstack.com/en/latest/topics/index.html
可以使用salt-ssh远程执行,类似ansible,
也支持c/s模式,下面我们将讲述该种模式的使用,需要准备两台机器:
183.3为服务端,183.33为客户端

设置hostname以及hosts,001和002,hostname这里不需要设置

vim /etc/hosts  实验需要,两台机器都需要设置

192.168.183.3 001
192.168.183.33 002

两台机器全部安装saltstack yum源:

yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

yum list |grep salt
001上执行 yum install -y salt-master salt-minion

002上执行 yum install -y salt-minion

三、启动salt相关服务

可参考:    https://blog.51cto.com/luzhi1024/1731904
编辑配置文件

master(001):

vim /etc/salt/master

修改interface监听地址为本机ip:
interface: 192.168.183.3

修改auto_accept 自动接收minion的key:
auto_accept: True

vim /etc/salt/minion

master: 192.168.183.3

minion端(002):修改成master的服务器ip

vim /etc/salt/minion

master: 192.168.183.3

启动服务:

001 :

systemctl start salt-master
systemctl start salt-minion

/var/log/salt/master  日志目录

服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通信的端口

002:

salt-master监听端口,通过TCP/IP和salt-minion通信,但是salt-minion不监听端口

systemctl start salt-minion

四、saltstack配置认证

master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,才能进行通信,也是通过密钥对来加密解密的
minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中pem为私钥,.pub为公钥,它会在发起认证时把公钥传输给master
master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub

以上过程需要借助salt-key工具来实现

salt-key命令用法:

-a  后面跟主机名,认证指定主机
-A 认证所有主机
-r  跟主机名,拒绝指定主机
-R  拒绝所有主机
-d 跟主机名,删除指定主机认证
-D 删除全部主机认证
-y 省略掉交互,相当于直接按了y

测试saltstack:

执行如下命令 salt-key -a 002        // -a后面跟主机名,可以认证指定主机

此处设置了hosts显示002

此时可以看到minion的hostname已经获取到了,说明安装成功。

绿色的是通过的
粉色的是被拒绝的
Unaccepted是默认的,默认能够识别到的

重启systemctl restart salt-minion   会自动让master端识别minion端,两台机器都执行

使用  salt-key -A  认证所有主机

 

此时已经接收了001和002的公钥,所在位置:

ls /etc/salt/pki/master/minions

并且两边的公钥是一致的

salt-key -D    主机全部删除,并且/etc/salt/pki/master/minions目录下文件也会删除

五、saltstack远程执行命令

salt '*' test.ping     //这里的*表示所有已经签名的minion端,也可以指定一个主机名,test.ping测试对方机器是否存活

salt '*' cmd.run "hostname"  调用系统上的命令,用户为当前所在用户

说明:

这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 
比如两台客户端aming-01,aming-02, 那我们可以写成salt 'aming-*', salt 'aming-0[12]'  salt -L 'aming-01,aming-02'   salt -E 'aming-(01|02)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项。

六、saltstack - grains

grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。
grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
我们可以根据grains收集到的一些信息,做配置管理工作。
grains支持自定义信息。如下:自定义grains
salt '002' grains.ls    列出002上所有的grains项目名字

salt '002' grains.items 列出002上所有grains项目以及值

saltstack – 自定义grains

minion上:

vim /etc/salt/grains  //添加:
role: nginx 
env: test

重启minion服务:        systemctl restart salt-minion

master上:
获取grains:

salt '*' grains.item role env

可以借助grains的一些属性信息来执行命令

salt -G role:nginx cmd.run 'hostname'


七、saltstack – pillar

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

master上:
配置自定义pillar

vim  /etc/salt/master

找到如下配置://去掉前面的注释
pillar_roots:
  base:         #此行前面有两个空格
    - /srv/pillar     #此行前面有4个空格

systemctl restart salt-master

mkdir /srv/pillar   

vim /srv/pillar/test.sls    创建一个子配置文件,内容如下sls为后缀

conf: /etc/123.conf       k为conf,value为/etc/123.conf,注意冒号后面的空格,和自定义grains一样
vi /srv/pillar/top.sls  //入口文件,内容如下
base:
  '002': #此行前面有两个空格,针对的机器,主机名
    - test #此行前面有4个空格,要加载的配置文件

如果有多个文件可以写多行

在编辑vim /srv/pillar/test2.sls  

写入  dir: /data/123

当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:

salt '*' saltutil.refresh_pillar

验证:    salt  '*' pillar.item conf

salt  '*' pillar.item conf dir   可以写多个


 

也可以这样定义top.sls

002对应test,001对应test2

在刷新,验证

pillar同样可以用来作为salt的匹配对象。比如 salt  -I 'conf:/etc/123.conf'  test.ping
 

八、安装配置httpd

使用saltstack ,安装配置httpd
 master上:

vim /etc/salt/master //搜索找到 file_roots
打开如下内容的注释:
file_roots:  找到目录,作为总入口,在目录下做配置
  base: #前面有两个空格   
    - /srv/salt #前面有4个空格

mkdir  /srv/salt ; cd /srv/salt
 vim /srv/salt/top.sls      //定义总入口文件,加入如下内容
base:
  '*':  #*所有机器,前面有两个空格
    - httpd #需要创建一个httpd的sls文件,前面有4个空格

意思是,在所有的客户端上执行httpd模块

重启 systemctl restart salt-master

master上:

vim /srv/salt/httpd.sls  //加入如下内容,这个就是httpd模块的内容

httpd-service:  
  pkg.installed:    
    - names:    //要安装的包的名字,这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换行写了。
      - httpd
      - httpd-devel
  service.running:        启动服务的模块
    - name: httpd       
    - enable: True

 说明:

httpd-service是id的名字,自定义的。

pkg.installed 为包安装函数,下面是要安装的包的名字。

service.running也是一个函数,来保证指定的服务启动,enable表示开机启动。

执行: salt 'aminglinux-02' state.highstate    //执行过程会比较慢,因为客户端上在yum install httpd httpd-devel
state.highstate    此命令会去/srv/salt目录下找top.sls文件

ls /lib/systemd/system/httpd.service  会在002的该目录下生成httpd服务文件,并且服务启动

九、saltstack – 配置管理文件

master上:
vim /srv/salt/test.sls  //加入如下内容

file_test:   
  file.managed:
    - name: /tmp/tobe.com   对方机器的文件路径
    - source: salt://test/123/1.txt    来源文件目录,salt://等于/srv/salt/,source指定文件从哪里拷贝
    - user: root
    - group: root
    - mode: 600            权限

说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt


默认找top.sls文件

mkdir -p /srv/salt/test/123
 cp /etc/passwd /srv/salt/test/123/1.txt
vim /srv/salt/top.sls //如下内容
base:
  '*':
    - test
 执行: salt '002' state.highstate

此时002上有/tmp/tobe.com,并且内容与权限和/srv/salt/test/123/1.txt的内容一致

十、配置管理目录

 master上:
 vim /srv/salt/test_dir.sls  //加入如下内容

file_dir:
  file.recurse:
    - name: /tmp/testdir        对方机器上的目录
    - source: salt://test/123    在master上的源目录
    - user: root            属主
    - file_mode: 640        文件权限
    - dir_mode: 750            目录权限
    - mkdir: True
    - clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除


修改top.sls, 
vim /srv/salt/top.sls //改为如下内容
base:
  '*':
    - test_dir 
 执行: salt '002' state.highstate
 检查002上是否有/tmp/testdir,检查里面的目录、文件以及权限
 说明:这里有一个问题,如果source对应的目录里有空目录的话,客户端上不会创建该目录

执行: salt '002' state.highstate

十一、配置管理远程命令

 master上
 vim /srv/salt/shell_test.sls  //加入如下内容

shell_test:
  cmd.script:
    - source: salt://test/1.sh        脚本在master的路径
    - user: root

 vim /srv/salt/test/1.sh //加入如下内容

#!/bin/bash
touch /tmp/111.txt 
if [ ! -d /tmp/1233 ]  判断1233目录是否存在,不存在则创建
then
    mkdir /tmp/1233
fi

更改top.sls内容
增加:
    - shell_test


 执行: salt '002' state.highstate


 检查是否有/tmp/111.txt和/tmp/1233

十二、配置管理计划任务

 master上
 vim /srv/salt/cron_test.sls  //加入如下内容

cron_test:
  cron.present:
    - name: /bin/touch /tmp/111.txt        
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: '*'
    - month: '*'
    - dayweek: '*'

注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。

top.sls

增加:
    - cron_test
 执行: salt '002' state.highstate

 002上检查cron,会看到提示# Lines below here are managed by Salt, do not edit
 我们不能随意改动它,否则就没法删除或者修改这个cron了。

想要删除该cron,需要增加:

cron.absent:
  - name: /bin/touch /tmp/111.txt   注意空格

执行: salt '002' state.highstate

 两者不能共存,要想删除一个cron,那之前的present就得去掉。

此时002上已经没有了

十三、其它可能会用到的命令

 cp.get_file 拷贝master上的文件到客户端
 salt '*' cp.get_file salt://test/1.txt  /tmp/123.txt
 
 cp.get_dir 拷贝目录
 salt '*' cp.get_dir salt://test/conf /tmp/ //会自动在客户端创建conf目录,所以后面不要加conf,如果写成 /tmp/conf/  则会在/tmp/conf/目录下又创建conf
 
 salt-run manage.up  显示存活的minion
 
 salt '*' cmd.script salt://test/1.sh  命令行下执行master上的shell脚本

十四、salt-ssh使用

 salt-ssh不需要对客户端做认证,客户端也不用安装salt-minion,它类似pssh/expect.
 安装很简单yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
 yum install -y salt-ssh


 vim /etc/salt/roster //增加如下内容

001:
  host: 192.168.183.3
  user: root
  passwd: xxxx  root的密码
002:
  host: 192.168.183.33
  user: root
  passwd: xxxx

 执行:        salt-ssh --key-deploy '*' -r 'w' //第一次执行的时候--key-deploy会自动把本机的公钥放到对方机器上,然后就可以把roster里面的密码去掉

第一次执行:(带密码)

 

第二次执行:(不带密码)此时已经把公钥推送过去了


 

© 著作权归作者所有

t
粉丝 3
博文 49
码字总数 124764
作品 0
大兴
私信 提问
【0723】自动化运维——saltstack

24.1 自动化运维介绍 认识自动化运维: 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便...

alexis7gunner
08/04
0
0
自动化运维工具之Saltstack

一、简介 what is Saltstack? Saltstack是一个具备puppet与func功能为一身的集中化管理平台,saltstack基于python实现,功能十分强大,适合大规模批量管理服务器,并且它比 Puppet 更容易配置...

SoulMio
2017/11/22
0
0
自动化运维工具-saltstack

自动化运维工具-saltstack Saltstack(中国用户组www.saltstack.cn) 基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现pup...

1350368559
2017/02/19
0
0
saltstack:运维自动化工具

1 概述 1. 关于saltstack Salt是用Python编写的一个基础管理工具,能够非常快速的运行以及具有良好的扩展性来管理成千上万的服务器。Salt通过发送一个动态通讯总线来实现远程执行、配置管理等...

guzhoujiexing
2014/06/10
0
0
自动化-----saltstack基础技术

saltstack比puppet出来晚几年,基于python开发,如果你仔细对比会发现saltsack和puppet很像,随着saltstack的使用量越来越多,它的发展也是越来越迅猛,可以说saltstack可以实现puppet的所有...

super李导
2017/03/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

消息中间件——RabbitMQ的高级特性

前言 前面我们介绍了RabbitMQ的安装、各大消息中间件的对比、AMQP核心概念、管控台的使用、快速入门RabbitMQ。本章将介绍RabbitMQ的高级特性。分两篇(上/下)进行介绍。 消息如何保障100%的...

Java架构师ya七
33分钟前
6
0
如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
今天
6
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
10
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部