salt --基础操作

匿名 (未验证) 提交于 2019-12-03 00:22:01

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

可以用来定义修改指定文件任意内容
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']}}

配置文件匹配条件修改:

推送:

salt server3 state.sls httpd.service

文章来源: salt --基础操作
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!