如何在 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.
http://ansible.com/
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。

更新於: 2020年1月23日

312 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.