【自动化部署】Ansible基础以及部署安装指南

文章目录

Ansible

Ansible 是一个功能强大的自动化工具,它能够帮助系统管理员和开发人员自动化配置、部署和管理服务器。

Ansible的核心特性

  1. 基于Python开发
    • Ansible是用Python编写的,这使得它易于扩展和定制。
  2. 配置管理和应用部署
    • Ansible不仅可以用于配置管理(如设置系统参数、安装软件包等),还可以用于应用部署(如部署Web应用、数据库等)。
  3. 融合老牌运维工具的优点
    • Ansible结合了像Puppet和Saltstack这样的老牌运维工具的功能,提供了一个更强大、更灵活的解决方案。
  4. 批量操作
    • Ansible能够批量配置、部署和管理成百上千台主机,大大简化了大规模环境的运维工作。
  5. 模块化设计
    • Ansible的工作基于模块,每个模块执行特定的任务,如复制文件、管理服务等。
  6. Agentless架构
    • Ansible不需要在远程主机上安装任何代理或额外的服务,它仅通过SSH连接来管理远程主机。
  7. 幂等性
    • Ansible的大多数模块都具备幂等性,这意味着无论执行多少次相同的操作,结果都是一致的。

Ansible的工作原理

  1. 控制节点
    • Ansible控制节点是运行Ansible命令的机器,它包含Ansible的核心和所有需要的模块。
  2. 主机清单(Inventory)
    • 主机清单是一个包含要管理的主机信息的文件或数据库,它定义了哪些主机属于Ansible的管理范围。
  3. Playbooks
    • Playbooks是Ansible的配置文件,它们定义了要执行的任务、使用的模块以及任务之间的依赖关系。
  4. 任务执行
    • 当用户在控制节点上运行Ansible命令或Playbook时,Ansible会根据主机清单找到目标主机,并将任务拆解为可执行的命令。
    • Ansible通过SSH将临时文件(包含要执行的命令)发送到远程主机,并在远程主机上执行这些命令。
    • 执行结果通过SSH返回给控制节点,并在控制节点上显示。
    • 执行结束后,临时文件会自动删除。

Ansible的使用场景

  1. 自动化部署
    • Ansible可以用于自动化部署应用程序,包括Web应用、数据库、中间件等。
  2. 配置管理
    • Ansible可以自动化地管理系统配置,如设置网络参数、安装软件包、配置服务等。
  3. 环境一致性
    • Ansible可以帮助确保开发、测试和生产环境的一致性,减少人为错误。
  4. 持续集成/持续部署(CI/CD)
    • Ansible可以与CI/CD工具集成,实现自动化构建、测试和部署。
  5. 安全合规性
    • Ansible可以用于自动化安全审计和合规性检查,确保系统符合安全标准。
  6. 灾难恢复
    • Ansible可以用于自动化灾难恢复过程,如备份恢复、服务重启等。

Ansible部署指南

环境配置

类型 IP地址
管理端 192.168.80.10 (Ansible)
被管理端1 192.168.80.11
被管理端2 192.168.80.12

在管理端安装Ansible

  1. 安装EPEL源

    bash 复制代码
    yum install -y epel-release
  2. 安装Ansible

    bash 复制代码
    yum install -y ansible

Ansible目录结构

Ansible的主要目录结构如下:

/etc/ansible/
├── ansible.cfg       # Ansible的主配置文件
├── hosts             # Ansible的主机清单文件,包含要管理的远程主机信息
└── roles/            # 存放Ansible的角色(Role)的目录,用于组织Playbook

配置主机清单

  1. 导航到Ansible配置目录

    bash 复制代码
    cd /etc/ansible
  2. 编辑主机清单文件

    bash 复制代码
    vim hosts
  3. 在文件中添加主机组

    ini 复制代码
    [webservers]
    192.168.80.11
    
    [dbservers]
    192.168.80.12

配置密钥对验证

  1. 生成SSH密钥对

    bash 复制代码
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

    这将生成一个无密码的SSH密钥对,用于无密码登录远程主机。

  2. 安装sshpass(可选,用于自动化密码输入)

    bash 复制代码
    yum install -y sshpass
  3. 使用sshpass自动复制公钥到远程主机
    假设远程主机的root密码为abc1234,则可以使用以下命令将公钥复制到远程主机:

    bash 复制代码
    sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.80.11
    sshpass -p 'abc1234' ssh-copy-id -o StrictHostKeyChecking=no root@192.168.80.12

    注意:使用明文密码进行自动化操作存在安全风险,建议尽可能使用SSH密钥对或其他更安全的认证方式。

验证配置

