利用Vagrant搭建虚拟CoreOS集群

本文是为Kubernetes搭建虚拟集群第一步,利用Vagrant搭建虚拟的CoreOS集群,环境是Windows 10 + VirtualBox。
Kubernetes是Google开源的容器集群管理系统,以后应该会有一系列围绕其展开的文章,因此这里就不再赘述。

简介

Vagrant是什么

Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。

为什么要使用Vagrant

http://www.ituring.com.cn/article/131600

  1. 尽可能避免”Work on my machine“错误
  2. 缩短搭建开发环境的时间

https://www.vagrantup.com/docs/why-vagrant/

  1. Vagrant能让开发者统一生产和运行环境;让运维人员快速部署在不同的虚拟环境或者公有云上,并保证开发和测试环境一致;让设计人员专注于设计,而不必考虑软件系统环境等其他问题。

为什么要使用CoreOS

因为我们要管理和操作服务器机群,所以每台机器上得安装一个服务器操作系统。 目前世界上唯一的“服务器Linux操作系统”是CoreOS。其他诸如CentOS等“号称” 服务器操作系统的,其实都是桌面系统。只有桌面系统才需要package management system,例如 apt 和 yum。因为桌面系统只有一个或者少数几个人 用,大家能预期需要在上面安装什么软件,而packages是这些软件或者其依赖的 组建。在一个机群上,分布式操作系统(例如Kubernetes)有可能把任何一个用 户的任何一个作业调度到一台机器上。有的作业需要Python 2.4,有的需要 Python 3,有的需要Java 8,有的需要OpenCV。要在所有机器都预先安装好这些 依赖,几乎是不可能的。一个“真的”服务器操作系统,只需要能运行containers, 每个container里面包含需要的所有依赖。CoreOS就是这样一个操作系统。未来也会专门讲讲CoreOS操作系统。

参考资料:

在widnows环境下建议使用Git Bash模拟Linux环境。

安装单台机器CoreOS

  1. 安装VirtualBox
  2. 安装Vagrant
  3. 下载box文件(虚拟镜像)到本地磁盘中

进入命令行窗口输入

1
2
3
4
$ vagrant init
$ mkdir username
$ mv /dir/coreos_production_vagrant.box username
$ vagrant add username file:///e:/path/ $ coreos_production_vagrant.box

修改Vagrantfile配置

1
2
3
Vagrant.configure("2") do |config|
config.vm.box = "username"
end

启动虚拟机并连接

1
2
$ vagrant up
$ vagrant ssh

安装CoreOS集群

本节摘自《Docker——从入门到实践》的快速搭建CoreOS集群一节。

配置

从CoreOS官方代码库获取基本配置,并进行修改

首先,获取模板配置文件

1
2
3
$ git clone https://github.com/coreos/coreos-vagrant
$ cd coreos-vagrant
$ cp user-data.sample user-data

获取新的token

1
$ curl https://discovery.etcd.io/new

把获取的token放到user-data文件中,示例如下:

1
2
3
coreos:
etcd:
discovery: https://discovery.etcd.io/<token>

启动

默认情况下,CoreOS Vagrantfile 将会启动单机。

我们需要复制并修改config.rb.sample文件.

1
$ vcp config.rb.sample config.rb

修改集群配置参数num_instances为3。

启动集群

1
2
3
4
5
6
7
8
$ vagrant up
=>
Bringing machine 'core-01' up with 'virtualbox' provider...
Bringing machine 'core-02' up with 'virtualbox' provider...
Bringing machine 'core-03' up with 'virtualbox' provider...
==> core-01: Box 'coreos-alpha' could not be found. Attempting to find and install...
core-01: Box Provider: virtualbox
core-01: Box Version: >= 0

在启动集群的时候,Vagrant会自动从网上去下载box文件,从命令行下载,又生在天朝,所以又慢又不稳定。所以干脆可以用下载工具获取最新版本的coreos_production_vagrant.box到本地,并修改Vagrantfile中config.vm.box_url。在该文件中,设置了两处下载URL,分别针对的VirtualBox和VMware。可以都改了,或者只改本机使用的虚拟机软件对应使用的配置。

1
2
3
Vagrant.configure("2") do |config|
config.vm.box_url = "file:///d:/path/coreos_production_vagrant.box"
end

添加ssh的公匙

1
$ ssh-add ~/.vagrant.d/insecure_private_key

连接集群中的第一台机器

1
$ vagrant ssh core-01 -- -A

使用fleet命令查看集群运行状况

1
2
3
4
5
$ fleetctl list-machines
MACHINE IP METADATA
5a332144... 172.17.8.103 -
b2d2f900... 172.17.8.101 -
cee54191... 172.17.8.102 -

小结

如果按照目前这个样子来讲,如果只是搭建一个可以撒欢的Playground环境的话,花的时间最长的应该是在下载安装文件和box文件上面了,基本不需要怎么配置,很容易上手。性能上来讲,开了四个CoreOS的虚拟机,i5+8G内存还有富余,CoreOS果然很基本。

Windows性能截图

坑

1
default: Waring: Remote connection disconnect. Retrying...

如图所示:

Waring

本身只是警告是没问题的,因为虚拟机正在启动的过程之中。但如果直到连接超时,就说明有可能虚拟机没有起来。可以在GUI中查看虚拟机状态,一般是因为虚拟化功能没有开启的原因。

对于Windows平台,VirtualBox会报:VT-x/AMD-V硬件加速在您的系统中不可用。如下图所示,

报错:VT-x/AMD-V硬件加速在您的系统中不可用

可能的原因是,参考这篇博客:

  1. CPU支持虚拟化技术,主流CPU都支持虚拟化技术,包括Intel Core i3/i5/i7以及AMD ;
  2. 在BIOS中启用虚拟化功能;它有许多名称,例如对于AMD称为Secure Virtual Machine Mode, Intel称为Virtualization Technology,How to enable Intel vt-x and amd-v in BIOS (Intel i7 quad core, i5 & i3);
  3. Hyper-V没有被安装;当Hyper-V被安装时,VirtualBox的VT-x/AMD-V支持被关闭,当Hyper-V被卸载后,VT-x/AMD-V重新启用;

应尽量避免在虚拟机中安装虚拟机,理论是可以在虚拟机中使用虚拟化功能从而在虚拟机中跑虚拟机的。

You CAN run Virtualization inside virtualization.
What you can’t do is use Virtualization Extensions (AMD-V, VT-X)
inside a virtualized server.

但是问题在于即便硬件支持extensions,virtualbox不会把这些extensions传递给虚拟机,所以虚拟机里就失去这些extensions了。这样一来,如果嵌套虚拟机需要这些extensions,比如如果嵌套虚拟机跑kvm,那么就可能会出问题。在VirtualBox的论坛上有关于这个问题的讨论。

文章目录
  1. 1. 简介
    1. 1.1. Vagrant是什么
    2. 1.2. 为什么要使用Vagrant
    3. 1.3. 为什么要使用CoreOS
  2. 2. 安装单台机器CoreOS
  3. 3. 安装CoreOS集群
    1. 3.1. 配置
    2. 3.2. 启动
  4. 4. 小结
  5. 5. 坑
,