自动化运维之ansible快速入门

作为一名SRE(Site Reliability Engineer),学习 Ansible 是非常有帮助的,因为它可以帮助自动化基础设施管理、配置管理、以及应用部署等任务。以下是帮大家做的为期一个月的 Ansible 学习计划:

自动化运维的重要意义

自动化运维(DevOps / Site Reliability Engineering)是现代 IT 基础设施管理的重要组成部分,它通过使用工具和流程,帮助团队提高运维效率、减少人为错误、提升系统稳定性。以下是学会自动化运维的几个关键重要性:

  1. 提高效率
  2. 减少人为错误
  3. 提高系统稳定性与可靠性
  4. 降低成本
  5. 增强团队协作与灵活性
  6. 提高安全性
  7. 支持大规模系统管理
  8. 改善灾难恢复能力
  9. 可追溯性与审计

第1周:Ansible基础与安装

目标:理解Ansible的基础概念,掌握如何安装和配置Ansible。
  1. 了解Ansible的基础概念

    • 什么是Ansible?
    • Ansible的架构(控制节点、受管节点)
    • 模块(Module)、Playbook、Inventory、任务(Task)、角色(Role)、剧本(Play)
    • 配置管理与自动化的作用
  2. 安装与环境搭建

    • 在本地机器安装Ansible,支持Linux、macOS、Windows(通过WSL)等平台。
    • 配置SSH免密登录,确保控制节点可以访问受管节点。
    • 配置 inventory 文件,列出目标主机。
    • 安装Ansible工具及其依赖。
    bash 复制代码
    sudo apt install ansible
  3. 第一次执行 Ansible 命令

    • 使用 ansible 命令执行基础操作(如Ping命令)来验证配置是否成功。
    bash 复制代码
    ansible all -m ping -i inventory_file
  4. 深入了解 ansible-playbook 命令

    • 理解 Playbook 的作用和基本语法。
    • 编写一个简单的 Playbook,执行一些常见任务(如安装软件包、创建目录、修改文件等)。

第2周:掌握Playbook、任务与模块

目标:深入理解 Playbook 的写法,掌握常用模块的使用。
  1. 编写更复杂的 Playbook

    • 学习 Playbook 的结构,包括 hoststasksvarshandlers 等。
    • 使用 tasks 来执行多步骤操作(如安装多个软件包、配置服务等)。
    • 使用 handlers 来响应状态变化(例如,重新启动服务)。
  2. 常用模块学习

    • 学习如何使用 Ansible 模块来管理系统:apt(Debian/Ubuntu)、yum(CentOS/RHEL)、servicefilecopytemplate 等。
    • 编写一个 Playbook,通过 aptyum 安装常见的工具和服务。
    yaml 复制代码
    - 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
  3. 条件语句与循环

    • 学习如何使用 when 条件语句来控制任务执行。
    • 学习如何使用 with_items 进行循环处理。
  4. 变量与模板

    • 学习如何使用 Ansible 变量来动态配置主机。
    • 学习 Jinja2 模板引擎,在 Playbook 中动态生成配置文件。

第3周:角色、配置管理与Playbook优化

目标:学习如何使用 Ansible 角色(Roles),将 Playbook 结构化,并进行优化。
  1. 理解 Ansible 角色(Roles)

    • 学习如何使用角色将 Playbook 进行模块化,简化管理。
    • 创建角色并在 Playbook 中引用。
    bash 复制代码
    ansible-galaxy init my_role
    • 了解角色目录结构:tasks, vars, defaults, handlers, files, templates
  2. Playbook 的优化

    • 学习如何优化 Playbook:减少冗余任务、使用 tags 选择性执行任务。
    • 使用 ansible-lint 等工具检查 Playbook 的规范性。
  3. Playbook的调试与错误处理

    • 学习如何调试 Playbook,使用 --check 进行Dry Run,查看变更前后的系统状态。
    • 处理任务失败,使用 failed_whenignore_errors 等策略。
  4. 条件任务与依赖任务

    • 学习如何为任务添加依赖关系。
    • 使用 pre_taskspost_tasks 来在剧本的开始或结束执行某些任务。

