Linux云计算运维架构师(连载)-自动化运维ansible-03

2021-07-05 10:24:19 浏览数 (1)

1.1 Ansible的安装及部署

Ansible是一(机)对多(机)的操作,为了避免在操作过程中因不同机器间的授权问题导致Ansible一键部署失败,故实验开始前首先介绍不同服务器间的免密登录技术。

1.1.1 部署Ansible

Ansible是一对多的操作,这里使用一台Ansible服务器来控制3台从机的例子进行讲解。现在来部署实验环境,准备4台服务器,服务器角色及配置如表1.1所示。

表1.1 Ansible实验准备

服务器角色

应用配置

IP地址

Ansible服务器

Ansible

192.168.226.11

host1

IP

192.168.226.12

host2

IP

192.168.226.13

host3

IP

192.168.226.14

注意:本实验中所有服务器都需要提前关闭防火墙及SElinux。实验所需的环境准备完成后在Ansible服务器中做域名解析,具体代码如下所示。

[root@qfedu ~]# vim /etc/hosts

[root@qfedu ~]# tail -4 /etc/hosts

192.168.226.11 ansible

192.168.226.12 host1

192.168.226.13 host2

192.168.226.14 host3

在Ansible客户机上只需要设置好IP和YUM源即可,无需安装任何Ansible程序。为了方便读者观察实验效果,此处将各服务器的主机名修改为其对应角色,具体代码如下所示。

#192.168.226.11

[root@qfedu ~]# hostnamectl set-hostname ansible

#192.168.226.12

[root@qfedu ~]# hostnamectl set-hostname host1

#192.168.226.13

[root@qfedu ~]# hostnamectl set-hostname host2

#192.168.226.14

[root@qfedu ~]# hostnamectl set-hostname host3

2.安装Ansible

实验所需的环境准备完成后,接下来在Ansible控制机中安装Ansible。Ansible的安装依赖于EPEL仓库,因此在安装Ansible前需要安装EPEL源,具体代码如下所示。

[root@ansible ~]# yum -y install epel-release

已安装:

epel-release.noarch 0:7-11

完毕!

EPEL源安装完成之后,即可开始安装Ansible,具体代码如下所示。

[root@ansible ~]# yum -y install ansible

当出现如下提示时,即说明Ansible安装完成。

已安装:

ansible.noarch 0:2.9.10-1.el7

作为依赖被安装:

PyYAML.x86_64 0:3.10-11.el7

libyaml.x86_64 0:0.1.4-11.el7_0

······省略部分代码······

python-setuptools.noarch

0:0.9.8-7.el7 python-six.noarch 0:1.9.0-2.el7

python2-cryptography.x86_64

0:1.7.2-2.el7 python2-httplib2.noarch 0:0.18.1-3.el7

python2-jmespath.noarch

0:0.9.4-2.el7 python2-pyasn1.noarch 0:0.1.9-7.el7

sshpass.x86_64 0:1.06-2.el7

完毕!

3.初步使用Ansible

Ansible安装完成之后,可以通过命令查看及了解有关它的基本信息,此处给出几个示例以供参考。

l 列出Ansible的所有文件

[root@ansible ~]# rpm -ql ansible

/usr/share/man/man1/ansible-galaxy.1.gz

/usr/share/man/man1/ansible-inventory.1.gz

/usr/share/man/man1/ansible-playbook.1.gz

/usr/share/man/man1/ansible-pull.1.gz

/usr/share/man/man1/ansible-vault.1.gz

/usr/share/man/man1/ansible.1.gz

l 查看Ansible的配置文件

[root@ansible ~]# rpm -qc ansible

/etc/ansible/ansible.cfg

/etc/ansible/hosts

l 查看Ansible的所有模块

[root@ansible ~]# ansible-doc -l

fortios_router_community_list Configure community lists in Fortinet's For...

azure_rm_devtestlab_info Get Azure DevTest Lab facts

ecs_taskdefinition register a task definition in ecs

avi_alertscriptconfig Module for setup of AlertScriptConfig Avi R...

tower_receive Receive assets from Ansible Tower

netapp_e_iscsi_target NetApp E-Series manage iSCSI target configu...

azure_rm_acs Manage an Azure Container Service(ACS) inst...

fortios_log_syslogd2_filter Filters for remote system server in Fortine...

junos_rpc Runs an arbitrary RPC over NetConf on an Ju...

na_elementsw_vlan NetApp Element Software Manage VLAN

pn_ospf CLI command to add/remove ospf protocol to ...

pn_snmp_vacm CLI command to create/modify/delete snmp-va...

