saltstack狀態管理 部署 jdk 和 tomcat 並執行
首先,在 /srv/salt 目錄下 建立 base,prod,test目錄,分別代表 基礎環境,生產環境 和 測試環境。基礎環境 是存放 公共的狀態,例如 命令 的 審計,核心引數的修改
[[email protected] salt]# cd /srv/salt/
[[email protected] salt]# mkdir base
[[email protected] salt]# mkdir prod
[[email protected] salt]# mkdir test
修改 salt-master配置檔案
vim /etc/salt/master
file_roots:
base:
- /srv/salt/base
test:
- /srv/salt/test
prod:
- /srv/salt/prod
重啟 salt-master
systemctl restart salt-master
假如我們的架構,包含tomcat,nginx 這些東西很獨立,我們可以把每個模組都建一個目錄把相關模組的狀態,所有的配置,都寫在這個目錄下,我們把這個目錄稱之為一個功能模組,這樣做為了模組的複用,每個模組要儘量的獨立,能夠被引用
一個狀態的執行流程,我們可以簡單理解為 ,1 先系統初始化 2 再把軟體裝起來 3 再把軟體執行起來
我們 把 該執行流程 分為 三個模組,分別是
1 系統初始化
2 功能模快
3 業務模組
系統初始化模組,是把公用依賴的東西都 初始化上,例如 核心引數的修改,編譯安裝所需的包
功能模組 是把 每個 安裝流程 記錄下來,然後 交給 業務模組include 進來就可以,以便以後的複用
業務模組 因為業務不一樣,每個軟體的配置檔案也不盡相同,所以我們在該模組下一般是為 不同 的機器分發不同的配置檔案
系統初始化
建立 init 和 files目錄
mkdir /srv/salt/base/init/
mkdir /srv/salt/base/init/files/
然後 cd 到 init 目錄下編寫 salt 檔案
將 操作命令 記錄到 /var/log/message下
[[email protected] init]# cat audit.sls
/etc/bashrc:
file.append:
- text:
- export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg";}'
統一的dns
[[email protected] init]# cat dns.sls
/etc/resolv.conf:
file.managed:
- source: salt://init/files/resolv.conf
- user: root
- group: root
- mode: 644
歷史記錄加上時間
/etc/profile:
file.append:
- text:
- export HISTTIMEFORMAT="%F %T `whoami`"
修改核心引數
[[email protected] init]# cat sysctl.sls
vm.swappiness:
sysctl.present:
- value: 0 # 儘量不適用交換分割槽
net.ipv4.ip_local_port_range:
sysctl.present:
- value: 10000 65000 #隨機埠監聽
fs.file-max:
sysctl.present:
- value: 100000 #開啟最大的檔案數
將 以上的功能 包含到 env_init, 方便後續呼叫
[[email protected] init]# cat env_init.sls
include:
- init.dns
- init.history
- init.audit
- init.sysctl
首先編寫編譯安裝所需的公共包的狀態,在編寫需要編譯安裝狀態時,只需要include此狀態即可
[[email protected] pkg]# pwd
/srv/salt/prod/pkg
[[email protected] pkg]# cat pkg-init.sls
pkg-init:
pkg.installed:
- names:
- gcc
- gcc-c++
- glibc
- make
- autoconf
- openssl
- openssl-devel
編寫JDK狀態
include:
- pkg.pkg-init
java-install:
file.managed:
- name: /usr/local/src/jdk-8u101-linux-x64.tar.gz
- source: salt://java/files/jdk-8u101-linux-x64.tar.gz
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src/ && tar -zxvf jdk-8u101-linux-x64.tar.gz -C /usr/local/
- unless: test -d /usr/local/jdk1.8.0_101
- require:
- pkg: pkg-init
- file: java-install
append-env:
file.append:
- name: /etc/profile
- text:
- JAVA_HOME=/usr/local/jdk1.8.0_101
- export PATH=$PATH:$JAVA_HOME/bin
- require:
- cmd: java-install
cmd.run:
- name: export PATH=$PATH:/usr/local/jdk1.8.0_101/bin
- require:
- cmd: java-install
- file: append-env
功能模組的編寫
在prod 下建立 tomcat 目錄
[[email protected] prod]# mkdir /srv/salt/prod/tomcat
[[email protected] prod]# cd tomcat/
建立files 目錄 ,存放 tomcat 的 安裝包和 配置檔案
[[email protected] tomcat]# mkdir files
編寫 tomcat 狀態
include:
- pkg.pkg-init
tomcat-install:
file.managed:
- name: /usr/local/src/apache-tomcat-8.5.31.tar.gz
- source: salt://tomcat/files/apache-tomcat-8.5.31.tar.gz
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src/ && tar -zxvf apache-tomcat-8.5.31.tar.gz -C /usr/local/
- unless:
- test -d /usr/local/apache-tomcat-8.5.31/
- require:
- pkg: pkg-init
- file: tomcat-install
canalina-managed:
file.managed:
- name: /usr/local/apache-tomcat-8.5.31/bin/catalina.sh
- source: salt://tomcat/files/catalina.sh
catalina.sh的改動只是 在 檔案,添加了 JDK的環境變數
JAVA_HOME=/usr/local/jdk1.8.0_101
JRE_HOME=$JAVA_HOME/jre
業務模組
include:
- tomcat.install
tomcat-running:
cmd.run:
- name: /bin/bash /usr/local/apache-tomcat-8.5.31/bin/startup.sh
- unless: test ! -z `jps | grep Bootstrap`
編輯top.sls
base:
'*':
- init.env_init #init是一個目錄
prod:
'*':
- java.install
- tomcat-service.tomcat-running
先使用
salt '*' state.highstate test=Ture 進行測試
然後 執行
salt '*' state.highstate env=prod