完成上述步骤后,您可以尝试使用SSH无密码登录到远程主机,以验证配置是否成功:

bash 复制代码
ssh root@192.168.80.11
ssh root@192.168.80.12

如果无需输入密码即可登录,则说明配置成功。

Ansible Inventory 主机清单

Ansible 的 Inventory 文件(通常位于 /etc/ansible/hosts)是 Ansible 用来管理和组织目标主机的核心文件。

通过 Inventory,可以定义主机、主机组以及它们之间的关系,还可以为每个主机或主机组设置变量。

基本结构

Inventory 文件的基本结构包括主机定义、主机组定义、主机变量、组变量和组嵌套。

  1. 主机定义

    • 直接在主机组下列出 IP 地址或主机名。
    • 可以为每个主机指定连接端口(默认是 SSH 的 22 端口)。
    ini 复制代码
    [webservers]
    192.168.80.11:2222
    192.168.80.1[2:5]
  2. 主机组定义

    • 使用方括号 [] 包围组名。
    • 组内可以包含多个主机。
  3. 主机变量

    • 在主机定义后直接添加变量,格式为 变量名=值
    • 这些变量只对该主机有效。
    ini 复制代码
    [webservers]
    192.168.80.11 ansible_port=22 ansible_user=root ansible_password=abc1234
  4. 组变量

    • 在组定义后使用 :vars 关键字添加变量。
    • 这些变量对该组内的所有主机有效。
    ini 复制代码
    [webservers:vars]
    ansible_user=root
    ansible_password=abc1234
  5. 全局变量

    • 使用 all 组为所有主机定义变量。
    ini 复制代码
    [all:vars]
    ansible_port=22
  6. 组嵌套

    • 使用 :children 关键字定义一个父组,该组可以包含多个子组。
    • 父组内的主机是所有子组主机的集合。
    ini 复制代码
    [nginx]
    192.168.80.20
    192.168.80.21
    192.168.80.22
    
    [apache]
    192.168.80.3[0:3]
    
    [webs:children]
    nginx
    apache

Inventory 变量

Inventory 变量用于定义 Ansible 连接和管理目标主机时所需的配置信息。

  • ansible_host:Ansible 连接节点时的 IP 地址。
  • ansible_port:连接对方的端口号,SSH 连接时默认为 22。
  • ansible_user :连接对方主机时使用的用户名。如果不指定,将使用执行 ansibleansible-playbook 命令的用户。
  • ansible_password:连接时的用户的 SSH 密码,仅在未使用密钥对验证的情况下有效。
  • ansible_ssh_private_key_file:指定密钥认证 SSH 连接时的私钥文件。
  • ansible_ssh_common_args:提供给 SSH、SFTP、SCP 命令的额外参数。
  • ansible_become:允许进行权限提升。
  • ansible_become_method :指定提升权限的方式,如 sudosurunas 等。
  • ansible_become_user :提升为哪个用户的权限,默认提升为 root
  • ansible_become_password:提升为指定用户权限时的密码。

示例

  • 主机定义

    • 192.168.80.11:2222 表示使用非标准 SSH 端口(2222)连接该主机。
    • 192.168.80.1[2:5] 表示连接 IP 地址从 192.168.80.12192.168.80.15 的主机。
  • 组变量

    • [webservers:vars] 下的变量对所有 webservers 组内的主机有效。
    • [all:vars] 下的变量对所有主机有效。
  • 组嵌套

    • [webs:children] 下的 nginxapache 组构成了 webs 父组,webs 父组包含了所有 nginxapache 组内的主机。
相关推荐
道斯4 分钟前
asp.net老项目运维,出现的问题6之数据库
数据库
zxrhhm4 分钟前
Oracle PL/SQL编程中批量数据处理Sparse Collections and SQL%BULK_EXCEPTIONS
数据库·oracle
LCL_1824 分钟前
ansible 自动化运维工具(三)playbook剧本
linux·运维·自动化·ansible
lifeng432124 分钟前
Ansible自动化运维(三)playbook剧本详解
运维·自动化·ansible
无所不在的物质24 分钟前
ansible运维实战
运维·ansible
Suckerbin25 分钟前
linux部署ansible自动化运维
linux·运维·ansible
A5rZ26 分钟前
CTF: 在本地虚拟机内部署CTF题目docker
运维·网络安全·docker·容器
码上无bug31 分钟前
centos上配置yum源
linux·运维·centos·yum
Jackilina_Stone1 小时前
【Ubuntu】使用ip link工具创建虚拟局域网并配置?
运维·ubuntu
先睡1 小时前
动态sql
java·数据库·sql