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

相关内容

    暂无相关文章