您的位置:首页 > 其它

5、SaltStack之项目实践

2017-11-17 14:29 120 查看
在实际生产项目中,我们可以来这样划分:

业务模块:根据具体的业务引用需要用到的功能模块(比如搭建LNMP环境)

功能模块:按照功能创建目录,里面对应的功能状态(比如zabbix,mysql,nginx,redis等等)

系统初始化模块:把它放在base环境下,这是我们定义每台机器都要执行的操作

我们来演示如何配置系统初始化模块,这里只是举例如何使用,具体的系统初始化工作可以根据自己的实际情况配置

base环境

[root@c1 ~]# cd /srv/salt/base/;ls
init  #这个是目录,用来存放系统初始化的状态
top.sls

1.dns配置
[root@c1 base]# cat init/dns.sls
/etc/resolv.conf:
file.managed:
- source: salt://init/files/resolv.conf
- user: root
- group: root
- mode: 644

[root@c1 base]# mkdir init/files

[root@c1 base]# cat init/files/resolv.conf
nameserver 114.114.114.114

2、history记录命令执行时间
[root@c1 base]# cat init/history.sls
/etc/profile:
file.append:   <---------文件追加
- text:      <---------下面是追加的内容
- export HISTTIMEFORMAT="%F %T `whoami`"

3、内核调优
[root@c1 base]# cat init/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


我们可以再写个sls把以上的都包含进去,取个自己理解的名字,这样topfile就避免填写所有的状态

[root@c1 base]# cat init/env_init.sls
include:
- init.dns
- init.history
- init.sysctl

topfile只要写env_init.sls这一个就可以了
[root@c1 base]# cat /srv/salt/base/top.sls
base:
'*':
- init.env_init


写完,我们需要测试。test=True,这个参数就是用来模拟测试,不会实际应用

salt '*' state.highstate test=True


测试OK,我们就可以真正的运行

salt '*' state.highstate


开写功能模块--haproxy

prod环境

因为安装haproxy会需要一些依赖包,可能其他模块也会用到,这里就把独立弄出一个模块功能

[root@c1 ~]# mkdir /srv/salt/prod/pkg    #专们用来安装基础依赖包的功能模块

[root@c1 ~]# cd /srv/salt/prod/pkg/
[root@c1 pkg]# cat pkg-init.sls
pkg-init:
pkg.installed:
- names:
- gcc
- gcc-c++
- make
- autoconf
- openssl
- openssl-devel


配置haproxy功能模块

[root@c1 ~]# mkdir /srv/salt/prod/haproxy
[root@c1 ~]# mkdir /srv/salt/prod/haproxy/files
//下载haproxy-1.6.3.tar.gz源码包放在haproxy/fiels目录中


启动脚本文件

把源码包中的haproxy.init第35行修改为
BIN=/usr/local/haproxy/sbin/$BASENAME
cp haproxy-1.6.3/examples/haproxy.init /srv/salt/prod/haproxy/files/


# cat /srv/salt/prod/haproxy/install.sls

include:
- pkg.pkg-init     <------------把pkg-init包含进来, pkg.代表pkg目录

haproxy-install:    <-------这个是自己定义的id,,一个id下面定义的模块只能出现一次,比如file
file.managed:
- name: /usr/local/src/haproxy-1.6.3.tar.gz              <------目标文件(minion端)
- source: salt://haproxy/files/haproxy-1.6.3.tar.gz    <------源文件(master端,路径相对于环境prod目录)
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src && tar xf haproxy-1.6.3.tar.gz && cd haproxy-1.6.3 && make TARGET=linux2628 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
- unless: test -d /usr/local/haproxy    <----unless: <命令>   当命令结果返回false才执行name
- require:     <---------表示依赖下面的执行,只有下面的都执行成功,name才会执行
- pkg: pkg-init
- file: haproxy-install      <-----因为在一个id下的任何一个模块都只出现一次,所以可以直接定位到

haproxy-config-dir:
file.directory:
- name: /etc/haproxy
- user: root
- group: root
- mode: 755

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


直接执行这个功能状态

注意:env=prod 指定环境,否则会使用默认的环境base

# salt 'c2.heboan.com' state.sls haproxy.install env=prod


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: