【项目实战28】自动化运维工具——saltstock(远程软件的执行和安装)

一、saltstock简介

1.分布式的,在远程执行命令
2.监控端口4505端口,返回监控信息的窗口为4506
3.基础执行地址为/var/salt/
server2中同步的地址/var/cache/salt/minion/files/base

二、软件的安装和启用

一、安装软件,启动软件

server1

yum install salt-master.noarch 主机端
systemctl enable --now salt-master.service 
yum install -y lsof 下载查看端口工具
lsof -i :4505 查看端口哦4505端口是否开放(图1)
netstat -antlp(图2)

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

server2、3中

yum install salt-minion.noarch  下载客户端
cd /etc/salt/
ls
vim minion 更改配置文件,指向mastser(图3)
systemctl  enable  --now salt-minion.service 

图3 注意:后面的空格
在这里插入图片描述

二、将server2,server3加入管理

salt-key常用参数解释
-a添加指定ID 的key
-A添加全部
-R拒绝全部
-d删除指定ID的
-D删除全部
server1
salt-key  -L  
salt-key  -A
salt-key  -L  图4
salt '*' test.ping 查看连接状态  图5
lsof -i :4505    查看端口信息   图6


图4
在这里插入图片描述
图5
在这里插入图片描述
图6 server1监控着server2, server3
在这里插入图片描述
在这里插入图片描述

三、查看密钥、进程

一、查看密钥

server1
在这里插入图片描述
server2
在这里插入图片描述
结果表明主机和被监控端彼此拥有公钥

二、查看进程

server1

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

在这里插入图片描述

四、安装远程执行模块

salt默认的基础执行地址为 /srv/salt
安装远程执行模块的目的是能在远程服务器上也能执行命令
server1

mkdir /srv/salt   建立默认读取
mkdir /srv/salt/_modules  建立执行模块目录
cd _modules/ 
vim my_disk.py

///
def df():
    return __salt__['cmd.run']('df -h')
//

salt server2 saltutil.sync_modules   发送执行模块到server2  图1
salt server2 my_disk.df              测试df能不显示      图2
salt server3 saltutil.sync_modules   
salt server3 my_disk.df

图1
在这里插入图片描述
图2
在这里插入图片描述
server2

yum install -y tree
cd /var/cache/salt
tree minion/

在这里插入图片描述

五、apache自动安装配置

注1:当salt目录下同时存在 apache/inin.sls 和apache.sls时,优先执行在上一级目录下的apache.sls
注2:因为是python语句特别需要注意每次缩进2个字符
注3:salt:// 代表的是基础地址/src/salt

一、编写自动下载httpd模块

[root@server1 salt] mkdir /srv/salt/apache
[root@server1 salt] cd /srv/salt/apache
[root@server1 apache] vim init.sls   


apache:   此模块名称
  pkg.installed:    安装操作
    - pkgs:         下载安装包名称如下
      - httpd        下载http
      - php          下载php
  file.managed:       文件管理
    - name: /etc/httpd/conf/httpd.conf      覆盖到服务器(minion)端文件的地址
    - source: salt://apache/httpd.conf      文件的来源(本机)

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


二、设置修改后的推送的http配置文件

拷贝修改后的http配置文件到特定的执行地址(salt地址默认发布地址base为/srv/salt)

yum install httpd
cp /etc/httpd/conf/httpd.conf  /srv/salt/apache
vim httpd.conf  修改要推送的http配置文件,将其端口设置为8080

在这里插入图片描述

三、执行查看

server1

[root@server1 apache] pwd
/srv/salt/apache
[root@server1 apache] ls
httpd.conf  init.sls    推送的文件包括设置和文件配置
[root@server1 apache] salt server2 state.sls apache  推送文件

显示推送成功
在这里插入图片描述

六、nginx的自动安装过程

一、配置安装模块

1.自动安装

mkdir /srv/salt/nginx
vim /srv/salt/nginx/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 --prefix=/usr/local/nginx --with-http_ssl_module --with-threads --with-file-aio &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx
///

2.修改好的配置文件

vim nginx.conf 

//
#user  nginx;
worker_processes  auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  65535;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;                                      
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
///    

3.nginx启动文件

vim nginx.service 

//
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
///
vim service.sls 



include:
  - nginx

/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

总共包括以下几个部分
在这里插入图片描述

二、运行

server1

salt server2 state.sls nginx.service 

