如何在CentOS 7上安裝和配置Ansible


在本文中,我們將學習如何在CentOS 7上配置Ansible,這是一個自動化配置管理系統。該系統可以輕鬆管理大量客戶端機器,並可以從中央位置進行自動化管理。

Ansible透過SSH隧道進行通訊,它不需要在客戶端機器上安裝任何軟體,並且可以從遠端Ansible機器檢索資訊,這些機器發出命令並複製檔案。

Ansible配置檔案主要使用YAML資料格式,因為它具有表達性和與流行語言的相似性。可以使用命令列工具或playbook與客戶端進行通訊。

先決條件

  • 我們需要CentOS 7和root使用者。
  • 需要使用者的SSH金鑰。

在CentOS 7上安裝Ansible

由於我們需要在一臺機器上安裝Ansible軟體,它在CentOS預設儲存庫中不可用。因此,我們應該新增Ansible個人軟體包到系統存檔。

以下是新增儲存庫的命令:

$ sudo yum install epel-release -y
Output:
Loaded plugins: fastest mirror
Loading mirror speeds from cached hostfile
* base: mirror.fibergrid.in* extras: mirror.digistar.vn
* updates: mirror.digistar.vn
Resolving Dependencies
   --> Running transaction check
   ---> Package epel-release.noarch 0:7-9 will be installed
   --> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package             Arch             Version             Repository             Size
================================================================================
Installing:
epel-release       noarch          7-9                   extras                14 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Downloading packages:
epel-release-7-9.noarch.rpm                                  | 14 kB    00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : epel-release-7-9.noarch                                    1/1
Verifying : epel-release-7-9.noarch                                     1/1
Installed:
epel-release.noarch 0:7-9
Complete!

更新Epel儲存庫後,我們需要更新系統,以便完美安裝依賴項。

$ sudo yum update –y
Output:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.fibergrid.in
* epel: epel.mirror.angkasa.id
* extras: mirror.digistar.vn
* updates: mirror.digistar.vn
Resolving Dependencies
   --> Running transaction check
   ---> Package NetworkManager.x86_64 1:1.0.6-31.el7_2 will be updated
   ---> Package NetworkManager.x86_64 1:1.4.0-14.el7_3 will be an update
   --> Processing Dependency: libjansson.so.4()(64bit) for package: 1:NetworkManager-1.4.0-14.el7_3.x86_64
   ---> Package NetworkManager-libnm.x86_64 1:1.0.6-31.el7_2 will be updated
   ---> Package NetworkManager-libnm.x86_64 1:1.4.0-14.el7_3 will be an update
   ---> Package NetworkManager-tui.x86_64 1:1.0.6-31.el7_2 will be updated
   ---> Package NetworkManager-tui.x86_64 1:1.4.0-14.el7_3 will be an update
   ---> Package NetworkManager-wifi.x86_64 1:1.0.6-31.el7_2 will be updated
   ---> Package NetworkManager-wifi.x86_64 1:1.4.0-14.el7_3 will be an update
   ---> Package alsa-lib.x86_64 0:1.0.28-2.el7 will be updated
   ---> Package alsa-lib.x86_64 0:1.1.1-1.el7 will be an update
…
…
Fetched 19.5 kB in 1s (18.2 kB/s)
Reading package lists... Done
Complete!

更新軟體包儲存庫後,我們將使用以下命令安裝Ansible:

$ sudo yum install ansible -y
Output:
Loaded plugins: fastestmirror
epel/x86_64/metalink                         | 4.8 kB 00:00:00
epel                                         | 4.3 kB 00:00:00
(1/3): epel/x86_64/group_gz                  | 170 kB 00:00:01
(2/3): epel/x86_64/updateinfo                | 721 kB 00:00:03
(3/3): epel/x86_64/primary_db                | 4.5 MB 00:00:09
Loading mirror speeds from cached hostfile
* base: mirror.fibergrid.in
* epel: mirror.rise.ph
* extras: mirror.digistar.vn
* updates: mirror.digistar.vn
Resolving Dependencies
   --> Running transaction check
   ---> Package ansible.noarch 0:2.2.1.0-1.el7 will be installed
   --> Processing Dependency: sshpass for package: ansible-2.2.1.0-1.el7.noarch
   --> Processing Dependency: python-six for package: ansible-2.2.1.0-1.el7.noarch
   --> Processing Dependency: python-setuptools for package: ansible-2.2.1.0-1.el7.noarch
   --> Processing Dependency: python-paramiko for package: ansible-2.2.1.0-1.el7.noarch
   --> Processing Dependency: python-keyczar for package: ansible-2.2.1.0-1.el7.noarch
   --> Processing Dependency: python-jinja2 for package: ansible-2.2.1.0-1.el7.noarch
   --> Processing Dependency: python-httplib2 for package: ansible-2.2.1.0-1.el7.noarch
   --> Processing Dependency: PyYAML for package: ansible-2.2.1.0-1.el7.noarch
   --> Running transaction check
