AUTHOR:闫小雨
TIME:2024-06-26
文章目录
一、Ansible简述
Ansible 是一个开源的自动化工具,用于配置管理、应用部署、任务自动化和 IT 编排。它通过无代理(agentless)的方式工作,使用 SSH 连接到目标主机执行命令,并通过简单的 YAML 格式的剧本(playbooks)来定义任务。
1、使用者的四种交互方式
交互方式 | 作用 | 特点 |
---|---|---|
CMDB | 存储和管理企业架构的配置信息 | 通过CMDB组合Ansible,下发指令调用Ansible工具 |
publie/private | 通过API接口与Ansible交互 | 使用编程语言调用Ansible API(如python,php) |
Ad_Hoc命令集 | 即时执行单次任务 | 通过命令行直接调用Ansible工具集,适用快速执行任务 |
playbooks | 执行预先编排好的任务集 | 使用YAML格式编写playbooks,按序完成复杂任务 |
2、Ansible工具集
工具 | 描述 |
---|---|
Ansible CLI | 命令行工具 |
Ansible Playbooks | 用YAML编写的自动化任务剧本 |
Ansible Modules | 执行特定任务的功能模块 |
Ansible Galaxy | 角色共享和发现平台 |
Ansible Tower(AWX) | 企业级管理和可视化工具 |
3、作用对象
作用对象 | 描述 |
---|---|
服务器 | Linux和Windows服务器 |
云实例 | AWS、Azure、阿里云、 Google Cloud |
容器 | Docker 和 Kubernetes |
网络设备 | 路由器、交换机、防火墙 |
存储设备 | NAS 和 SAN 系统 |
应用程序 | Web 服务器、数据库、消息队列等 |
安全和合规性 | 安全策略和合规性检查 |
二、Ansible安装
1、使用yum安装,并安装EPEL仓库
# 安装 EPEL 仓库
sudo yum install epel-release -y
# 安装 Ansible
sudo yum install ansible -y
#验证安装
ansible --version
2、使用pip源代码安装
#安装python pip
yum install python3 pythom3-pip -y
#下载安装源代码 码云gitee
git clone https://gitee.com/ansible/ansible.git
#或 github
#git clone https://github.com/ansible/ansible.git
#或 gitLub
#git clone https://gitlab.com/ansible/ansible.git
#安装依赖
cd ansible
pip install -r requirements.txt
#使用devel分支 进行版本选择
#切换到稳定的发布分支,这里以 3.5 版本为例
git checkout stable-3.5
#安装 Ansible
pip install --user .
#验证安装
ansible --version
3、使用pip直接安装
#安装python pip
yum install pythom3-pip -y
#安装 Ansible
pip install --user ansible
#验证安装
ansible --version
4、 创建ssh免交互登录
1、生成ssh密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
2、复制公钥到远程主机
ssh-copy-id user@hostname
3、验证免密登录
ssh user@hostname
三、Ansible配置
Inventory 文件
- 作用:用于管理和描述要管理的主机和主机组。
- 格式:文本文件,例如:
[webservers]
web1.example.com
web2.example.com
[databases]
db1.example.com
db2.example.com
- 分组:可以根据需要对主机进行组织和分组。
ansible.cfg 文件
- 作用:Ansible 的配置文件,包含全局配置选项。
- 示例:
[defaults]
inventory = /path/to/your/inventory/file
remote_user = your_remote_user
private_key_file = /path/to/your/private/key.pem
host_key_checking = False
主要配置项:
配置项 | 描述 |
---|---|
inventory | 指定 Inventory 文件的路径 |
remote_user | 指定远程主机的用户名 |
private_key_file | 指定用于 SSH 连接的私钥文件路径 |
host_key_checking | 设置为 False 可以禁用 SSH 主机密钥检查,方便自动化环境下的连接 |
其他配置方式
1、环境变量
可以使用 ANSIBLE_CONFIG
环境变量指定 ansible.cfg
文件的路径。
2、命令行参数
使用 -i
参数指定特定的 Inventory
文件,使用 -u
参数指定远程用户等。
例如:
#使用 Ansible 运行一个 ping 模块(用于测试主机是否可达)来测试名为 web 的主机组中所有主机的连通性;
ansible -i /etc/ansible/hosts web -m ping
#如果使用默认的Inventory文件(/etc/ansible/hosts),也可以不指定Inventory文件
ansible web -m ping
四、Ansible命令
1、ansible
说明 | ansible 命令是 Ansible 的主要命令行工具,用于执行 Ad-Hoc 命令和管理远程主机 |
---|---|
描述 | 通过 SSH 连接到远程主机,并执行指定的命令或模块 |
使用模板:
ansible <pattern> -i <inventory> -m <module> -a '<module_arguments>' [options]
可选项:
选项 | 描述 |
---|---|
-i | 指定 Inventory 文件的路径 |
-m | 指定要执行的 Ansible 模块 |
-a ‘<module_arguments>’ | 模块的参数,使用单引号包裹参数 |
-u <remote_user> | 指定远程主机的用户名 |
-b | 在执行命令时提升为超级用户(sudo) |
–private-key=<private_key_file> | 指定用于 SSH 连接的私钥文件 |
-e ‘key=value’ | 定义额外的变量,传递给 Ansible playbook |
示例:
ansible webservers -i /etc/ansible/hosts -m shell -a 'uptime'
解释:上面的命令将连接到名为 webservers 的主机组中的所有主机,执行 shell 模块并运行 uptime 命令,显示每台主机的运行时间。
2、Ansible-doc
说明 | ansible-doc 命令用于查看 Ansible 模块的文档 |
---|---|
描述 | 提供对 Ansible 模块、插件以及其他 Ansible 组件的文档查看功能 |
使用模板:
ansible-doc <module_name>
可选项: 无。
示例:
ansible-doc shell
解释:上述命令将显示 shell 模块的文档,包括该模块的用法、参数说明和示例。
3、Ansible-palybook
说明 | ansible-playbook 命令用于运行 Ansible playbook |
---|---|
描述 | 执行预定义的任务集合,通常用于自动化部署和配置管理 |
使用模板:
ansible-playbook -i <inventory> <playbook.yml> [options]
可选项:
** 选项 ** | ** 描述 ** |
---|---|
** -i ** | 指定 Inventory 文件的路径 |
** <playbook.yml> ** | 指定要执行的 Ansible playbook 文件 |
** -u <remote_user> ** | 指定远程主机的用户名 |
** -e ‘key=value’ ** | 定义额外的变量,传递给 Ansible playbook |
** --private-key=<private_key_file> ** | 指定用于 SSH 连接的私钥文件 |
示例:
ansible-playbook -i /etc/ansible/hosts site.yml
解释:上述命令将执行名为 site.yml 的 Ansible playbook,根据 hosts 文件中的配置管理远程主机。
4、Ansible-console
说明 | ansible-console 命令启动 Ansible 控制台,提供交互式环境进行 Ansible 命令执行和调试 |
---|---|
描述 | 在控制台中执行 Ad-Hoc 命令、查看主机状态和调试任务 |
使用模板:
ansible-console -i <inventory> [options]
可选项和描述:
选项 | 描述 |
---|---|
-i | 指定 Inventory 文件的路径 |
-u <remote_user> | 指定远程主机的用户名 |
–private-key=<private_key_file> | 指定用于 SSH 连接的私钥文件 |
-e ‘key=value’ | 定义额外的变量,传递给 Ansible playbook |
示例:
ansible-console -i /etc/ansible/hosts
解释:上述命令将启动 Ansible 控制台,允许用户在交互式环境中执行 Ansible Ad-Hoc 命令和查看主机状态。
五、Ansible模块
1、command模块
描述: 在目标主机上执行特定的命令。
示例:
- name: Execute a command
command: ls /path/to/directory # 执行 ls 命令查看目录内容
可选项 | 描述 |
---|---|
chdir | 在执行命令前切换到的目录。 |
creates | 如果文件已存在,则不执行命令。 |
warn | 如果命令返回错误,是否警告而不是报错。 |
2、shell模块
描述: 在目标主机上以 shell 的方式执行命令。
示例:
- name: Execute a shell command
shell: echo "Hello, World!" # 执行 echo 命令输出文本
可选项 | 描述 |
---|---|
executable | 指定要使用的 shell 解释器。 |
creates | 如果文件已存在,则不执行命令。 |
warn | 如果命令返回错误,是否警告而不是报错。 |
3、copy模块
描述: 将本地文件或目录复制到目标主机。
示例:
- name: Copy a file
copy:
src: /path/to/local/file # 本地文件路径
dest: /path/on/remote/host # 目标主机路径
可选项 | 描述 |
---|---|
backup | 是否备份目标文件。 |
force | 是否强制覆盖目标文件。 |
owner | 设置目标文件的所有者。 |
4、hostname模块
描述: 设置主机的主机名。
示例:
- name: Set hostname
hostname:
name: myserver.example.com # 设置主机名为 myserver.example.com
可选项 | 描述 |
---|---|
name | 要设置的主机名。 |
use | 指定要用于设置主机名的工具(仅限于 Linux)。 |
5、yum模块
描述: 在 CentOS/RHEL 等基于 yum 的系统上安装、删除和更新软件包。
示例:
- name: Install a package
yum:
name: httpd # 要安装的软件包名称
state: present # 确保软件包处于安装状态
可选项 | 描述 |
---|---|
name | 要操作的软件包名称。 |
state | 软件包应该处于的状态(present、absent、latest 等)。 |
update_cache | 是否更新缓存。 |
6、service模块
描述: 控制系统服务的状态(启动、停止、重启)。
示例:
- name: Restart a service
service:
name: httpd # 服务名称
state: restarted # 重启服务
可选项 | 描述 |
---|---|
name | 要操作的服务名称。 |
state | 服务应该处于的状态(started、stopped、restarted 等)。 |
7、user模块
描述: 管理系统用户(创建、删除、修改)。
示例:
- name: Create a user
user:
name: johndoe # 用户名
state: present # 确保用户存在
groups: wheel # 将用户添加到 wheel 组
可选项 | 描述 |
---|---|
name | 要操作的用户名。 |
state | 用户应该处于的状态(present、absent 等)。 |
groups | 将用户添加到的组。 |
六、Playbook配置文件
1、执行配置文件
说明
Ansible Playbook 是用 YAML 格式编写的自动化任务剧本,用于定义一系列任务和配置步骤,以实现系统配置、部署和管理。
描述
Playbook 文件通过定义任务(tasks)、变量(variables)、条件控制和处理机制来描述应用程序的自动化过程。
示例
---
- name: Install and configure Apache
hosts: webservers
become: yes
tasks:
- name: Install Apache
yum:
name: httpd
state: present
notify:
- start apache
- name: Start Apache
service:
name: httpd
state: started
handlers:
- name: start apache
service:
name: httpd
state: started
解释
运行playbooks
ansible-playbook -i /path/to/your/inventory apache.yml
2、触发器
说明
在 Ansible 中,触发器(handlers)用于在任务执行后根据需要触发额外的操作,例如重启服务或执行其他必要的配置更改。
描述
Handlers 被定义在 Playbook 文件的 handlers 部分,并通过 notify 关键字从任务中调用。
示例
---
- name: Install and configure Apache
hosts: webservers
become: yes
tasks:
- name: Install Apache
yum:
name: httpd
state: present
notify:
- Restart Apache
handlers:
- name: Restart Apache
service:
name: httpd
state: restarted
解释
3、角色
说明
角色(Roles)是一种组织和复用 Ansible Playbook 的方法,可以将相关任务和文件结构化为可重复使用的单元。
描述
角色包含了一个或多个相关任务、变量、模板和文件,可以作为独立模块在不同的 Playbook 中引用和调用。
示例
角色的目录结构示例:
myrole/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
├── files/
├── vars/
│ └── main.yml
├── defaults/
│ └── main.yml
├── meta/
│ └── main.yml
└── README.md
解释
角色使得代码重用和管理变得更加简单和可维护,特别适用于复杂的自动化任务和部署流程。