SaltStack
-
-
- SaltStack簡介
- SaltStack部署
- 編寫遠端執行子產品
- 在server2安裝apache并修改端口
- 自動安裝nginx
- 啟動nginx編輯配置檔案
- grains子產品
-
- 直接修改minion配置檔案添加角色
- minion建立grains檔案添加
- master上添加grains子產品
-
-
- grains自動化
-
- pillar子產品
- jinja子產品
-
SaltStack簡介
SaltStack是一個伺服器基礎架構集中化管理平台,具備配置管理、遠端執行、監控等功能,基于Python語言實作,結合輕量級消息隊列(ZeroMQ)與Python第三方子產品(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)建構。
通過部署SaltStack,我們可以在成千萬台伺服器上做到批量執行指令,根據不同業務進行配置集中化管理、分發檔案、采集伺服器資料、作業系統基礎及軟體包管理等。
SaltStack部署
主機:
将saltstack 軟體倉庫挂載到apache的預設釋出目錄上
server1
vim /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
baseurl=http://172.25.12.250/rhel7.6
gpgcheck=0
[saltstack]
name=saltstack
baseurl=http://172.25.12.250/3000
gpgcheck=0
yum repolist
yum list salt-*
yum install - y salt-master.noarch
systemctl enable --now salt-master.service
netstat -antlp 4505 4506
server2 /server3
yum install -y salt-minion
vim /etc/salt/minion
16 master: 172.25.12.1
systemctl enable --now salt-minion.service
```cd
server1
```bash
salt-key -L #列出
salt-key -A #添加
salt '*' test.ping
salt-key -d server2 #删除
安裝檢視程序的軟體
yum install -y python-setproctitle.x86_64
systemctl restart salt-master.service
編寫遠端執行子產品
server1
建立子產品目錄:
mkdir /srv/salt/_modules
編寫子產品檔案:
vim /srv/salt/_modules/mydisk.py
def df():
return_salt_['cmd.run']
同步子產品:
salt server2 saltutil.sync_modules
在server2安裝apache并修改端口
server1
mkdir /srv/salt/apache -p
cd /src/salt/apache
server2
cd /etc/httpd/conf/
scp httpd.conf server1:/srv/salt/apache
server1
vim httpd.conf
改端口

vim init.sls
1 apache:
2 pkg.installed:
3 - pkgs:
4 - httpd
5 - php
6
7 file.managed:
8 - name: /etc/httpd/conf/httpd.conf
9 - source: salt://apache/httpd.conf
10
11 service.running:
12 - name: httpd
13 - enable: true
14 - reload: true
15 - watch:
16 - file: apache
salt server2 state.sls apache #同步子產品
自動安裝nginx
server1
mkdir /srv/salt/nginx/
vim init.sls
1 nginx-install:
2 pkg.installed:
3 - pkgs:
4 - gcc
5 - pcre-devel
6 - openssl-devel
7 file.managed:
8 - name: /mnt/nginx-1.20.1.tar.gz
9 - source: salt://nginx/nginx-1.20.1.tar.gz
10
11 cmd.run:
12 - name: cd /mnt && tar zxf nginx-1.20.1.tar.gz && cd nginx-1.20.1/&& sed -i 's/C FLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/ local/nginx --with-http_ssl_module --with-threads --with-file-aio &> /dev/null && ma ke &>/dev/null && make install &> /dev/null
13 - creates: /user/local/nginx
啟動nginx編輯配置檔案
server3
cd /usr/local/nginx/conf
scp nginx.conf server1:/srv/salt/nginx
server1
編寫nginx.service檔案
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
編寫nginx.conf
user nginx;
worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 65535;
}
編寫service.sls檔案
cd /srv/salt/nginx/
vim service.sls
1 include:
2 - nginx
3
4 nginx-user:
5 user.present:
6 - name: nginx
7 - shell: /sbin/nologin
8 - home: /usr/loacl/nginx
9 - createhome: false
10
11 /usr/local/nginx/conf/nginx.conf:
12 file.managed:
13 - source: salt://nginx/nginx.conf
14
15 nginx-service:
16 file.managed:
17 - name: /usr/lib/systemd/system/nginx.service
18 - source: salt://nginx/nginx.service
19 service.running:
20 - name: nginx
21 - enable: true
22 - reload: true
23 - watch:
24 - file: /usr/local/nginx/conf/nginx.conf
salt server3 state.sls nginx.service
grains子產品
直接修改minion配置檔案添加角色
minion建立grains檔案添加
master上添加grains子產品
grains自動化
執行安裝腳本
salt '*' saltutil.sync_grains #同步腳本至受控端
salt '*' state.highstate #該指令直接調用top.sls
pillar子產品
server1
cd srv
mkdir pillar
cd pillar/
vim pkgs.sls
{% if grains['fqdn'] == 'server3' %}
package: httpd
{% elif grains['fqdn'] == 'server2' %}
package: nginx
{% endif }
vim top.sls
base:
'*':
- pkgs
jinja子產品
server3
server3
vim /src/salt/apache/httpd.conf
執行
salt '*' state.sls apache