第4周:高级主题、动态库存与Ansible Tower

目标:掌握 Ansible 的高级功能,学习如何使用 Ansible Tower 和动态库存。
  1. 动态库存(Dynamic Inventory)

    • 学习如何配置动态库存,结合云平台(AWS、Azure、GCP)等的 API 来动态生成主机清单。
    • 例如,配置 AWS EC2 实例作为受管节点,动态加载实例信息。
    bash 复制代码
    ansible-inventory -i ec2.py --list
  2. Ansible Vault(加密管理)

    • 学习如何使用 ansible-vault 加密敏感数据(如密码、API 密钥等)。
    • 创建加密的变量文件并在 Playbook 中引用。
  3. Ansible Tower(企业级管理工具)

    • 学习如何使用 Ansible Tower 管理大规模的 Ansible 环境,进行角色权限控制、审计日志等。
    • 配置工作流,使用 Tower 提供的 API 执行自动化任务。
  4. 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
  1. 更新本地的软件包列表:

    bash 复制代码
    sudo apt update
  2. 安装 Ansible:

    bash 复制代码
    sudo apt install ansible
  3. 验证 Ansible 是否安装成功:

    bash 复制代码
    ansible --version

    如果安装成功,会显示 Ansible 的版本信息。

1.2. 在 CentOS/RHEL 系统上安装 Ansible
  1. 安装 EPEL 仓库:

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

    bash 复制代码
    sudo yum install ansible
  3. 验证安装:

    bash 复制代码
    ansible --version
1.3. 在 macOS 上安装 Ansible

在 macOS 上安装 Ansible 可以使用 Homebrew

  1. 安装 Homebrew(如果尚未安装):

    bash 复制代码
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 使用 Homebrew 安装 Ansible:

    bash 复制代码
    brew install ansible
  3. 验证安装:

    bash 复制代码
    ansible --version
1.4. 使用 pip 安装 Ansible

如果你有 Python 环境并且喜欢通过 Python 的包管理工具安装 Ansible,也可以使用 pip

bash 复制代码
pip install ansible

2. 配置 Ansible

2.1. 配置 SSH 免密登录

为了让 Ansible 控制节点(通常是你自己的机器)能够无密码访问受管节点,必须先配置 SSH 免密登录。

  1. 生成 SSH 密钥对(如果尚未生成):

    bash 复制代码
    ssh-keygen -t rsa -b 2048
  2. 将公钥复制到目标机器(受管节点):

    bash 复制代码
    ssh-copy-id user@target_host

    其中,user 是目标主机上的用户名,target_host 是目标主机的 IP 或主机名。

  3. 验证 SSH 免密登录是否成功:

    bash 复制代码
    ssh user@target_host

    如果能够直接登录,而不需要输入密码,说明 SSH 配置正确。

2.2. 配置 Ansible Inventory

Ansible 使用一个 inventory 文件来管理受控节点,默认情况下,/etc/ansible/hosts 文件就是这个库存文件。

  1. 打开库存文件:

    bash 复制代码
    sudo nano /etc/ansible/hosts
  2. 在文件中添加受控节点(目标主机)信息:

    复制代码
    [web_servers]
    192.168.1.10
    192.168.1.11
    
    [db_servers]
    192.168.1.12

    这会将目标主机分成不同的组(如 web_serversdb_servers)。你可以根据自己的需求对主机进行分组。

  3. 保存并退出文件。

2.3. 配置 Ansible 配置文件

