ansible和saltstack安装和简单操作

目录

Ansible

详细描述

[1. 简介](#1. 简介)

[2. 架构](#2. 架构)

[3. 特点](#3. 特点)

[4. 优势](#4. 优势)

[5. 适用场景](#5. 适用场景)

[6. 简单的playbook示例](#6. 简单的playbook示例)

安装

配置环境

一、安装Ansible

二、配置SSH无密码登录

三、配置Ansible主机清单

模块操作示例

[1. Setup模块](#1. Setup模块)

[2. Copy模块](#2. Copy模块)

[3. File模块](#3. File模块)

[4. Command模块和shell模块](#4. Command模块和shell模块)

[5. Group模块](#5. Group模块)

[6. User模块](#6. User模块)

[7. Get_url模块](#7. Get_url模块)

[8. Yum模块](#8. Yum模块)

SaltStack

详细描述

[1. 简介](#1. 简介)

[2. 架构](#2. 架构)

[3. 特点](#3. 特点)

[4. 优势](#4. 优势)

[5. 适用场景](#5. 适用场景)

[6. 简单的状态文件(SLS)示例](#6. 简单的状态文件(SLS)示例)

安装

配置环境

[一、安装SaltStack Master端](#一、安装SaltStack Master端)

[二、安装SaltStack Minion端](#二、安装SaltStack Minion端)

三、连接测试

模块操作示例

[1. 查看模块](#1. 查看模块)

[2. 查看模块的操作方法](#2. 查看模块的操作方法)

[3. 查看操作方法](#3. 查看操作方法)

[4. Cmd模块](#4. Cmd模块)

[5. Pkg模块](#5. Pkg模块)

[6. Service模块](#6. Service模块)

[7. User模块](#7. User模块)

[8. Group模块](#8. Group模块)

[9. File模块](#9. File模块)

[Ansible 与 SaltStack 对比](#Ansible 与 SaltStack 对比)


Ansible

详细描述

1. 简介

Ansible 是一种简单而强大的自动化工具,主要用于配置管理、应用部署和任务执行。它由 Michael DeHaan 于 2012 年创建,并于 2015 年被 Red Hat 收购。Ansible 的目标是提供一种易于使用且无需复杂架构的自动化解决方案。

2. 架构

Ansible 的架构基于 "推送" 模式,主要由以下组件构成:

  • 控制节点(Control Node):运行 Ansible 命令的主机,通常是一台服务器或个人计算机。

  • 被管理节点(Managed Nodes):需要被配置或管理的目标主机。

  • Inventory(主机清单):定义了被管理节点的列表,以及它们的分组信息。

  • Playbooks(剧本):用 YAML 格式编写的文件,用于定义任务的执行顺序和逻辑。

  • Modules(模块):Ansible 的核心功能单元,用于执行具体的操作(如文件操作、服务管理等)。

  • Connection Plugins(连接插件):用于与被管理节点建立连接,最常用的是 SSH。

3. 特点

  • 无代理(Agentless):Ansible 无需在被管理节点上安装任何代理软件,仅通过 SSH 连接即可执行任务,简化了部署和管理。

  • 模块化:Ansible 提供了丰富的模块,涵盖了文件管理、服务控制、软件包安装等常见运维任务。

  • 易用性:Ansible 的配置文件采用 YAML 格式,易于阅读和编写,降低了学习成本。

  • 幂等性:Ansible 的任务执行具有幂等性,即多次执行相同任务的结果是一致的,不会导致意外的副作用。

  • 扩展性:用户可以自定义模块和插件,以满足特定需求。

4. 优势

  • 简单高效:Ansible 的设计简洁,易于上手,同时能够高效地完成复杂的任务。

  • 安全性:基于 SSH 的连接方式确保了通信的安全性。

  • 可扩展性:支持大规模部署,能够管理数千台服务器。

  • 社区支持:Ansible 拥有庞大的社区,提供了丰富的文档和插件资源。

5. 适用场景

  • 配置管理:自动化配置服务器、安装软件包、设置服务等。

  • 应用部署:快速部署应用程序到多个服务器。

  • 任务自动化:执行重复性任务,如备份、监控等。

  • 多环境管理:支持跨不同操作系统和平台的统一管理。

6. 简单的playbook示例

复制代码
- name: Install and start Apache
  hosts: webservers
  tasks:
    - name: Install httpd
      yum:
        name: httpd
        state: present
    - name: Start httpd service
      service:
        name: httpd
        state: started

安装

配置环境

local host:centos7(192.168.88.100)

ansible1:Ubuntu(192.168.88.120)

一、安装Ansible

复制代码
yum -y install epel-release
复制代码
yum -y install ansible

安装完成后,通过ansible --version命令验证安装结果,确保Ansible版本信息显示正常

二、配置SSH无密码登录

在CentOS 7主机上生成SSH密钥对

复制代码
ssh-keygen

将公钥复制给远程主机

复制代码
ssh-copy-id [email protected]

尝试通过SSH免密登录Ubuntu主机,验证登录是否成功

三、配置Ansible主机清单

编辑/etc/ansible/hosts文件,添加Ubuntu主机的IP地址

复制代码
vim /etc/ansible/hosts

使用ansible ping模块测试与Ubuntu主机的连接

复制代码
ansible webservers -m ping

如果返回pong,则表示连接成功,Ansible安装和配置完成

模块操作示例

1. Setup模块

  • 功能描述setup模块用于收集目标主机的详细信息,包括硬件配置(如CPU、内存、磁盘等)、操作系统版本、网络配置、环境变量等。这些信息可以作为后续任务的参考依据,帮助运维人员更好地了解目标主机的状态。

  • 应用场景 :在进行系统配置、软件安装或故障排查时,通过setup模块获取目标主机的详细信息,可以快速定位问题或确定配置方案。

    ansible webservers -m setup

2. Copy模块

  • 功能描述:该模块可实现从管理机向节点拷贝静态文件,并且设置合理的文件权限。Copy模块在复制文件时会先比较一下文件的checksum(校验和),如果相同则不会复制,返回状态为OK;如果不同才会复制,返回状态为changed。

  • 应用场景 :在配置管理、部署应用程序或分发配置文件时,copy模块是常用的工具。

    ansible all -m copy -a 'dest=/root src=/root/text/text1.txt'

3. File模块

  • 功能描述file模块用于管理文件、目录和链接的属性,例如创建、删除、设置权限、改变所有者等。它还可以用于创建目录、删除文件等操作。

  • 应用场景 :在进行文件系统管理、配置文件修改或清理工作时,file模块非常实用。

    ansible all -m file -a 'path=/root/text1.txt state=absent'

4. Command模块和shell模块

  • Command模块可以运行节点权限范围所有的Shell命令,但是command模块执行的命令是获取不到$HOME这样的环境变量的,还有一些运算符(>、<等),也不支持管道符

  • Shell模块是command模块的增强版,他可以执行远程主机的Shell脚本文件,也支持管道

    ansible all -m shell -a 'ps -ef|grep mysql'
    ansible all -m command -a 'ps -ef'

5. Group模块

  • 功能描述group模块用于管理用户组,包括创建、删除、修改用户组的属性等。

  • 应用场景 :在进行系统用户管理、权限分配时,group模块是必不可少的工具。

    ansible webservers -m group -a 'gid=2017 name=test'

6. User模块

  • 功能描述user模块用于管理用户账户,包括创建、删除、修改用户属性(如密码、用户组、登录Shell等)。

  • 应用场景 :在进行用户管理、权限分配或系统配置时,user模块非常实用。

    ansible webservers -m user -a 'name=test group=test'

7. Get_url模块

  • 功能描述get_url模块用于从指定的URL下载文件到目标主机的指定路径。它支持多种协议(如HTTP、HTTPS等),并可以设置文件的校验和,确保文件完整性。

  • 应用场景 :在需要从远程服务器下载文件(如软件包、配置文件等)时,get_url模块非常方便。

    ansible all -m get_url -a 'dest=/root url=http://www.baidu.com'

8. Yum模块

  • 功能描述yum模块用于在基于RPM的系统(如CentOS、RHEL等)上管理软件包。它支持安装、更新、删除软件包,并自动处理依赖关系。

  • 应用场景 :在进行系统软件管理、安装应用程序时,yum模块是常用的工具。

    ansible 192.168.88.120 -m yum -a "name=tree state=present"


SaltStack

详细描述

1. 简介

SaltStack 是一种开源的配置管理工具,由 Thomas Hatch 于 2011 年创建。它旨在提供一种高效、可扩展的解决方案,用于管理大规模基础设施。SaltStack 通过其独特的 "Master-Minion" 架构,实现了对大量服务器的集中管理。

2. 架构

SaltStack 的架构基于 "拉取" 模式,主要由以下组件构成:

  • Master(主节点):负责管理和分发任务,存储配置数据和指令。

  • Minion(从节点):被管理的主机,负责执行 Master 分发的任务。

  • States(状态):定义了目标主机的期望状态,类似于 Ansible 的 Playbooks。

  • Pillars(柱子):用于存储敏感数据或特定于环境的配置信息。

  • Grains(谷物):描述了 Minion 的系统信息(如操作系统、CPU、内存等)。

  • Beacons(信标):用于监控系统事件,并触发相应的响应。

3. 特点

  • Master-Minion 架构:通过集中式管理,实现了对大量服务器的高效管理。

  • 高并发能力:SaltStack 支持高并发通信,能够快速处理大量任务。

  • 灵活性:提供了丰富的 API 和插件机制,方便用户自定义功能。

  • 实时性:支持实时通信和任务执行,能够快速响应系统变化。

  • 多语言支持:支持多种编程语言(如 Python、Shell 等)编写状态文件和模块。

4. 优势

  • 高性能:SaltStack 的并发处理能力使其能够高效管理大规模集群。

  • 可扩展性:支持从几十台到数千台服务器的管理。

  • 灵活性:提供了丰富的自定义功能,能够满足复杂的需求。

  • 实时性:能够实时监控和响应系统事件,适合动态环境。

5. 适用场景

  • 大规模集群管理:适用于管理大规模数据中心或云计算环境。

  • 实时监控与响应:通过信标功能实时监控系统状态,快速响应事件。

  • 复杂环境管理:支持多种操作系统和平台的统一管理。

  • 自动化部署:快速部署和配置应用程序及服务。

6. 简单的状态文件(SLS)示例

复制代码
apache:
  pkg.installed:
    - name: apache2
  service.running:
    - name: apache2
    - enable: True

安装

配置环境

master端:Ubuntu--2(192.168.88.121)

minion端:Ubuntu(192.168.88.120)

一、安装SaltStack Master端

复制代码
apt install salt-master

启动SaltStack Master服务

复制代码
systemctl start salt-master
systemctl enable salt-master

二、安装SaltStack Minion端

复制代码
apt install -y salt-minion

修改Minion端配置文件/etc/salt/minion,添加以下内容

复制代码
vim /etc/salt/minion

启动Minion端服务

复制代码
systemctl start salt-minion
systemctl enable salt-minion

三、连接测试

使用salt-key命令查看minion端连接情况

复制代码
salt-key -L

测试salt命令验证master与minion端的通信

复制代码
salt '*' test.ping
salt '*' cmd.run 'uptime'

安装saltstack完成

模块操作示例

1. 查看模块

复制代码
salt 'saltminion' sys.list_modules

2. 查看模块的操作方法

复制代码
salt 'saltminion' sys.list_functions service

3. 查看操作方法

复制代码
salt 'saltminion' sys.doc service.start

4. Cmd模块

  • 功能描述cmd模块用于在目标主机上执行命令。它支持多种命令执行方式,包括简单的命令执行、脚本运行等。

  • 应用场景 :在需要执行系统命令、脚本或进行系统状态检查时,cmd模块非常实用。

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

5. Pkg模块

  • 功能描述pkg模块用于管理目标主机上的软件包。它支持安装、更新、删除软件包,并自动处理依赖关系。

  • 应用场景 :在进行系统软件管理、安装应用程序时,pkg模块是常用的工具。

    salt 'saltminion' pkg.install vsftpd

6. Service模块

  • 功能描述service模块用于管理目标主机上的服务。它支持启动、停止、重启服务,并可以查询服务状态。

  • 应用场景 :在进行服务管理、故障排查时,service模块非常实用。

    salt 'saltminion' service.start vsftpd
    salt 'saltminion' service.enable vsftpd

7. User模块

  • 功能描述user模块用于管理目标主机上的用户账户。它支持创建、删除用户,修改用户属性(如密码、用户组等)。

  • 应用场景 :在进行用户管理、权限分配时,user模块是必不可少的工具。

    salt 'saltminion' user.add zzz

8. Group模块

  • 功能描述group模块用于管理目标主机上的用户组。它支持创建、删除用户组,修改用户组属性。

  • 应用场景 :在进行用户管理、权限分配时,group模块是常用的工具。

    salt 'saltminion' group.add test
    salt 'saltminion' group.adduser test zzz

9. File模块

  • 功能描述file模块用于管理目标主机上的文件和目录。它支持文件复制、文件权限设置、目录创建等操作。

  • 应用场景 :在进行文件系统管理、配置文件修改时,file模块非常实用。

    salt 'saltminion' file.addend /etc/profile "export JAVA_HOME=/usr/local/jdk"


Ansible 与 SaltStack 对比

特性 Ansible SaltStack
架构 无代理,基于 SSH 推送 Master-Minion 架构,基于 ZeroMQ 拉取
安装复杂度 简单,无需在被管理节点上安装代理 需要在被管理节点上安装 Minion
并发能力 中等,适合中小规模部署 高并发,适合大规模集群
实时性 任务执行后生效 支持实时监控和响应
易用性 配置文件简单,易于上手 配置复杂,学习曲线较陡
适用场景 中小规模部署,简单任务自动化 大规模集群管理,复杂环境