【自动化部署】Ansible基础以及部署安装指南
文章目录
Ansible
Ansible 是一个功能强大的自动化工具,它能够帮助系统管理员和开发人员自动化配置、部署和管理服务器。
Ansible的核心特性
- 基于Python开发:
- Ansible是用Python编写的,这使得它易于扩展和定制。
- 配置管理和应用部署:
- Ansible不仅可以用于配置管理(如设置系统参数、安装软件包等),还可以用于应用部署(如部署Web应用、数据库等)。
- 融合老牌运维工具的优点:
- Ansible结合了像Puppet和Saltstack这样的老牌运维工具的功能,提供了一个更强大、更灵活的解决方案。
- 批量操作:
- Ansible能够批量配置、部署和管理成百上千台主机,大大简化了大规模环境的运维工作。
- 模块化设计:
- Ansible的工作基于模块,每个模块执行特定的任务,如复制文件、管理服务等。
- Agentless架构:
- Ansible不需要在远程主机上安装任何代理或额外的服务,它仅通过SSH连接来管理远程主机。
- 幂等性:
- Ansible的大多数模块都具备幂等性,这意味着无论执行多少次相同的操作,结果都是一致的。
Ansible的工作原理
- 控制节点:
- Ansible控制节点是运行Ansible命令的机器,它包含Ansible的核心和所有需要的模块。
- 主机清单(Inventory):
- 主机清单是一个包含要管理的主机信息的文件或数据库,它定义了哪些主机属于Ansible的管理范围。
- Playbooks:
- Playbooks是Ansible的配置文件,它们定义了要执行的任务、使用的模块以及任务之间的依赖关系。
- 任务执行:
- 当用户在控制节点上运行Ansible命令或Playbook时,Ansible会根据主机清单找到目标主机,并将任务拆解为可执行的命令。
- Ansible通过SSH将临时文件(包含要执行的命令)发送到远程主机,并在远程主机上执行这些命令。
- 执行结果通过SSH返回给控制节点,并在控制节点上显示。
- 执行结束后,临时文件会自动删除。
Ansible的使用场景
- 自动化部署:
- Ansible可以用于自动化部署应用程序,包括Web应用、数据库、中间件等。
- 配置管理:
- Ansible可以自动化地管理系统配置,如设置网络参数、安装软件包、配置服务等。
- 环境一致性:
- Ansible可以帮助确保开发、测试和生产环境的一致性,减少人为错误。
- 持续集成/持续部署(CI/CD):
- Ansible可以与CI/CD工具集成,实现自动化构建、测试和部署。
- 安全合规性:
- Ansible可以用于自动化安全审计和合规性检查,确保系统符合安全标准。
- 灾难恢复:
- Ansible可以用于自动化灾难恢复过程,如备份恢复、服务重启等。
Ansible部署指南
环境配置
类型 | IP地址 |
---|---|
管理端 | 192.168.80.10 (Ansible) |
被管理端1 | 192.168.80.11 |
被管理端2 | 192.168.80.12 |
在管理端安装Ansible
- 安装EPEL源:
yum install -y epel-release
- 安装Ansible:
yum install -y ansible
Ansible目录结构
Ansible的主要目录结构如下:
/etc/ansible/
├── ansible.cfg # Ansible的主配置文件
├── hosts # Ansible的主机清单文件,包含要管理的远程主机信息
└── roles/ # 存放Ansible的角色(Role)的目录,用于组织Playbook
配置主机清单
- 导航到Ansible配置目录:
cd /etc/ansible
- 编辑主机清单文件:
vim hosts
- 在文件中添加主机组:
[webservers] 192.168.80.11 [dbservers] 192.168.80.12
配置密钥对验证
- 生成SSH密钥对:
这将生成一个无密码的SSH密钥对,用于无密码登录远程主机。ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
- 安装sshpass(可选,用于自动化密码输入):
yum install -y sshpass
- 使用sshpass自动复制公钥到远程主机:
假设远程主机的root密码为abc1234
,则可以使用以下命令将公钥复制到远程主机:
注意:使用明文密码进行自动化操作存在安全风险,建议尽可能使用SSH密钥对或其他更安全的认证方式。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 root@192.168.80.11
ssh root@192.168.80.12
如果无需输入密码即可登录,则说明配置成功。
Ansible Inventory 主机清单
Ansible 的 Inventory 文件(通常位于 /etc/ansible/hosts
)是 Ansible 用来管理和组织目标主机的核心文件。
通过 Inventory,可以定义主机、主机组以及它们之间的关系,还可以为每个主机或主机组设置变量。
基本结构
Inventory 文件的基本结构包括主机定义、主机组定义、主机变量、组变量和组嵌套。
- 主机定义:
- 直接在主机组下列出 IP 地址或主机名。
- 可以为每个主机指定连接端口(默认是 SSH 的 22 端口)。
[webservers] 192.168.80.11:2222 192.168.80.1[2:5]
- 主机组定义:
- 使用方括号
[]
包围组名。 - 组内可以包含多个主机。
- 使用方括号
- 主机变量:
- 在主机定义后直接添加变量,格式为
变量名=值
。 - 这些变量只对该主机有效。
[webservers] 192.168.80.11 ansible_port=22 ansible_user=root ansible_password=abc1234
- 在主机定义后直接添加变量,格式为
- 组变量:
- 在组定义后使用
:vars
关键字添加变量。 - 这些变量对该组内的所有主机有效。
[webservers:vars] ansible_user=root ansible_password=abc1234
- 在组定义后使用
- 全局变量:
- 使用
all
组为所有主机定义变量。
[all:vars] ansible_port=22
- 使用
- 组嵌套:
- 使用
: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:连接对方主机时使用的用户名。如果不指定,将使用执行
ansible
或ansible-playbook
命令的用户。 - ansible_password:连接时的用户的 SSH 密码,仅在未使用密钥对验证的情况下有效。
- ansible_ssh_private_key_file:指定密钥认证 SSH 连接时的私钥文件。
- ansible_ssh_common_args:提供给 SSH、SFTP、SCP 命令的额外参数。
- ansible_become:允许进行权限提升。
- ansible_become_method:指定提升权限的方式,如
sudo
、su
、runas
等。 - ansible_become_user:提升为哪个用户的权限,默认提升为
root
。 - ansible_become_password:提升为指定用户权限时的密码。
示例
-
主机定义:
192.168.80.11:2222
表示使用非标准 SSH 端口(2222)连接该主机。192.168.80.1[2:5]
表示连接 IP 地址从192.168.80.12
到192.168.80.15
的主机。
-
组变量:
[webservers:vars]
下的变量对所有webservers
组内的主机有效。[all:vars]
下的变量对所有主机有效。
-
组嵌套:
[webs:children]
下的nginx
和apache
组构成了webs
父组,webs
父组包含了所有nginx
和apache
组内的主机。
原文地址:https://blog.csdn.net/Karoku/article/details/144365556
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!