1. 程式人生 > >saltstack自動化運維

saltstack自動化運維

實驗環境:
準備三臺機器,這三臺機器都關閉 selinux,清空防火牆規則。
systemctl stop firewalld
setenforce 0

hostnamectl set-hostname master.saltstack.com
hostnamectl set-hostname web01.saltstack.com
hostnamectl set-hostname web02.saltstack.com

vi /etc/hosts
192.168.80.100 master.saltstack.com
192.168.80.101 web01.saltstack.com
192.168.80.102

web02.saltstack.com

分別為三臺機器新增epel源,本地有官方源。
yum install -y epel-release 安裝epel源

伺服器安裝:(主控端)
yum -y install salt-master salt-minion

客戶端安裝
yum -y install salt-minion

客戶端安裝
yum -y install salt-minion

服務端和客戶端都要配置
vi /etc/salt/minion +16
master: 192.168.80.100

分別修改三臺機器minion檔案中的的id為自己的主機名
vi /etc/salt/minion +78
id:

master.saltstack.com

vi /etc/salt/minion
id: web01.saltstack.com

vi /etc/salt/minion
id: web02.saltstack.com

一定先開啟主的
systemctl start salt-master
systemctl enable salt-master

systemctl start salt-minion
systemctl enable salt-minion

salt-key -L 檢視待認證的伺服器
在這裡插入圖片描述
Accepted Keys:認證通過
Denied Keys:舊的的認證
Unaccepted Keys:等待認證
Rejected Keys:拒絕認證

手動新增認證:
認證的方式是salt-key -a 客戶端id
salt-key -a web01.saltstack.com
在這裡插入圖片描述
這個可能沒有空格原因

salt-key -a web02.saltstack.com

salt-key -a master.saltstack.com

說明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令檢視到已經簽名的客戶端。此時我們在客戶端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 檔案。

salt-key -L
在這裡插入圖片描述

注意,如果你想修改id的話,需要先刪除服務端的id,使用salt-key -d id名稱就行,修改客戶端檔案,重啟客戶端服務後,需要重新認證。這裡需要注意一下,老的版本需要刪除客戶端的/etc/salt/minion_id的內容,修改配置檔案的id,重啟服務才生效。因為第一次啟動的時候它會生成這個檔案,以後再不會讀minion這個配置檔案了,直接讀minion_id這個檔案。

在主控端
測試與被控端的通訊狀態!
salt ‘*’ test.ping
在這裡插入圖片描述

salt ‘*’ cmd.run ‘df -hT’ //遠端執行命令
在這裡插入圖片描述

安裝完成修改主配置檔案:
vi /etc/salt/master
修改如下:
416行3行去掉#
file_roots:
base:
- /srv/salt #saltstack檔案根目錄位置,目錄需要建立

710行組分類:
nodegroups:
group1: ‘web01.saltstack.com
group2: ‘web02.saltstack.com

552行 pillar_opts: True //開啟pillar功能

529行
pillar_roots:
base:
- /srv/pillar //pillar的主目錄,需要建立

grep -v ^# /etc/salt/master | grep -v ^$ //檢視對主配置檔案做的更改
在這裡插入圖片描述
啟動伺服器:
systemctl start salt-master 一定先啟動主的
netstat -anpt | egrep ‘:4505|:4506’
在這裡插入圖片描述
建立salt與pillar檔案根目錄:
mkdir /srv/salt
mkdir /srv/pillar

注:
Saltstack幾個重要的元件:

grains
grains 是在 minion(客戶端)啟動時收集到的一些資訊,比如作業系統型別、網絡卡ip等靜態資訊。
grains的資訊並不是動態的,並不會時時變更,它只是在 minion 啟動時收集到的

pillar
pillar 和 grains 不一樣,是在 master 上定義的,並且是針對 minion 定義的一些資訊。像一些比較重要的資料(密碼)可以存在 pillar 裡,還可以定義變數等。

State
他是saltstack的最核心功能,通過預先指定好的sls檔案對被控主機進行管理:包/檔案/網路配置/系統服務/系統使用者等。

檢視被控主機上grains所有值:(每次minion在啟動是都會獲取客戶端資訊)

salt ‘grains.ls 列出所有的 grains 專案名字
salt '
’ grains.items (靜態資料)
salt ‘*’ pillar.items (動態資料)
在這裡插入圖片描述

自定義 grains的方法有兩種(客戶端自定義配置和服務端寫指令碼定義):
1.客戶端配置(缺點:每臺都得去配置,機器多了配置起來不方便)
vi /etc/salt/grains // 新增如下,注意冒號後有空格
role: nginx
env: test
myname: primum est
或者
vi /etc/salt/minion +12
去掉這行內容的註釋
default_include: minion.d/*.conf

cd /etc/salt/minion.d/
vi custom_grains.conf // 新增下面內容
grains:
role:
nginx
env:
test
myname:
primum est

重啟minion服務

systemctl restart salt-minion

服務端獲取 grains
salt ‘web*’ grains.item role env myname // 列出多個
在這裡插入圖片描述

salt ‘web*’ grains.get myname // 列出單個
在這裡插入圖片描述
salt ‘web*’ grains.item myname
在這裡插入圖片描述

grains 在遠端執行命令時很方便。我們可以按照 grains 的一些指標來操作。比如把所有的 web 伺服器的 grains 的 role 設定為 nginx,那這樣我們就可以批量對 nginx 的伺服器進行操作了:

salt -G role:nginx cmd.run ‘hostname’
在這裡插入圖片描述
salt -G os:CentOs cmd.run ‘hostname’
在這裡插入圖片描述

2.服務端寫Python指令碼

服務端寫Python指令碼:
salt-key

mkdir -p /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 //同步檔案到客戶端
在這裡插入圖片描述

在被控端檢視同步效果:
[[email protected] ~]# ll /var/cache/salt/minion/extmods/grains/
總用量 8
-rw------- 1 root root 265 4月 20 10:30 mytest.py
-rw------- 1 root root 613 4月 20 10:30 mytest.pyc

接著:
服務端重新整理模組
salt ‘’ sys.reload_modules //重新整理模板
在這裡插入圖片描述
檢測效果:
salt '
’ grains.item say
在這裡插入圖片描述
salt ‘*’ grains.item mem_usage
在這裡插入圖片描述

pillar管理模板
服務端自定義配置 pillar
vi /srv/pillar/test.sls // 自定義配置檔案,內容如下

conf: /etc/mum.conf
myname: primum est

vi /srv/pillar/top.sls // 總入口檔案,內容如下
base:
‘*’:
- test

重啟master

systemctl restart salt-master

注意:當更改完 pillar 配置檔案後,我們可以通過重新整理 pillar 配置來獲取新的 pillar 狀態:

salt ‘*’ saltutil.refresh_pillar
在這裡插入圖片描述
驗證:

salt ‘web01.saltstack.com’ pillar.items
在這裡插入圖片描述

salt ‘web01.saltstack.com’ pillar.item conf
在這裡插入圖片描述

配置管理安裝Apache
下面進行的演示是遠端通過 yum 方式安裝 Apache。步驟如下:
注意:環境: base、dev(開發環境)、test(測試環境)、prod(生產環境)。

vi /srv/salt/top.sls

base:
web01.saltstack.com’:
- 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
systemctl restart salt-minion
執行命令
salt ‘web01.saltstack.com’ state.highstate
在這裡插入圖片描述

並且被控端已經運行了httpd服務
網址測試:訪問被控端ip地址
http://192.168.80.101/
在這裡插入圖片描述

以上saltstack自動化運維安裝httpd服務安裝完成