运维自动化之salt

2023-11-20 21:08
文章标签 运维 自动化 salt

本文主要是介绍运维自动化之salt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://wiki.saltstack.cn/reproduction/om-auto-salt

参考:http://blog.lightcloud.cn/?p=251

  • 转载出处: http://blog.lightcloud.cn/?p=251

  • 作者: halfss

目录

  1. 引言: 关于运维
  2. saltstack的基本介绍
  3. salt的安装
    1. 服务端
      1. 安装
      2. 配置文件
      3. 运行
    2. 客户端
      1. 安装
      2. 配置文件
      3. 运行
    3. 基础知识
  4. salt的使用
    1. 基础知识
      1. targeting
      2. nodegroup
      3. grains
      4. pillar
    2. 状态管理
      1. state
        1. state语法
        2. state的逻辑关系
      2. highstate
    3. salt schedule
  5. 实时管理
    1. cmd.run
    2. module
    3. 无master
  6. salt开发
    1. saltclient管理salt
    2. salt api
  7. 参考文档
  8. 关于我

引言: 关于运维

运维的工作主要在2方面:

  1. 状态的管理
  2. 系统性能调优

这里主要简介下运维状态的管理:

  • 对于运维来说,基于状态的配置管理已经向自动化迈进了一大步,以状态为核心的运维,让状态本身有了可管理性;在运维过程中我们会发现,同样的一个配置,我们会在不同的时间,不同的地点一次在一次的配置,这个时候,配置管理就有了重复性;有的甚至是原封不动的重复,而另外一些则是按照一定的规律在发展,这些按照一定规律发展的配置,就是可预测的.综上我认识的,我们运维工作的本身是可管理,可重复,可预测的.基于这样的理念,我们就可以更高一步的推进我们的运维自动化,甚至到智能化.

看到这里,我理想中的运维自动化的配置管理平台应该有如下功能:

  1. 对状态的配置及管理(最基本的)
  2. 可以及时的对系统状态进行调整并能看到结果(可以方便的实时升级系统状态)
  3. 可以对其本身做方便的第三方管理(借助其API,直接给状态制定好其发展方向)

加分项:

  1. 开发语言单一
  2. 架构简单,灵活
  3. 有不差的安全性
  4. 没有商业版

下面是现有比较有代表性的自动化配置管理工具(以下仅基于开源版本进行介绍):

名称

理念

优缺点

puppet

从运维的角度去做配置管理(运维人员做给运维用的)

架构简单,系统比较成熟/不便于第三方管理

chef

从研发的角度去做配置管理(研发人员做给运维用的)

较便于第三方管理,对自身(节点,变量,cookbook)的管理较方便,有自己的dashboard,cookbook支持版本管理,自从cookbook的版本管理/架构复杂,开发语言较多,(安全问题)

以上2者都比较侧重于状态的管理,对单个或者多个状态的临时调整或者管理较差, 2个都有商业版,让我这个用开源版的很自卑

