目录

1.1 准备实验环境:安装系统

1.2 克隆一台虚拟机完成使用环境

1.3 saltstack 介绍

1.4 saltstack 安装

1.5 saltstack 常用模块

1.6 salt ssh 详解

1.7 salt Grains

1.8 salt Pillar

1.1 准备实验环境:安装系统

1) 硬件配置如下

  saltstack 基本使用

 

 2) 先把光标放到“install CentOS 7”, 按 Tab键编辑内核参数,添加(net.ifnames=0 biosdevname=0)

  作用: 是网卡名称 eth0 这样的格式

  saltstack 基本使用

 

 3) 建议安装语言改成简体中文,其他保持默认即可

  saltstack 基本使用

 

 4) 设置完root密码等待安装完成重启即可完成系统安装

 5) 配置 VMware NAT 模式默认地址池 

  编辑-----> 虚拟网络编辑器

  saltstack 基本使用

1.2 克隆一台虚拟机完成使用环境

1) 配置网卡

  vi /etc/sysconfig/network-scripts/ifcfg-eth0

  saltstack 基本使用

  systemctl restart network

  systemctl disable firewalld

  systemctl disable NetworkManager

2)设置主机名

  vi /etc/hostname

    linux-node1.example.com

3)设置主机名解析

  vi /etc/hosts

    192.168.56.11 linux-node1 linux-node1.example.com

    192.168.56.12 linux-node2 linux-node2.example.com

4)设置DNS

  vi /etc/resolv.conf

    nameserver 192.168.56.2

5)安装最新epel yum 源

  注:此地址中有各种源(https://opsx.alibaba.com/mirror)

         rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm

6)yum安装一些基础包

  yum -y install net-tools vim lrzsz tree screen lsof tcpdump nc mtr nmap

7)关闭selinux

  vim /etc/selinux/config 

    SELINUX=disabled

8)重启系统

  yum update -y && reboot          # 升级所有包同时也升级软件和系统内核, 并重启

9)确认是否一些服务是否已按计划关闭

  getenforce          # selinux是否关闭

  firewall-cmd --state         # 防火墙是否关闭

1.2 克隆一台虚拟机完成使用环境

  :克隆虚拟机必须要先关闭(shutdown)

  1)右键“管理” -------》 “克隆” ----》

  2)选择从哪个状态创建克隆

  saltstack 基本使用

   3)克隆类型(创建完整克隆)

  saltstack 基本使用

   4)新建虚拟机名称

  saltstack 基本使用

   5) 点击 “完成” 即可完成虚拟机克隆

   6) 对克隆的虚拟机 node2 进行一些简单修改

    vim /etc/hostname       # 1、修改主机名

      linux-node2.example.com

    vi /etc/sysconfig/network-scripts/ifcfg-eth0 

      IPADDR=192.168.56.12

    reboot

1.3 saltstack 介绍

  1、saltstack说明

    1)salt是一个异构平台基础设置管理工具(虽然我们通常只用在Linux上),使用轻量级的通讯器ZMQ
    2)用Python写成的批量管理工具,完全开源,遵守Apache2协议,与Puppet,Chef功能类似,有一个强大的远程执行命令引擎
    3)也有一个强大的配置管理系统,通常叫做Salt State System。

    4)主要作用: 远程执行、配置管理、事件驱动

      a.  远程执行: 及支持 使用agent 支持 使用ssh远程执行

      b. 配置管理: 如果用salt描述nginx,没有就会帮你安装,如果nginx配置不对就会帮你改对(保证机器状态和你描述一致)

    5)特点:即可支持 agent 方式,也支持 ssh方式

  2、基本原理

    1)SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信

    2)minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信

    3)master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中

  3、saltstack具体步骤如下

    1)Salt stack的Master与Minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc

    2)salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。

    3)master接收到命令后,将要执行的命令发送给客户端minion。

    4)minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理

    5)minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master

    6)master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中

    7)salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。

  4、saltstack认证原理 

    1)salt-master和salt-minion第一次启动时会在 /etc/salt/pki/master目录下生成公钥和私钥用于身份验证

      [root@linux-node1 master]# cd /etc/salt/pki/master

      [root@linux-node1 master]# ll -lh
      -r-------- 1 root root 1.7K Jan 7 05:36 master.pem
      -rw-r--r-- 1 root root 450 Jan 7 05:36 master.pub

    2)所有未认证minion的私钥都会放到master的  /etc/salt/pki/master/minions_pre/ 文件夹下

    3)当minion通过认证后就会放到 /etc/salt/pki/master/minions 文件夹下

    4)master通过在认证的同时会把自己的公钥发送给minion, minion会放到 /etc/salt/pki/minion/minion_master.pub 

    5)这样就实现了双向密钥交换

