如何在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。