这里我们也能看到,2个配置功能都没能达到我理想中的状态,那就暂用chef吧,直到有一天,了解到了saltstack看到了这句话:“ 系统配置的自动化不仅可预测,可重复, 还具有可管理性”(http://wiki.saltstack.cn/reproduction/dive-into-saltstack ),这尼玛才是运维自动化的未来啊,于是毫无节操的开始学习salt,而且发现越学越喜欢;在我使用puppet及chef的时候都没有使用salt的感觉,太爽了。所以我这里仅仅介绍几本的语法不涉及实际用例,salt的安装非常方便,所以你在看本文档的时候希望你能真正的动手去做一下,然后你就会爱上salt了

  • 附::如果你会python,salt基本是不需要怎么学的,而我正好了解一点py,不过这最多占我选择salt的20%。

saltstack的基本介绍

salt是一个新的基础平台管理工具。很短的时间即可运行并使用起来, 扩展性足以支撑管理上万台服务器,数秒钟即可完成数据传递. 经常被描述为 Func加强版+Puppet精简版。

salt的整个架构都是基于消息来实现.所以能够提供横强的拓展性,灵活性,实时性;不夸了,看实际的slat是什么样的

不过salt还是一个很年轻的东西,还有很多地方不够完善,做的不够好,不过我相信这些都只是时间问题。

注:以下文档仅仅为基本内容,相关知识点的深入学习,请看相应文档连接

salt的安装

安装有很多途径,作为一个centos的用户,我选择rpm

首先添加RPM源:

rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

附:实际生产中我是自建源

epel中关于salt的包:

包名

描述

salt-api.noarch

A web api for to access salt the parallel remote execution system

salt-master.noarch

Management component for salt, a parallel remote execution system

salt-minion.noarch

Client component for salt, a parallel remote execution system

salt.noarch

A parallel remote execution system

salt-cloud.noarch

Generic cloud provisioning tool

服务端

安装

yum install salt-master

配置文件
  • 文件名称: /etc/salt/master
  • 配置文件字段选项介绍: http://docs.saltstack.com/ref/configuration/master.html

  • 最基本字段: interface (服务端监听IP)

运行
  • 调试模式:

salt-master  -l debug

后台运行:

salt-master  -d 

作为centos管理员,我选择:

/etc/init.d/salt-master start

master默认监听两个端口, 4505(publish_port)为salt的消息发布系统,4506(ret_port)为salt客户端与服务端通信的端口,所以确保客户端能跟服务端的这2个端口通信

客户端

安装

yum install salt-minion

配置文件
  • 配置文件: /etc/salt/minion
  • 配置文件选项介绍: http://docs.saltstack.com/ref/configuration/minion.html

  • 最基本字段: master: 服务端主机名 id: 客户端主机名(在服务端看到的客户端的名字)

运行

调试模式

salt-minion  -l debug

后台运行

salt-minion  -d  

作为centos管理员,我选择:

/etc/init.d/salt-minion start

注意事项:

  1. minion 默认和主机名salt的主机通信
  2. 关于配置文件
    • salt的配置文件均为yaml风格
    • $key: $value #注意冒号后有一个空格

基础知识

salt minion和master的认证过程:

  1. minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(private key), minion.pub(public key),然后将minion.pub发送给master
  2. master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了

如下:

启动服务端:

/etc/init.d/salt-minion restart

启动客户端:

/etc/init.d/salt-minion restart

服务端查看key:

# salt-key 
Accepted Keys:
Unaccepted Keys:
minion1
Rejected Keys:

服务端接受key

salt-key -a minion1

测试:

salt 'minion1' test.ping
   minion1:
     True
  • 附:salt更多命令及手册

salt '*' sys.doc

salt的使用

基础知识

targeting

salt '*' test.ping

引号中以实现很强大的minion的过滤与匹配技术

文档:http://docs.saltstack.com/topics/targeting/compound.html

常用命令:

salt 'shell正则' 命令
salt -E 'prel 正则'
salt -N $group 命令
salt -L 'server_id1,server_id2,server_id3'  命令

示例:

salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping

nodegroup

对minion进行分组

文档: http://docs.saltstack.com/topics/targeting/nodegroups.html

在master的配置文件中按如下格式定义:

nodegroups:
  group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
  group2: 'G@os:Debian and foo.domain.com'

在state或者pillar中引用的时候如下:

base:
  group1:
    - match: nodegroup    
    - webserver

grains

minion基本信息的管理

文档:http://docs.saltstack.com/topics/targeting/grains.html

基本使用:

salt '*' grains.ls  查看grains分类
salt '*' grains.items 查看grains所有信息
salt '*' grains.item osrelease 查看grains某个信息

示例:

salt '*' grains.item osrelease
  minoin1:
    osrelease: 6.2

在用salt进行管理客户端的时候或者写state的时候都可以引用grains的变量

pillar

salt敏感信息的管理,只有匹配到的节点才能看到和使用

文档:http://docs.saltstack.com/topics/tutorials/pillar.html

默认:pillar数据定义文件存储路径:/srv/pillar

入口文件:/srv/pillar/top.sls

格式:

base:
  "targeting":
    - $pillar            #名字为pillar.sls的文件来存放对匹配到的minion的变量

$pillar.sls

#基本:
$key: $value
#对应state引用方式: {{ pillar['$key'] }} 

#复杂:
users:
  thatch: 1000
  shouse: 1001
  utahdave: 1002
  redbeard: 1003   
#state引用方式:
#{% for user, uid in pillar.get('users', {}).items() %}
#  {{user}}:
#    user.present:
#      - uid: {{uid}}
#{% endfor %}

查看节点的pillar数据:

salt 'client2' pillar.data

同步pillar:

salt '*' saltutil.refresh_pillar

附:这里我们可以看到,pallar中也可以使用jinja(后面会提到)做一些处理

状态管理

state

salt基于minion进行状态的管理

state语法
  • 文档: http://docs.saltstack.com/ref/states/all/index.html

  • 结构:

$ID:  #state的名字
   $state:     #要管理的模块类型
     - $State states #该模块的状态

示例:

vim:
  pkg:    
    {% if grains['os_family'] == 'RedHat' %}    
    - name: vim-enhanced    
    {% elif grains['os'] == 'Debian' %}    
    - name: vim-nox    
    {% elif grains['os'] == 'Ubuntu' %}    
    - name: vim-nox    
    {% endif %}    
    - installed

如果是redhard系列的就安装 vim-enhanced,如果系统是Debian或者Ubuntu就安装vim-nox

附:state默认使用jinja(http://jinja.pocoo.org/ )的模板语法,文档地址: http://jinja.pocoo.org/docs/templates/

state的逻辑关系
  • 文档:http://docs.saltstack.com/ref/states/ordering.html

require:依赖某个state,在运行此state前,先运行依赖的state,依赖可以有多个

httpd:
  pkg:
    - installed
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://httpd/httpd.conf
    - require:
      - pkg: httpd

watch:在某个state变化时运行此模块

redis:
  pkg:
    - latest
  file.managed:
    - source: salt://redis/redis.conf
    - name: /etc/redis.conf
    - require:
      - pkg: redis
    service.running:
      - enable: True
      - watch:
      - file: /etc/redis.conf
      - pkg: redis

附:watch除具备require功能外,还增了关注状态的功能

order:优先级比require和watch低,有order指定的state比没有order指定的优先级高

vim:
  pkg.installed:
    - order: 1

想让某个state最后一个运行,可以用last

highstate

给minion永久下添加状态

文档: http://docs.saltstack.com/ref/states/highstate.html

默认配置文件:/srv/salt/top.sls

语法:

'*':
  - core
  - wsproxy

/srv/salt/目录结构:

├── core.sls
├── top.sls
└── wsproxy    
       ├── init.sls    
       ├── websocket.py
       └── websockify

应用:

salt "minion1" state.highstate

测试模式:

salt "minion1" state.highstate -v test=True

salt schedule

默认的state只有在服务端调用的时候才执行,很多时候我们希望minon自觉的去保持在某个状态

文档:http://docs.saltstack.com/topics/jobs/schedule.html

#cat /srv/pillar/top.sls 
base:
  "*":
    - schedule
#cat /srv/pillar/schedule.sls
schedule:
  highstate:
  function: state.highstate
  minutes: 30

如上配置后,minion会每30分钟从master拉去一次配置,进行自我配置

实时管理

有时候我们需要临时的查看一台或多台机器上的某个文件,或者执行某个命令

cmd.run

  • 用法: salt '$targeting' cmd.run '$cmd'
  • 示例:salt '*' cmd.run 'hostname'

执行下这样的命令,马上就感受到效果了,速度还贼快

module

同时,salt也将一些常用的命令做了集成

  • 文档:http://docs.saltstack.com/ref/modules/all/index.html

这里几乎涵盖了我们所有的常用命令

比如:

#查看所有节点磁盘使用情况
salt '*' disk.usage

无master

  • 文档:http://docs.saltstack.com/topics/tutorials/quickstart.html

主要应该在测试和salt单机管理的时候

salt开发

saltclient管理salt

只有才master才可以,salt全部用python,这里也用python

文档:http://docs.saltstack.com/ref/python-api.html

示例:

import salt.client
client = salt.client.LocalClient()
ret = client.cmd('*', 'cmd.run', ['ls -l'])
print ret

salt api

salt api我现在还没用,不过我也没搞定,如果你搞定了,我会非常感谢你能分享下的。

参考文档

  1. salt中文wiki:http://wiki.saltstack.cn/

    • 很不错的文章:http://wiki.saltstack.cn/reproduction/dive-into-saltstack

  2. salt官网http://saltstack.com/
    • 官网文档:http://docs.saltstack.com/

关于我

author weibo:halfss (http://weibo.com/halfss)

salt交流QQ群:294953305


这篇关于运维自动化之salt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/397435

相关文章

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

自动化表格处理的革命:智能文档系统技术解析

在当今数据驱动的商业环境中,表格数据的自动化处理成为了企业提高效率、降低成本的关键。企业智能文档系统在智能表格识别方面展现出卓越的性能,通过精准识别和处理各种通用表格,显著提升了企业文档管理的智能化水平。本文将深入探讨该系统在表格识别方面的关键技术和应用优势,以及如何通过行业定制化服务满足不同行业的需求。 1. 通用表格识别 智能文档系统通过先进的OCR技术和表格结构识别算法,能够精准

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

Ganymed实现基本的自动化部署API

Ganymed SSH-2 for Java是一个纯Java实现的SHH2库,官网为http://www.ganymed.ethz.ch/ssh2/,最新的更新时间为2006年10月,在用之前,请仔细看一下FAQ,真的能避免很多很多问题 在google上找到的ganymed-ssh2的官网是http://www.ganymed.ethz.ch/ssh2/,进去看官网的英文简介可以看到该网站已经

python自动化测试框架--RobotFramework

为什么需要测试框架 在测试中,经常会为了怎样做测试、使用什么测试工具、如何使用、为什么使用测试工具、使用测试工具能帮助到我们什么等等问题而纠结。当我们选择一项测试工具时,如何组织大量自动化用例;如何合理的进行初始化清除;如何批量筛选待执行的用例;如何输出清晰的测试报告,就是需要我们考虑的事情了。下面简单介绍个使用比较广泛的自动化测试框架,即Robotframework。 RF的特点 RF:由pyt

探索Invoke:Python自动化任务的瑞士军刀

文章目录 探索Invoke:Python自动化任务的瑞士军刀背景:为何选择Invoke?`invoke`是什么?如何安装`invoke`?简单的`invoke`库函数使用方法场景应用:`invoke`在实际项目中的使用场景一:自动化测试场景二:代码格式化场景三:部署应用 常见问题与解决方案问题一:命令执行失败问题二:权限不足问题三:并发执行问题 总结 探索Invoke:P

Jenkins+Svn+Vue自动化构建部署前端项目(保姆级图文教程)

目录 介绍 准备工作 配置jenkins 构建部署任务 常见问题 介绍 在平常开发前端vue项目时,我们通常需要将vue项目进行打包构建,将打包好的dist目录下的静态文件上传到服务器上,但是这种繁琐的操作是比较浪费时间的,可以使用jenkins进行自动化构建部署前端vue 准备工作 准备vue项目,服务器,linux,ubuntu,centos等都可以,服务器上已经