ansible–基本概念及配置
🚀 欢迎来到Max Li的思考空间
我是一名 SRE 运维工程师,专注于让你的系统保持在稳定的“绿灯”状态,而不是让你陷入一片“红灯”海洋。 我的工作就是确保你的服务器像高铁一样飞速稳定,尽量让你在夜里不必被系统故障的警报声吵醒。
在这里,你可以期待:
- 运维小妙招:那些让你“哇,这么简单!”的实用技巧。
- 运维趣事:分享那些让人捧腹的系统崩溃和故障故事。
- 幽默技术解读:把复杂的运维问题用有趣的方式讲解,让你既能学到东西,又能笑出声。
💡 我的口号是: “让你的系统稳定,让你的生活轻松——我是你的 SRE 超级英雄!”
🎩 所以,如果你想让系统像魔法一样稳定,或者只是想听听一段关于服务器“囧态”的搞笑故事,跟随我,一起在运维的世界里冒险吧!
一、ansible是什么?
Ansible 是一种流行的开源自动化工具,主要用于配置管理、应用程序部署、任务自动化和 IT 编排。
二、Ansible的基本概念:
- 控制节点(Control Node):运行 Ansible 的机器,它发送指令到托管节点(Managed Nodes)。
- 托管节点(Managed Nodes):被 Ansible 管理的机器,通常是服务器、虚拟机或容器。
- 清单文件(Inventory File):列出所有托管节点的文件,可以是简单的文本文件或动态脚本。
- 模块(Modules):Ansible 使用模块执行任务,模块是一些执行特定任务的命令或代码片段。
- 剧本(Playbooks):以 YAML 格式编写的文件,描述一系列需要执行的任务。它是 Ansible 自动化的核心。
- 角色(Roles):是用于组织 Playbooks 和其他文件的结构化方式,可以更好地重用代码。
- 任务(Tasks):Playbooks 中的基本单元,每个任务调用一个模块来执行特定操作。
- 变量(Variables):用于在 Playbooks 中自定义任务的行为。
- 处理程序(Handlers):在某些条件触发下执行的特殊任务,例如只有在配置文件被更改时才重启服务。
三、安装
安装 Ansible 很简单,取决于你使用的操作系统。以下是如何在不同操作系统上安装 Ansible 的步骤:
1. 在 CentOS/RHEL 上安装 Ansible
-
启用 EPEL(Extra Packages for Enterprise Linux)存储库:
sudo yum install epel-release -y
-
安装 Ansible:
sudo yum install ansible -y
-
验证安装:
ansible --version
2. 在 macOS 上安装 Ansible
-
使用 Homebrew 安装 Ansible:
-
如果你还没有安装 Homebrew,可以先安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
-
安装 Ansible:
brew install ansible
-
验证安装:
ansible --version
3. 在 Windows 上安装 Ansible
Ansible 不直接在 Windows 上运行,但你可以使用 Windows Subsystem for Linux (WSL) 来安装和运行 Ansible。以下是步骤:
-
安装 Windows Subsystem for Linux (WSL):
-
在 PowerShell 中运行以下命令来启用 WSL:
wsl --install
-
-
安装 Ubuntu 或其他 Linux 发行版:
- 通过 Microsoft Store 安装 Ubuntu 或其他受支持的 Linux 发行版。
-
在 WSL 上安装 Ansible:
- 打开 Ubuntu 终端,然后按照 Ubuntu 的安装步骤安装 Ansible。、
-
验证安装
ansible --version
四、配置文件
Ansible 的主要配置文件用于定义 Ansible 的行为和操作方式。以下是 Ansible 的几个关键配置文件及其用途:
1. ansible.cfg
-
位置
:默认情况下,
ansible.cfg
文件可以位于以下位置之一(优先级由高到低):
- 当前目录(当前运行 Ansible 命令的目录)
- 用户的主目录(
~/.ansible.cfg
) - 系统范围的目录(通常是
/etc/ansible/ansible.cfg
)
-
用途
:定义 Ansible 的全局配置选项,包括:
- 连接设置(如 SSH 密钥、超时、并行度等)
- 库路径(模块和插件的路径)
- 日志记录和输出设置
- 默认行为(如是否检查模式、错误处理等)
2. Inventory 文件
- 位置:可以是任何用户指定的路径或默认位于
/etc/ansible/hosts
。 - 用途:列出托管节点(主机)的信息,可以是一个简单的 INI 格式文件或一个动态生成的脚本。每个条目可以包含主机名、IP 地址、组名等信息。
3. Playbook 文件
- 位置:用户可以根据项目需要将其存储在任何位置。
- 格式:YAML 格式文件。
- 用途:定义要在托管节点上执行的任务集合。Playbooks 是 Ansible 自动化的核心,通常会引用 Inventory 文件和使用模块。
4. Hosts 文件
- 位置:默认位于
/etc/ansible/hosts
。 - 用途:和 Inventory 文件类似,是一个列出所有托管节点的文件。可以定义主机组以及主机的变量。
5. Role 目录结构
- 位置:在项目目录或
/etc/ansible/roles
下。 - 用途:Roles 是 Ansible 推荐的组织 Playbooks 和相关文件的方式。每个 Role 目录通常包括任务(
tasks
)、处理程序(handlers
)、变量(vars
)、文件(files
)、模板(templates
)、元数据(meta
)等子目录。
6. Group/Host Variables 文件
- 位置:通常放在
group_vars/
和host_vars/
目录下。 - 用途:为特定的主机组或主机定义变量,通常用来存储特定环境或主机相关的配置信息。
这些配置文件共同作用,定义了 Ansible 如何与托管节点交互、执行任务和管理配置。希望这些信息对你有帮助!如果你需要进一步的解释或演示文稿中的可视化建议,请告诉我。
五、主机配置
在 Ansible 中,主机清单(Inventory) 是一个关键的配置文件,用于定义 Ansible 控制节点可以管理的主机和组。主机清单文件可以是简单的文本文件(通常是 ini
格式),也可以是动态生成的(例如使用脚本或云插件)。通过清单文件,您可以指定主机的组、变量等信息,便于在 Playbooks 中引用。
以下是如何配置 Ansible 主机清单的一些示例和步骤:
1. 使用 INI
格式配置主机清单
在 /etc/ansible/hosts
或您指定的其他文件中创建或编辑主机清单文件。以下是一个典型的 ini
格式的主机清单示例:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
[loadbalancers]
lb1.example.com
[all:vars]
ansible_user=ansible_user
ansible_ssh_private_key_file=/home/ansible_user/.ssh/id_rsa
解释:
- [webservers]:定义了一个名为
webservers
的组,包含两个主机web1.example.com
和web2.example.com
。 - [dbservers]:定义了一个名为
dbservers
的组,包含两个主机db1.example.com
和db2.example.com
。 - [loadbalancers]:定义了一个名为
loadbalancers
的组,包含一个主机lb1.example.com
。 - [all:vars]:定义所有主机的全局变量。在这个例子中,为所有主机指定了默认的 SSH 用户和私钥路径。
2. 使用 YAML
格式配置主机清单
如果您喜欢使用 YAML
格式,Ansible 也支持。以下是一个简单的 YAML
格式的主机清单示例:
all:
hosts:
web1.example.com:
ansible_host: 192.168.1.10
web2.example.com:
ansible_host: 192.168.1.11
children:
webservers:
hosts:
web1.example.com:
web2.example.com:
dbservers:
hosts:
db1.example.com:
db2.example.com:
解释:
- all:表示所有主机的顶层组。
- hosts:在
all
组下列出所有的主机,并为每个主机设置ansible_host
变量。 - children:定义子组,如
webservers
和dbservers
,并指定属于这些组的主机。
3. 添加主机变量
您可以在清单文件中为特定主机或组定义特定变量。例如:
[webservers]
web1.example.com ansible_user=ubuntu ansible_port=22
web2.example.com ansible_user=ubuntu ansible_port=22
解释:
- ansible_user:定义 SSH 用户。
- ansible_port:定义 SSH 连接的端口。
4. 动态主机清单
对于动态或云环境(如 AWS、Azure、GCP),可以使用动态主机清单脚本,自动生成托管节点列表。您可以使用 Ansible 提供的插件或编写自定义脚本来实现这一点。
如何使用主机清单
配置好主机清单文件后,可以在运行 Ansible 命令时指定它:
ansible -i /path/to/your/hosts -m ping all
或者在 Playbook 中引用主机组:
- hosts: webservers
tasks:
- name: Ensure Apache is installed
apt:
name: apache2
state: present
通过这种方式,你可以灵活地定义和管理 Ansible 的托管节点。希望这对你有所帮助!如果有其他问题,请告诉我!
六、实践
要在生产环境中成功配置和使用 Ansible,您需要完成几个步骤,包括安装、配置主机清单、创建和运行 Playbook,以及验证主机的连通性。以下是 Ansible 配置的完整过程以及如何验证与托管节点的连接性:
1. 安装 Ansible
根据操作系统不同,安装 Ansible 的步骤会有所差异。以下是安装 Ansible 的一般步骤:
-
首先创建ansible账号
useradd ansible
-
在 CentOS/RHEL 上:
sudo yum install epel-release -y sudo yum install ansible -y
-
在 Ubuntu/Debian 上:
sudo apt update sudo apt install software-properties-common -y sudo add-apt-repository --yes --update ppa:ansible/ansible sudo apt install ansible -y
-
在 macOS 上:
brew install ansible
2. 配置主机清单(Inventory)
Ansible 使用 主机清单文件 来定义和管理需要被管理的托管节点(主机)。这是 Ansible 操作的核心配置文件。创建或编辑 /etc/ansible/hosts
或自定义路径下的主机清单文件。
例如,编辑一个简单的 INI
格式清单文件:
[webservers]
web1.example.com ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
web2.example.com ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
[dbservers]
db1.example.com ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
解释:
- [webservers] 和 [dbservers]:定义了两个主机组。
- ansible_user:指定用于连接的 SSH 用户。
- ansible_ssh_private_key_file:指定用于 SSH 连接的私钥文件路径。
可通过ssh配置服务器之间的公私钥,就无需在host文件写ssh密钥配置信息了
3. 配置 ansible.cfg
文件
ansible.cfg
文件用于定义 Ansible 的全局配置选项,可以放在/etc/ansible/ansible.cfg
或当前项目目录中。以下是一个示例配置:
[defaults]
inventory = /etc/ansible/hosts
remote_user = ansible
host_key_checking = False
解释:
- inventory:指定主机清单文件的位置。
- remote_user:默认的远程连接用户。
- host_key_checking:禁用 SSH 主机密钥检查(在测试环境中可能有用)。
-
命令式生成配置文件
可根据需要自我增删改查~/ansible/ansible.cfgansible-config init --disabled > ~/ansible/ansible.cfg
4. 创建 Ansible Playbook
Ansible Playbook 是一个以 YAML 格式编写的文件,定义了一系列要在托管节点上执行的任务。例如,创建一个简单的 Playbook site.yml
,用于安装 Apache HTTP 服务器:
---
- hosts: webservers
become: yes
tasks:
- name: Install Apache
apt:
name: apache2
state: present
when: ansible_os_family == "Debian"
5. 验证与托管节点的连通性
在开始运行 Playbook 之前,您应该验证 Ansible 控制节点与所有托管节点之间的连通性。可以使用 ping
模块来测试连接:
ansible all -m ping
解释:
- all:指代主机清单中的所有主机。可以替换为特定的主机组(如
webservers
或dbservers
)。 - -m ping:指定使用
ping
模块,检查与每个托管节点的连接性。
示例输出:
web1.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
web2.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
如果返回 SUCCESS
和 "ping": "pong"
,则表示控制节点和托管节点之间的连接正常。
6. 运行 Ansible Playbook
在验证了连通性之后,可以运行 Ansible Playbook:
ansible-playbook site.yml
示例输出:
PLAY [webservers] ****************************************************************
TASK [Gathering Facts] ***********************************************************
ok: [web1.example.com]
ok: [web2.example.com]
TASK [Install Apache] ************************************************************
changed: [web1.example.com]
changed: [web2.example.com]
PLAY RECAP ***********************************************************************
web1.example.com : ok=2 changed=1 unreachable=0 failed=0
web2.example.com : ok=2 changed=1 unreachable=0 failed=0
总结
通过这些步骤,你可以成功安装和配置 Ansible,创建主机清单文件,编写 Playbook,验证与托管节点的连通性,并在生产环境中运行自动化任务。如果有任何进一步的问题或需要更多帮助,请告诉我!