效率提升神器:Ansible入门,开启自动化运维之旅
随着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
如果返回版本号,如下图所示,说明安装成功。
配置和管理主机
主机清单文件
Ansible
使用主机清单文件来定义被管理的主机。主机清单可以是一个简单的文件,里面列出所有需要管理的服务器地址,Ansible
会根据这个文件来确定任务执行的目标主机。
主机清单有两种格式:
-
INI
格式(默认格式) -
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
:私钥文件路径
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
配置 SSH 免密登录
Ansible
默认使用SSH
连接到远程主机,因此要确保能通过SSH
无密码登录到目标主机。你可以使用ssh-keygen
生成SSH
密钥对,并将公钥复制到目标主机:
ssh-keygen -t rsa
ssh-copy-id user@192.168.1.10
使用Ansible命令
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
。
使用Playbook
Playbook
是Ansible
的核心功能之一,是一组按顺序执行的任务。Playbook
使用YAML
语法,可以定义更复杂的配置和操作。
一个简单的 Playbook
创建一个 deploy.yml
的Playbook
文件,内容如下:
---
- name: Install and start Nginx
hosts: web
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: start Nginx
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
的灵活性和易用性使其成为了现代运维工程师必备的技能之一,掌握它将为你的自动化运维之路铺平道路。