what is saltstack系列四:Agentless SaltStack

SaltStack是基础设施管理的革命性方法,能够以速度取代复杂性。 SaltStack足够简单,可以在几分钟内运行,可扩展到足以管理数以万计的服务器,并且速度足以在几秒钟内与每个系统进行通信。
这些入门教程向您介绍了使SaltStack启动并运行的基础知识。


What is SaltStack系列四:Agentless SaltStack
  1. Salt agentless简介
  2. 安装Salt SSH
  3. Salt Agentless连接方式
  4. Salt agentless 远程执行
  5. 通过salt ssh应用salt state

1、Salt agentless简介

您可以使用Salt以无agent的式在系统上运行Salt命令,而无需安装Salt minion。 对远程系统的唯一要求是支持SSH和Python。
在无代理模式下运行时,Salt做了以下几件事:
  • 通过SSH连接到远程系统。
  • 将Salt的瘦版本agent部署到临时目录,包括任何必需的文件。
  • 运行指定的命令。
  • (可选)清理临时目录。
您可以将Salt agentless与master-minion环境结合使用,也可以完全依赖于agentless方式管理系统。

本入门指南将指导您以agentless模式运行Salt,并包含了一个教程,向您展示如何创建独立的Salt SSH环境。

在使用agentless方式运行程序时,与受管系统进行的所有通信均是通过SSH执行,这使得管理操作的执行速度远远低于标准的Salt with ZeroMQ方式。

2、安装Salt-SSH

Salt使用称为Salt SSH的实用工具连接到无代理的系统。 该实用程序可以安装在管理服务器,开发工作站或笔记本电脑上。 最简单的方法是使用pip进行安装:
pip install salt-ssh

2.1 演示环境

您可以使用任何两个系统来测试Salt SSH。 如果您安装了Vagrant和VirtualBox,则可以使用以下Vagrantfile快速设置出一个演示环境:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define :salt do |salt_config|
    salt_config.vm.box = " bento/ubuntu-16.04"
    salt_config.vm.host_name = 'salt.local'
    salt_ config.vm.network"private_network", ip: "192.168.70.10"
  end

  config.vm.define :managed do |managed_config|
    managed_config.vm.box = " bento/ubuntu-16.04"
    managed_config.vm.host_name = 'managed.local'
    managed_ config.vm.network"private_network", ip: "192.168.70.11"
  endend
这里利用到了在《what is saltstack系列一:SaltStack基础知识》中部署过的一套vagrant测试环境。

2.2 salt-ssh安装教程

为了能快速启动并运行,本教程部分将向您展示如何将Salt SSH安装到Python虚拟环境中,并从单个目录加载所有Salt配置文件。

这是可以用于在开发系统或笔记本电脑上安装配置,使您可以轻松加载此虚拟环境,以便使用Salt快速管理服务器。 
打开一个终端:
  • 行 which pip , 如果没有安装pip,可以参照这个说明安装上。
  • 运行 which virtualenv, 如果未安装virtualenv则执行:pip install virtualenv
  • 为Salt SSH创建一个目录。 对于本教程,我们将在主目录中创建一个salt-ssh目录。 创建并cd到此目录。
  • 运行以下命令创建虚拟环境并安装Salt SSH:
virtualenv venv
source venv/bin/activate
pip install salt-ssh

该目录现在就包含一个符合我们测试要求的虚拟环境,您可以在任何时候使用salt-ssh来激活该虚拟环境。 只需打开一个终端,进入到salt-ssh目录并输入source venv/bin/activate。

3、Salt Agentless的连接方式

让我们了解下Salt SSH是如何存储连接的详细信息并连接到远程的agentless系统。

3.1 ROSTER FILE

默认情况下,Salt使用YAML文件来存储agentless系统的连接细节,称为roster(字面含义为名册)。 一个基本的roster文件包含一个ID,一个主机和一个用户的信息:
ID:
  host: [IP or DNS name]
  user: [username]

