利用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到本地,并修改Vagrantfileconfig.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.
,