使用 vagrant 和 virtualbox 在 mac 上安装 Kubernetes

Installing Kubernetes on mac with vagrant and virtualbox

这是我第一次尝试安装和使用Kubernetes。我正在尝试在 Mac 上安装一个环境,用于开发我自己的应用程序并部署它们以使用 Kubernetes 在本地进行测试。我熟悉出于相同目的使用 Vagrant、VirtualBox 和 Docker。当我看到这个页面 https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/vagrant.md 时,我认为它是微不足道的。我执行了这些行:

export KUBERNETES_PROVIDER=vagrant
curl -sS https://get.k8s.io | bash

这创建了一个 master VM 和一个 Minion,但是 Kubernetes 似乎无法在 master 上启动。在 master 上 /var/log/salt/master 充满了 python 回溯错误,像这样:

2015-07-17 22:14:42,629 [cherrypy.error   ][INFO    ][3252] [17/Jul/2015:22:14:42] ENGINE Started monitor thread '_TimeoutMonitor'.
2015-07-17 22:14:42,736 [cherrypy.error   ][ERROR   ][3252] [17/Jul/2015:22:14:42] ENGINE Error in HTTP server: shutting down
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/cherrypy/process/servers.py", line 187, in _start_http_thread
self.httpserver.start()
  File "/usr/lib/python2.7/site-packages/cherrypy/wsgiserver/wsgiserver2.py", line 1824, in start
    raise socket.error(msg)
error: No socket could be created

Vagrant 是 1.7.3 版本。 VirtualBox 是版本 4.3.30

我犯了一个明显的愚蠢错误吗?

如果您只是想尝试一下 Kubernetes,我建议您安装 boot2docker and then following the Running kubernetes locally via Docker 入门指南。一旦您熟悉了与 Kubernetes API 的交互并想要更复杂的本地设置,您就可以开始安装 Vagrant。

如果 Vagrant 指令不起作用,您也应该随时在 github 存储库中提交错误。

罗伯特指点的教程真的很容易运行。只需将版本更改为 0.21.2(也许 0.21.3 也可以)。

否则,如果您更喜欢 vagrant 解决方案,请尝试在 vagrant 上使用 pires 集群。它 运行 几乎没有任何改变。

我还不知道修复方法,但我知道出了什么问题,因为它也发生在我身上:

  • OS X 10.10.3
  • Vagrant 1.7.4
  • VirtualBox 4.3.30
  • Kubernetes 1.0.1

当我 运行 默认配置(创建一个 "master" 和一个 "minion" VM)时,我看到静态 IP 地址没有分配给 "eth1" 界面,我还看到 Salt API 服务器正处于似乎是无限重试循环的状态,因为它正在尝试侦听该 IP 地址。

此外,在启动过程中出现以下消息:

[vagrant@kubernetes-master ~]$ dmesg | grep eth1
[    9.321496] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready

所以基本上,静态 IP 地址没有被分配,因为当系统第一次启动时 eth1 还没有准备好,Salt 正在等待它被分配。

我可以在启动后通过使用 "vagrant ssh" 和 运行 命令连接到盒子来解决这个问题:

sudo /etc/init.d/network restart

在每个主机上。

这个 "fixes" eth1 通过分配静态 IP 地址,然后 Salt 开始做它的事情,安装 Docker,启动各种容器,等等。

我不知道如何在没有人工干预的情况下每次都完成这项工作。这似乎是 Vagrant 和 VirtualBox 之间的某种竞争条件。

运行 VirtualBox 中的 Kubernetes 需要 4 个网络和一些配置调整:

  • VirtualBox HOST ONLY 网络将是用于从 Mac 或 PC 访问 Kubernetes 主节点和节点的网络。
  • NAT Network从网上下载包。
  • Kubernetes 之间的内部连接 ​​PODs 使用隧道网络 TUN
  • Kubernetes Cluster IP Network 是集群内部使用的私有 IP 范围,为每个 Kubernetes 服务提供一个专用 IP
  • Vagrantfile 需要将节点 public IP 传递给配置 Kubernetes 的 Ansible 角色,以使用每个节点的 public IP 设置 KUBELET_EXTRA_ARGS 环境变量(使用 kubectl 读取日志需要)。

  • NodePort 需要用于在 Kubernetes 集群内发布应用程序 运行,因为负载均衡器在 VirtualBox 中不可用。

请参阅完整示例并在 Building a Kubernetes Cluster with Vagrant and Ansible (without Minikube) 下载代码,它已在 Ubuntu 中进行了测试,但应该也适用于 MAC。