物理机上运行kubernetes

本文介绍了作者在物理机上部署Kubernetes的过程及体会,详细解释了Kubernetes的架构及其核心组件的功能,包括ETCD、APIServer、ControllerManager和Scheduler等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文讲的是物理机上运行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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值