saltstack自动化部署 - 学习笔记

一. SaltStack安装


1. 安装saltstack服务端和客户端:

http://repo.saltstack.com      #进入网站安装官方源
yum install salt-master salt-minion     #服务端
yum install salt-minion                 #客户端

2. 配置客户端的master:

vim /etc/salt/minion
master: 172.16.1.211

3. 在服务端建立客户端的认证(服务端执行):

 salt-key -A   #认证所有       -a 认证单个

二. SaltStack基本操作


1.在所有客户端执行测试命令:

salt "*" test.ping

2.在所有minion(客户端)上执行‘uptime’命令:

salt '*' cmd.run 'uptime'

3.拷贝文件到所有客户端的tmp目录下面:

salt-cp '*' install.log /tmp/install.log

4.saltstack的配置管理:

vim /etc/salt/master

file_roots:
  base:
    - /srv/salt/

mkdir /srv/salt
cd /srv/salt
vim apache.sls #安装apache并启动

apache-install:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel

apache-service:
  service.running:
    - name: httpd
    - enable: True
    - reload: True

salt ‘*’ state.sls apache #执行状态管理脚本

5.编辑salt的入口文件:

PS: top-file文件要放在base环境下。
vim top.sls

base:
  'SH_T_ansiblecli_02.gigold-idc.com':
    - apache
  'SH_T_ansiblecli_03.gigold-idc.com':
    - apache

salt ‘*’ state.highstate #通过入口文件执行安装apache的脚本
salt ‘*’ state.highstate test=True #生产环境上面命令很危险,要先测试下

三. SaltStack-数据系统Grains


1.查看客户机的所有grains信息:

salt 'SH_T_test_03.gigold-idc.com' grains.items

2.查看客户机的IP地址:

salt 'SH_T_test_03.gigold-idc.com' grains.get ip_interfaces:eth0

3.通过grains判断在哪些客户端上执行‘W’命令:

salt -G 'os:Centos' cmd.run 'w'

4.客户端自定义grains并通过top筛选:

vim /etc/salt/grains #在客户端定义,写完要重启minion

roles:
  - webserver
  - memcache

/etc/init.d/salt-minion restart
vim top.sls #服务端

base:
  'roles:webserver':     #匹配roles变量为webserver的主机
    - match: grain      #要定义通过grain方法获取参数
    - apache

salt ‘*’ state.highstate #通过top筛选匹配的grain

5.通过master刷新minion的grains参数:

salt '*' saltutil.sync_grains

6.通过Python脚本自定义获取grains参数:

vim /srv/salt/_grains/my_grains.py #文件创建在master服务器上

#!/usr/bin/env python
#-*- coding: utf-8 -*-

def my_grains():
    #初始化一个grains字典
    grains = {}
    grains['iaas'] = 'openstack'
    grains['edu'] = 'wmjedu'
    return grains

salt ‘*’ saltutil.sync_grains #编辑完后要记得推送到minion上

7. Grains的优先级:

从高到低:系统自带--grains文件---minion配置文件--master自定义的

四. SaltStack-数据系统Pillar


定义: Pillar是动态的,给特定的minion指定特定的数据 ,只有指定的minion可以看到(所有相对安全,可以用来设置密码)。

1.在服务端创建Pillar的base环境:

vim /etc/salt/master

pillar_roots:
  base:
    - /srv/pillar

mkdir -p /srv/pillar
/etc/init.d/salt-master restart

2.自己创建pillar:

vim /srv/pillar/apache.sls

my-pillar:
  {%if grains['os'] == 'CentOS'%}
  apache: httpd
  {% elif grains['os'] == 'Debian' %}
  apache: apache2
  {% endif %}

vim /srv/pillar/top.sls

#配置在哪台主机上面使用pillar
base:
  'SH_T_ansiblecli_02.gigold-idc.com':
    - apache

salt ‘*’ saltutil.refresh_pillar #配置完成后要记得刷新pillar
salt ‘*’ pillar.items #查看配置的pillar

3.刷新pillar:

salt '*' saltutil.refresh_pillar

4.通过pillar来筛选哪些minion执行操作:

salt -I "apache:httpd" cmd.run 'w'

5.grains和pillar的区别:

grains和pillar的区别

五. SaltStack-远程执行-进阶


1.多种判断需要执行Minion的方法:

salt -L 'SH_T_test_03, SH_T_ansiblecli_02' cmd.run 'w' #通过列表
salt -S '172.16.1.213' test.ping      #通过ip判断
salt -S '172.16.1.0/24' test.ping     #通过网段判断
vim /etc/salt/master      #配置nodegroups来分组
nodegroups:
  web: 'L@SH_T_test_03.gigold-idc.com,SH_T_ansiblecli_02.gigold-idc.com'
salt -N web test.ping      #通过-N来指定

2.将执行返回值写入到数据库中:

执行数据库脚本:

CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

USE `salt`;

--
-- Table structure for table `jids`
--

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE;

--
-- Table structure for table `salt_returns`
--

DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
  `fun` varchar(50) NOT NULL,
  `jid` varchar(255) NOT NULL,
  `return` mediumtext NOT NULL,
  `id` varchar(255) NOT NULL,
  `success` varchar(10) NOT NULL,
  `full_ret` mediumtext NOT NULL,
  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id` (`id`),
  KEY `jid` (`jid`),
  KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `salt_events`
--

DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

vim /etc/salt/master

#文件底部添加
master_job_cache: mysql
mysql.host: '172.16.1.214'
mysql.user: 'root'
mysql.pass: 'Root123'
mysql.db: 'salt'
mysql.port: 3306

/etc/init.d/salt-master restart
salt ‘*’ cmd.run ‘free -m’ #执行完成后可以在数据库里面查看

六. SaltStack-配置管理


1.”top.sls”文件必须放在base环境下。

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

2.拷贝文件到Minion上:

vim dns.sls

/etc/resolv.conf:
  file.managed:
    - source: salt://files/resolv.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - defaults:
      DNS_SERVER: 223.6.6.6

salt ‘*’ state.sls dns #直接执行
下面用top来执行
vim top.sls

base:
  '*':
    - dns

salt ‘*’ state.highstate #使用高级状态执行

3.状态间的依赖关系:

1.我依赖谁:只要依赖的状态为正常,我就执行。
- require:
  - pkg: lamp-pkg          (状态模块:状态名)
  - file: apache-config
2.我被谁依赖:(一般用不到)
- require_in:    (写在被依赖方)
  - service: mysql-service
3.我监控谁:监控某个状态,只有发生变化我才执行,
- watch:
4.我被谁监控:(一般用不到)
- watch_in:
5.我引用谁:
include:
6.我扩展谁:

3.jinja模板的使用方法:

1.模板里面赋值: 
    - template: jinja
    - defaults:
      PORT: 8080
{{ PORT }}
2.使用grains参数获取本地IP: {{ grains['fqdn_ip4'][0] }}
3.使用salt远程执行模块获取网卡MAC: {{ salt['network.hw_addr']('eth0') }}
4.使用pillar参数: {{ pillar['apache'] }}

3.include用法:

vim env_init.sls

include:
  - init.dns
  - init.history
  - init.sysctl

4.以测试模式执行:

salt '*' state.highstate test=True

七. SaltStack-实践案例


https://github.com/unixhot/saltbook-code #SaltStack实践案例源码

1.安装haproxy案例

include:
  - pkp.pkg-init

haproxy-install:
  file.managed:
    - name: /usr/local/src/haproxy-1.6.11.tar.gz
    - source: salt://haproxy/files/haproxy-1.6.11.tar.gz
    - user: root
    - group: root
    - mode: 755
  cmd.run:
    - name: cd /usr/local/src && tar zxf haproxy-1.6.11.tar.gz && cd haproxy-1.6.11 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
    - unless: test -d /usr/local/haproxy    #后面条件为“假”时执行
    - require:                   #下面两个条件要执行成功才能执行
      - pkg: pkg-init            #代表pkg-init里面的Pkg
      - file: haproxy-install

haproxy-init:
  file.managed:
    - name: /etc/init.d/haproxy
    - source: salt://haproxy/files/haproxy.init
    - user: root
    - group: root
    - mode: 755
    - require:
      - cmd: haproxy-install
  cmd.run:
    - name: chkconfig --add haproxy
    - unless: chkconfig --list | grep haproxy
    - require:
      - file: haproxy-init

net.ipv4.ip_nonlocal_bind:
  sysctl.present:
    - value: 1

haproxy-config-dir:
  file.directory:
    - name: /etc/haproxy
    - user: root
    - group: root
    - mode: 755

2. salt的两种状态间关系图表:

这里写图片描述

这里写图片描述

八. 用SaltStack-进阶


1.salt支持的三中工作模式:

一。本地模式(salt-call)
二。多master模式
三。代理模式(Syndic):

Syndic必须运行在一个master上,然后连到另外一个更高级的master(这台机器就可以管理syndic-master所管理的机器)。

这里写图片描述

2.salt自定义grains:

mkdir /srv/salt/base/_grains #自定义的必须放这里
vim my_grains.py

#!/usr/bin/env python
#-*- coding: utf-8 -*-

def my_grains():
    #初始化一个grains字典
    grains = {}
    grains['iaas'] = 'openstack'
    grains['edu'] = 'wmjedu'
    return grains

salt ‘*’ saltutil.sync_grains #同步自定义的grains到minion
salt ‘*’ grains.item ‘hehe1’ #查看自定义的grains

PS: Grains是静态的,收集一次就不会变了,需要自己用“saltutil.sync_grains”刷新!

3.salt自定义模块:

mkdir /srv/salt/base/_modules #文件夹名称不能变
vim my_disk.py

def list():
    cmd = 'df -h'
    ret = __salt__['cmd.run'](cmd) #调用salt自带cmd.run模块执行
    return ret

salt ‘*’ saltutil.sync_modules #下发自定义模块到minion
salt ‘*’ my_disk.list #执行自定义模块

PS: “/usr/lib/python2.6/site-packages/salt/modules/ ” 这个是salt官方模块放的位置,可以参考来写.

4.Salt的无master下运行:

首先要安装salt-minion,然后修改配置文件:
# vim /etc/salt/minion

file_client: local
还要配置:
file_roots

salt-call –local state.highstate #通过这条命令在本地执行

5. Salt-ssh的使用:

# yum install salt-ssh
# vim /etc/salt/roster #配置客户端列表

SH_T_test_04:
  host: 172.16.1.214
  user: root
  port: 22

# salt-ssh ‘*’ test.ping -i #第一次连接会自动安装公钥到客户端上
# salt-ssh ‘*’ -r ifconfig # -r后面可以直接写命令
# salt-ssh ‘*’ state.highstate
# salt-ssh ‘*’ state.sls web.apache #执行状态文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值