这是Ansible系列课程第二节,Ansible环境搭建。介绍Ansible在不同的平台上的安装方式,配置SSH Key打通与其他主机的连接,并执行第一条ad-hoc命令验证ansible是否正常。
该系列课程前后章节都是有关联性的,对于初学者建议按顺序阅读。也可以选择特定的章节了解单个知识点。
在上一节介绍了Ansible与其他配置管理工具非常的不同。它的设计思路使得Ansible不仅使用简单,而且安装也非常简单。它不需要为此准备额外的配置文件和客户端即可使用。Ansible将机器分为控制节点和管理节点。我们只需要在控制节点上安装Ansible,并且在控制节点上执行ad-hoc命令或者执行playbook,以此完成对其他管理节点的配置和操作。
1、基础环境要求
该系列教程所用到的环境为:
两台云主机:101.34.150.237(控制节点),118.195.199.238(管理节点)
操作系统:CentOS 7.6 64位
Python版本: 2.7.5
Ansible版本:2.9.25
Git版本:2.33.0
IDE版本:IntelliJ IDEA Ultimate 2019.3.2
代码托管平台:码云
Ansible目前支持Linux和MacOS作为控制节点,管理节点可以是Linux、MacOS、其他类Unix系统和Windows。Ansible对控制节点的配置没有太多要求,对管理节点的要求就更低了。但Ansible的运行也不是一点要求也没有,还是需要具备执行Ansible所必须的基础条件:Python 2.6或更高版本,OpenSSH。
这两个程序在目前的大多数操作系统上都已经安装好了,我们可以检查一下是否安装。下面是在本环境中通过查看版本号检查是否安装的命令。
检查Python的版本:
[root@controll-node ~]# python -V
Python2.7.5
检查OpenSSH是否安装
[root@controll-node ~]# ssh -V
OpenSSH_7.4p1, OpenSSL1.0.2k-fips26Jan2017
如果没有安装可以通过包管理器进行安装。
#安装python2
[root@controll-node ~]#yum install python2 -y
#安装OpenSSH
[root@controll-node ~]#yum install openssh -y
Git主要用于从代码库中下载和更新Ansible脚本。当然,你也可以直接在服务器上编辑,执行,但这里不建议这么做。Ansible采用的是基础设施即代码的理念,应该用管理代码的方式去管理Ansible的脚本,这样才能享受版本控制带来的好处。
关于Git的安装可以利用包管理器直接安装,只不过安装的Git版本较低,命令如下:
[root@controll-node ~]#yum install git -y
其他更多工具的安装部署可以到“幂次平台”中查看。
2、Ansible的安装
前面章节提到,Ansible的安装非常简单并且只需要在控制节点安装。下面我们介绍如何在控制节点安装Ansible,安装Ansible的方法有很多,可以通过Linux的包管理器直接安装,也可以通过源码的方式安装,还可以通过python的包管理工具pip进行安装,这几种方式都能完成Ansible的安装。下面我们分别介绍一下:
①Linux包管理器安装
包管理器能够自动的解决软件的依赖问题,使得安装软件非常的容易。只需要通过一条命令即可完成Ansible的安装,不同的操作系统安装命令也不一样。
CentOS、Fedora、REHL以及兼容版本:
[root@controll-node ~]#sudo yum install ansible
Ubuntu、Debian以及兼容版本:
[root@controll-node ~]#sudo apt-get install ansible
②源码方式安装
这是安装Ansible最新版本的最佳方法,甚至可以提前尝鲜未发布的新特性,但同时也可能是一个未完全测试通过,还带有bug的版本。这种方式就需要克隆Git源码库,然后进行安装,命令如下:
[root@controll-node ~]#git clone https://github.com/ansible/ansible.git
[root@controll-node ~]#cd ansible
[root@controll-node ~]#sudo make install
③pip包管理器安装
pip是Python的包管理器,提供了对Python包的查找、下载和安装功能。对于Python2.7.9+和Python3.4+以上的版本都自带了pip工具。
如果没有安装pip可以通过下面的命令进行安装:
[root@controll-node ~]#yum install python2-pip
[root@controll-node ~]#yum install python3-pip
然后使用pip安装ansible
[root@controll-node ~]#pip install ansible
3、检查安装结果
Ansible安装完后,通过查看Ansible版本号检查安装是否成功。
[root@controll-node ~]# ansible --version
ansible2.9.25
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, Apr22020,13:16:51) [GCC4.8.520150623(Red Hat4.8.5-39)]
4、配置SSH KEY
Ansible的控制节点是通过SSH远程连接管理节点并执行具体的任务。虽然Ansible也支持密码的方式,但每次都传入密码,不易将任务自动化,如果写到脚本里,特别是root的密码也是不安全的。因此,我们可以通过SSH KEY的方式建立控制节点和管理节点的连接。通过以下几个步骤:
STEP1:在控制节点通过下面命令生成SSH KEY:
[root@controll-node ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter fileinwhich to save the key (/root/.ssh/id_rsa):
Enter passphrase (emptyforno passphrase):
Enter same passphrase again:
Your identification has been savedin/root/.ssh/id_rsa.
Your public key has been savedin/root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:HF83TTg5MnLX7aokggM6PlJhlx/rdJt0UT4X7MEzmgA root@controll-node
The key's randomart image is:
+---[RSA2048]----+
| E. o+o|
| o=&oo|
| . . *.BoO.|
| o+.. o..=.o..|
| .+o+S .. o . |
|+*+o . . |
| o . o+=o . |
|. o . o . |
| . . |
+----[SHA256]-----+
STEP2:将控制节点的公钥添加的管理节点的authorized_keys文件中,这样每次就不需要再次输入密码 了,可以采用如下命令添加。
[root@controll-node ~]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:"/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to loginwith the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO:1key(s) remain to be installed--ifyou are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added:1
Now try logging into the machine, with:"ssh '[email protected]'"
and check tomakesure that only the key(s) you wanted were added.
STEP3:验证SSH连通性,可以看出不需要输入密码,控制节点通过SSH连接到管理节点。
[root@controll-node ~]# ssh [email protected]
Last login: Sun Sep1219:29:542021from223.72.41.238
[root@manage-node ~]#
可能出现的问题及解决方案:
1、在通过ssh-copy-id进行SSH KEY授权时,出现Permission denied(publickey,gssapi-keyex,gssapi-with-mic)问题。
解决:如果出现这个问题,可以修改管理节点下的/etc/ssh/sshd_config这个文件,检查并开启下面的配置:
PermitRootLogin yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
修改完后保存该文件,重启sshd服务,再次重试OK了。
[root@manage-node ~]# systemctl restart sshd.service
5、执行第一条ad-hoc命令
到目前为止,通过Ansible控制其他主机的条件已经满足了,是时候小试牛刀执行一下Ansible命令了。注意:这一步不对Ansible的配置做过多的解释,后面章节都会讲到。下面分两步执行:
STEP1:因为初次执行Ansible,我们需要将管理节点添加到inventory文件中。默认的ansible inventory文件是/etc/ansible/hosts文件。在该文件的末尾添加如下内容,因为Ansible是从该文件读取需要连接的管理节点的。
[devops]
118.195.199.238
STEP2:在控制节点执行以下ad-hoc命令,该命令包含用于测试控制节点和管理节点联通性的ping模块。
[root@controll-node ~]# ansible devops -m ping
118.195.199.238 | SUCCESS=> {
"ansible_facts": {
"discovered_interpreter_python":"/usr/bin/python"
},
"changed":false,
"ping":"pong"
}
该命令的执行结果是SUCCESS,说明Ansible的控制节点和管理节点是联通的,可以使用Ansible执行其他任务了。
6、总结
本文主要介绍Ansible的环境搭建,包含不同平台下安装Ansible的不同方法。Ansible安装完成后,配置SSH KEY并通过一条ad-hoc命令验证控制节点和管理节点的连接是正常的。既然环境都准备好了,那么接下来就进入到学习Ansible具体使用的章节了。