基于 CentOS 7 环境部署 Ansible 及使用

目录

Ansible概述:

一、安装 Ansible

1.1 配置 EPEL 源

1.2 安装 Ansible

1.3 验证 Ansible 是否安装成功

二、使用 Ansible

2.1 编写 Ansible 配置文件

2.2 创建 Ansible inventory 文件

2.4 编写 Ansible playbook

2.5 执行 Ansible playbook

2.6 常用参数指令

三, 注意事项

3.1 inventory/hosts-主机清单规则

3.2 提权操作



Ansible概述:

Ansible 是一种开源的自动化工具,用于配置和管理计算机系统、应用程序和网络设备。它采用简单易懂的 YAML 或 JSON 形式的剧本(playbook)语法,并通过 SSH 协议与远程主机进行通信。以下是 Ansible 的优点:

1. 简单易用

: Ansible 的语法简洁明了,易于理解和编写。使用基于文本的 YAML 或 JSON 格式描述配置任务,无需编写复杂的脚本或程序。

轻量级

: Ansible 使用代理少或无代理的架构,在被管理的主机上不需要额外的软件或永久性的运行进程。这使得安装和管理 Ansible 变得十分简便。

2. 基于SSH

: Ansible 通过 SSH 连接到远程主机执行任务,无需在目标主机上安装特定的客户端。这使得连接配置更加灵活且安全可靠。

3. 模块化和可扩展

: Ansible 提供了大量的内置模块,用来完成各种常见的操作。同时也支持自定义模块,可以根据特定需求进行扩展和定制。

4. 剧本(Playbook)驱动

: Ansible 使用剧本来组织和描述自动化任务的执行流程。通过剧本,可以实现复杂的多任务协调和依赖关系,提高工作效率。

5. 跨平台

: Ansible 可以管理各种操作系统、网络设备和云平台,包括 Linux、Windows、Cisco 等。这为混合环境下的统一管理提供了便利。

6. 可扩展的生态系统

: Ansible 拥有活跃的社区支持和广泛的插件生态系统。可以与其他工具(如 Docker、Kubernetes)集成,满足不同的自动化需求。

7. 可靠性和稳定性

: Ansible 经过多年的发展和广泛的应用,在稳定性和可靠性方面得到验证。它被许多组织广泛采用,包括大型企业和云服务提供商。

一、安装 Ansible

1.1 配置 EPEL 源

在 CentOS 7 上安装 Ansible 需要先安装 EPEL 源,可以使用以下命令安装:

sudo yum install epel-release

1.2 安装 Ansible

安装 Ansible 可以使用以下命令:

sudo yum install ansible

1.3 验证 Ansible 是否安装成功

安装完成后,可以使用以下命令验证 Ansible 是否安装成功:

ansible --version

如果出现类似以下的输出,说明 Ansible 安装成功:

ansible 2.9.17 config file = /etc/ansible/ansible.cfg configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, Apr 16 2021, 01:36:27) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

二、使用 Ansible

2.1 编写 Ansible 配置文件

Ansible 的配置文件默认为 /etc/ansible/ansible.cfg,可以使用以下命令创建一个新的配置文件:

sudo vi /etc/ansible/myansible.cfg

在配置文件中可以设置一些常用的配置项,例如:

[defaults]

inventory = /etc/ansible/hosts

remote_user = user

private_key_file = /path/to/private/key

2.2 创建 Ansible inventory 文件

Ansible inventory 文件用于存储主机列表,可以使用以下命令创建一个新的 inventory 文件:

sudo vi /etc/ansible/hosts

在 inventory 文件中可以指定主机的 IP 地址或主机名,例如:

[webservers]

web1.example.com

web2.example.com

[dbservers]

db1.example.com

db2.example.com

2.4 编写 Ansible playbook

Ansible playbook 是一个 YAML 格式的文件,用于描述 Ansible 的执行过程。可以使用以下命令创建一个新的 playbook:

sudo vi /etc/ansible/playbook.yml

在 playbook 文件中可以指定要执行的任务,例如:

- name: Install Apache hosts: webservers become: true tasks: - name: Install Apache yum: name: httpd state: latest

以上 playbook 的作用是在 webservers 组的主机上安装最新版本的 Apache。

2.5 执行 Ansible playbook

执行 Ansible playbook 可以使用以下命令:

ansible-playbook /etc/ansible/playbook.yml

执行完成后,可以查看结果确认任务是否执行成功。

2.6 常用参数指令

Ansible 是一个功能强大的自动化工具,支持多种参数以满足不同的需求。下面是 Ansible 常用的一些参数:

  • -i/--inventory: 指定主机清单文件(inventory),指定要管理的目标主机。

示例:

