01:saltstack 基本使用

 目录:zabbix其他篇

01:saltstack 基本使用

02:saltstack-api使用详解

目录:

  • 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)硬件配置如下

       

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

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

            

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

       

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

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

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

      

1.2 克隆一台虚拟机完成使用环境     返回顶部

  1)配置网卡

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

        

      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)选择 从哪个状态创建克隆

       

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

       

  4)新建虚拟机名称

       

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

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

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

          linux-node1.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/masterfile_roots:base:- /srv/saltdev:- /srv/salt/devsystemctl 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/masterfile_roots:base:- /srv/saltdev:- /srv/salt/devsystemctl 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
# 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:1# 9、查看内存大小
[root@linux-node1 salt]# salt 'linux-node1.example.com'  grains.item mem_total
linux-node1.example.com:----------mem_total:1819# 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获取主机基本信息

  5、Service模块

      salt '*' service.reload nginx 

1.6 salt ssh详解     返回顶部

  1、安装(master和minion中都需要安装)

       yum -y install salt-ssh

  2、配置花名册,配置要管理的机器

       vim /etc/salt/roster

# Sample salt-ssh config file
#web1:
#  host: 192.168.42.1 # The IP addr or DNS hostname
#  user: fred         # Remote executions will be executed as user fred
#  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
#  sudo: True         # Whether to sudo to root, not enabled by default
#web2:
#  host: 192.168.42.2

linux-node1.example.com:host: 192.168.56.11user: rootpasswd: chnsys@2016port: 22linux-node2.example.com:host: 192.168.56.12user: rootpasswd: chnsys@2016port: 22
/etc/salt/roster

  3、常用命令 

      salt-ssh '*' test.ping -i                    # 使用salt自身模块

      salt-ssh '*' cmd.run 'df -lh'

      salt-ssh '*' -r 'ifconfig'                    # 执行原生shell命令

-r, –raw, –raw-shell # 直接使用shell命令
–priv #指定SSH私有密钥文件
–roster #定义使用哪个roster系统,如果定义了一个后端数据库,扫描方式,或者用户自定义的的roster系统,默认的就是/etc/salt/roster文件
–roster-file #指定roster文件
–refresh, –refresh-cache #刷新cache,如果target的grains改变会自动刷新
–max-procs #指定进程数,默认为25
-i, –ignore-host-keys #当ssh连接时,忽略keys
–passwd #指定默认密码
–key-deploy #配置keys 设置这个参数对于所有minions用来部署ssh-key认证,这个参和–passwd结合起来使用会使初始化部署很快很方便。当调用master模块时,并加上参数 –key-deploy 即可在minions生成keys,下次开始就不使用密码
salt-ssh命令用法

1.7 Salt Grains     返回顶部

  1、grains作用

      grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。

      其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。

      grains 的作用是在每个minion中配置 key value进行标识,使批量执行时可以区分

       salt 'linux-node1*' grains.ls          # grains支持通配符

  2、salt grains原生命令

      1. salt '*' grains.items                                          # 查看minion的全部静态变量

      2. salt '*' grains.ls                                                # 显示grains的变量名称

      3. salt '*' grains.item os                                       # 显示某一个变量

      4. salt '*' grains.get  ip4_interfaces:eth0              # 直接获取内容

      5. salt -G 'os:CentOs' test.ping                             # 所有os的centos的 执行test.ping (-G就是grains)

  3、自定义grains:需要重启 minion

# 1、编辑 minion 文件,配置角色名
vim /etc/salt/minion
'''
grains:roles: apache
'''# 2、重启minion
systemctl restart salt-minion# 3、查看所有机器都有哪些roles
[root@linux-node1 ~]# salt '*' grains.item roles
linux-node1.example.com:----------roles:apache
linux-node2.example.com:----------roles:# 4、让所有角色为apache的机器执行命令'w',-G表示以grains进行目标选择
salt -G 'roles:apache' cmd.run 'w'  
自定义grains:需要重启 minion

  4、自定义grains:无需重启minion

