install-ansible-on-ubuntu

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

Ansible-Version-Check-Ubuntu-Linux

(4) 设置 SSH 密钥并在被管理节点之间共享

配置 sysops 用户的 ssh 无密码认证。在控制节点为 sysops 用户生成 SSH 密钥,并在被管理主机之间共享。执行 ssh-keygen 命令

$ ssh-keygen

当提示输入时按回车键,输出如下所示

ssh-keygen-output-ubuntu-linux

注意: 如果您没有配置本地 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

以上命令的输出如下所示

sshkeys-exchange-with-sshcopyid-command

(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-Version-Check-command-Ubuntu

很好,ansible 现在正在读取我们项目的 ansible 配置文件。让我们使用 ansible ad-hoc 命令来验证被控节点的连通性

$ ansible all -m ping

注意: 确保从 demo 文件夹中运行 ansible 命令。

Ansible-Ping-Pong-Connectivity-Ubuntu

此输出确认从控制节点到被控主机的连接已经到位。

(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

Ansible-Playbook-Execution-Ubuntu

以上输出确认剧本已成功执行。为了验证结果,可以执行以下 ad-hoc 命令

$ ansible dev -m shell -a 'dpkg -l | grep -E "php|mariadb"'
$ ansible prod -m shell -a 'rpm -qa | grep -E "php|mariadb"'

以上就是这篇文章的全部内容,如果你觉得它很有用,请毫不犹豫地分享它。请在下面的评论区发布疑问和反馈。

我的开源项目

酷瓜云课堂-开源网校系统

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