运维自动化之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

相关文章

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处