# 1、在minion中新建文件/etc/salt/grains,添加一个 key value
vim /etc/salt/grains
'''
test-grains: test-grains-value
'''# 2、让minion到所有grains中读取配置
salt '*' saltutil.sync_grains# 3、查看所有 key为test-grains的minion
[root@linux-node1 ~]# salt '*' grains.item test-grains
linux-node1.example.com:----------test-grains:test-grains-value
linux-node2.example.com:----------test-grains:# 4、让所有key=test-grains value=test-grains-value 的机器执行命令'w',-G表示以grains进行目标选择
salt -G 'test-grains:test-grains-value' cmd.run 'w' 
自定义grains:无需重启minion

1.8 Salt Pillar     返回顶部

  1、Salt Pillar

      1. 存储位置:存储在master端,存放需要提供给minion的信息,minion每次需要动态从master获取

      2. 应用场景:敏感信息,每个minion只能访问master分配给自己的 pillar

  2、在master配置文件中指定pillar位置

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

systemctl restart salt-master
mkdir /srv/pillar
cd /srv/pillar

 

  3、编辑一个pillar文件

      需求:在centos(httpd)和Ubuntu(apache2)都需要apache服务,但是两种操作系统安装的包名不同

vim /srv/pillar/apache.sls   # 编辑一个pillar文件

