V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
caicloud2015
V2EX  ›  Ubuntu

如何用 Ubuntu 和 Xen 来设置 Kubernetes?

  •  
  •   caicloud2015 · 2016-08-11 15:30:51 +08:00 · 2115 次点击
    这是一个创建于 3024 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这篇博客描述了我如何设置本地 Kubernetes 。如果你想要自己设置 Kubernetes ,那么点击这里参照指导:点我。在我刚开始接触这些内容的时候,我是多么希望能有这样一篇攻略帖!

    我想要运行自己的 Kubernetes 部署,来运行应用程序和试验。我不仅仅只是想测试 Kubernetes ,还想让它 24 小时全天候运行。做到这样最简单的方法就是使用谷歌 GCE 或者 AWS 。如果使用这两种方法,你就不需要花那么多钱在保持基础安装运行。

    考虑了很多选择之后(包括运行树莓派集群),我得出结论,我最好的设置就是运行单个主持很多虚拟机的物理服务器。

    我选了 Xen 作为我的超管理器, Ubuntu 作为“ dom0 ”(之后会对这个进行详述), Core OS 作为我的 Kubernetes 主机。以下是我的设置。

    硬件

    ○Dell T20 服务器

    ○Intel i5-4590

    ○16GB RAM

    ○120 GB SSD

    软件

    超管理器: Xen 超管理器/ Ubuntu16.04 。我发现自己完全被“ dom0 ”的谈论搞糊涂了,但是要点是:安装 Ubuntu16.04 在自己的服务器上,然后你安装(通过 apt - get ) Xen ,安装 Xen 就好像用你的原始 Ubuntu 安装虚拟机一样。这个虚拟机叫做“ dem0 ”,可以用来管理你的其它虚拟机。(另外困扰的就是—— Xen 不是 Xen 服务器,你可以完全忽略 Xen 服务器这个商业产品)。

    Kubernetes OS: Core OS Alpha Channel 。现在为止, Stable 不包括 kubelet (这个正是我们需要的),所以我们使用 Alpha 。这就是我选择的,因为它支持 Kubernetes 既轻松又简单。

    安装 Xen

    在一个新的 Ubuntu16.04 上面,安装 Xen , libvirt 和 virtinst 。将它作为默认引导点,并且重新启动。 virtinst 给我们一个 CLI ,我们之后会用来启动虚拟机。

    之后回来的就是原始 Ubuntu ,作为一个虚拟机运行在 Xen 超管理器上。因为是原始安装,所以我们并不知道到底哪些东西是改变了的。我们来查看一下:

    看起来不错!

    安装 Kubernetes

    Kubernetes 和这些漂亮的脚本从基础层面为你设置整个集群。我发现的问题就是,我想要自己管理(或者理解)这些软件。我并不想要一个迷之 bash 脚本来替我处理一切问题。

    相反,我创建了我自成一套的脚本,这个脚本少生成和模版,可能对某些例子来说是有用的。这里展示的就是如何使用他们。

    我们会尽量少使用我的东西——下面的 git 存储库是 4Core OS 云配置文件。这些定义配置(网络设置,应用程序)。也有为集群配置来生成我们的 SSL 证书。

    所以,从 Github 抓取我的文件,从最新的 CoreOS Alpha 抓取:

    现在为 master , node1 , node2 , node3 来创建一个磁盘:

    如果你没有 SSH 密钥的话,你可能需要生成一个:

    然后我们把我们的 SSH 密钥放到云端文件:

    我们也需要生成我们的证书:

    然后放入我们生成的证书到 master 节点中:

    配置完成,我们现在可以验证双重检查:

    如果通过了(从服务器看是“ null ”),那就使用这些磁盘创建一个 Core OS 虚拟机:

    这就会开启 4 个运行在 Core OS 上面的虚拟机,我们的云配置文件。这个取决于你在哪里运行(网速,服务器电源),要花费比较长的时间才能启动和运行。

    可能发生的状况:

    ○下载 Flannel 镜像

    ○Kubelet 开启和下载超 kube

    ○容器为 API 服务器, controller 管理员, master 上的调度器开启

    ○为 kube - proxy 的容器在节点上启动

    如果你需要,可以连接到控制台,并且监控节点启动:

    你也可以 ssh 到 master ,然后查看 journalctl :

    所以,运行起来了吗?让我们来使用 kubectl (我们先要在本地安装一下这个):

    让我们来看:

    最后一条,如果我们尝试,并且列出 pods (正在运行的进程),我们得不到任何东西。我们需要创建“ kube - system ”命名空间。这个很容易:

    现在:

    woohoo !

    结论

    所以我们事实上完成了什么呢?我们已经将 Ubuntu 服务器移入到了一个 Xen 管理程序。在那台超管理器上,我们创建了 4 个运行在 Core OS 上的虚拟机。在我的 Git 存储库里的 Core OS 文件,我们设置了一个 Core OS 安装,运行在 master Kubernetes 组件上,其它三个则运行在节点组件上。

    我们有很多方法让 Kubernetes 运行在 Core OS 上面。特别的一点就是我们按照如下流程来设置:

    ○Flannel service ——可以用来处理我们的网络。它允许一个节点上的容器跟其它节点上的容器进行通信。

    ○etcd service ——这就是 Kubernetes 保持状态的地方。

    ○Docker service —— Docker 就是 Kubernetes 设置开启镜像的方式。

    ○kubelet service ——这就是 kubernetes 组件中唯一作为系统 service 的。我们使用 kubelet 来加入我们的 Kubernetes 集群,然后启动其它 kubernetes 应用程序。

    跟系统 service 一样,我们也安装了以下的东西作为 services ,由 Kubernetes 管理,我们通过在 /etc/kubernetes/manifests/中替换 Kubernetes 文件来完成。

    kubelet service 监控这个目录,并且基于它找到的东西来启动应用程序。

    ○kube - apiserver

    ○kube - scheduler

    ○kube - controller - manager

    ○kube - proxy

    就酱!我们还没有一个功能完全的 Kubernetes 集群。是时候来玩一下它了!

    原文链接: http://andrewmichaelsmith.com/2016/05/my-kubernetes-setup/#rd?sukey=3903d1d3b699c208044fe7370c2c0da4ad0e8778b3d89c41fe76f46b2d628d2e61027691212dea074c8e358d12d11ab0

    (如果需要转载,请联系我们,尊重知识产权人人有责:)

    julyclyde
        1
    julyclyde  
       2016-08-11 23:41:41 +08:00
    恕我直言
    这跟 xen 有啥关系?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5599 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:41 · PVG 10:41 · LAX 18:41 · JFK 21:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.