效率提升神器:Ansible 入门,开启自动化运维之旅

网络
在这篇文章中,我们将带你了解Ansible的基础知识,从安装到基础命令、Playbook 的编写,帮助你快速入门自动化运维的世界。

随着DevOps 和自动化运维的普及,越来越多的IT运维工程师开始使用工具来简化繁琐的手动操作。Ansible作为一款强大的自动化运维工具,因其简洁、无代理以及易于使用的特点,受到了广泛的关注。在这篇文章中,我们将带你了解Ansible的基础知识,从安装到基础命令、Playbook 的编写,帮助你快速入门自动化运维的世界。

一、什么是Ansible?

Ansible是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它使用简洁的YAML语法编写 Playbook,不需要安装客户端代理,并且支持SSH协议与远程主机进行通信,适合大规模基础设施管理。

Ansible的主要特点:

  • 无代理模式:Ansible不需要在被管理的机器上安装任何代理,所有操作都通过SSH进行通信。
  • 简单易用:使用YAML作为配置语言,语法简单且可读性强。
  • 强大的模块支持:Ansible提供了丰富的内置模块,可以执行各种任务,如文件操作、服务管理、系统配置等。
  • 跨平台支持:Ansible支持Linux、Windows等多种操作系统。
  • 高度可扩展:支持自定义模块和插件,能够满足复杂的运维需求。

二、安装 Ansible

1. 系统要求

Ansible支持Linux、macOS 和 Windows 系统(通过 WSL)。在Ubuntu系统上进行安装是最为常见的做法。确保你的系统满足以下要求:

  • Python 2.7或 Python 3.x
  • pip3(Python 包管理工具)

2. 安装步骤

因为Ansible是用Python编写的,我们建议您通过pip来安装它。执行如下命令,这样操作起来会更加方便哦!

pip3 install ansible

3. 验证安装

安装完成后,运行以下命令验证 Ansible 是否安装成功:

ansible --version

如果返回版本号,如下图所示,说明安装成功。

三、配置和管理主机

1. 主机清单文件

Ansible使用主机清单文件来定义被管理的主机。主机清单可以是一个简单的文件,里面列出所有需要管理的服务器地址,Ansible会根据这个文件来确定任务执行的目标主机。

  • 主机清单有两种格式:
  • INI格式(默认格式)

(1) YAML格式

INI格式示例:

INI格式是Ansible的默认清单文件格式。你可以使用不同的主机组来组织主机,并为每个主机定义不同的属性。  创建一个名为 hosts 的主机清单文件,内容如下:

[lb]
ansible_host=192.168.31.217 ansible_ssh_user=root ansible_ssh_pass='password@123' ansible_ssh_port=10022
192.168.31.158

[lb:vars]
ansible_ssh_user='root'
ansible_ssh_pass='password'
ansible_ssh_port='22'

在INI格式中,可以通过在主机后面指定变量来配置不同的密码和端口。变量通常以 ansible_* 开头,后跟属性名称。常见的属性有:

  • ansible_ssh_user:SSH 登录用户名
  • ansible_ssh_pass:SSH 登录密码
  • ansible_ssh_port:SSH 端口(默认是 22)
  • ansible_ssh_private_key_file:私钥文件路径

(2) YAML 格式示例:

YAML格式的主机清单通常用于更复杂的配置,并支持更灵活的结构。你可以使用YAML格式定义主机组及其属性,并为每个主机设置不同的密码、端口等。

all:
  hosts:
    192.168.31.158:
      ansible_ssh_user:ubuntu
      ansible_ssh_pass:secret_pass
      ansible_ssh_port:2222
    192.168.31.217:
      ansible_ssh_user:ubuntu
      ansible_ssh_pass:secret_pass
      ansible_ssh_port:2222
children:
    webservers:
      hosts:
        192.168.1.10:{}
        192.168.1.11:{}
    dbservers:
      hosts:
        192.168.1.20:
          ansible_ssh_user:admin
          ansible_ssh_pass:db_pass
          ansible_ssh_port:2200

2. 配置 SSH 免密登录

Ansible默认使用SSH连接到远程主机,因此要确保能通过SSH无密码登录到目标主机。你可以使用ssh-keygen生成SSH密钥对,并将公钥复制到目标主机:

ssh-keygen -t rsa
ssh-copy-id user@192.168.1.10

四、使用Ansible命令

1. Ansible Ad-hoc 命令

Ansible的命令行工具支持Ad-hoc 命令,这是执行单个任务的简洁方式。例如,你可以使用 ansible 命令来在目标主机上执行操作,如安装软件、启动服务等。

Ping 测试目标主机

ansible -i hosts.yaml  lb -m ping

这条命令会对所有主机执行 ping 模块,测试主机是否在线。

root@ansible:~# ansible lb -m shell -a 'update'
192.168.31.217 | FAILED | rc=-1 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.
192.168.31.158 | FAILED | rc=-1 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

出现上述的报错是因为你控制端和被控制端第一次通信时,需要添加指纹。可以直接修改配置文件,编辑/etc/ansible/ansible.cfg中的 host_key_checking = False 的#去掉即可。

示例:安装软件包

ansible webservers -m apt -a "name=nginx state=present" -i hosts

这条命令会在所有 webservers 组中的主机上使用 apt 模块安装 nginx。

2. 使用Playbook

Playbook是Ansible 的核心功能之一,是一组按顺序执行的任务。Playbook使用YAML语法,可以定义更复杂的配置和操作。

一个简单的 Playbook

创建一个 deploy.yml 的Playbook文件,内容如下:

---
-name:InstallandstartNginx
hosts:web
become:yes
tasks:
    -name:InstallNginx
      apt:
        name:nginx
        state:present
    -name:startNginx
      service:
        name:nginx
        state:started

使用ansible-playbook命令来执行Playbook:

ansible-playbook -i hosts deploy.yml

这条命令会按照Playbook中定义的顺序在web组的目标主机上安装和启动 Nginx。如下图所示:

总结

通过本文的介绍,你已经掌握了Ansible的基本概念和使用方法。作为自动化运维的重要工具,Ansible可以帮助你快速地配置、管理和部署服务器,极大地提高工作效率。

接下来,你可以通过以下几种方式继续深入学习:

  • 通过编写更多的Playbook,掌握Ansible的模块和进阶功能
  • 了解Ansible Vault来管理敏感信息
  • 探索Ansible Roles来组织和复用配置

Ansible的灵活性和易用性使其成为了现代运维工程师必备的技能之一,掌握它将为你的自动化运维之路铺平道路。

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2015-10-08 10:55:23

云服务自动化运维 ANSIBLE

2014-09-22 11:24:18

运维

2018-07-26 13:50:37

IT架构运维

2017-07-25 10:53:27

2017-03-22 18:30:44

Linux运维自动化ansible

2022-07-29 14:39:17

Ansible运维工具

2017-03-22 16:31:30

Linux运维自动化ansible

2020-12-11 10:20:33

Ansible运维软件包

2020-04-30 15:00:17

运维Ansible自动化

2017-04-18 13:55:24

运维云计算WOT

2012-10-22 14:54:48

2015-06-24 10:42:19

云计算运维自动化运维ANSIBLE

2014-08-04 10:10:35

IT运维自动化运维

2018-06-23 07:31:05

2017-10-13 13:14:35

互联网

2015-03-09 11:10:14

运维

2012-11-20 17:22:57

2013-04-16 14:55:21

自动化运维Puppet实战

2015-11-09 14:27:36

Ansiblelinux自动化运维

2015-10-09 13:14:10

clip自动化运维工具
点赞
收藏

51CTO技术栈公众号