zl程序教程

您现在的位置是:首页 >  后端

当前栏目

物理机上运行kubernetes

Kubernetes 运行 物理 机上
2023-09-27 14:27:26 时间
本文讲的是物理机上运行kubernetes【编者的话】本文介绍了作者在物理机上部署kubernetes时,对其各个组件的功能的深刻理解。作者认为虽然目前Google自动化了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


容器运行时探讨--从dockershim正式从K8s删除说起 2022年05月,Kubernetes 1.24正式发布,比较引人注目的就是在这个版本中正式将dockershim 组件从 kubelet 中删除。从这个版本开始,用户使用Kubernetes时需要优先选择containerd 或 CRI-O作为容器运行时。如果希望继续依赖 Docker Engine 作为容器运行时,需要cri-dockerd组件。
这几天小叶秋在网上冲浪的时候,发现一些与云原生相关的文章,特地拿来与大家分享~~ 本文译自 Kafka on PaaSTA: Running Kafka on Kubernetes at Yelp (Part 1 - Architecture)[1]。作者:Lennart Rudolph 在 Yelp,Kafka 每天接收数百亿条消息来推进数据驱动并为关键业务管道和服务提供支持。我们最近通过在 PaaSTA (Yelp 自己的平台即服务)上运行集群,对 Kafka 部署架构进行一些改进。