本文是为Kubernetes搭建虚拟集群第一步,利用Vagrant搭建虚拟的CoreOS集群,环境是Windows 10 + VirtualBox。
Kubernetes是Google开源的容器集群管理系统,以后应该会有一系列围绕其展开的文章,因此这里就不再赘述。
简介
Vagrant是什么
Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。
为什么要使用Vagrant
http://www.ituring.com.cn/article/131600
- 尽可能避免”Work on my machine“错误
- 缩短搭建开发环境的时间
https://www.vagrantup.com/docs/why-vagrant/
- Vagrant能让开发者统一生产和运行环境;让运维人员快速部署在不同的虚拟环境或者公有云上,并保证开发和测试环境一致;让设计人员专注于设计,而不必考虑软件系统环境等其他问题。
为什么要使用CoreOS
因为我们要管理和操作服务器机群,所以每台机器上得安装一个服务器操作系统。 目前世界上唯一的“服务器Linux操作系统”是CoreOS。其他诸如CentOS等“号称” 服务器操作系统的,其实都是桌面系统。只有桌面系统才需要package management system,例如 apt 和 yum。因为桌面系统只有一个或者少数几个人 用,大家能预期需要在上面安装什么软件,而packages是这些软件或者其依赖的 组建。在一个机群上,分布式操作系统(例如Kubernetes)有可能把任何一个用 户的任何一个作业调度到一台机器上。有的作业需要Python 2.4,有的需要 Python 3,有的需要Java 8,有的需要OpenCV。要在所有机器都预先安装好这些 依赖,几乎是不可能的。一个“真的”服务器操作系统,只需要能运行containers, 每个container里面包含需要的所有依赖。CoreOS就是这样一个操作系统。未来也会专门讲讲CoreOS操作系统。
参考资料:
- Vagrant官方文档:https://www.vagrantup.com/docs/
- k8sp/vagrant:https://github.com/k8sp/vagrant/blob/master/what_is_vagrant.md
- 使用Vagrant(零)——为什么要使用Vagrant:http://www.ituring.com.cn/article/131600
- Vagrant使用简介:http://xuclv.blog.51cto.com/5503169/1239250
- CoreOS官方文档:https://coreos.com/os/docs/latest/
在widnows环境下建议使用Git Bash模拟Linux环境。
安装单台机器CoreOS
- 安装VirtualBox
- 安装Vagrant
- 下载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果然很基本。
坑
1 | default: Waring: Remote connection disconnect. Retrying... |
如图所示:
本身只是警告是没问题的,因为虚拟机正在启动的过程之中。但如果直到连接超时,就说明有可能虚拟机没有起来。可以在GUI中查看虚拟机状态,一般是因为虚拟化功能没有开启的原因。
对于Windows平台,VirtualBox会报:VT-x/AMD-V硬件加速在您的系统中不可用。如下图所示,
可能的原因是,参考这篇博客:
- CPU支持虚拟化技术,主流CPU都支持虚拟化技术,包括Intel Core i3/i5/i7以及AMD ;
- 在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);
- 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的论坛上有关于这个问题的讨论。