企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用


前言

在运维工作中,系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件等,单靠人工去实现数量庞大的工作是效率极低的。于是我们有了自动化运维工具,,目前比较流行的有ansible、saltstack和puppet。

puppet是由rudy语言编写的,起初的使用率非常高,随着python语言的应用更加广泛,基于python语言编写的ansible和saltstack也越来越流行。

Saltstack为server-client模式的系统(在salstack中叫Master-Minion),自己本身支持多master。saltstack除了可以通过在节点安装客户端进行管理还支持直接通过ssh进行管理。运行模式为master端下发指令,客户端接收指令执行。
saltstack依赖于zeromq消息队列,采用yaml格式编写配置文件,比较简单。
支持api及自定义python模块,能轻松实现功能扩展。

Ansible类似与saltstack,基于python开发,关注的重点是精简和快速。不需要在节点安装代理软件,通过ssh执行所有功能。安装运行简单。
其模块可以用任何语言开发,采用yaml格式编写配置文件。
没有客户端,较难扩展
详细ansible学习教程可参考本人博客:
Ansible–1.Ansible的安装及部署
Ansible–2.Ansible中的常用模块
Ansible–3.使用Ansible中的playbook
Ansible–4.Ansible中的变量及加密
Ansible–5.Ansible中的任务执行控制
Ansible–6.Ansible中的角色使用

本章我们主要介绍saltstack自动化运维的知识,主要内容包括saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板。


一、Saltstack安装部署

环境介绍:三台rhel7.6虚拟机,server1负责saltstack-master端,server2\3负责saltstack-minion端。

火墙与selinux均关闭。

server1:

配置软件仓库

vim /etc/yum.repos.d/salt.repo
yum repolist
yum list salt-*
cat /etc/yum.repos.d/salt.repo
[salt]
name=salt 3000
baseurl=http://172.25.9.254/saltstack
gpgcheck=0

在这里插入图片描述

server2、3配置软件仓库

scp  /etc/yum.repos.d/salt.repo server2:/etc/yum.repos.d/
scp  /etc/yum.repos.d/salt.repo server3:/etc/yum.repos.d/

在这里插入图片描述

server1端安装salt-master,并开启服务,查看端口4505和4506是否开启

yum install -y salt-master.noarch
systemctl enable --now salt-master.service
netstat -antlp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

server2\3:
安装salt-minion

yum repolist
yum list salt-*
yum install -y salt-minion.noarch
vim /etc/salt/minion
在这里插入图片描述

master: 172.25.9.1

在这里插入图片描述

修改完配置文件后开启服务

systemctl enable --now salt-minion.service

在这里插入图片描述

添加minion端,信任

salt-key -L #查看清单
salt-key -A #添加所有主机到信任清单,-a可指定单个添加
salt-key -L 

在这里插入图片描述

查看salt-key 更多用法

salt-key --help

在这里插入图片描述

测试: ping minion端

salt '*' test.ping

在这里插入图片描述

yum install -y lsof

在这里插入图片描述

端口使用状况查看

lsof -i :4505
lsof -i :4506

在这里插入图片描述
默认4505端口开启并指向minion端,连接方式为established。

注意:
monion端修改主机名后,需要删除/etc/salt/minion_id 否则master端会一直显示之前的主机名

附加:
ps ax 显示python进程简要作用

yum list python-*
yum install -y python-setproctitle.x86_64
systemctl restart salt-master.service 
ps ax

在这里插入图片描述

二、sls文件远程执行

salt支持通配符

salt server? test.ping

在这里插入图片描述

使用cmd.run模块查看远程主机系统名和系统信息

salt server2 cmd.run uname
salt server2 cmd.run 'uname -a'

在这里插入图片描述
在这里插入图片描述

使用pkg模块安装httpd服务

salt server2 pkg.install 'httpd'

在这里插入图片描述

pkg查看httpd版本

salt server2 pkg.version 'httpd'

在这里插入图片描述

创建salt自定义模板目录

mkdir -p /srv/salt/_modules
cd /srv/salt/_modules

创建自动逸模板

vim my_disk.py

在这里插入图片描述
同步自定义模板到server2

salt server2 saltutil.sync_modules

在这里插入图片描述
进入server2中查看
在这里插入图片描述

执行模块

salt server2 my_disk.df

在这里插入图片描述

saltstack安装httpd并启动

