如何在CentOS 7中设置Ansible自动化工具
我们好,欢迎我们今天的最重要的文章,类似于Chef 或者Puppet的Ansible自动化工具。
首先,Ansible易于安装,简单配置且易于理解。
在保持系统和流程非常简单的情况下非常重要。
Ansible用于配置管理,有助于配置Web和应用程序服务器,并使其易于使用文件进行版本,并且我们也可以使用它来管理开发,暂存和生产环境中的不同配置。
它还用于应用部署。
它可以完全自动化可以处理多个组服务器和数据库的多层应用程序部署。
Ansible使用SSH连接到服务器并通过SSH连接到客户端来运行已配置的任务,无需设置任何特殊代理。
我们需要的只是一个Python和一个可以登录和执行脚本的用户,然后Ansible开始收集关于机器的事实,如安装的操作系统和软件包以及运行的其他服务在yaml文件格式中运行剧本之后,PlayBooks是一堆可以执行多个任务的命令。
准备工作
在本教程中,我们将在CentOS 7上安装和配置Ansible,并将管理其两个节点以了解其功能。
在我们的测试环境中,我们将使用三个Linux CentOS 7 VMS,一个用于控制安装Ansible服务器的位置,并通过SSH通过该控制机管理的两个节点。
确保在两个控制器和客户端节点上安装了Python 2.6或者2.7以成功安装Ansible。
让我们使用root用户或者非root用户使用sudo权限连接到控制器服务器,以便使用Ansible。
设置epel存储库
首先,我们需要为Controller服务器上的CentOS 7启用"epel"存储库,因为默认的yum存储库中不可用的ansible包,因此我们将使用下面的命令在CentOS 7/Rhel 7上启用EPEL存储库。
# rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
现在运行命令以更新操作系统。
# yum -y update
安装Ansible.
现在,我们可以使用"yum"命令在CentOS 7上安装Ansible,该命令将通过选择"y"键来安装它,包括其所需的依赖项,如图所示。
# yum install ansible
已成功安装Ansible后,我们可以使用以下命令验证并检查其已安装的版本。
# ansible --version
基于键的SSH身份验证与节点
为了将任何部署/管理从"localhost"执行到远程主机,首先,我们需要在ansible服务器上生成键并将公钥复制到客户端节点。
在ansible服务器上运行以下命令以生成其公共和私钥。
#ssh-keygen -t rsa -b 4096
生成SSH键后,现在使用以下命令将其复制到远程服务器,以将SSH键放在远程主机上。
# ssh-copy-id root@node1_ip
如果我们使用的是使用任何自定义SSH端口,请在命令中使用"-p"参数提及它。
一旦我们提供了客户端节点的正确密码,我们将被要求输入客户端节点的密码,然后它将成功授权。
# ssh-copy-id -p2178 root@node1_ip
The authenticity of host '[72.25.70.83]:2178 ([72.25.70.83]:2178)' can't be established. ECDSA key fingerprint is 49:8a:9c:D9:35:le:09:3d:5f:31:43:a1:41:94:70:53. 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 Authorized uses only. All activity Jan be \ monitored and reported. [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh -p '2178' '[email protected]'" and check to make sure that only the key(s) you wanted were added.
我们还可以手动将控制服务器的公共RSA键添加到Clouch节点。
要执行此操作,请登录客户端节点并按照以下步骤操作。
拳头将密钥复制来自'/Root/.ssh/d_rsa.pub'文件,并将其保存在服务器的主目录中的客户端节点或者我们要进行身份验证的任何其他用户。
[root@centos-7 .ssh]# cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAPNRNS/BVcT7XqHDuSvd8oncAjbNl2ZiYiU22MCNFKN8p/cgcblOZoZS0gjlQHpQLR1wm5hVu7PcxY/JAFX2phKyeZ+dbfQlAQ7HLRaaXWfuonelWgTCcs530bSg6XP3MTDRWjW0ZEFTLaOqVz+Yq2nUP3xRYmRKYNq2PhPRrkoBxnDGlmAsgGDm4gWz2TGE59uYHuXvY2Ys4OPeMFHAp0blR5nJIfVF40RB4uH0U79pp19qZ0vbghEvYUiyD4NMjqG13Ba4YYBQQIphe4GA3OTjBvjVmnmBCWZyDOcO+bWWyyKpabEEZOga3KnsoTw4iQ+d+iUyhPTZOvXaoOFUmrFQo5wWG229/GMJnYe1Qv0D3K3CcAQ== root@centos-7
[root@node2 ~]# vi .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAPNRNS/BVcT7XqHDuSvd8oncAjbNl2ZiYiU22MCNFKN8p/cgcblOZoZS0gjlQHpQLR1wm5hVu7PcxY/JAFX2phKyeZ+dbfQlAQ7HLRaaXWfuonelWgTCcs530bSg6XP3MTDRWjW0ZEFTLaOqVz+Yq2nUP3xRYmRKYNq2PhPRrkoBxnDGlmAsgGDm4gWz2TGE59uYHuXvY2Ys4OPeMFHAp0blR5nJIfVF40RB4uH0U79pp19qZ0vbghEvYUiyD4NMjqG13Ba4YYBQQIphe4GA3OTjBvjVmnmBCWZyDOcO+bWWyyKpabEEZOga3KnsoTw4iQ+d+iUyhPTZOvXaoOFUmrFQo5wWG229/GMJnYe1Qv0D3K3CcAQ== root@centos-7
保存和退出文件,我们可以从控制服务器访问两个客户端节点而不要求root密码。
[root@centos-7 ~]# ssh -p 2178 root@node1_ip
[root@centos-7 ~]# ssh -p 2178 root@node2_ip
[root@centos-7 .ssh]# ssh -p 2178 [email protected] Authorized uses only. All activity Jan be \ monitored and reported. Last login: Sun Mar 27 21:42:09 2015 from 12.1.0.90 [root@node1 ~]# exit logout Connection to 72.25.10.83 closed. [root@centos-7 .ssh]# ssh -p 2178 [email protected] The authenticity of host '[72.25.10.84]:2178 ([72.25.10.84]:2178)' can't be established. ECDSA key fingerprint is 49:8a:3c:85:55:61:79:1d:1f:21:33:s1:s1:fd:g0:53. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[72.25.10.84]:2178' (ECDSA) to the list of known hosts. Authorized uses only. All activity Jan be \ monitored and reported. Last login: Sun Mar 27 22:03:56 2015 from 12.1.0.90 [root@node2 ~]# [root@node2 ~]# exit logout Connection to 72.25.10.84 closed.
创建远程主机的库存
在Ansible Server和其客户端节点之间设置SSH键身份验证后,现在将通过编辑"/etc/ansible/hosts的文件"文件来在Ansible Controller服务器上配置这些远程主机。
此文件包含远程主机的列表,无法通过SSH进行管理以管理系统。
使用任何编辑器打开文件来配置它。
[root@centos-7 ~]# vim /etc/ansible/hosts
在配置文件中,我们将两个客户端节点配置为使用端口'2178',如果我们使用默认的SSH端口,那么我们只需将主机IP地址放入"默认值"端口。
保存文件后,允许使用选项'-m'运行以下ansible命令,以验证从ansible服务器到远程服务器的连接。
# ansible -m ping 72.25.10.83 # ansible -m ping 72.25.10.73
我们还可以使用Belo命令用来ping所有已配置的主机。
[root@centos-7 ~]# ansible all -m ping 72.25.10.83 | success >> { "changed": false, "ping": "pong" } 72.25.10.73 | success >> { "changed": false, "ping": "pong" }
执行远程命令
在上面的例子中,我们刚刚使用ping模块来ping远程主机。
有各种模块可用于在远程主机上执行命令。
现在,我们将使用"命令"模块与"ansible"命令用于获取远程计算机信息,如系统主机名信息,如图所示的免费磁盘空间和正常运行时间。
# ansible -m command -a 'hostnamectl' 72.25.10.83 # ansible -m command -a 'df -h' 72.25.10.83 # ansible -m command -a 'uptime' 72.25.10.83
同样,我们可以在单个客户端主机上使用许多shell命令以及类似主机的组,如我们在Ansible主机库存文件中配置了"Web服务器"组,那么我们将运行该命令像这样。
# ansible -m command -a "uptime" web-servers
在Ansible中创建剧本
PlayBooks是Ansible的配置管理脚本,用于管理远程计算机的配置和部署。
PlayBooks包含我们希望实现远程系统的一组策略。
让我们使用文件名为"httpd.yml"创建第一本播放书,然后我们将配置一个主机以运行Apache Web服务器。
其中我们将选择基础架构中的计算机的配置以及以配置文件所示完成任务的远程用户。
[root@centos-7 ~]# vi httpd.yml
-- - hosts: 72.25.10.83 remote_user: root tasks: - name: Installing Latest version of Apache yum: pkg=httpd state=latest - name: Copying the demo file template: src=/etc/ansible/index.html dest=/var/www/html owner=apache group=apache mode=0644 - name: (Enable it on System Boot) service: name=httpd enabled=yes notify: - start apache handlers: - name: start apache service: name=httpd state=started
保存并关闭文件,然后创建一个演示HTML文件,该文件将放在远程主机的默认文档根中。
[root@centos-7 ~]# vi /etc/ansible/index.html
Installing Apache by Ansible Apache Web Server is installed by Ansible Congratulations, Apache is managed through Ansible
了解PlayBook配置
正如我们创建了我们的第一本戏剧,现在它的ImporAtnt明白它是如何工作的。
所有yaml文件都应该以(三个破折号)'' - ---'开头,表示文档的开始。
然后,主机行是由冒号分隔的一个或者多个组或者主机模式的列表。
我们可以提及远程用户帐户以及主机。
-- - hosts: 72.25.10.83 remote_user: root
然后,我们有一组任务,其中每个播放包含一个任务列表,其中一个是按顺序执行的,在移动到下一个任务之前,一次按顺序执行。
tasks: - name: Installing Latest version of Apache yum: pkg=httpd state=latest - name: Copying the demo file template: src=/etc/ansible/index.html dest=/var/www/html owner=apache group=apache mode=0644 - name: (Enable it on System Boot) service: name=httpd enabled=yes
每个任务都应该具有名称,该名称包含在输出中。
这是我们的输出,因此很好地具有对每个任务步骤的合理描述。
因此,我们的第一个任务将安装最新版本的Apache,第二个将复制Demo HTML(/etc/ansible/index.html)到远程主机和第三个将启用Apache服务的自动启动在系统启动期间。
之后,在PlayBook中的每个任务块的末尾触发"通知"操作,即使由多个不同的任务通知,才会触发一次。
notify: - start apache
"通知"项目包含一个名为"start apache"的项目。
这是对处理程序的引用,它可以在任务中调用时执行某些功能。
我们将定义下面的"Start Apache"处理程序。
handlers: - name: start apache service: name=httpd state=started
处理程序是只有在客户端系统上发生更改的任务时才能运行的任务列表。
当我们安装包后,我们有一个启动Apache服务的处理程序。
在Ansible中运行playbook
设置PlayBook配置后,我们可以使用以下命令运行PlayBook。
# ansible-playbook -l 72.25.10.83 httpd.yml
在此打开浏览器之后,并导航到Ansible库存中提到的远程主机的IP地址。
http://your_client_node_ip/
所以,如果你得到上面的页面,我意味着我们已成功使用Ansible PlayBook安装Apache。
与同样的方式,我们可以创建许多剧本以在多个主机上安装复杂应用程序。