网易首页 > 网易号 > 正文 申请入驻

如何快速建立一个 Ansible 实验室

0
分享至

建立一个支持学习和实验新软件的环境。能够构建和拆解公有云环境是非常有用的,但我们大多数人都不能轻松访问公有云。退而求其次的最好办法就是在本地机器上建立一个实验室,但即使在本地机器上运行也会带来性能、灵活性和其他挑战。大多数时候,本地机器上额外的工作负载会干扰我们日常的工作,它们当然也会影响你提供一个现成的环境来玩耍和实验新软件。

几年前,当我和我的团队开始学习 Ansible 时,我们就遇到了这个挑战。我们找不到一个可以单独使用的环境,我们对这种情况的失望导致我们中的一些人停止了实验。我们知道需要找到一个解决方案。

我们花了很多时间研究各种方案,得出了一套工具,使我们的好奇心能够在我们完全控制的环境中学习。我们可以在本地机器上轮换和拆解实验室环境,而不需要访问内部实验室或公共云。

本文将解释如何在 20 分钟内以完全自动化的方式在本地机器上部署自己的实验室环境。

你可以在我的 GitHub 仓库中找到这个练习的所有代码。

工具和软件

本方案使用以下工具和软件:

  • Ansible 是我们选择的自动化工具,因为它易于使用,而且足够灵活,可以满足实验室的要求。
  • Vagrant 易于使用,用于构建和维护虚拟机。
  • VirtualBox 是一个托管管理程序,可以在 Windows 和 Linux 环境中使用。
  • Fedora v30+ 是我本地机器上的操作系统。

你必须进行以下设置才能建立环境:

  • 一个互联网连接
  • 在 BIOS 中启用虚拟化技术支持(以下是在我的联想笔记本上的过程)
  • Vagrant v2.2.9
  • 最新版本的 Ansible
  • 最新版本的 VirtualBox
  • Fedora v30+ 宿主机操作系统

这个实验室环境有什么?

这个项目旨在部署一个带有 Ansible 引擎和多个 Linux 节点的 Ansible 主机,以及一些预加载和预配置的应用程序(httpd 和 MySQL)。它还启用了 Cockpit,这样你就可以在测试过程中监控虚拟机(VM)的状态。使用预部署的应用程序的原因是为了提高效率(所以你不必花时间安装这些组件)。这样你就可以专注于创建角色和剧本,并针对上述工具部署的环境进行测试。

我们确定,对于我们的用例来说,最好的方案是多机 Vagrant 环境。Vagrant 文件创建了三个 CentOS 虚拟机,以模拟两个目标主机和一个 Ansible 控制机。

  • Host1: 没有图形用户界面(GUI),安装 httpd 和 MySQL
  • Host2: 没有 GUI,安装了 httpd 和 MySQL
  • Ansible-host:没有 GUI,安装了 Ansible 引擎

启用多个管理程序

如果使用了多个管理程序,一些管理程序可能不允许你拉起虚拟机。要解决这个问题,请遵循以下步骤(基于 Vagrant 的安装说明)。

首先,找出管理程序的名称:

$ lsmod | grep kvm
kvm_intel 204800 6
kvm 593920 1 kvm_intel
irqbypass 16384 1 kvm

我感兴趣的是 kvm_intel,但你可能需要另一个(比如 kvm_amd)。

以 root 身份运行以下内容,将该管理程序列入黑名单:

$ echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf

重新启动你的机器并尝试再次运行 Vagrant。

Vagrant 文件