1.4 saltstack 安装

  注:saltstack官方提供了各种版本系统安装方法(地址:http://repo.saltstack.com/#rhel)

    1、在linux-node1 中安装saltstack master 和 minion

      yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm 

      yum -y install salt-master salt-minion

        /etc/salt/master(master配置文件)

        /etc/salt/minion(minion配置文件)

    2、在linux-node2 中安装saltstack minion

      yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm 

      yum -y install salt-minion

        /etc/salt/minion(minion配置文件)

    3、在linux-node1中配置 salt-minion

      vim /etc/salt/minion

        #master: salt   修改为(master: 192.168.56.11) ----》配置master IP

        #id:           修改为(id: linux-node1.example.com)   ---》告诉master自己是谁,默认会读取当前主机名

        注:saltstack是以主机名区分不同 agent 需保证主机名唯一

    4、在linux-node2中配置 salt-minion     

      vim /etc/salt/minion

        #master: salt   修改为(master: 192.168.56.11) ----》配置master IP

        #id:           修改为(id: linux-node2.example.com)   ---》告诉master自己是谁,默认会读取当前主机名

    5、启动linux-node1中salt-maser 和 salt-minion

      systemctl start salt-master       # 启动salt-master

      systemctl enable salt-master       # 设置salt-master开机自启动

      systemctl start salt-minion        # 启动

      systemctl enable salt-minion     # 开机自启动

    6、启动linux-node2中salt-minion

      systemctl start salt-minion        # 启动

      systemctl enable salt-minion      # 开机自启动

    7、认证

      salt-key             # 在master中查看所有key的状态

      salt-key -a linux-node1.example.com      # 认证 linux-node1.example.com的key

      salt-key -A          # 一次性认证所有key

    8、远程执行测试

      salt  \*  test.ping         # 测试saltstack minion与master的连通性

      salt \* cmd.run 'df -h'     # 在所有minion中批量执行 df -h 命令

1.5 saltstack 常用模块

  1、cmd.run (远程执行)

    功能:  实现远程命令执行

    salt '*'   cmd.run 'free -m'  

  2、cp模块

    功能: 实现远程文件、目录复制,下载Url文件等操作

# 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
vim /etc/salt/master

file_roots:
  base:
    - /srv/salt
  dev:
    - /srv/salt/dev

systemctl restart salt-master  # 需要重启master
    
# 2、创建同步目录文件夹,和测试文件 /srv/salt/test.sh
mkdir -p /srv/salt/dev
vim /srv/salt/test.sh   #创建测试文件

# 3、将 /srv/salt/ 下的test.sh文件同步到所有minion
salt '*' cp.get_file salt://test.sh /tmp/test.sh


# 4、创建目录 makedirs(当分发的位置在目标主机上不存在时,自动创建该目录)
salt '*' cp.get_file salt://test.sh /aaa/test.sh makedirs=True

# 5、将 /srv/salt 中的testdir 目录复制到所有minion
mkdir /srv/salt/testdir/
salt '*' cp.get_dir salt://testdir /aaa/

# 6、下载百度首页内容保存到所有minion中
 salt '*' cp.get_url http://www.baidu.com /tmp/index.html

  3、状态管理(神笔马良)

    1)修改 /etc/salt/master 文件

# 1、master配置同步根目录(YAML语法,1. 每一级使用两个空格 2. 短横线表示列表)
vim /etc/salt/master

file_roots:
  base:
    - /srv/salt
  dev:
    - /srv/salt/dev

systemctl restart salt-master  # 需要重启master

    2)在 /srv/salt/ 下配置状态管理

      [root@linux-node1 /]#  vim /srv/salt/web/apache.sls

# 1.描述了要装一个httpd服务
apache-install:  # 这个是一个名称,可以随便写
  pkg.installed:  # pkg是状态模块,installed是状态模块中的方法
    - name: httpd  # 描述了我在里要装一个httpd包

# 2.描述了httpd服务是启动状态,并且是开机自启动状态
apache-service:  # 这个是一个名称,可以随便写
  service.running:  # 描述了httpd服务是运行的状态
    - name: httpd
    - enable: True  # 描述httpd服务开机自动启动

    3)在 salt-master中执行命令让 linux-node2按照描述完成按照

      [root@linux-node1 web]# salt   linux-node2.example.com  state.sls  web.apache

      1)通过远程执行,通知node2进行配置管理
      2)state.sls        # 远程执行的一个方法
      3)web.apache      # 执行web目录下的apache文件

  4、grains.item模块

    功能:获取机器基本信息(cpu、内存)

# 1、查看系统版本
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item os
linux-node1.example.com:
    ----------
    os:
        CentOS

# 2、查看cpu型号
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item cpu_model
linux-node1.example.com:
    ----------
    cpu_model:
        Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz
        
# 3、获取ipv4地址
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item fqdn_ip4
linux-node1.example.com:
    ----------
    fqdn_ip4:
        - 192.168.56.11

# 4、查询内核版本
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item kernelrelease
linux-node1.example.com:
    ----------
    kernelrelease:
        3.10.0-957.1.3.el7.x86_64
        
# 5、查看主机名
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item nodename
linux-node1.example.com:
    ----------
    nodename:
        linux-node1.example.com
        
# 6、查看系统版本号 centos6、centos7等
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item osmajorrelease
linux-node1.example.com:
    ----------
    osmajorrelease:
# 7、查看salt版本    
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item saltversion
linux-node1.example.com:
    ----------
    saltversion:
        2018.3.3

# 8、查看cpu数据量
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item num_cpus
linux-node1.example.com:
    ----------
    num_cpus:

# 9、查看内存大小
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item mem_total
linux-node1.example.com:
    ----------
    mem_total:

# 10、查看ipv4地址
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item ipv4
linux-node1.example.com:
    ----------
    ipv4:
        - 127.0.0.1
        - 192.168.56.11

grains.item获取主机基本信息
grains.item获取主机基本信息

相关文章:

  • 2022-12-23
  • 2021-06-18
  • 2021-09-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-12
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-01
  • 2021-08-02
  • 2021-12-07
  • 2021-07-21
  • 2021-08-24
  • 2021-09-30
相关资源
相似解决方案