新手入门Ansible – 从服务器建设到Playbook创建
本文所要讨论的内容
这次是关于个人备忘录和初学者的内容。我们要做的是在Virtualbox上搭建CentOS服务器并引入Ansible,还要进行简单的playbook创建。说实话,如果只是playbook创建,有很多其他优质文章,但当从头开始做时,在各个网站上搜索很麻烦,所以我在这里记录下来。
关于服务器构建,我不打算写详细的步骤,只记录我遇到的设置问题。
环境
这次将在以下环境中进行搭建:
・Windows10
・Virtualbox-6.0.2
・CentOS-7.0.1810
・ansible-2.7.10
虚拟盒子配置
参考以下文章进行主机专用适配器的设置。
请给我提供一个中国独创的选项,将以下内容改述为中文:
参考
使用VirtualBox的主机模式适配器,在Windows10上进行SSH连接。
構築 CentOS 伺服器
完成设置后,创建新的虚拟机,加载CentOS的ISO镜像进行安装。在此过程中,可以在图形界面上进行各种详细设置,但本次只进行root用户密码的设置。
使用VirtualBOX启动服务器并以root身份登录。
修改服务器主机名。
$ hostnamectl set-hostname ansible
注销后重新登录时,主机名将会更改。
接下来进行网络设置。说实话,使用nmtui命令在图形界面下更容易理解,但是我会试着用命令行进行设置。
[root@ansible ~]# nmcli
enp0s8: connected to ■ ■ ■ ■ 1
"Intel 82540EM Gigabit Ethernet Controller (PRO/1000 MT Desktop Adapter)
ethernet (e1000), 08:00:27:BD:A1:C1, hw, mtu 1500
inet4 192.168.251.3/24
route4 192.168.251.0/24
inet6 fe80::d347:bad1:cb5d:79a4/64
route6 ff00::/8
route6 fe80::/64
route6 fe80::/64
enp0s3: disconnected
"Intel 82540EM Gigabit Ethernet Controller (PRO/1000 MT Desktop Adapter)
1 connection available
ethernet (e1000), 08:00:27:46:40:A9, hw, mtu 1500
enp0s3是NAT,enp0s8是主机专用适配器接口。
根据CentOS7的网络接口命名规则进行查询,末尾的数字越小,适配器就越靠前,例如1是适配器1,2是适配器2。
因为界面名称是用日语写的,所以出现了乱码。
启动enp0s3接口并将自动启动设置设为开启。
[root@ansible ~]# nmcli c m enp0s3 connectuon.autoconnect yes
[root@ansible ~]# nmcli c u enp0s3
接下来,将对Host Only Adapter接口进行配置。
[root@ansible ~]# nmcli c modify enp0s8 ipv4.addresses 192.168.251.3/24
[root@ansible ~]# nmcli c modify enp0s8 ipv4.method manual
手动设置enp0s8的IP分配,并分配给”192.168.251.3/24″。
分配的IP应为预先设置的主机模式适配器的网络带份。
完成设置后,使用Teraterm登录到Host-Only适配器的IP地址(在这篇文章中是192.168.251.3),然后使用nmcli命令确认所有接口都已启动。
因为现在能够连接到互联网,所以立即安装Ansible。
[root@ansible ~]# yum -y install ansible
为了确认已安装,请执行以下命令。
[root@ansible ~]# ansible --version
ansible 2.4.2.0
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, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
看起来安装成功了。
制作Playbook
请继续进行Ansible的配置。
有关Ansible的详细信息,请参考官方文档和下面的文章。
使用Ansible进行基础设施即代码入门(@kk_Ataka)
这次我们打算先创建 playbook,然后在其他服务器上尝试执行命令。
以下是测试环境的配置:
– Ansible服务器
– test1服务器(CentOS7)
– test2服务器(CentOS7)
给test1和test2服务器分别分配了IP地址192.168.251.4和192.168.251.5。
Ansible通过SSH连接执行操作,因此需要创建SSH密钥并复制密钥给代理机器。
[root@ansible ~]# ssh-keygen -t rsa
パスワード入力を求められるのでなにも入れずにEnter
[root@ansible ~]# ssh-copy-id root@192.168.251.4
処理を続行しても良いか問われるのでyesを選択、接続サーバのrootパスワードを入力
同様に
[root@ansible ~]# ssh-copy-id root@192.168.251.4
既然准备工作已经完成,首先创建一个整理了目标主机的hosts文件。
[root@ansible ~]# mkdir ansible
[root@ansible ~]# cd ansible
[root@ansible ansible]# mkdir inventory
[root@ansible ansible]## vi inventory/hosts
[targets]
192.168.251.4
192.168.251.5
确认以下操作是否正确:将IP地址为192.168.251.4和192.168.251.5的目标设为targets组的成员。
[root@ansible ~]# ansible all -i hosts/hosts -m ping
192.168.251.5 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.251.4 | SUCCESS => {
"changed": false,
"ping": "pong"
}
似乎进展顺利。
准备工作时间变长了,但接下来我们要创建Playbook,尝试在测试服务器上安装Ruby。
我们在ansible文件夹下创建group_vars文件夹,并在其中创建Playbook。
[root@ansible ansible]#mkdir group_vars
[root@ansible ansible]#vi group_vars/ruby.yml
- hosts: target
tasks:
- name: packages install from yum
yum:
name: ruby
state: latest
yml文件的内容中,hosts指定了目标服务器,tasks的name字段描述了这个playbook的功能。如果将name字段作为变量,就能够实现多个安装和用途的分离,提供更多的应用灵活性。
现在行动吧!
[root@ansible ansible]# ansible-playbook -i inventory/hosts group_vars/ruby.yml
在这里遇到了一点困惑,就是hosts和yml的指定方法。
文件的指定方法是从当前目录开始指定路径。在上述情况中,因为我正在使用当前目录下的文件,所以指令会像上面那样。但是,如果我想在group_vars中执行,会变成以下这样。
[root@ansible ansible]# ansible-playbook -i ../inventory/hosts ruby.yml
如果执行后没有错误并成功结束,那就完成了。为了试验,试着在服务器上进行确认。
[root@test2 ~]# yum list installed | grep ruby
ruby.x86_64 2.0.0.648-35.el7_6 @updates
ruby-irb.noarch 2.0.0.648-35.el7_6 @updates
ruby-libs.x86_64 2.0.0.648-35.el7_6 @updates
rubygem-bigdecimal.x86_64 1.2.0-35.el7_6 @updates
rubygem-io-console.x86_64 0.4.2-35.el7_6 @updates
rubygem-json.x86_64 1.7.7-35.el7_6 @updates
rubygem-psych.x86_64 2.0.0-35.el7_6 @updates
rubygem-rdoc.noarch 4.0.0-35.el7_6 @updates
rubygems.noarch 2.0.14.1-35.el7_6 @updates
安装成功,没有问题。
虽然后半部分匆匆忙忙,但至少能接触到基础知识。
下次我打算用Ansible尝试获取多台服务器的信息。