多节点httpd部署
目录结构
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
service.running:
- name: httpd
- watch:
- file: install-apache
编写top.sls
base:
roles:
- apache.install
salt ‘*’ state.sls apache.install
nginx部署
###依赖包放在统一文件中,便于调用
也可以定义多个,在源码编译时需要哪个直接include即可
nginx管理目录
源码编译安装:nginx
include:
- pkgs.install
install-nginx:
file.managed:
- name: /mnt/nginx-1.15.8.tar.gz
- source: salt://nginx/files/nginx-1.15.8.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-1.15.8.tar.gz && cd nginx-1.15.8 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install
- creates: /usr/local/nginx
~
服务管理:service.sls
i[root@server1 salt]# cat nginx/service.sls
include:
- nginx.install
/usr/local/nginx/conf/nginx.conf:
file.managed:
- source: salt://nginx/files/nginx.conf
service-nginx:
file.managed:
- name: /usr/lib/systemd/system/nginx.service
- source: salt://nginx/files/nginx.service
service.running:
- name: nginx
- reload: True 不添加默认restart
- watch:
- file: /usr/local/nginx/conf/nginx.conf
推送部署
[root@server1 nginx]# salt server3 state.sls nginx.service
minion端已经完成部署
nginx的systemd方式启动脚本,可以直接从官网下载
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
grains静态取值方式
grains配置方式多种
1、在master自定义模块,然后同步至minion上
[root@server1 salt]# mkdir /srv/salt/_grains
def my_grains():
# initialize a grains dictionary
grains = {}
# Some code for logic that sets grains like
grains['hello'] = 'world' ###这里内容可以自定义
grains['salt'] = 'stack'
return grains
2、同步模块至minion端,在minion端可以查看到自定义模块
3、在minion修改minion配置文件也可以修改,修改配置文件需要重启minion服务
4、minion也可以创建grains文件,在其中添加roles
grains静态的,因为它们不经常更换,它们在更新时需要刷新,使用下面命令
salt minion saltutil.refresh_modules
salt grans.ls 列出所有保留字
salt grains.item xxx :取值
salt grains.items :取出所有值
5、测试,可以取到添加的值,这样在自动化部署时候无需使用主机名,而直接取匹配grains取到的变量即可。方便管理
在部署时则需要使用match去匹配
使用state.highstate推送
salt '*' state.highstate