如何在 Ubuntu 16.04 上安装 Ansible
在本文中,我们将学习如何配置 Ansible——一个自动化配置管理系统。Ansible 是一个配置管理系统,可以轻松管理大量客户端机器,并且可以从中央位置进行自动化管理。
Ansible 通过 SSH 隧道进行通信,它不需要在客户端机器上安装任何软件,它从远程 Ansible 机器检索信息,该机器发出命令并复制文件。
Ansible 配置文件主要使用 YAML 数据格式,因为它具有表达力,并且与流行语言相似。客户端可以通过命令行或使用 playbook 进行通信。
先决条件
- 我们需要 Ubuntu 16.04 和一个具有 sudo 权限的非 root 用户。
- 需要用户的 SSH 密钥。
在 Ubuntu 16.04 上安装 Ansible
由于我们需要在一台机器上安装 Ansible 软件,而 Ansible 在 Ubuntu 默认存储库中不可用,因此我们将 Ansible 个人软件包存档添加到系统中。
以下是添加存储库的命令:
$ sudo apt-add-repository ppa:ansible/ansible Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications — automate in a language that approaches plain English, using SSH, with no agents to install on remote systems. https://www.ansible.org.cn/ More info: https://launchpad.net/~ansible/+archive/ubuntu/ansible Press [ENTER] to continue or ctrl-c to cancel adding it gpg: keyring `/tmp/tmp8ffrbkin/secring.gpg' created gpg: keyring `/tmp/tmp8ffrbkin/pubring.gpg' created gpg: requesting key 7BB9C367 from hkp server keyserver.ubuntu.com gpg: /tmp/tmp8ffrbkin/trustdb.gpg: trustdb created gpg: key 7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK
添加 Ansible PPA 到本地机器后,我们需要更新 Linux,以便将软件包存储库添加到机器中。
$ sudo apt-get update –y Hit:1 http://security.ubuntu.com/ubuntu xenial-security InRelease Hit:2 http://in.archive.ubuntu.com/ubuntu xenial InRelease Get:3 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial InRelease [18.1 kB] Hit:4 http://in.archive.ubuntu.com/ubuntu xenial-updates InRelease Hit:5 http://in.archive.ubuntu.com/ubuntu xenial-backports InRelease Get:6 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial/main amd64 Packages [552 B] Get:7 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial/main i386 Packages [552 B] Get:8 http://ppa.launchpad.net/ansible/ansible/ubuntu xenial/main Translation-en [340 B] Fetched 19.5 kB in 1s (18.2 kB/s) Reading package lists... Done
更新软件包存储库后,我们将使用以下命令安装 Ansible。
$ sudo apt-get install ansible Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed:libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libyaml-0-2 python python-crypto python-ecdsa python-httplib2 python-jinja2 python-markupsafe python-minimal python-paramiko python-pkg-resources python-setuptools python-six python-ya l python2.7 python2.7-minimal sshpass Suggested packages: python-doc python-tk python-crypto-dbg python-crypto-doc python-jinja2-doc python-setuptools-doc python2.7-doc binutils binfmt-support The following NEW packages will be installed: ansible libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libyaml-0-2 python python-crypto python-ecdsa python-httplib2 python-jinja2 python-markupsafe python-minimal python-paramiko python-pkg-resources python-setuptools python-six python-yaml python2.7 python2.7-minimal sshpass 0 upgraded, 20 newly installed, 0 to remove and 12 not upgraded. Need to get 6,145 kB of archives. After this operation, 30.7 MB of additional disk space will be used. … … … … Get:19 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 python-setuptools all 20.7.0-1 [169 kB] Get:20 http://in.archive.ubuntu.com/ubuntu xenial/universe amd64 sshpass amd64 1.05-1 [10.5 kB] Fetched 6,145 kB in 8s (761 kB/s) Selecting previously unselected package libyaml-0-2:amd64. (Reading database ... 91811 files and directories currently installed.) Preparing to unpack .../libyaml-0-2_0.1.6-3_amd64.deb ... Unpacking libyaml-0-2:amd64 (0.1.6-3) ... Selecting previously unselected package libpython2.7-minimal:amd64. Preparing to unpack .../libpython2.7-minimal_2.7.12-1~16.04_amd64.deb ... Unpacking libpython2.7-minimal:amd64 (2.7.12-1~16.04) ... Selecting previously unselected package python2.7-minimal. Preparing to unpack .../python2.7-minimal_2.7.12-1~16.04_amd64.deb ... Selecting previously unselected package python-setuptools. Preparing to unpack .../python-setuptools_20.7.0-1_all.deb ... Unpacking python-setuptools (20.7.0-1) ... Setting up python-httplib2 (0.9.1+dfsg-1) ... Setting up python-pkg-resources (20.7.0-1) ... Setting up python-setuptools (20.7.0-1) ... Setting up sshpass (1.05-1) ... Setting up ansible (2.1.1.0-1ppa~xenial) ... Processing triggers for libc-bin (2.23-0ubuntu3) ...
Ansible 主机配置
我们需要从“hosts”文件中跟踪所有服务器和客户端,我们需要创建 hosts 文件,以便我们可以开始与其他客户端或服务器机器通信。
$ sudo nano /etc/ansible/hosts
当我们打开配置文件时,我们会看到所有注释行,并且文件中没有任何配置起作用,我们需要添加以下演示机器。
在组中添加主机或客户端的通用语法。
[group_name] Alias anisible_ssh_host=your_ansible_server_ip_address
演示配置文件
[Ansible_server] Client1 ansible_ssh_host=192.168.0.10 Client2 ansible_ssh_host=192.168.0.11
我们需要进行设置,以便将 SSH 密钥复制到所有客户端机器,以便在无需密码的情况下进行授权。
在我们的场景中,我们使用了两台客户端机器,并且所有客户端机器都可以使用 SSH 密钥进行访问,而无需提示输入密码。
使用当前配置,如果我们尝试使用 Ansible 连接到主机,则命令将失败,因为 SSH 密钥与 root 用户连接,并且我们将看到以下错误
Client1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }
我们将创建一个文件,该文件指示服务器将使用客户端机器的 root 用户进行连接。
$ sudo mkdir /etc/ansible/group_vars $ sudo vi /etc/ansible/group_vars/servers --- Ansible_ssh_user: root
我们必须在 YAML 文件的开头放置“--”。
如果要在一个地方指定所有服务器,则需要在 /etc/ansible/group_vars/all 中提供这些详细信息。
执行简单的 Ansible 命令
为了测试我们的配置,我们运行以下命令,该命令将 ping 配置文件中的所有客户端。
$ ansible –m ping all
Client1 | SUCCESS => { "changed": false, "ping": "pong" } Client2 | SUCCESS => { "changed": false, "ping": "pong" }
我们还可以使用以下示例 ping 单个客户端。
如果要 ping 整个组,我们将使用以下命令
$ ansible –m ping servers
如果要 ping 单个客户端或机器,我们将使用以下命令
$ ansible –m ping clien1
我们可以使用 shell 模块从 Ansible 到客户端运行终端命令。
$ ansible –m shell –a ‘df –h’ client1 Client1 | SUCCESS | rc=0 >> df -h Filesystem Size Used Avail Use% Mounted on udev 973M 0 973M 0% /dev tmpfs 199M 5.9M 193M 3% /run /dev/mapper/ubuntu16--vg-root 18G 1.7G 15G 11% / tmpfs 992M 0 992M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup /dev/sda1 472M 101M 347M 23% /boot tmpfs 100K 0 100K 0% /run/lxcfs/controllers tmpfs 199M 0 199M 0% /run/user/1000
在以上文章中,我们学习了如何安装和配置 Ansible,以及如何配置客户端,与客户端或服务器通信以及运行简单命令和任务,以便我们可以测试配置并远程执行简单任务。我们将在后续文章中介绍 Playbook。