cat Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# Define VMs with static private IP addresses, vcpu, memory and vagrant-box.
boxes = [
{
:name => "web1.demo.com", ⇒ Host1 this is one of the target nodes
:box => "centos/8", ⇒ OS version
:ram => 1024, ⇒ Allocated memory
:vcpu => 1, ⇒ Allocated CPU
:ip => "192.168.29.2" ⇒ Allocated IP address of the node
},
{
:name => "web2.demo.com", ⇒ Host2 this is one of the target nodes
:box => "centos/8",
:ram => 1024,
:vcpu => 1,
:ip => "192.168.29.3"
},
{
:name => "ansible-host", ⇒ Ansible Host with Ansible Engine
:box => "centos/8",
:ram => 8048,
:vcpu => 1,
:ip => "192.168.29.4"
}
]
# Provision each of the VMs.
boxes.each do |opts|
config.vm.define opts[:name] do |config|
# Only Enable this if you are connecting to Proxy server
# config.proxy.http = "http://usernam:password@x.y:80"⇒ Needed if you have a proxy
# config.proxy.https = "http://usernam:password@x.y:80"
# config.proxy.no_proxy = "localhost,127.0.0.1"
config.vm.synced_folder ".", "/vagrant", id: "vagrant-root", disabled: true
config.ssh.insert_key = false
config.vm.box = opts[:box]
config.vm.hostname = opts[:name]
config.vm.provider :virtualbox do |v| ⇒ Defines the vagrant provider
v.memory = opts[:ram]
v.cpus = opts[:vcpu]
end
config.vm.network :private_network, ip: opts[:ip]
config.vm.provision :file do |file|
file.source = './keys/vagrant' ⇒ vagrant keys to allow access to the nodes
file.destination = '/tmp/vagrant' ⇒ the location to copy the vagrant key
end
config.vm.provision :shell, path: "bootstrap-node.sh" ⇒ script that copy hosts entry
config.vm.provision :ansible do |ansible| ⇒ declaration to run ansible playbook
ansible.verbose = "v"
ansible.playbook = "playbook.yml" ⇒ the playbook used to configure the hosts
end
end
end
end