Ansible 的配置文件为 ansible.cfg,它控制着 Ansible 的行为,如是否开启 SSH 连接超时、输出格式、日志路径等。

  1. 你可以在项目的根目录下创建一个本地的 ansible.cfg 文件,或者修改全局配置文件 /etc/ansible/ansible.cfg

  2. 创建或编辑 ansible.cfg 文件,加入一些基本配置:

    ini 复制代码
    [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 连接的超时时间。
  3. 保存并退出。

2.4. 测试 Ansible 连接

在进行基本配置后,使用以下命令来测试是否能够连接到受控节点。

  1. 运行一个简单的 ping 命令来检查连接:

    bash 复制代码
    ansible all -m ping -i /etc/ansible/hosts
    • all:表示所有主机(你也可以指定某个组,例如 web_servers)。
    • -m ping:使用 ping 模块进行测试。
    • -i /etc/ansible/hosts:指定库存文件的位置(如果未在配置文件中设置)。
  2. 如果设置正确,应该会收到如下输出:

    bash 复制代码
    192.168.1.10 | SUCCESS | rc=0 >>
    pong
    
    192.168.1.11 | SUCCESS | rc=0 >>
    pong
2.5. 使用 Ansible 进行基本操作

你可以使用 Ansible 来执行一些简单的操作,例如安装软件包或管理服务。

  1. 使用 apt 模块安装软件包:

    bash 复制代码
    ansible web_servers -m apt -a "name=nginx state=present" -b
  2. 启动服务:

    bash 复制代码
    ansible db_servers -m service -a "name=mysql state=started" -b
  3. 检查某个文件是否存在:

    bash 复制代码
    ansible all -m file -a "path=/tmp/testfile state=touch" -b

3. 高级配置(可选)

3.1. 使用 Ansible Vault 加密敏感数据

为了保护敏感数据(如密码、API 密钥等),可以使用 Ansible Vault 加密文件。

  1. 创建加密文件:

    bash 复制代码
    ansible-vault create secrets.yml
  2. 输入密码后,编辑文件内容,保存并退出。

  3. 在 Playbook 中引用加密文件:

    yaml 复制代码
    - name: Example playbook using vault
      hosts: all
      vars_files:
        - secrets.yml
  4. 运行 Playbook 时,提供解密密码:

    bash 复制代码
    ansible-playbook playbook.yml --ask-vault-pass
3.2. 配置 Ansible 代理

如果你在企业环境中,可能需要配置 HTTP 代理来访问外部资源。你可以在 ansible.cfg 文件中配置代理:

ini 复制代码
[defaults]
http_proxy = http://proxy.example.com:8080
https_proxy = https://proxy.example.com:8080

总结

自动化运维是提升系统稳定性、减少运维成本、提高开发与运维效率的关键。通过实现自动化,团队不仅能够高效处理常规运维任务,还能降低人为错误的风险,增强对系统的控制能力,从而保持高效、稳定和安全的运维环境。在当前高速发展的技术环境中,掌握自动化运维不仅是提升运维工作效率的必然趋势,也是确保企业 IT 基础设施能够顺利扩展和可靠运行的关键。

相关推荐
weixin_445852881 小时前
Docker部署常见应用之Superset
运维·docker·容器
Roc.Chang1 小时前
理解与清理 Docker 中的悬空镜像(Dangling Images)
运维·docker·容器
LucianaiB2 小时前
基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题
人工智能·自动化·腾讯云·trae叒更新了?
编码雪人2 小时前
CentOS算法部署
linux·运维·centos
广药门徒3 小时前
关于多版本CUDA共存的研究,是否能一台机子装两个CUDA 版本并正常切换使用
linux·运维·人工智能
梦想平凡3 小时前
开元类双端互动组件部署实战全流程教程(第1部分:环境与搭建)
运维·服务器·前端·游戏·node.js
Tester_孙大壮3 小时前
从装饰器出发,优雅处理 UI 自动化中的异常
运维·ui·自动化
迷茫运维路3 小时前
《企业级前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自动化实践》
运维·前端·gitee·自动化·ssh·jenkins
小黑_深呼吸3 小时前
Prometheus实战教程:k8s平台-Redis监控案例
运维·kubernetes·prometheus·监控