Roster文件的默认位置是/etc/salt/roster。 如果要将其保存到其他位置,可以使用--roster-file =参数指定不同的路径。
在roster file中还有很多其他选项,请 参阅该链接以获取更多详细信息。

3.2 salt-ssh命令

salt-ssh命令用于连接到无代理的系统。 该命令与salt命令非常相似:
salt-ssh [target] [command] [arguments]
主要区别在于必须在roster文件中预先定义好目标匹配中指定的任何系统,并且只能使用通配符或正则表达式去匹配目标。

3.3 初始化连接

第一次连接到系统时,Salt SSH会返回带有密钥指纹的消息。 您可以检查此密钥指纹,然后使用-i选项连接以接受密钥。
salt-ssh -i '*' test.ping
Permission denied for host managed, do you want to deploy the salt-ssh key? (password required):
[Y/n] y
Password for vagrant@managed:
managed:
    True
Salt SSH会生成一个本地SSH RSA密钥用于身份验证。 第一次部署密钥时需要验证用户密码,然后后续的连接就无需提供用户密码即可工作:
salt-ssh '*' disk.usage
managed:
    ----------
    /:
        ----------
        1K-blocks:
            41251136
        available:
            38318832
        capacity:
            4%
        filesystem:
            /dev/sda1
        used:
            1196392
    /dev:
        ----------
        1K-blocks:
            245916
        available:
            245904
        capacity:
            1%
        filesystem:
            udev
        used:
            12...

3.4 创建一个roster file并连接到agentless系统上的教程

我们添加一个roster文件,然后运行一个测试命令。 确保你在之前创建的Salt SSH目录(〜/salt-ssh),并且你已经激活了虚拟环境(source venv/bin/activate)。

1)创建一个salt-ssh/roster文本文件并保存每个无代理系统的连接详细信息:
managed:
  host: 192.168.70.11
  user: vagrant
您可以使用此格式将任意数量的系统添加到此文件中。 上面的例子是基于上一节中的vagrant演示系统,但您可以轻松地替换为您自己的环境中的值。

2)创建一个salt-ssh/Saltfile的文本文件并添加连接选项
salt-ssh:
  roster_file: /home/vagrant/salt-ssh/roster # replace 'vagrant' with your username if needed
  config_dir: /home/vagrant/salt-ssh
  log_file: /home/vagrant/salt-ssh/log.txt
Saltfile允许您指定每次运行命令时要包含的命令行选项。

3)运行下面命令来对连接进行测试
salt-ssh -i '*' test.ping

如果一切都没问题,你将获取一个目标系统返回来的响应消息。

3.5 扩展roster file

这在Salt中很常见,roster系统可以扩展。 
您目前可以使用以下任何数据源来填充Salt roster:
本指南使用的是默认的flat方式。

4、Salt agentless 远程执行

在将系统添加到roster后,您可以立即运行shell命令、更新软件包并将文件同时分发到所有目标系统。 作为奖励,所有回复都是以一致的可配置格式返回,以便您可以轻松查看远程执行命令是有效和无效。

4.1 执行一个shell命令

Salt允许您使用cmd.run跨多个系统远程执行shell命令:
salt-ssh '*' cmd.run 'ls -l /etc'
所有目标系统同时立即执行此命令,然后将输出返回给Salt master。 感受到Salt的力量了吗?

4.2 执行一个salt功能函数

尽管使用cmd.run执行shell命令确实很有用,但使用到Salt执行函数时真正强大的功能才会来临。 Salt社区已经付出了巨大的努力来创建数百个功能模块,以简化大多数管理任务。 更好的是,可以在所有支持的平台上一致地使用相同的功能。

查看磁盘使用情况:
salt-ssh '*' disk.usage
安装一个软件包:
salt-ssh '*' pkg.install cowsay
查看网卡接口:
salt-ssh '*' network.interfaces