实验结果
server1
在这里插入图片描述
server2
在这里插入图片描述

七、grains模块使用

一、前言

1.Grains是SaltStack的一个组件,存放在SaltStack的minion端。
2.当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
3.由于grains是静态数据,因此不推荐经常去修改它。用途:
(1)可用作CMDB。
(2)在target中使用,匹配minion。
(3)在state系统中使用,配置管理模块。

二、使用方法

1.grains.item调用方法

[root@server1 nginx] salt server2 grains.item ipv4   查看ipv4  图1
[root@server1 _grains] salt -G 'roles:apache' cmd.run hostname  让角色为apache的minion端查看主机名字 图2
[root@server1 _grains] salt -G 'roles:nginx' cmd.run hostname   让角色为nginx的minion端查看主机名字 图2


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

2.自定义minion端的grains角色

server2
设定角色为apache

[root@server2 yum.repos.d] cd /etc/salt/
[root@server2 salt] ls
cloud           cloud.maps.d       master    minion.d   proxy
cloud.conf.d    cloud.profiles.d   master.d  minion_id  proxy.d
cloud.deploy.d  cloud.providers.d  minion    pki        roster
[root@server2 salt] vim minion      图1   设定角色
[root@server2 salt] systemctl restart salt-minion

图1
在这里插入图片描述

server3
操作同上设定角色为nginx
在这里插入图片描述

3.测试

[root@server1 nginx] salt '*' grains.item roles

测试结果:grains找到各自对应的角色
在这里插入图片描述

4.自定义模块

1.编写自定义模块

[root@server1 salt] mkdir _grains
[root@server1 salt] ls
apache  _grains  _modules  nginx
[root@server1 salt] cd _grains/
[root@server1 _grains] ls
[root@server1 _grains] vim grains.py 设定自定义模块

//
def grains()                                                python特别需要注意缩写
     grains = {}
     grains['hello'] = 'world'
     grains['salt']  = 'stack'
     return grains
/     


[root@server1 _grains] salt '*' saltutil.sync_grains  将此模块同步到其他minion   如图1

图1
在这里插入图片描述

2.测试

[root@server1 _grains]# salt '*' grains.item hello

在这里插入图片描述

八、top模块的使用

可以对不同对象执行不同操作

一、建立top模块特别需要注意每次缩进2字符

[root@server1 _grains] vim top.sls


//
base:             
  'roles:apache':       角色为apache
    - match: grain      匹配方式为grain
    - apache            执行apche的模块
  'roles:nginx':        角色为nginx
    - match: grain      匹配方式为grain
    - nginx.service  执行nginx的模块
//

二、执行top模块

salt '*' state.highstate

在这里插入图片描述

九、pillar模块使用

一、前言

1.pillar和grains一样也是一个数据系统,但是应用场景不同。
2.pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用
pillar更加适合在配置管理中运用。
3.户名密码等),而且可以指定某一个minion才可以看到对应的信息。
4.pillar模块的位置应该和salt文件的位置都在/srv下

二、使用方法

1.自定义设置匹配安装规则pkgs.sls

[root@server1 srv] mkdir pillar
[root@server1 srv] cd pillar/
[root@server1 pillar] vim pkgs.sls

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

2.设置顶层文件top.sls

[root@server1 pillar] vim top.sls


base:
  '*':
    - pkgs
/

3.查询pillar数据:

[root@server1 pillar] salt '*' pillar.items

在这里插入图片描述

4.编写测试模块

在server2,server3中分别建立一个文档里面对应写server2,server3的主机名字

[root@server1 salt]# vim /srv/salt/test.sls

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

测试:

[root@server1 salt]# salt '*' state.sls test

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

十、jinjia模板

一、前言

1.Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。
2.通过jinja模板可以为不同服务器定义各自的变量。
3.两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环或赋值的语句,后者把表达式的结果打印到模板上。

二、pillar+grains+jinja模块

实现httpd不同端口安装运行
修改自动安装模块,导入jinja模板

[root@server1 apache] cd /srv/salt/
[root@server1 salt] ls
apache  _grains  _modules  nginx  test.sls  top.sls
[root@server1 salt] cd apache/
[root@server1 apache] ls
httpd.conf  init.sls
[root@server1 apache] vim 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

更改/srv/salt/apache/httpd.conf文件,设置变量
在这里插入图片描述
测试:

[root@server1 apache] salt server2 state.sls apache

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值