SaltStack 和 Ansible 的简单比较,saltstackansible
SaltStack 和 Ansible 的简单比较,saltstackansible
SaltStack vs. Ansible 对比
从安全角度推荐Ansible的文章
从使用推荐SaltStack的文章
Saltstack | Ansible |
---|---|
SaltStack 依靠ZeroMQ速度快 | Ansible SSH传输速度慢一些 |
ZeroMQ本身不加密,AES加密,需注意MITM攻击 | SSH安全性高 |
Master需要守护进程 | 无额外开支,SSH即可 |
State语法需要学习 | playbook语法相对简单,容易学习 |
excution模块+state模块,state会调用excution模块 | Ansible模块+playbook |
使用topfile top.sls 使用YAML | playbook使用YAML |
围绕Master输入命令,首次连接使用加密key,使用ZeroMQ库不会拥堵,持续连接速度更快 | 使用SSH通道,无固定Master,更安全,也有MQ版本 |
未提及 | 配置记录文件,原始vs生产 |
默认本地root,客户端root | 支持多用户sudo操作 |
密码容易保管,命令容易审计 | SSH,公钥连接 |
配置模块化,学习成本更高 | 克隆Ansible Git,语法简单 |
以下使用两台机器作为对比
- 192.168.79.128 主
- 192.168.79.129 从
SaltStack篇
部署SaltStack
参考此文 链接,以及 官方 说明,配置SaltStack(不要导入latest rpm会报错)
yum install salt-master
yum install salt-minion
yum install salt-ssh
yum install salt-syndic
yum install salt-cloud
执行安装
配置开机以及启动
chkconfig salt-master on
service salt-master start
minon端安装、配置、启动
yum install salt-minion
chkconfig salt-minion on
service salt-minion start
配置SaltStack
参考官方 配置文件
看下安装情况
netstat -anp |grep 450
在/etc/hosts中配置两边
vim /etc/hosts
192.168.79.128 Master
192.168.79.129 Minion
配置文件位于 /etc/salt/ 中,对应为master 和 minion
修改master文件
vim /etc/salt/master
file_roots:
base:
- /srv/salt/base
prod:
- /srv/salt/prod
修改minion中的salt位置,并重启,在第16行
- #master: salt
+ master: 192.168.79.128
生成key
salt-key -F master
生成master.pem/pub
拷贝 Local Keys 部分的 master.pub到minion配置文件的对应master_finger部分
在minion上查看keys
salt-call --local key.finger
使用-A 选项可以全部增加,或者-a单个添加
salt-key -A
salt-key -a id
测试命令
salt '*' test.ping
运行命令
salt '*' cmd.run 'df -h'
测试命令
salt-master -l debug
salt-minion -l debug
证书
salt-key -L
grants文件
配置权限客户端Grants信息,一般通过配置文件/模块/Python脚本定义
最好保存到minion下的/etc/salt/minion.d/grains 文件下
查看配置,grains在minion启动时搜集到的信息
salt '*' grains.items
配置在minion端的grains文件(新创建)后,可在master端查到
如添加
role: nginx
env: test
myname: tpp
salt '*' grains.item role env myname
salt -G role:nginx cmd.run 'hostname'
salt -G os:CentOS cmd.run 'hostname'
使用命令定义grains
salt '192.168.79.129' grains.append saltbook 'verycool'
salt '192.168.79.129' grains.setvals "{'salt':'good','book':'cool'}"
查看定义的grains
salt '192.168.79.129' grains.item saltbook salt book
Pillar组件
在/srv/pillar下,定义top.sls文件,保存了账户和配置信息
salt '192.168.79.129' sys.list_functions pillar
salt '192.168.79.129' pillar.items
查看pillar值
cat /srv/pillar/services.sls
- zabbix:
- port: 10050
- user: admin
cat /srv/pillar/packages.sls
- zabbix:
- package-name: zabbix
- version: 2.2.4
Module组件
最常用组件
salt '192.168.79.129' sys.list_modules
salt '192.168.79.129' sys.list_functions cmd
查看命令使用
salt '192.168.79.129' sys.doc cmd
执行多个语句
salt '192.168.79.129' test.echo,cmd.run,service.status saltbook,hostname,salt-master
State配置语言
编写state文件,即states.sls文件,使用YAML语法
top.sls作为引导,具体任务执行states.sls
base 默认环境在 /srv/salt下,master中配置
YAML 语言
- 结构:” “空格展示;
- 项目:“- ”来代表;
- 键值对:“:”分割;
不能用tab,大小写敏感,每个缩进2个空格
配合Jinja,先用模板处理,然后在用YAML解析
编译安装Nginx
- 使用模块:file,cmd,service
状态间关系:require,unless
mkdir -p /srv/salt/prod/{pcre,nginx,php}/files
cat /srv/salt/prod/pcre/install.sls
pcre=source-install:
file.managed:
- name: /usr/local/src/pcre-8.37.tar.gz
- source: salt://pcre/files/pcre-8.37.tar.gz
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src && tar zxf pcre-8.37.tar.gz && cd pcre-8.37 && ./configure –prefix=/usr/local/pcre && make && make install
- unless: test -d /usr/local/pcre
- require:
- file: pcre-source-install
nginx
cd /srv/salt/prod/nginx/files/
wget http://nginx.org/download/nginx-1.9.1.tar.gz
cat /srv/salt/prod/nginx/install.sls
include:
- pcre.install
- user.www
nginx-source-install:
file.managed:
- name: /usr/local/src/nginx-1.9.1.tar.gz
- source: salt://nginx/files/nginx-1.9.1.tar.gz
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src && tar zxf nginx-1.9.1.tar.gz && cd nginx-1.9.1 && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-thhp_ssl_module --with-http_stub_status_module --with-file-aio --with-htp_dav_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install && chown -R
www:www /usr/local/nginx
- unless: test -d /usr/local/nginx
- require:
- user: www-user-group
- file: nginx-source-install
- pkg: pkg-init
- cmd: pcre-source-install
SaltStack 安装httpd 服务
/srv/salt/ 下面建立两个文件,参考原文详情链接
top.sls
base:
'*':
- apache
apache.sls
apache-service:
pkg.installed:
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
salt '192.168.79.129' state.highstate
成功,非常好,可先在结尾加 test=True 进行提前对比判断
SaltStack 文件管理
修改 /srv/salt/top.sls
base:
'192.168.79.129':
- filedir
增加 /srv/salt/filedir.sls
file-dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test1/234
- user: root
- file_mode: 644
- dir_mode: 775
- mkdir: True
- clean: True
执行
salt ‘slaver.test.com’ state.highstate
删除rm -rf /srv/salt/test1/234/2.txt 后再执行,同步删除
SaltStack 修改cron
1、建立 cron
1)服务端配置
vim /srv/salt/top.sls //修改为如下
base:
‘slaver.test.com’:
- crontest
编辑 crontest.sls 文件
复制代码
vim /srv/salt/crontest.sls
cron-test:
cron.present:
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '*'
- hour: 20
- daymonth: 1-10
- month: '3,5'
- dayweek: '*'
复制代码
注意,*需要用单引号引起来。当然我们还可以使用 file.managed 模块来管理 cron,因为系统的 cron都是以配置文件的形式存在的。
执行命令:
salt 'slaver.test.com' state.highstate
2)客户端验证
2、删除 cron
1)服务端配置
我们只需修改 crontest.sls 文件
vim /srv/salt/crontest.sls
把 cron.present: 改成 cron.absent:
注意:两者不能共存,要想删除一个 cron,那之前的 present 就得替换掉或者删除掉。
执行命令:
salt 'slaver.test.com' state.highstate
2)客户端验证
crontab -l //可查看到该任务计划已删除
saltstack 编译nginx
top.sls文件
base:
'192.168.79.129':
- nginx.service
准备file文件在/srv/salt/prod/nginx/files中,放置nginx的tar包和配置文件
install.sls文件,配置所需文件,所需用户,执行编译指令
include:
- user.www
nginx-source-install:
file.managed:
- name: /usr/local/src/nginx-1.11.6.tar.gz
- source: salt://nginx/files/nginx-1.11.6.tar.gz
- user: root
- group: root
- mode: 0644
cmd.run:
- name: cd /usr/local/src && tar xvf nginx-1.11.6.tar.gz && cd nginx-1.11.6 && ./configure --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module && make && make install && chown www.www /usr/local/nginx -R
- unless: test -d /usr/local/nginx
- require:
- user: www-user-group
service.sls文件,选择包涵的文件/模块,传递nginx配置文件
include:
- nginx.install
nginx-init:
file.managed:
- name: /usr/lib/systemd/system/nginx.service
- source: salt://nginx/files/nginx.service
- user: root
- group: root
- mode: 754
/usr/local/nginx/conf/nginx.conf:
file.managed:
- name: /usr/local/nginx/conf/nginx.conf
- source: salt://nginx/files/nginx.conf
- user: www
- group: www
- mode: 644
nginx.service:
cmd.run:
- name: /usr/local/nginx/sbin/nginx
- require:
- file: nginx-init
- watch:
- file: /usr/local/nginx/conf/nginx.conf
user文件夹下www.sls文件,配置nginx所需用户
www-user-group:
group.present:
- name: www
- gid: 1100
user.present:
- name: www
- fullname: www
- shell: /sbin/nologin
- uid: 1100
- gid: 1100
执行安装指令
salt '*' state.highstate
saltstack配置DNS
首先在/srv/salt/init/files/下面准备好resolv.conf
vi /srv/salt/base/init/dns.sls
/etc/resolv.conf:
file.managed:
- source: salt://init/files/resolv.conf
- user: root
- group: root
- mode: 644
saltstack 增加审计
审计命令加入
vi /srv/salt/base/init/audit.sls
/etc/bashrc:
file.append:
- test:
- export PROMPT_COMMAND+'{ msg=$(history 1| { read x y; echo $y; }); logger "[euid=$(whoami)]":$(who am i): ['pwd']"$msg";}'
Ansible 篇
安装ansible
使用yum安装
yum install -y ansible
配置服务端
vi /etc/ansible/hosts
加入服务端地址
生成公钥并加入需要免密访问的对方机器用户下
ssh-keygen -t rsa -P ''
参考原文详情链接
ansible的常用模块,链接
Ansible yum安装httpd
ansible node2 -m yum -a "name=httpd state=latest"
ansible 编译安装nginx
参考此篇原文详情
创建目录,下载文件
mkdir -p /ansible/roles/nginx/{defaults,files,handlers,meta,tasks,templates,vars}
wget -P /ansible/roles/nginx/files/ http://nginx.org/download/nginx-1.9.9.tar.gz
创建脚本
vi /ansible/roles/nginx/files/install_nginx.sh
#!/bin/bash
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
groupadd -r nginx
useradd -s /sbin/nologin -g nginx -r nginx
cd /tmp
tar xf nginx-1.9.9.tar.gz;cd nginx-1.9.9
mkdir /var/run/nginx/;chown nginx.nginx /var/run/nginx/
./configure \
--prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx/nginx.pid \
--user=nginx \
--group=nginx \
--with-http_ssl_module
make && make install
sed "/^\s*index / i proxy_pass http://localhost:8080;" /etc/nginx/nginx.conf
/usr/sbin/nginx
创建main.yml
vi /ansible/roles/nginx/tasks/main.yml
- name: copy nginx_tar_gz to client
copy: src=nginx-1.9.9.tar.gz dest=/tmp/nginx-1.9.9.tar.gz
- name: copy install_shell to client
copy: src=install_nginx.sh dest=/tmp/install_nginx.sh
- name: install nginx
shell: /bin/bash /tmp/install_nginx.sh
web配置文件
vi /ansible/webservice.yml
- hosts: 192.168.79.129
remote_user: root
roles:
- nginx
执行安装
ansible-playbook webservice.yml
评论暂时关闭