物理机上运行kubernetes

本文讲的是物理机上运行kubernetes【编者的话】本文介绍了作者在物理机上部署kubernetes时,对其各个组件的功能的深刻理解。作者认为虽然目前Google自动化了kubernetes部署,但如果想了解更多底层细节,最好还是自己在物理机上部署。

什么是kubernetes

kubernetes是谷歌开发的开源容器集群管理系统,它使容器集群应用的管理高度简单、自动化。Kubernetes(简称为k8s)与底层设施无关,可以运行在任何主流的云主机上,也可以是物理机。在Google Cloud上运行kubernetes非常方便,因为Google会为您管理k8s。我一直在Google容器引擎上试用Kubernetes,但为了更好地理解k8s架构,我决定在物理机上部署。

kubernetes Master 架构

kubernetes集群由一个管理节点和多个工作节点组成。管理节点是外部可以直接访问的,可以通过它在工作节点上执行命令。下面列出的是运行在管理节点上的组件。

ETCD

Etcd是一个开源的分布式键值对存储系统,是由CoreOS团队负责开发的。kubernetes使用 etcd 来存储配置数据,集群里面的所有节点均可访问这些数据。配置数据包括服务发现相关的数据和集群状态相关的数据,这些数据在节点配置或者重新配置的时候会用到。 etcd 的主要特点之一是数据在分布式系统中被复制。用户可以停掉kubernetes集群中除了主节点(译者注:这个主节点不是k8s的主节点,而是etcd的主节点)之外的所有etcd。这种情况下,所有的数据请求都将由etcd主节点负责处理。这种情形也是可以接受的,因为只要保证etcd主节点可用,kubernetes就可以正常工作。

API Server

为了确保从外部可以访问集群,主节点上运行了API Server组件,这是整个集群的管理入口。同时,还负责维护etcd中的数据与集群状态的一致性。API Server的组件实现了RESTful接口,使得与其通信更加简单方便。

Controller Manager

Controller Manager负责处理针对集群的管理请求,比如副本控制。当用户希望给集群设置某个状态,api server将这个期望的状态写入etcd,然后controller manager会获取到这个状态数据,最终执行一系列动作,将集群设置到用户所期望的状态。

Scheduler

调度器负责将任务调度到合适的节点。调度器的目标就是依据某些规则,为待调度的Pod找到合适的节点,这些规则主要是根据Pod的资源请求和节点的资源进行匹配。

Kubernetes Worker 架构

无论是kubernetes管理节点还是工作节点都有一个基本的要求-Docker。Docker负责拉取镜像和运行应用。为了让kubernetes能工作,每个worker节点必须属于某个专属子网。使用 flannel (CoreOS团队开发)就能够满足子网的要求。与此同时,为了使用 flannel 并且暴露合适的端口,必须修改一下Docker的配置。flannel需要部署在kubernetes所有woker节点上。

kubelet

Kubelet通过与API Server通信,感知(译者注:通过etcd的list-watch机制) etcd 中的配置数据的变化,来负责维护所在节点的Pod,容器,镜像,存储等对象。

kube-proxy

集群中的每个节点运行一个网络代理和一个负载均衡器。这个代理负责用户请求的负载均衡,并且将请求准确地转发到节点上的容器中。

在Ubuntu上运行Kubernetes

为了在Ubuntu系统组成的集群上部署kubernetes,我重度依赖Docker的使用。 etcd flannel 运行在主机上的容器中,而不是直接运行在主机上。kubernetes集群必须的管理组件和工作组件也以容器形式运行在主机上。这使得安装是与平台无关的,并且拉起集群更加简单快捷。我通常使用 GitHub 上社区开发的脚本来部署,而不是自己开发。为了让集群拉起更加简单,我自己开发了一个 Ansible  role,在 GitHub 上可以获取。

在物理机上部署kubernetes促使我更加深入地了解了更多底层细节,比如管理节点和工作节点之间的通信。Google容器引擎通过使用一个托管的kubernetes管理节点和屏蔽底层复杂细节,使得kubernetes的使用非常便捷,这确实是一个了不起的创举。

下一步

通过Ansible,我已经可以在物理机上部署kubernetes。下一步,我将部署一个公网IP的负载均衡器,这样从外部就可以访问到kubernetes了。一旦负载均衡器部署成功,我将更新我的ansible脚本。欢迎来这 Twitter 或者 GitHub 与我交流。

原文链接:Kubernetes on Bare Metal(翻译:付辉)

原文发布时间为:2017-03-10

本文作者:付辉

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:物理机上运行kubernetes

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/225160

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。