{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

  4、指定这个pillar文件给那个minion使用

vim top.sls  # 指定这个pillar文件给那个minion使用

base:'linux-node2.example.com':- apache

  5、确认 pillar中配置的items是否生效

[root@linux-node1 pillar]# salt '*' pillar.items       
linux-node1.example.com:----------
linux-node2.example.com:----------apache:httpd

  6、 Salt Grains 与  Salt Pillar 比较

      

 

转载于:https://www.cnblogs.com/xiaonq/p/10233439.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

display详细说明

display:block,inline,inline-block区别 display:block就是将元素显示为块级元素. block元素的特点是:  总是在新行上开始;  高度,行高以及顶和底边距都可控制;  宽度缺省是它的容器的100%,除非设定…

Java与JavaScript的通信

1. 聊天演示程序内在的想法,连同这篇文章一起都是我自己的。我所见过的所有聊天程序不是完全基于JAVA就是HTML。我的方法是这两种方法的一个很好的平衡。 2. 我通过在Netscape开发者站点阅读大量的文章后收集了在JAVA和JAVASCRIPT间通信的技…

matlab批量修改txt内容_MATLAB作图实例:18:为饼图添加文本标签和百分比

创建饼图时,MATLAB会用切片所代表的整个饼图的百分比来标记每个饼图切片。您可以更改标签以显示不同的文本。简单文字标签用简单的文本标签创建一个饼图。x [1,2,3];pie(x,{Item A,Item B,Item C})带有百分比和文本的标签创建带有包含自定义文本和每个切片的预先计…

泽西岛/贾克斯RS:流式JSON

大约一年前,我写了一篇博客文章,展示了如何使用Jersey / Jax RS流式传输HTTP响应 ,最近我想做同样的事情,但是这次使用JSON。 一种常见的模式是获取我们的Java对象并获​​取该对象的JSON字符串表示形式,但这并不是最…

计算机在盲童音乐教学中的具体应用,计算机在高校中的具体应用

计算机在高校中的具体应用随着信息时代的到来,计算机已经成为了高校中不可缺少的重要资源,因此,在计算机日益普及的今天,对于如何利用计算机来提高教学效果,丰富(本文共3页)阅读全文>>随着计算机网络技术和信息技术的不断发展,人们对信息与知识的需求与日俱...(本文共2页…

python selenium 判断元素是否可见

#在元素定位二次封装的基础上,封装判断元素是否可见,找到元素时返回True,找不到元素的时候抛出异常,返回Falsedef isElementPresent(self,locate_type,value): try: self.findElement(locate_type,value) return T…

获取cxgrid footer内容

cxGridDBTableView1.DataController.Summary.FooterSummaryValues[4];转载于:https://www.cnblogs.com/Thenext/p/10235711.html

国外免费全文网站

国外免费全文网站  1.The NASA Astrophysics Data System -- 世界最大免费全文网站,超过300,000篇全文 主要学科:天体物理学 2.HighWire Press -- 世界第二大免费全文网站,超过235,812篇全文 主要学科:生物学、…

python 怎么算l2范数_数学推导+纯Python实现机器学习算法13:Lasso回归

版权说明:本公号转载文章旨在学习交流,不用于任何商业用途,版权归原作者所有,如有异议,敬请后台联络我们,议定合作或删除,我们将第一时间按版权法规定妥善处理,非常感谢!…

山东理工大学计算机学院学号,计算机组成原理课程设计--山东理工大学计算机学院...

《计算机组成原理课程设计--山东理工大学计算机学院》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计--山东理工大学计算机学院(14页珍藏版)》请在人人文库网上搜索。1、山东理工大学计算机学院课 程 设 计计算机组成原理班 级 姓 名 学 号 指…

Java 8快多少?

Java SE 8已于昨天发布 。 传统上,每个新的主要JRE版本都提供免费的性能提升。 我们还能再得到免费的午餐吗? 这次收益有多大? 让我们对其进行基准测试。 基准方法 使用3个不同的JRE版本(SunJDK 1.6.0_26 ,OpenJDK 1…

Win10 OpenCV3.3.0+VS2013配置大坑,OpenCV解决方案编译报错“找不到python36_d.lib”错误...

今天因为想要用OpenCV做图像识别,小白一个,在网上找到一个教程,但是需要配置OpenCV3.3.0的环境,于是又在网上找OpenCV3.3.0VS2013(因为我之前已经安过了VS2013),前面的都顺利执行,但…

正在编写推箱子游戏的自动求解程序

网上搜索了一下,有好多人现成的产品,不少国产的。编写这个程序只是为了回忆一下算法。不能丢了。 自动求解有俩种方案:一个是求最小行走步骤,一个是求最小推箱子数目。 第一种算法简单些,只要将小人推动的四个方向进行…

JS面向对象编程

什么是面向对象编程(OOP)?用对象的思想去写代码,就是面向对象编程。 面向对象编程的特点 抽象:抓住核心问题封装:只能通过对象来访问方法继承:从已有对象上继承出新的对象多态:多对…

mvp的全称_是让人提神醒脑的 MVP、MVVM 关系精讲!

前言很高兴见到你!我是《Jetpack MVVM 精讲》的独立原创作者 KunMinX,GitHub star 8.7k,专注于深度思考和 Jetpack MVVM 的分享。关于 MVP 和 MVVM 本质和区别的文章,本来我是不想写的,因为经过长达一年的耳濡目染 和对…

启航考研计算机课程,计算机考研专业课如何备考

计算机考研科目多,任务重,我们应该如何在有限的时间里更高效的复习,看一下天任启航考研为大家总结的复习计划吧!1、有计划,重基础计算机学科专业基础综合考试涵盖数据结构、计算机组成原理、操作系统和计算机网络基础等学科专业基…

IntelliJ中的实时模板

如上所述这里 ,的IntelliJ的现场模板可以让你轻松地插入预定义的代码片段到你的源代码。 我在下面发布了一些我最常用的模板,到GitHub上模板文件完整列表的链接(作为我设置新IntelliJ环境时的参考)以及将IntelliJ设置文件添加到G…

链家广州二手房的数据与分析——爬取数据

之前在博客分享了利用 R 和 rvest 包爬虫的基础方法。现在就来实战一下:爬取链家网广州 40,000 套二手房的数据。 之前在 Web Scraping with R 说过的爬虫方法在这篇中就不在赘述了。这里就分享怎么样爬取网站中翻页的数据。 >> Web Scraping across Multiple…

Vue脚手架搭建项目

全局安装vue脚手架 $ npm install -g vue-cli 卸载方法 $ npm uninstall -g vue-cli 查看vue版本(注意:大写的V) $ vue -V 创建项目 $ vue init webpack vue-app ? Project name vue-app ? Project description Vue Project ? Author Pr…

es安全组端口_从零开始在远程服务器(Linux)上搭建es,eshead和ik分词器

一、资源准备远程服务器一个(本教程为CentOS 64位)注:ik分词器版本需与es版本统一jdk1.8.0elasticsearch-head-master.zip二、开放端口注:本例采用的是阿里云服务器1.登录阿里云,选择控制台2.找到左上角的三条白线--》…