以上只是大量可利用的功能模块中少数的几个例子。

4.3 远程执行功能的教程

您可以在演示环境中执行本节中的所有远程执行命令。 这些示例使用通配符来匹配roster中的所有系统,但您可以使用您在roster文件中分配的ID替换它:
salt-ssh 'managed' network.interfaces

您还可以传递逗号分隔的系统列表:
salt-ssh 'server1,server2,server3' network.interfaces

5、通过salt ssh应用salt state

Salt state状态与Salt SSH完全兼容,可用于快速自动化地系统设置和配置。

在《what is saltstack系列二:SaltStack配置管理》中包含有关创建Salt state状态的详细说明。 该指南中的所有信息(包括Salt pillar和Salt的文件服务器)均可用于使用Salt SSH应用state状态的管理。

5.1 应用states状态

在我们创建和应用states状态之前,让我们对我们的Salt SSH环境做一些补充配置,将状态系统的文件存放位置配置为指向我们的salt-ssh目录中的目录(默认情况下状态文件存储在/srv/salt)。

确保你在之前创建的Salt SSH目录(〜/salt-ssh),并且你已经激活了虚拟环境(source venv/bin/activate)。
1)使用以下内容创建一个salt-ssh/master文件:
file_roots:
  base:
    - /home/vagrant/salt-ssh/states # you might need to replace 'vagrant' in your environment
2)创建一个名为states的目录,然后添加以下内容并将其保存为states/network.sls:
install network packages:
  pkg.installed:
    - pkgs:
      - rsync
      - lftp
      - curl
3)由于我们正在安装软件包,我们需要在应用此状态之前启用提升的特权。 打开roster文件并添加sudo:True。
managed:
  host: 192.168.70.11
  user: vagrant
  sudo: True
4)使用以下命令应用状态:
salt-ssh '*' state.apply network
(请注意,我们之前将config_dir路径添加到了我们的Saltfile,这就是salt-ssh找到salt-ssh/master文件的原因。)

5.2 管理文件分发

Salt SSH状态也可以管理文件! Salt SSH解析所有salt://文件引用并自动将文件发送到agentless系统中去。

1)在salt-ssh/states目录中,创建一个名为files的子目录。
2)使用以下命令添加salt-ssh/states/files/sample.conf文件:
setting=value
setting2=value2
3)使用以下命令添加并保存名为salt-ssh/states/config.sls的新状态文件:
manage some app config file:
  file.managed:
    - name: /tmp/sample.conf
    - source: salt://files/sample.conf
4)执行下面命令来应用这个状态文件
salt-ssh '*' state.apply config
每次应用此状态时,无代理系统上的配置文件都会更新以匹配salt-ssh/states/files中的版本。

您可以使用远程执行列出配置文件的内容:
salt-ssh '*' cmd.run 'cat /tmp/sample.conf'

5.3 源文件管理

通过将salt-ssh/master的内容更改为以下内容,Salt可以轻松配置Salt来访问GitHub仓库,而不是将状态文件放置在salt-ssh/states目录中:
fileserver_backend:
  - git

gitfs_remotes:
可以查看   Git Fileserver Backend以了解更多详细信息。

5.4 更多示例

以下是可添加到状态文件以配置系统的其他命令的几个示例
Clone from Github
Clone the SaltStack bootstrap script repo:
  pkg.installed:
    - name: git # make sure git is installed first!
  git.latest:
    - rev: develop
    - target: /tmp/salt

Service Running
Make sure the mysql service is running:
  service.running:
    - name: mysql

Create Users
user account for pete:
  user.present:
    - name: pete
    - shell: /bin/bash
    - home: /home/pete
    - groups:
      - sudo

本指南向您展示了使用Salt SSH开始管理服务器是多么简单。 您在Salt SSH中使用的所有状态文件和命令都与Salt在master-minion模式下运行完全兼容,因此您可以轻松地在两种模式之间切换。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值