这些是你需要注意的重要文件。

  • inventory-test.yaml:连接到节点的清单文件
  • playbook.yaml:Vagrant 供应者调用的用于配置节点的剧本文件
  • `Vagrantfile':Vagrant 用来部署环境的文件
  • Vagrant 密钥文件:连接实验室环境中各节点的 Vagrant 密钥

你可以根据你的需要调整这些文件。Ansible 的灵活性使你有能力根据你的需要声明性地改变你的环境。

部署你的实验室环境

首先,克隆这个 GitHub 仓库 中的代码:

$ git clone https://github.com/mikecali/ansible-labs-101.git
Cloning into 'ansible-labs-101'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 15 (delta 2), reused 10 (delta 0), pack-reused 0
Unpacking objects: 100% (15/15), 6.82 KiB | 634.00 KiB/s, done.

接下来,将你的目录改为 vagrant-session-2,并查看其内容:

$ ls
Bootstrap-node.sh inventory keys playbook.yml README.md Vagrantfile

现在你已经拥有了实验室环境所需的所有工件和配置文件。要部署环境,请运行:

$ vagrant up

只要有一个像样的网络连接,只需要 20 分钟左右就可以得到一个运行环境:

$ vagrant up
Bringing machine 'web1.demo.com' up with 'virtualbox' provider...
Bringing machine 'web2.demo.com' up with 'virtualbox' provider...
Bringing machine 'ansible-host' up with 'virtualbox' provider...
==> web1.demo.com: Importing base box 'centos/8'...
==> web1.demo.com: Matching MAC address for NAT networking...
==> web1.demo.com: Checking if box 'centos/8' version '1905.1' is up to date...
==> web1.demo.com: Setting the name of the VM: ansible-labs_web1democom_1606434176593_70913
==> web1.demo.com: Clearing any previously set network interfaces...
==> web1.demo.com: Preparing network interfaces based on configuration...
web1.demo.com: Adapter 1: nat
web1.demo.com: Adapter 2: hostonly
==> web1.demo.com: Forwarding ports...
web1.demo.com: 22 (guest) => 2222 (host) (adapter 1)
==> web1.demo.com: Running 'pre-boot' VM customizations...
==> web1.demo.com: Booting VM...
==> web1.demo.com: Waiting for machine to boot. This may take a few minutes...
web1.demo.com: SSH address: 127.0.0.1:2222
web1.demo.com: SSH username: vagrant
web1.demo.com: SSH auth method: private key
[...]

一旦该剧本执行完成,你会看到这样的输出:

PLAY RECAP *********************************
Ansible-host : ok=20 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=3
Real 18m14.288s
User 2m26.978s
Sys 0m26.849s

确认所有虚拟机都在运行:

$ vagrant status
Current machine states:
Web1.demo.com running (virtualbox)
Web2.demo.com running (virtualbox)
ansible-host running (virtualbox)
[...]

你可以通过登录其中一个虚拟机进一步调查。访问 ansible-host:

> vagrant ssh ansible-host
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu Nov 26 12:21:23 2020 from 10.0.2.2
[vagrant@ansible-host ~] uptime
16:46:42 up 1:24, 1 user, load average: 0.00, 0.01, 0.04

最后,你可以使用 Ansible 模块来 ping 你创建的其他节点:

[vagrant@ansible-host]$ ansible -i inventory-test.yaml \
webservers -m ping -u vagrant
192.168.29.2 | SUCCESS => {
"Ansible-facts": {
"Discovered_interpreter_python": "/usr/libexec/platform-python"
},
"Changed": false;
"Ping": "pong"
}
[...]

清理

运行如下命令来清理环境:

$ vagrant destroy [vagrant machine name]

你的输出会像这样:

有创意的学习

在自己的实验室里利用自己的时间学习 Ansible 这样的软件是一个好习惯,但由于受到无法控制的限制,可能会很困难。

有时候,你需要发挥创意,找到另一种方法。在开源社区中,你可以选择很多方案;我们选择这些工具的主要原因之一是,它们是许多人常用和熟悉的。

另外,请注意,这些剧本并没有按照我的要求进行优化。

本文地址:https://www.linuxprobe.com/ansible-lab.html

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
侄子问我们借2万救我哥的命,老公不肯,我只好放大招让他出30000

侄子问我们借2万救我哥的命,老公不肯,我只好放大招让他出30000

我是三月鱼H
2024-04-24 18:25:37
前线兵力不足,乌克兰又出新规,甚至出现了“拉壮丁”!俄防长:乌军已损失近50万人⋯⋯

前线兵力不足,乌克兰又出新规,甚至出现了“拉壮丁”!俄防长:乌军已损失近50万人⋯⋯

每日经济新闻
2024-04-25 19:21:11
布林肯访华强硬表态:与俄罗斯分手!冯玉军发文令世界震惊!

布林肯访华强硬表态:与俄罗斯分手!冯玉军发文令世界震惊!

大风文字
2024-04-24 12:14:09
63岁北京知青重返陕北看初恋,发现自己竟已儿孙满堂:我对不起你

63岁北京知青重返陕北看初恋,发现自己竟已儿孙满堂:我对不起你

铿锵玫瑰r
2024-03-10 18:23:47
BR三方交易:维金斯前往费城 勇士得布罗格登与罗威 卢尼去开拓者

BR三方交易:维金斯前往费城 勇士得布罗格登与罗威 卢尼去开拓者

直播吧
2024-04-25 06:19:04
华人夫妇日本遇害详情:遗体交叠被焚,嫌疑人提前买胶带汽油

华人夫妇日本遇害详情:遗体交叠被焚,嫌疑人提前买胶带汽油

南方都市报
2024-04-25 12:56:11
孟良崮战役后,刘伯承打电话痛斥粟裕:74师怎么活过来了

孟良崮战役后,刘伯承打电话痛斥粟裕:74师怎么活过来了

北风那个吹呀吹
2024-04-24 23:52:10
浙江吉利继续减持沃尔沃,沃尔沃汽车也放弃与吉利合作的极星!

浙江吉利继续减持沃尔沃,沃尔沃汽车也放弃与吉利合作的极星!

文迪科记
2024-04-25 11:35:28
大快人心?台媒爆料大S复出录节目却突然晕倒,网友:又开始演了

大快人心?台媒爆料大S复出录节目却突然晕倒,网友:又开始演了

小徐讲八卦
2024-04-24 08:36:19
超3万个体户核定征收转查账征收:个体户征税,正在迎来新变化!

超3万个体户核定征收转查账征收:个体户征税,正在迎来新变化!

学税
2024-04-24 20:58:12
书记和市长光天化日被手下局长枪杀,原因令人唏嘘,结局意想不到

书记和市长光天化日被手下局长枪杀,原因令人唏嘘,结局意想不到

阿胡
2024-04-19 12:31:54
鹏博士10个跌停后上演地天板,宁科生物17个跌停后上演地天板!

鹏博士10个跌停后上演地天板,宁科生物17个跌停后上演地天板!

资本百科
2024-04-25 17:03:38
女子吐槽丈夫月薪才1万,生二胎坐月子得借钱,连累儿子跟着吃苦

女子吐槽丈夫月薪才1万,生二胎坐月子得借钱,连累儿子跟着吃苦

老王侃趣闻
2024-04-23 16:46:31
我爸十几年钓鱼佬重度成瘾,突然就不钓了,我怀疑他钓到了大物件

我爸十几年钓鱼佬重度成瘾,突然就不钓了,我怀疑他钓到了大物件

健身狂人
2024-04-24 01:25:30
凯特王妃为路易王子拍摄生日肖像,这次真实原图曝光

凯特王妃为路易王子拍摄生日肖像,这次真实原图曝光

莫叔运动世界
2024-04-25 12:50:45
失望!沙特放弃中国,转头让美国承包中东大型基建,背后有何隐情

失望!沙特放弃中国,转头让美国承包中东大型基建,背后有何隐情

星辰大海路上的种花家
2024-04-25 15:05:13
勇士铁三角正式解散?克莱今夏远赴湖人,库里加盟西部新贵!

勇士铁三角正式解散?克莱今夏远赴湖人,库里加盟西部新贵!

开心体育站
2024-04-25 17:13:38
“骗”了我们30年,韩红父亲原来是家喻户晓的他难怪都不敢得罪她

“骗”了我们30年,韩红父亲原来是家喻户晓的他难怪都不敢得罪她

清欢渡语
2024-04-24 22:48:41
日本没想到,美国也没想到,现在的中国湖北省,已经全球瞩目

日本没想到,美国也没想到,现在的中国湖北省,已经全球瞩目

音乐时光的娱乐
2024-04-25 11:45:24
论中国人脱敏的一生!把过敏的食物都吃脱敏了!网友:这是祖传的

论中国人脱敏的一生!把过敏的食物都吃脱敏了!网友:这是祖传的

今日养生之道
2024-04-24 13:28:38
2024-04-25 20:18:46
linux系统运维之家
linux系统运维之家
科技资讯
1392文章数 7553关注度
往期回顾 全部

科技要闻

北京车展,被穿红衣服的他们占领

头条要闻

美学者:布林肯一年内二次访华 说明美国面临很多困难

头条要闻

美学者:布林肯一年内二次访华 说明美国面临很多困难

体育要闻

当胜利变成意外,就不要再提未来……

娱乐要闻

心疼!伊能静曝儿子曾被狗仔追到洗手间

财经要闻

曙光已现?瑞银开始转而看好中国地产业

汽车要闻

全新哈弗H9亮相 大号方盒子硬派SUV入列

态度原创

亲子
本地
房产
教育
数码

亲子要闻

长白这家儿童乐园真的是太好了

本地新闻

云游中国|苗族蜡染:九黎城的“潮”文化

房产要闻

涉及黄埔、番禺、增城!广州新一轮大规模征地启动

教育要闻

时域频域空域解析:滤波概念与工程实践

数码要闻

AMD Strix Point 系列 Zen5 ES 处理器最新 Geekbench 跑分曝光

无障碍浏览 进入关怀版