Ansible 是一个免费的开源 IT 自动化和配置工具。它几乎适用于所有 Linux 发行版,可用于管理 Linux 和 Windows 系统。现在,Ansible 也被用于管理 AWS、虚拟机和容器等中的 EC2 实例。它不需要托管主机上的任何代理,只需要 ssh 连接。
在这篇文章中,我们将介绍如何在 Ubuntu 22.04 LTS (Jammy Jellyfish)和 20.04 LTS (Focal Fossa)上安装最新版本的 Ansible。
必备条件
- Minimal Installed Ubuntu 22.04 | 20.04
- Regular user with sudo privileges
- 2 CPU / vCPU
- 2 GB RAM or more
- 20 GB Hard drive
- Internet Connection
以下是我的演示设置细节
- Ansible Control Node – control.example.com (192.168.1.192)
- Ansible Managed Nodes – node1.example.com & node2.example.com
- sysops sudo user on control and managed nodes with privileges.
注意: 这里 node1 是一个 Ubuntu 系统,node2 是一个 fedora 系统,控制节点是我们将安装 ansible 的系统。我假设已经在每个主机上创建了 sysops sudo 用户。
要配置 sudo 用户 (sysops) 运行所有命令而不提示输入密码,请在每个托管主机上运行以下 echo 和 tee 命令
$ echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
(1) 在控制节点上应用更新
登录到 Ubuntu 20.04 LTS / 21.04 系统,并在 APT 命令下运行以应用更新。
$ sudo apt update
$ sudo apt upgrade -y
安装完所有更新后,重新启动系统一次
$ sudo reboot
(2) 启用 Ansible PPA 存储库
nsible 软件包及其依赖项可在 Ubuntu 22.04/20.04 的默认软件包存储库中找到,但这不是最新的 Ansible 版本。因此,要安装最新且稳定的 Ansible,请启用其 PPA 存储库,运行以下命令
$ sudo apt install -y software-properties-common
$ sudo add-apt-repository --yes --update ppa:ansible/ansible
现在,通过运行下面的 apt 命令更新存储库
$ sudo apt update
(3) 安装最新版本的 Ansible
在 Ubuntu 20.04 LTS / 22.04 LTS 上安装最新版本的 Ansible,运行 apt 命令
$ sudo apt install -y ansible
安装成功后,执行命令验证 Ansible 的版本
$ ansible --version
(4) 设置 SSH 密钥并在被管理节点之间共享
配置 sysops 用户的 ssh 无密码认证。在控制节点为 sysops 用户生成 SSH 密钥,并在被管理主机之间共享。执行 ssh-keygen 命令
$ ssh-keygen
当提示输入时按回车键,输出如下所示
注意: 如果您没有配置本地 DNS 服务器,则需要修改控制结点上的 /etc/hosts 文件,添加以下内容:
192.168.1.200 node1.example.com
192.168.1.77 node2.example.com
执行 ssh-copy-id 命令,在受控主机之间共享 ssh 密钥,示例如下
$ ssh-copy-id node1.example.com
$ ssh-copy-id node2.example.com
以上命令的输出如下所示
(5) 创建 ansible cfg 和 inventory 文件
通常建议每个项目都有单独的 ansible.cfg 和 inventory 文件。出于演示的目的,我使用 demo 作为项目名称。因此,首先通过运行 mkdir 命令创建项目文件夹。
$ mkdir demo
Download sample ansble.cfg file to ~/demo folder using following wget command
使用以下 wget 命令下载示例 ansble.cfg 文件到 ~/demo 文件夹
$ cd demo
$ wget https://raw.githubusercontent.com/ansible/ansible/stable-2.9/examples/ansible.cfg
编辑 ~/demo/ansible.cfg 文件, 设置如下参数
$ vi ~/demo/ansible.cfg
在 default 部分下面
inventory = /home/sysops/demo/inventory
remote_user = sysops
host_key_checking = False
在 privilege_escalation 部分下面
become=True
become_method=sudo
become_user=root
become_ask_pass=False
保存并关闭文件
现在,让我们创建 ~/demo/ansible.cfg 文件中定义的 inventory 文件。
$ vi ~/demo/inventory
[dev]
node2.example.com
[prod]
node1.example.com
保存并关闭文件
重新执行 ansible --version 命令,确认是否设置了新的配置文件
$ cd demo/
$ ansible --version
很好,ansible 现在正在读取我们项目的 ansible 配置文件。让我们使用 ansible ad-hoc 命令来验证被控节点的连通性
$ ansible all -m ping
注意: 确保从 demo 文件夹中运行 ansible 命令。
此输出确认从控制节点到被控主机的连接已经到位。
(6) 创建一个 Demo Ansible 剧本
为了验证 ansible 安装和配置,让我们在 demo 目录下创建一个名为 packages.yaml 的示例剧本,本剧本将在被控节点上安装包。
$ vi packages.yaml
---
- name: Playbook to Install Packages
hosts:
- dev
- prod
tasks:
- name: Install php and mariadb
package:
name:
- php
- mariadb-server
state: present
保存并关闭文件
现在使用 ansible-playbook 命令运行剧本
$ ansible-playbook packages.yaml
以上输出确认剧本已成功执行。为了验证结果,可以执行以下 ad-hoc 命令
$ ansible dev -m shell -a 'dpkg -l | grep -E "php|mariadb"'
$ ansible prod -m shell -a 'rpm -qa | grep -E "php|mariadb"'
以上就是这篇文章的全部内容,如果你觉得它很有用,请毫不犹豫地分享它。请在下面的评论区发布疑问和反馈。