[Ansible] 在使用 Vagrant 创建的虚拟机上尝试使用Ansible的备忘录

我试着使用了被评为与Chef和Puppet相比更易于使用的Ansible,并将其作为建立环境的步骤做备忘录,以免遗忘。由于我对环境搭建的理解仍然不完全,如果有错误或不准确之处,请指正。

环境

    • OS(ホスト):CentOS 6.5

 

    OS(VM):CentOS 6.5

建立虚拟机环境

为了能够方便地构建和摧毁试验Ansible的环境,我们选择使用虚拟机作为节点。另外,由于直接使用VirtualBox比较麻烦,所以我们会使用经常被使用的Vagrant来简化处理VirtualBox以构建虚拟机。通过使用Vagrant,我们可以通过简单的操作来构建虚拟机,相比直接使用VirtualBox更加简便。

安装Vagrant

提供Vagrant安装步骤指南。

    1. 确认最新版本的rpm的URL

 

    1. 从Vagrant官方网站上确认最新版本的Vagrant包的URL。我安装Vagrant时的包的最新版本是https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.2_x86_64.rpm。

安装
使用yum安装刚刚确认的最新版本的Vagrant。

$ yum install https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.2_x86_64.rpm

确认Vagrant已经安装
确认Vagrant已经安装。
在这里,我们执行了一个命令来确认Vagrant的版本。

$ vagrant version
已安装版本:1.7.2

虚拟机环境的设置

使用以下步骤配置作为Ansible管理对象的VM环境。

    1. 创建工作目录

 

    1. 创建用于执行Ansible的工作目录。

$ cd ~/
$ mkdir ansible
$ cd ansible

初始化Vagrant
初始化Vagrant并创建Vagrantfile环境配置文件。
在名称中指定了一个特定的名称(可选),用于指定要使用的box的名称。
在box中指定了Vagrant所需的虚拟机模板(box文件)。

$ vagrant init [名称] [box]

如果您想使用CentOS 6.5作为VM环境,可以使用以下命令。名称可以随意设置,但在这个例子中,我们将它设置为centos6.5_ansible。

$ vagrant init centos6.5_ansible http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box

编辑Vagrantfile
我们对Vagrantfile进行了编辑,以便启动3个VM。

$ cp Vagrantfile Vagrantfile.orig
$ diff Vagrantfile

15c15,29
< config.vm.box = “centos6.5_ansible” — > config.vm.define :node1 do |node|
> node.vm.box = “centos6.5_ansible”
> node.vm.network :private_network, ip: “192.168.100.10”
> end
>
> config.vm.define :node2 do |node|
> node.vm.box = “centos6.5_ansible”
> node.vm.network :private_network, ip: “192.168.100.11”
> end
>
> config.vm.define :node3 do |node|
> node.vm.box = “centos6.5_ansible”
> node.vm.network :private_network, ip: “192.168.100.12”
> end

虚拟机的启动 jī de

启动虚拟机。

$ vagrant up

让我们确认一下虚拟机已成功启动。

$ vagrant status
Current machine states:

node1 running (virtualbox)
node2 running (virtualbox)
node3 running (virtualbox)

既经确认了VM已经成功启动,现在我们尝试登录到VM上。由于当前无法直接使用ssh命令登录到Vagrant搭建的VM,因此需要使用vagrant命令中的ssh进行登录。

$ vagrant ssh node1
(vagrantで作成した仮想マシン)

尝试使用Ansible

因为已经准备好了使用Ansible的虚拟机环境,所以让我们试着使用Ansible吧。

安装 Ansible

安装Ansible可以使用yum命令来进行。

$ yum install ansible

设定Ansible管理的节点

只需提供一种选择,将以下内容用汉语本地化:

    1. 创建hosts文件

 

    1. Ansible有一个称为Inventory文件的东西,用于列举Ansible所管理的节点。在这里,我们将创建一个名为hosts的Inventory文件。

$ cd ~/ansible
$ touch hosts

现在,我们来看一下刚刚创建的hosts文件的内容。

[ansible-nodes]
192.168.100.10 ansible_ssh_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/node1/virtualbox/private_key
192.168.100.11 ansible_ssh_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/node2/virtualbox/private_key
192.168.100.12 ansible_ssh_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/node3/virtualbox/private_key

这次,我们将刚刚创建的3台虚拟机指定为ansible-nodes组。有很多文章指定将私钥指定为ansible_ssh_private_key_file为~/.vagrant.d/insecure_private_key,但是需要注意在接下来的使用Ansible进行ping命令的操作中,如果使用比较新的Vagrant版本可能会出现Permission Denied错误。
此外,我不知道原因,但在第一个字段中必须直接写入IP地址,而不是主机名。如果写入主机名会导致Permission Denied错误。(参考:Vagrant 1.7+ SSH连接错误解决方法)