..
..
Verifying : python-jinja2-2.7.2-2.el7.noarch                                  3/19
Verifying : python-setuptools-0.9.8-4.el7.noarch                               4/19
Verifying : python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch          5/19
Verifying : python-markupsafe-0.11-10.el7.x86_64                               6/19
Verifying : python-httplib2-0.7.7-3.el7.noarch                                  7/19
Verifying : python2-ecdsa-0.13-4.el7.noarch                                     8/19
Verifying : libtomcrypt-1.17-23.el7.x86_64                                     9/19
Verifying : python-backports-1.0-8.el7.x86_64                                  10/19
Verifying : ansible-2.2.1.0-1.el7.noarch                                     11/19
Verifying : libtommath-0.42.0-4.el7.x86_64                                     12/19
Verifying : python2-pyasn1-0.1.9-7.el7.noarch                                  13/19
Verifying : PyYAML-3.10-11.el7.x86_64                                           14/19
Verifying : python2-crypto-2.6.1-10.el7.x86_64                               15/19
Verifying : python-babel-0.9.6-8.el7.noarch                                  16/19
Verifying : python-six-1.9.0-2.el7.noarch                                  17/19
Verifying : python2-paramiko-1.16.1-1.el7.noarch                            18/19
Verifying : sshpass-1.05-5.el7.x86_64                                        19/19
Installed:
ansible.noarch 0:2.2.1.0-1.el7
Dependency Installed:
PyYAML.x86_64 0:3.10-11.el7       libtomcrypt.x86_64 0:1.17-23.el7       libtommath.x86_64 0:0.42.0-4.el7
libyaml.x86_64 0:0.1.4-11.el7_0    python-babel.noarch 0:0.9.6-8.el7    python-backports.x86_64 0:1.0-8.el7
python-backports-ssl_match_hostname.noarch 0:3.4.0.2-4.el7    python-httplib2.noarch 0:0.7.7-3.el7    python-jinja2.noarch 0:2.7.2-2.el7
python-keyczar.noarch 0:0.71c-2.el7    python-markupsafe.x86_64 0:0.11-10.el7    python-setuptools.noarch 0:0.9.8-4.el7
python-six.noarch 0:1.9.0-2.el7    python2-crypto.x86_64 0:2.6.1-10.el7       python2-ecdsa.noarch 0:0.13-4.el7
python2-paramiko.noarch 0:1.16.1-1.el7       python2-pyasn1.noarch 0:0.1.9-7.el7 sshpass.x86_64 0:1.05-5.el7
Complete!

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
We have to put the “---“ in the starting of the YAML file.

如果要在一個位置指定所有伺服器,我們需要在/etc/ansible/group_vars/all中提供這些詳細資訊。

執行簡單的Ansible命令

為了測試我們的配置,我們執行以下命令,該命令將 ping 配置檔案中的所有客戶端。線上觀看電影《玩命快遞4》(2015)

$ ansible –m ping all
Output:
Client1 | SUCCESS => {
   "changed": false,
   "ping": "pong"
}
Client2 | SUCCESS => {
   "changed": false,
   "ping": "pong"
}

我們還可以使用以下示例 ping 單個客戶端。

$ ansible –m ping servers
$ ansible –m ping clien1

我們可以使用shell模組從Ansible執行到客戶端的終端命令。

$ ansible –m shell –a ‘df –h’ client1
Output:
Client1 | SUCCESS | rc=0 >>
Filesystem                         Size    Used    Avail    Use%    Mounted on
/dev/mapper/centos-root             42G    2.6G    39G       7%       /
devtmpfs                            1.9G   0       1.9G      0%       /dev
tmpfs                               1.9G   0       1.9G      0%       /dev/shm
tmpfs                               1.9G   8.4M    1.9G      1%       /run
tmpfs                               1.9G   0       1.9G      0%       /sys/fs/cgroup
/dev/sda1                           494M   163M    332M      33%      /boot
/dev/mapper/centos-home             21G    33M     21G       1%       /home
tmpfs                               379M   0       379M      0%       /run/user/0

像上面的例子一樣,我們將檢查client1的可用記憶體。

$ ansible –m shell –a ‘free –m’ client1
Output:
Client1|SUCCESS|rc=0 >>
total       used       free       shared       buff/cache       available
Mem:       3.7G       868M          1.9G          8.4M           1.0G 2.6G
Swap:      2.0G       0B            2.0G

在上面的文章中,我們學習瞭如何安裝和配置Ansible以及配置客戶端、與客戶端或伺服器通訊以及執行簡單的命令和任務,以便我們可以測試配置並遠端執行簡單的任務。我們將在以後的文章中介紹Playbook。

更新於:2020年1月23日

1K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告