编写.sls文件,为了规范起见,我们采用目录将一类操作的.sls文件归类,操作时可直接指定目录名,默认读取init.sls文件

mkdir apache
cd apache/
vim init.sls
apache:
  pkg.installed:
    - pkgs:
      - httpd
      - php
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://apache/httpd.conf

  service.running:
    - name: httpd
    - enable: true
    - reload: true
    - watch:
      - file: apache

执行文件,在server2上安装apache

salt server2 state.sls apache

在这里插入图片描述

vim httpd.conf # 修改端口后触发watch
在这里插入图片描述

再次执行

salt server2 state.sls apache

在这里插入图片描述
查看端口修改情况

saltstack源码编译安装nginx

先创建目录
在这里插入图片描述

vim init.sls

nginx-install:
  pkg.installed:
    - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel

  file.managed:
    - name: /mnt/nginx-1.20.1.tar.gz
    - source: salt://nginx/nginx-1.20.1.tar.gz

  cmd.run:
    - name: cd /mnt && tar zxf nginx-1.20.1.tar.gz && cd nginx-1.20.1 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --with-http_ssl_module --with-threads --with-file-aio &> /dev/null  && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx

执行后结果
在这里插入图片描述

启动服务nginx

vim service.sls

include:
  - nginx

nginx-user:
  user.present:
    - name: nginx
    - shell: /sbin/nologin
    - home: /usr/local/nginx
    - createhome: false

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

nginx-service:
  file.managed:
    - name: /usr/lib/systemd/system/nginx.service
    - source: salt://nginx/nginx.service
  service.running:
    - name: nginx
    - enable: true
    - reload: true
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

执行结果
在这里插入图片描述

在这里插入图片描述

三、grains自带主机信息以及pillar

查看模块

salt server2 grains.ls
salt server2 grains.items

在这里插入图片描述

在这里插入图片描述

查看ip

salt server2 grains.item ipv4

在这里插入图片描述

三种添加角色的方式。两种来自minion端,一种再master端

minion端:

修改主配

vim /etc/salt/monion
在这里插入图片描述
修改完后记得重启minion服务
在这里插入图片描述
查看角色

salt server2 grains.item roles

在这里插入图片描述

添加文件

vim /etc/salt/grains

roles: nginx

在这里插入图片描述

在这里插入图片描述

查看server3模板

salt server3 grains.item roles

在这里插入图片描述

刷新并查看所有角色

salt '*' saltutil.sync_grains
salt server? grains.item roles

在这里插入图片描述

在这里插入图片描述

mkdir _grains
cd _grains/
vim grains.py
cat grains.py
#!/usr/bin/env python
def grains():
    grains = {}
    grains['hello'] = 'world'
    grains['salt'] = 'stack'
    return grains

在这里插入图片描述

在这里插入图片描述

salt '*' saltutil.sync_grains #同步修改到minion

salt server? grains.item hello

在这里插入图片描述

vim grains.py

不同节点执行不同角色策略

vim top.sls

base:
  'server2':
    - apache
  'server3':
    - nginx.service

highstate执行top

salt '*' state.highstate

在这里插入图片描述

四、jinja模板使用

模板使用小测试test

vim /srv/salt/test.sls

/mnt/testfile:
    file.append:
        {% if grains['fqdn'] == 'server2' %}
        - text: server2
        {% elif grains['fqdn'] == 'server3' %}
        - text: server3
        {% endif %}


在这里插入图片描述

vim /srv/salt/apache/init.sls

apache:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}

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

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/httpd.conf

salt '*' state.sls apache

在这里插入图片描述

执行后查看minion端/mnt/testfile
在这里插入图片描述

在这里插入图片描述

为httpd服务添加并修改端口

vim /srv/pillar/pkgs.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
port: 80
{% elif grains['fqdn'] == 'server3' %}
package: httpd
port: 8080
{% endif %}

在这里插入图片描述

vim /srv/pillar/top.sls

base:
  '*':
    - pkgs

查看pillar是否配置成功

salt '*' pillar.items

在这里插入图片描述

vim apache/init.sls

apache:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}

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

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/httpd.conf
    - template: jinja
    - context:
      http_port: {{ pillar['port']}}
      http_host: {{ grains['ipv4'][-1]}}

调用已经定义的变量

vim httpd.conf

Listen {{ http_host}}:{{ http_port }}

salt '*' state.sls apache

在这里插入图片描述

执行成功无报错,查看httpd端口修改成功

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值