cp_mgmt_service_sctp Manages service-sctp objects on Check Point...

onyx_ospf Manage OSPF protocol on Mellanox ONYX netwo...

icx_command Run arbitrary commands on remote Ruckus ICX...

cs_snapshot_policy Manages volume snapshot policies on Apache ...

nxos_install_os Set boot options like boot, kickstart image...

cnos_static_route Manage static IP routes on Lenovo CNOS netw...

win_eventlog Manage Windows event logs

vmware_category Manage VMware categories

vmware_host_feature_info Gathers info about an ESXi host's feature c...

avi_cluster Module for setup of Cluster Avi RESTful Obj...

l 查看Ansible的版本号

通过命令查看当前Ansible的版本,具体代码及结果如下所示。

[root@ansible ~]# ansible --version

ansible 2.9.18

config file = /etc/ansible/ansible.cfg

configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']

ansible python module location = /usr/lib/python2.7/site-packages/ansible

executable location = /usr/bin/ansible

python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

从代码的反馈结果可以看到,当前Ansible的版本是2.9.18。

1.1.2 免密登录

为了在用户使用SSH远程登陆时减少繁琐身份的验证操作,此处在各服务器中添加SSH密钥(私钥与公钥)进行免密登录配置。SSH通过加密算法生成一对密钥,默认采用RSA 2048位的加密方式。此处在Ansible主机生成密钥,并将公钥发送到各客户机来实现远程免密登录。

1.生成密钥

首先在Ansible主机通过命令生成密钥,具体代码如下所示。

[root@ansible ~]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:8ukjOhvlALDj/syAChOXvqV3VB12OJWJyVNbJUYeqPM root@qfedu

The key's randomart image is:

---[RSA 2048]----

|. . *o=*..|

| o X == o |

|o . o *. . |

|.. o . |

|..o . o.S o |

|o .o . E |

| o. o.. o |

|o.= o.o.. |

|. o=o= ... |

----[SHA256]-----

在生成密钥对过程中,系统会询问保存密钥的文件路径,这里直接按回车密钥会默认保存到/root/.ssh/目录下。接着输入两次密码,也可以是空密码,但必须两次输入密码一样。然后密钥会保存到指定文件路径中,并且显示最终生成的密钥。

2.发送密钥

密钥生成后,接着在Ansible服务器中将生成的密钥发送到另外的客户机,注意在命令结尾添加被控主机的IP地址,具体代码如下所示。

[root@ansible ~]# ssh-copy-id root@192.168.226.12

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"

The authenticity of host '192.168.226.12 (192.168.226.12)' can't be established.

ECDSA key fingerprint is SHA256:NOq3/BJFu5pnnoFB0HH0a31KfFfU2uoZZ5xd8/U9ut0.

ECDSA key fingerprint is MD5:f1:9e:11:69:d3:39:d9:0e:4c:a9:21:e3:a9:79:b1:fc.

Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

root@192.168.226.12's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@192.168.226.12'"

and check to make sure that only the key(s) you wanted were added.

#再分别发送至另外两台主机,此处省略结果。

[root@ansible ~]# ssh-copy-id root@192.168.226.13

[root@ansible ~]# ssh-copy-id root@192.168.226.14

在首次发送的时候,系统会显示命令的文件路径与密钥的文件路径,并且在备份之前会对用户提示用户主机的真实性无法确定,询问是否继续连接目标主机。确定目标主机无误后,输入“yes”之后开始使用密码去连接该主机进行一系列的操作。

3.登录测试

发送完成后,通过Ansible登录已经建立免密登录的客户机,首先在host1主机上创建一个用于检测的文件或文件夹,代码如下所示。

[root@host1 ~]# mkdir host111

接下来使用Ansible登录host1进行测试,具体代码如下所示。

#登录客户机host1

[root@ansible ~]# ssh host1

Last login: Mon Dec 9 10:35:01 2019

[root@host1 ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:29:1a:2c:bf brd ff:ff:ff:ff:ff:ff

inet 192.168.226.12/24 brd 192.168.226.255 scope global noprefixroute ens33

valid_lft forever preferred_lft forever

inet6 fe80::c083:b4f5:860e:1ce2/64 scope link noprefixroute

valid_lft forever preferred_lft forever

通过代码的反馈结果可以看到,Ansible主机直接自动登入了客户机。查看IP也为host1的IP,说明免密登录配置成功。操作完成后,输入exit便可以登出。

#退出客户机

[root@host1 ~]# exit

登出

Connection to host1 closed.

[root@ansible ~]#

0 人点赞