自动化运维之ansible快速入门
作为一名SRE(Site Reliability Engineer),学习 Ansible 是非常有帮助的,因为它可以帮助自动化基础设施管理、配置管理、以及应用部署等任务。以下是帮大家做的为期一个月的 Ansible 学习计划:
自动化运维的重要意义
自动化运维(DevOps / Site Reliability Engineering)是现代 IT 基础设施管理的重要组成部分,它通过使用工具和流程,帮助团队提高运维效率、减少人为错误、提升系统稳定性。以下是学会自动化运维的几个关键重要性:
- 提高效率
- 减少人为错误
- 提高系统稳定性与可靠性
- 降低成本
- 增强团队协作与灵活性
- 提高安全性
- 支持大规模系统管理
- 改善灾难恢复能力
- 可追溯性与审计
第1周:Ansible基础与安装
目标:理解Ansible的基础概念,掌握如何安装和配置Ansible。
-
了解Ansible的基础概念
- 什么是Ansible?
- Ansible的架构(控制节点、受管节点)
- 模块(Module)、Playbook、Inventory、任务(Task)、角色(Role)、剧本(Play)
- 配置管理与自动化的作用
-
安装与环境搭建
- 在本地机器安装Ansible,支持Linux、macOS、Windows(通过WSL)等平台。
- 配置SSH免密登录,确保控制节点可以访问受管节点。
- 配置
inventory
文件,列出目标主机。 - 安装Ansible工具及其依赖。
sudo apt install ansible
-
第一次执行 Ansible 命令
- 使用
ansible
命令执行基础操作(如Ping命令)来验证配置是否成功。
ansible all -m ping -i inventory_file
- 使用
-
深入了解
ansible-playbook
命令- 理解 Playbook 的作用和基本语法。
- 编写一个简单的 Playbook,执行一些常见任务(如安装软件包、创建目录、修改文件等)。
第2周:掌握Playbook、任务与模块
目标:深入理解 Playbook 的写法,掌握常用模块的使用。
-
编写更复杂的 Playbook
- 学习 Playbook 的结构,包括
hosts
、tasks
、vars
、handlers
等。 - 使用
tasks
来执行多步骤操作(如安装多个软件包、配置服务等)。 - 使用
handlers
来响应状态变化(例如,重新启动服务)。
- 学习 Playbook 的结构,包括
-
常用模块学习
- 学习如何使用 Ansible 模块来管理系统:
apt
(Debian/Ubuntu)、yum
(CentOS/RHEL)、service
、file
、copy
、template
等。 - 编写一个 Playbook,通过
apt
或yum
安装常见的工具和服务。
- name: Install and start Nginx hosts: all become: true tasks: - name: Install nginx apt: name: nginx state: present - name: Start nginx service: name: nginx state: started
- 学习如何使用 Ansible 模块来管理系统:
-
条件语句与循环
- 学习如何使用
when
条件语句来控制任务执行。 - 学习如何使用
with_items
进行循环处理。
- 学习如何使用
-
变量与模板
- 学习如何使用 Ansible 变量来动态配置主机。
- 学习 Jinja2 模板引擎,在 Playbook 中动态生成配置文件。
第3周:角色、配置管理与Playbook优化
目标:学习如何使用 Ansible 角色(Roles),将 Playbook 结构化,并进行优化。
-
理解 Ansible 角色(Roles)
- 学习如何使用角色将 Playbook 进行模块化,简化管理。
- 创建角色并在 Playbook 中引用。
ansible-galaxy init my_role
- 了解角色目录结构:
tasks
,vars
,defaults
,handlers
,files
,templates
。
-
Playbook 的优化
- 学习如何优化 Playbook:减少冗余任务、使用
tags
选择性执行任务。 - 使用
ansible-lint
等工具检查 Playbook 的规范性。
- 学习如何优化 Playbook:减少冗余任务、使用
-
Playbook的调试与错误处理
- 学习如何调试 Playbook,使用
--check
进行Dry Run,查看变更前后的系统状态。 - 处理任务失败,使用
failed_when
,ignore_errors
等策略。
- 学习如何调试 Playbook,使用
-
条件任务与依赖任务
- 学习如何为任务添加依赖关系。
- 使用
pre_tasks
和post_tasks
来在剧本的开始或结束执行某些任务。
第4周:高级主题、动态库存与Ansible Tower
目标:掌握 Ansible 的高级功能,学习如何使用 Ansible Tower 和动态库存。
-
动态库存(Dynamic Inventory)
- 学习如何配置动态库存,结合云平台(AWS、Azure、GCP)等的 API 来动态生成主机清单。
- 例如,配置 AWS EC2 实例作为受管节点,动态加载实例信息。
ansible-inventory -i ec2.py --list
-
Ansible Vault(加密管理)
- 学习如何使用
ansible-vault
加密敏感数据(如密码、API 密钥等)。 - 创建加密的变量文件并在 Playbook 中引用。
- 学习如何使用
-
Ansible Tower(企业级管理工具)
- 学习如何使用 Ansible Tower 管理大规模的 Ansible 环境,进行角色权限控制、审计日志等。
- 配置工作流,使用 Tower 提供的 API 执行自动化任务。
-
Ansible 在 CI/CD 中的应用
- 学习如何将 Ansible 与 CI/CD 工具(如 Jenkins、GitLab CI 等)结合,进行自动化部署。
- 在 CI 流水线中集成 Ansible Playbook,自动化部署应用到不同环境。
学习资源建议
- 官方文档:阅读 Ansible 官方文档,是最权威的学习资源:Ansible Documentation
- Ansible Up & Running:这是一本优秀的入门书籍,适合希望深入了解 Ansible 的开发者和运维人员。
- Ansible Galaxy:这是一个开源的角色库,你可以在其中找到许多社区贡献的角色来加速自己的工作:Ansible Galaxy
关于ansible软件详细安装指南
1. 安装 Ansible
Ansible 的安装过程会因操作系统的不同而有所不同,以下是基于几种常见操作系统的安装步骤。
1.1. 在 Ubuntu/Debian 系统上安装 Ansible
-
更新本地的软件包列表:
sudo apt update
-
安装 Ansible:
sudo apt install ansible
-
验证 Ansible 是否安装成功:
ansible --version
如果安装成功,会显示 Ansible 的版本信息。
1.2. 在 CentOS/RHEL 系统上安装 Ansible
-
安装 EPEL 仓库:
sudo yum install epel-release
-
安装 Ansible:
sudo yum install ansible
-
验证安装:
ansible --version
1.3. 在 macOS 上安装 Ansible
在 macOS 上安装 Ansible 可以使用 Homebrew:
-
安装 Homebrew(如果尚未安装):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
使用 Homebrew 安装 Ansible:
brew install ansible
-
验证安装:
ansible --version
1.4. 使用 pip
安装 Ansible
如果你有 Python 环境并且喜欢通过 Python 的包管理工具安装 Ansible,也可以使用 pip
:
pip install ansible
2. 配置 Ansible
2.1. 配置 SSH 免密登录
为了让 Ansible 控制节点(通常是你自己的机器)能够无密码访问受管节点,必须先配置 SSH 免密登录。
-
生成 SSH 密钥对(如果尚未生成):
ssh-keygen -t rsa -b 2048
-
将公钥复制到目标机器(受管节点):
ssh-copy-id user@target_host
其中,
user
是目标主机上的用户名,target_host
是目标主机的 IP 或主机名。 -
验证 SSH 免密登录是否成功:
ssh user@target_host
如果能够直接登录,而不需要输入密码,说明 SSH 配置正确。
2.2. 配置 Ansible Inventory
Ansible 使用一个 inventory 文件来管理受控节点,默认情况下,/etc/ansible/hosts
文件就是这个库存文件。
-
打开库存文件:
sudo nano /etc/ansible/hosts
-
在文件中添加受控节点(目标主机)信息:
[web_servers] 192.168.1.10 192.168.1.11 [db_servers] 192.168.1.12
这会将目标主机分成不同的组(如
web_servers
和db_servers
)。你可以根据自己的需求对主机进行分组。 -
保存并退出文件。
2.3. 配置 Ansible 配置文件
Ansible 的配置文件为 ansible.cfg,它控制着 Ansible 的行为,如是否开启 SSH 连接超时、输出格式、日志路径等。
-
你可以在项目的根目录下创建一个本地的
ansible.cfg
文件,或者修改全局配置文件/etc/ansible/ansible.cfg
。 -
创建或编辑
ansible.cfg
文件,加入一些基本配置:[defaults] inventory = /etc/ansible/hosts remote_user = your_user ask_pass = False host_key_checking = False timeout = 30
inventory
:指定库存文件路径。remote_user
:指定默认的远程用户。ask_pass
:如果设置为True
,Ansible 会在执行时询问密码。host_key_checking
:设置为False
可关闭 SSH 主机密钥检查。timeout
:设置 SSH 连接的超时时间。
-
保存并退出。
2.4. 测试 Ansible 连接
在进行基本配置后,使用以下命令来测试是否能够连接到受控节点。
-
运行一个简单的
ping
命令来检查连接:ansible all -m ping -i /etc/ansible/hosts
all
:表示所有主机(你也可以指定某个组,例如web_servers
)。-m ping
:使用ping
模块进行测试。-i /etc/ansible/hosts
:指定库存文件的位置(如果未在配置文件中设置)。
-
如果设置正确,应该会收到如下输出:
192.168.1.10 | SUCCESS | rc=0 >> pong 192.168.1.11 | SUCCESS | rc=0 >> pong
2.5. 使用 Ansible 进行基本操作
你可以使用 Ansible 来执行一些简单的操作,例如安装软件包或管理服务。
-
使用
apt
模块安装软件包:ansible web_servers -m apt -a "name=nginx state=present" -b
-
启动服务:
ansible db_servers -m service -a "name=mysql state=started" -b
-
检查某个文件是否存在:
ansible all -m file -a "path=/tmp/testfile state=touch" -b
3. 高级配置(可选)
3.1. 使用 Ansible Vault 加密敏感数据
为了保护敏感数据(如密码、API 密钥等),可以使用 Ansible Vault 加密文件。
-
创建加密文件:
ansible-vault create secrets.yml
-
输入密码后,编辑文件内容,保存并退出。
-
在 Playbook 中引用加密文件:
- name: Example playbook using vault hosts: all vars_files: - secrets.yml
-
运行 Playbook 时,提供解密密码:
ansible-playbook playbook.yml --ask-vault-pass
3.2. 配置 Ansible 代理
如果你在企业环境中,可能需要配置 HTTP 代理来访问外部资源。你可以在 ansible.cfg
文件中配置代理:
[defaults]
http_proxy = http://proxy.example.com:8080
https_proxy = https://proxy.example.com:8080
总结
自动化运维是提升系统稳定性、减少运维成本、提高开发与运维效率的关键。通过实现自动化,团队不仅能够高效处理常规运维任务,还能降低人为错误的风险,增强对系统的控制能力,从而保持高效、稳定和安全的运维环境。在当前高速发展的技术环境中,掌握自动化运维不仅是提升运维工作效率的必然趋势,也是确保企业 IT 基础设施能够顺利扩展和可靠运行的关键。