在Mac上从零开始搭建Ansible+Ubuntu虚拟环境

這篇文章所提到的事情

很常见在CentOS虚拟环境中使用Ansible的文章,但是很少有关于在Ubuntu环境下进行Ansible设置的教程,所以我从零开始在mac上进行了一次尝试。

本文中,我們將在Mac上創建一個VirtualBox上的Ubuntu環境。並且,我們還將在Mac上使用ansible安裝軟件到Ubuntu。

环境

    Mac OSX 10.12.4(16E195)

使用HomeBrew安装Vagrant和VirtualBox

安装brew和cask

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install caskroom/cask/brew-cask

安装Vagrant和VirtualBox

brew cask install virtualbox
brew cask install vagrant

安装 Ansible

使用Ansible需要安装Python。
如果您的Mac尚未安装Python,请先安装好。

brew install python

我将安装Ansible。

brew install ansible

太容易了。

安装Ubuntu虚拟环境。

使用vagrant init来创建Vagrant的初始设置。Vagrant的box来自这里的参考。→ Vagrant Cloud上的Vagrant box ubuntu/trusty64 v20170619.0.0

 vagrant init ubuntu/trusty64

一旦成功,就会生成Vagrantfile。vagrant主要用于编写服务器配置。

为了从本地的Ansible访问Ubuntu,需要设置本地IP地址。取消Vagrantfile中以下注释。

  config.vm.network "private_network", ip: "192.168.33.10"

如果从Vagrantfile中提取所需部分,会得到以下简洁的结果。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "private_network", ip: "192.168.33.10"
end

好的,现在开始启动Ubuntu。下面是命令。

在初始化时,会自动下载ubuntu/trusty64的映像。

vagrant up

因为要下载大文件,所以可能会花一些时间。请确认一下是否成功了?如果没有显示红色的错误或其他问题的话,那就是成功了。

我們在這裡登入Ubuntu。

vagrant ssh

从“vagrant@vagrant-ubuntu-trusty-64:~$”的提示中,可以确认已成功登录。

(※vagtant的默认设置是用户:vagrant,密码:vagrant。)

通过ssh进行登录。

不使用Vagrant SSH,而是在Mac上设置使用SSH登录。
首先,生成密钥对并使用ssh-copy-id将公钥发送到Ubuntu。

ssh-keygen -t rsa

虽然会有提问,但一切输入”Enter”即可。如果已经存在~/.ssh/id_rsa的秘钥,则无需执行此命令。

使用ssh-copy-id命令将公钥发送到Ubuntu上。这个命令能一次性授予访问权限,非常方便。

ssh-copy-id -i ~/.ssh/id_rsa vagrant@192.168.33.10

我们来试试看能不能放进去。

ssh vagrant@192.168.33.10

成功的标志是能够登录而无需输入密码。

尝试使用Ansible。

暂时先创建一个最初的playbook(使用Ansible编写的文件),以记录想要完成的配置。

./test.yml 文件

- hosts: ubuntu
  user: vagrant
  tasks:
    - name: output message.
      debug: msg="hello ansible"

我会在名为Ubuntu的服务器上使用vagrant作为用户名进行登录,并尝试生成日志。

主机:我们给服务器以”ubuntu”的名字作为主机名。可以用任何名字。

用户:关于vagrant,由于默认情况下只能使用”vagrant”作为用户登录到ubuntu,所以我们设定为vagrant。

此外,还需将主机信息写入到同一目录下的另一个文件hosts。

./hosts 文件:

[ubuntu]
192.168.33.10

请注意!”ubuntu” 是您之前在 hosts 文件中设置的主机名。在下面我写下了 Vagrant 的 IP。

好了,让我们使用以下命令来运行Ansible。

ansible-playbook -i hosts test.yml

对于在hosts文件中设置的目标Ubuntu服务器,将执行在test.yml中编写的动作。

以下的输出结果是成功地将消息输出。

PLAY [ubuntu] ******************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.33.10]

TASK [output message.] *********************************************************
ok: [192.168.33.10] => {
    "msg": "hello ansible"
}

PLAY RECAP *********************************************************************
192.168.33.10              : ok=2    changed=0    unreachable=0    failed=0

在apt中安装软件。

我会尝试在apt上安装最新的NTP。
我会创建以下的播放清单。

apt.yml(名称随意)

- hosts: ubuntu
  user: vagrant
  become: yes
  tasks:
    - name: install latest ntp package
      apt: pkg=ntp state=latest

为了能够安装软件包,必须要以sudo用户身份进行操作,因此在第三行加上了become: yes。(在ansible1.8之前,只需要sudo:yes即可,但为了避免重复,语法进行了更改。)软件包的安装是通过最后一行的apt:命令来执行的。

请使用以下命令来执行。

ansible-playbook -i hosts apt.yml

如果没有出现错误而顺利完成,那就表示成功了。

我之前在使用Chef,但与之比起来,我觉得Ansible相对来说更容易使用和记忆,只需要在yml文件中编写配置项即可。

之后,可以参考 Ansible 官方文档等来创建各种项目。

Ansible 文档 — Ansible 文档

请参考一下。

对于想了解Ansible到底是什么的人,请参考这里。给初学者的Ansible入门指南。- Qiita

有关最佳实践的示例构成写在这里。
Ansible教程 | 日本语的Ansible教程

广告
将在 10 秒后关闭
bannerAds