salt --基础操作

本文介绍了Salt的基础操作,包括配置master和minion,设置yum源,安装与启动过程,以及YAML语法在Salt SLS文件中的应用。内容涉及grains、pillar和jinja模板的使用,详细解释了如何管理minion的身份验证、配置文件同步,以及通过pillar筛选和jinja模版修改文件内容。此外,还展示了如何部署httpd、nginx和haproxy服务。

salt的初步使用

salt需要配置master和minion

首先将salt的所有rpm包放到本地做一个yum源方便安装

这里写图片描述
这里写图片描述
yum源:

[salt]
name=salt
baseurl=file:///root/rhel6/
gpgcheck=0

安装:

yum install -y salt-master
yum install -y salt-minion

注:master和minion需要时间同步和解析 iptables selinux关闭

minion端只需要配置指向master端即可实现
这里写图片描述
启动,master minion master端需要认证
查看maser的minion

salt-key -L

通过minion的认证

salt-key -A #通过所有的minion  --help

这里写图片描述

测试minion端是否可以连接

salt server2 test.ping   #调用test模块

如果minion可以连接即可实现master端直接查看minion端信息:

salt server2 cmd.run hostname
salt server2 cmd.run df
salt server2 cmd.run 'ip addr'

lsof软件可以查看连接信息(通过监听端口的方式)

master:
lsof -i :4505
lsof -i :4506
minion:
lsof -i :随机  #需要使用查看端口命令找到  netstat -antlp

注:ZMQ 拓扑

若minion端主机名发生变化,需要删除/etc/salt/minion_id 文件 重新认证

tree命令查看拓扑图

/var/cache  tree master/ #查看master或者minion端拓扑图
/etc/salt tree pki/  #查看pki/拓扑图
master:
/etc/salt/pki/master/minions 
md5sum server2  #查看minion唯一信息
minion:
/etc/salt/pki/minion/
md5sum minion.pub #查看minion唯一信息,与master端相同

这里写图片描述
这里写图片描述

salt使用YAML语法写sls文件
salt使用YAML语法基本规则

  • 缩进:YAML使用一个固定的缩进风格表示数据层结构关系。Salt需要每个缩进级别由两个空格组成。不要使用tabs。
  • 冒号:Python的字典当然理所当然是简单的键值对。其他语言的用户应该知道这个数据类型叫哈希表或者关联数组。字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。Values的表现形式冒号下面的每一行,用一个空格隔开: my_key: my_value 另一种选择,一个value可以通过缩进与key联接:
    my_key:
    my_value

  • 短横杠:想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表的一部分。
    list_value_one
    list_value_two
    list_value_three

接下来写一个简单的sls文件,推送httpd服务
首先,开启master端的base路径,所有的sls文件都是在base路径下实现

vim /etc/salt/master
file_roots:
  base:
    - /srv/salt

修改完配置文件都需要重启生效

注:切忌salt的配置文件也需要使用YAML语法

mkdir /srv/salt
mkdir httpd
/srv/salt/httpd/:

这里写图片描述

vim install.sls
apache-install:
  pkg.installed:
    - pkgs:
      - httpd
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://httpd/files/httpd.conf
    - user: root
    - group: root
    - mode: 644
    - require:
      - pkg: apache-install
vim service.sls
include:
  - httpd.install

apache:
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

files目录里放配置文件及其他文件如启动脚本
install.sls 是安装文件
service.sls 是服务文件

httpd相对简单的服务通过系统yum源安装

通过salt命令实现推送:

salt server2 state.sls httpd.service #指定minion,调用state模块,服务名,服务文件

注:salt 命令可以搭配使用通配符使推送更加有效

这里写图片描述
可以看出占用空间很小

du -h install.sls

推送nginx

nginx通过安装第三方rpm包来实现,同时有依赖性的存在

/srv/salt/
mkdir nginx

这里写图片描述

vim install.sls

include:
  - pkgs.nginx

nginx-install:
  file.managed:
    - name: /mnt/nginx-1.12.0.tar.gz
    - source: salt://nginx/files/nginx-1.12.0.tar.gz

  cmd.run:
    - name: cd /mnt && tar zxf nginx-1.12.0.tar.gz && cd nginx-1.12.0 && sed -i.bak 's/#define NGINX_VER          "nginx\/" NGINX_VERSION/#define NGINX_VER          "nginx"/g' src/core/nginx.h && sed -i.bak 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
    - create: /usr/local/nginx

vim service.sls

include:
  - nginx.install
  - users.nginx

/etc/init.d/nginx:
  file.managed:
    - source: salt://nginx/files/nginx
    - mode: 755

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf


nginx-service:
  service.running:
    - name: nginx
    - enable: True
    - reload: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

files目录下放 的是nginx的配置文件,rpm包以及nginx的启动脚本
由于nginx需要用户及依赖性所以在base路径下配置对应的sls文件较为方便
这里写图片描述

同样files目录下可以存放依赖性的rpm包

/srv/salt/pkgs/
vim nginx.sls
make:
  pkg.installed:
    - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel
      - zlib-devel

这里写图片描述

/srv/salt/users/
vim nginx.sls
nginx-group:
  group.present:
    - name: nginx
    - gid: 800

