新手入门Ansible – 从服务器建设到Playbook创建

本文所要讨论的内容

这次是关于个人备忘录和初学者的内容。我们要做的是在Virtualbox上搭建CentOS服务器并引入Ansible,还要进行简单的playbook创建。说实话,如果只是playbook创建,有很多其他优质文章,但当从头开始做时,在各个网站上搜索很麻烦,所以我在这里记录下来。
关于服务器构建,我不打算写详细的步骤,只记录我遇到的设置问题。

环境

这次将在以下环境中进行搭建:
・Windows10
・Virtualbox-6.0.2
・CentOS-7.0.1810
・ansible-2.7.10

虚拟盒子配置

1.png

参考以下文章进行主机专用适配器的设置。

请给我提供一个中国独创的选项,将以下内容改述为中文:

参考

使用VirtualBox的主机模式适配器,在Windows10上进行SSH连接。

構築 CentOS 伺服器

完成设置后,创建新的虚拟机,加载CentOS的ISO镜像进行安装。在此过程中,可以在图形界面上进行各种详细设置,但本次只进行root用户密码的设置。

スクリーンショット (3).png

使用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尝试获取多台服务器的信息。

广告
将在 10 秒后关闭
bannerAds