自学内容网 自学内容网

【自动化部署】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)
被管理端1192.168.80.11
被管理端2192.168.80.12

在管理端安装Ansible

  1. 安装EPEL源
    yum install -y epel-release
    
  2. 安装Ansible
    yum install -y ansible
    

Ansible目录结构

Ansible的主要目录结构如下:

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

配置主机清单

  1. 导航到Ansible配置目录
    cd /etc/ansible
    
  2. 编辑主机清单文件
    vim hosts
    
  3. 在文件中添加主机组
    [webservers]
    192.168.80.11
    
    [dbservers]
    192.168.80.12
    

配置密钥对验证

  1. 生成SSH密钥对
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    
    这将生成一个无密码的SSH密钥对,用于无密码登录远程主机。
  2. 安装sshpass(可选,用于自动化密码输入)
    yum install -y sshpass
    
  3. 使用sshpass自动复制公钥到远程主机
    假设远程主机的root密码为abc1234,则可以使用以下命令将公钥复制到远程主机:
    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无密码登录到远程主机,以验证配置是否成功:

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 端口)。
    [webservers]
    192.168.80.11:2222
    192.168.80.1[2:5]
    
  2. 主机组定义
    • 使用方括号 [] 包围组名。
    • 组内可以包含多个主机。
  3. 主机变量
    • 在主机定义后直接添加变量,格式为 变量名=值
    • 这些变量只对该主机有效。
    [webservers]
    192.168.80.11 ansible_port=22 ansible_user=root ansible_password=abc1234
    
  4. 组变量
    • 在组定义后使用 :vars 关键字添加变量。
    • 这些变量对该组内的所有主机有效。
    [webservers:vars]
    ansible_user=root
    ansible_password=abc1234
    
  5. 全局变量
    • 使用 all 组为所有主机定义变量。
    [all:vars]
    ansible_port=22
    
  6. 组嵌套
    • 使用 :children 关键字定义一个父组,该组可以包含多个子组。
    • 父组内的主机是所有子组主机的集合。
    [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 组内的主机。

原文地址:https://blog.csdn.net/Karoku/article/details/144365556

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!