nginx-user: 
  user.present:
    - name: nginx
    - uid: 800
    - gid: 800
    - shell: /sbin/nologin
salt server2 state.sls nginx.service

这里写图片描述
成功

yum provides */netstat yum包寻找

管理一键部署top文件 ,直接在base路径下

/srv/salt/
vim top.sls
base:
  'server2':
    - httpd.service
  'server3':
    - nginx.service

此时部署的命令为:

salt '*' state.highstate   #*代表所有minion端,调用state模块

推送负载均衡haproxy:(安装系统yum自带的haproxy)

/srv/salt/
mkdir haproxy

这里写图片描述
minion端配置yum源:
这里写图片描述

vim install.sls

haproxy-install:
  pkg.installed:
    - pkgs:
      - haproxy
  file.managed:
    - name: /etc/haproxy/haproxy.cfg
    - source: salt://haproxy/files/haproxy.cfg
  service.running:
    - name: haproxy
    - reload: True
    - watch:
      - file: haproxy-install

管理用户组:

/srv/salt/users/
vim haproxy.sls
haproxy-group:
  group.present:
    - name: haproxy
    - gid: 200
haproxy-user:
  user.present:
    - name: haproxy
    - uid: 200
    - gid: 200
    - shell: /sbin/nologin
salt server2 state.sls haproxy.install

这里写图片描述

利用这三个可基本实现一个负载均衡

vim top.sls
base:
  'server1':
    - haproxy.install
  'server2':
    - nginx.service
  'server3':
    - httpd.service
salt '*' state.highstate


实现:
这里写图片描述

grains

查看grains信息

salt server2 grains.items    #server2 的所有信息
salt server2 grains.item os   #os 信息
salt server2 grains.item ipv4  #ip信息
salt server2 grains.item fqdn  #主机名信息
salt -G 'os:RedHat' test.ping   #可以通过grains筛选minion端

设置grains的三种方式:
1.minion端修改配置文件

vim /etc/salt/minion
grains:
  roles:
    - haha

重启monion端,即可设置成功

salt server2 grains.item roles    #查看刚刚设置信息
salt -G 'roles:haha' test.ping   

这里写图片描述

2.minion端/etc/salt/下直接写grains配置文件,然后master端同步

/etc/salt/
vim grains
roles: nginx
westos: linux

同步命令:

salt server3 saltutil.sync_grains

这里写图片描述
3.只在master端操作
base路径下创建_grains目录编写py文件

/srv/salt/_grains
vim my_grains.py
#!/usr/bin/env python

def my_grains():
    grains = {}
    grains['hello'] = 'world'
    grains['salt'] = 'saltstack'
    return grains

master同步:

salt server3 saltutil.sync_grains

这里写图片描述
minion端查看文件以同步
这里写图片描述

grains应用到top文件中

/srv/salt/
vim top.sls
base:
  'roles:httpd':
    - match: grain
    - httpd.service

pillar

master端开启pillar

/etc/salt/
vim master
pillar_roots:
  base:
    - /srv/pillar

重启master

mkdir /srv/pillar/

简单的pillar模版

/srv/pillar/
mkdir web
/srv/pillar/web
vim apache.sls
{% if grains['fqdn'] == 'server2' %}
apache: httpd
{% elif grains['fqdn'] == 'server3' %}
apache: nginx
{% endif %}
/srv/pillar/
vim top.sls
base:
  '*':
    - web.apache

更新pillar

salt server[2,3] saltutil.refresh_pillar

这里写图片描述

通过pillar筛选:

salt -I 'apache:httpd' test.ping
salt -I 'apache:nginx' test.ping

这里写图片描述
通过网段ip筛选:

salt -S 172.25.40.0/24 test.ping

jinja模版

可以用来定义修改指定文件任意内容
httpd服务为例:
修改他的配置文件:

vim install.sls
apache-install:
  pkg.installed:
    - pkgs:
      - httpd

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://httpd/files/httpd.conf
    - template: jinja
    - context:
        bind: 172.25.40.3
        port: 8080

在它的配置文件中写入:

Listen {{bind}}:{{port}}

重新推送:

salt server3 state.sls httpd.service

这里写图片描述

利用pillar实现:

/srv/pollar/
vim web/apache.sls
{% if grains['fqdn'] == 'server2' %}
apache: httpd
{% elif grains['fqdn'] == 'server3' %}
apache: nginx
bind: 172.25.40.3
port: 80
{% endif %}
/srv/salt/httpd/
vim install.sls
apache-install:
  pkg.installed:
    - pkgs:
      - httpd

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://httpd/files/httpd.conf
    - template: jinja
    - context:
        bind: {{pillar['bind']}}
        port: {{pillar['port']}}

配置文件匹配条件修改:

Listen {{pillar['bind']}}:{{pillar['port']}}

推送:

salt server3 state.sls httpd.service

这里写图片描述

lib文件
举例:
在httpd的files目录下写入lib.sls文件

{% set port = 8080 %}

install.sls文件中pillar模版注释
在httpd配置文件开头写:

{% from 'httpd/files/lib.sls' import test with context %}

推送即可

或者直接配置文件修改:

Listen {{grains['ipv4'][1]}}:80
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值