设置能够直接通过ssh命令登录
正如前面所述,目前只能通过vagrant ssh命令登录到由Vagrant搭建的虚拟机。这非常麻烦,所以我们要设置能够通过ssh命令直接登录。

$ cp ~/.ssh/config ~/.ssh/config.orig
$ vagrant ssh-config > ~/.ssh/config

通过执行Ansible来进行验证操作

请用中文翻译以下内容,只需要给出一个选项:

“I enjoy playing basketball with my friends in the park.”

    1. 执行ping命令

 

    1. 为了确认Ansible的操作,我们尝试执行ping命令。

$ ansible -i hosts ansible-nodes -m ping
192.168.100.10 | 成功 >> {
“changed”: false,
“ping”: “pong”
}

192.168.100.11 | 成功 >> {
“changed”: false,
“ping”: “pong”
}

192.168.100.12 | 成功 >> {
“changed”: false,
“ping”: “pong”
}

确认所需安装未安装
趁机使用Ansible尝试安装一些东西。
由于我搭建的VM上没有安装gcc和gdb,所以我决定安装它们。
首先在每个VM上确认gcc和gdb均未安装。

$ ssh node1
$ which gcc
/usr/bin/which: 未找到 gcc(不在/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin中)
$ which gdb
/usr/bin/which: 未找到 gdb(不在/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin中)

$ ssh node2
$ which gcc
/usr/bin/which: 未找到 gcc(不在/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin中)
$ which gdb
/usr/bin/which: 未找到 gdb(不在/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin中)

$ ssh node3
$ which gcc
/usr/bin/which: 未找到 gcc(不在/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin中)
$ which gdb
/usr/bin/which: 未找到 gdb(不在/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin中)

创建Playbook
Ansible有一个称为Playbook的类似于Chef的配方的东西。
在Playbook中,我们会描述在目标机器上要执行的操作。
这次我们要安装gcc和gdb,所以我创建了一个名为playbook.yml的Playbook,内容如下。


– hosts: ansible-nodes
sudo: yes
tasks:
– name: install gcc
yum: name=gcc state=installed
– name: install gdb
yum: name=gdb state=installed

使用Ansible进行安装
使用创建的Playbook,尝试进行gcc和gdb的安装。

$ ansible-playbook -i hosts playbook.yml

PLAY [ansible-nodes] **********************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.100.12]
ok: [192.168.100.11]
ok: [192.168.100.10]

TASK: [install gcc] ***********************************************************
changed: [192.168.100.11]
changed: [192.168.100.10]
changed: [192.168.100.12]

TASK: [install gdb] ***********************************************************
changed: [192.168.100.10]
changed: [192.168.100.11]
changed: [192.168.100.12]

PLAY RECAP ********************************************************************
192.168.100.10 : ok=3 changed=2 unreachable=0 failed=0
192.168.100.11 : ok=3 changed=2 unreachable=0 failed=0
192.168.100.12 : ok=3 changed=2 unreachable=0 failed=0

确认安装情况
确认gcc和gdb是否成功安装。

$ ssh node1
$ which gcc
/usr/bin/gcc
$ which gdb
/usr/bin/gdb

$ ssh node2
$ which gcc
/usr/bin/gcc
$ which gdb
/usr/bin/gdb

$ ssh node3
$ which gcc
/usr/bin/gcc
$ which gdb
/usr/bin/gdb

确认Playbook中指定的gcc和gdb已经成功安装。

整理善後事務

使用Vagrant可以很快地摧毁最后一次使用的环境。

    1. 停止虚拟机

$ vagrant halt

删除虚拟机

$ vagrant destroy

最后

我在使用Vagrant搭建的虚拟机上尝试使用Ansible配置管理工具来安装软件。
通过这个例子,可以看出Ansible的配置非常容易理解。
虽然我不清楚Ansible可以做到什么程度,但对于想要快速完成环境部署的人来说,考虑使用它是非常值得的。
除了进一步探索Ansible的功能,我还想尝试使用Chef和Puppet来验证它们的使用感受。

参考资料

    • Ansible チュートリアル

 

    • CentOSにVagrantをインストールする

 

    • VagrantとDockerとAnsibleで環境自動構築!(全編:vagranとAnsible編)

 

    • 不思議の国のAnsible – 第1話 –

 

    • Vagrant ssh-configでvagrant sshを快適にする

 

    • Vagrant 1.7+でSSH接続エラーが出た場合の対処

 

    • VirtualBoxとVagrantで開発環境を構築

 

    AnsibleでDockerのコンテナを構築する
广告
将在 10 秒后关闭
bannerAds