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 #執行狀態文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章