ansible-playbook -i inventory.ini playbook.yml

  • -m/--module-name: 指定要执行的模块名称。

示例:

ansible -m command -a "uptime" all

  • -a/--args: 传递给模块的参数。

示例:

ansible -m shell -a "echo 'Hello, world!'" all

  • -u/--user: 以指定的用户名连接到远程主机。

示例:

ansible -u myuser -m ping all

  • -b/--become: 使用特权(sudo/root)执行远程命令。

示例:

ansible -b -m yum -a "name=httpd state=installed" all

  • -K/--ask-become-pass: 在执行命令之前提示输入特权密码。

示例:

ansible -b -m shell -a "reboot" all -K

  • -e/--extra-vars: 传递额外的变量给 Playbook 或命令行。

示例:

ansible-playbook -e "my_var=value" playbook.yml

  • --limit: 限制执行任务的主机或组。

示例:

ansible-playbook --limit web_servers playbook.yml

  • -t/--tags: 标记需要运行的任务或剧本标签。

示例:ansible-playbook -t install playbook.yml

  • --skip-tags: 跳过被标记的任务或剧本标签。

示例:ansible-playbook --skip-tags setup playbook.yml

2.7 命令简单示范

  • ansible

: 执行 Ansible 命令并指定主机清单文件(inventory)和模块。

示例:执行 command 模块在所有主机上运行命令。

ansible -i inventory.ini all -m command -a "ls"

  • ansible-playbook

: 运行 Ansible 的剧本(playbook),在目标主机上进行配置管理。

示例:执行 playbook 文件来安装、配置软件包。

ansible-playbook -i inventory.ini playbook.yml

  • ansible-config: 查看和修改 Ansible 配置文件的选项。

示例:查看当前 Ansible 配置文件的位置。

ansible-config --list | grep CONFIGURATION FILE

  • ansible-doc

: 获取 Ansible 模块的文档信息。

示例:查看 debug 模块的帮助文档。

复制代码ansible-doc debug

  • ansible-galaxy

: 用于与 Ansible Galaxy 集成的命令。

示例:从 Ansible Galaxy 下载一个角色。

ansible-galaxy install username.role_name

  • ansible-vault: 对 Ansible 加密文件进行操作,以保护敏感数据。

示例:创建一个加密的变量文件。

ansible-vault create secret.yml

三, 注意事项

3.1 inventory/hosts-主机清单规则

  • inventory文件位置

默认的inventory文件在/etc/ansible/hosts。你可以通过不同位置的ansible文件来定义不同的inventory位

置。

  • inventory文件书写注意事项

如果inventory文件包含同样名字的host和group,那么ansible在列出目标主机的时候会弹出警告,并且 group会被忽略

  • inventory定义

inventory文件定义了一系列的被管理主机,这些被管理主机可以被放到group中。group可以包含child

group,并且一个主机可以同时属于多个组,inventroy文件中也可以设置变量来指定主机和组

  • 静态inventory文件可以通过主机名或者ip地址来指定被管理主机,每行代表一个主机
  • 常规写法

web1.example.com

db1.example.com

db2.example.com

192.168.1.1

  • 主机组

通常情况下使用主机组来指定ansible的被管理主机,这样更高效一些。每个主机组使用“[]”来括起来

[webservers]

web1.example.com

web2.example.com

192.168.1.1

[db-servers]

db1.example.com

db2.example.com

  • 被管理的主机也可以存在与多个组中
  • 两个一定存在的主机组

all:表示每个inventory中的主机

ungrouped:不在任何主机组中的主机

  • 嵌套组

ansible的inventory使用“:children”来表示嵌套组

[tom]

test1.example.com

192.168.126.120

[monkey] ceshi1.example.com

192.129.0.11

[zuhe:children] tom monkey

  • 指定范围主机

192.168.[1:4].[0:255]匹配192.168.1.0/22网络

server[01:20].example.com匹配server01.example.com到server20.example.com,不会匹配

server1.example.com

3.2 提权操作

[privilege_escalation]
#如果你remote_user使用的是root用户,就不需要配置提权部分,如果你的remote_user不是
root,但是不需要做特权操作,那么也可以不用配置这部分。如果是普通用户,但是需要做特权操作,
那么就需要配置这部分。

become = true
#true表示需要提权,false就表示不需要提权

become_method = sudo
#表示提权的方式是sudo提权

become_user = root
#表示提权到root用户

become_ask_pass = false
#false表示进行sudo操作的时候不提示输入密码,true表示需要输入密码
 

不是任何用户作为remote_user,且配置了提权就能真的提权。而必须要在被管理主机里面配置
sudoers文件,让这个remote_user有提权的能力才可以。 

猜你喜欢

转载自blog.csdn.net/qq_52497256/article/details/131531083