Kubernetes组件与架构
转载请标明出处:
文章首发于>https://www.fangzhipeng.com/kubernetes/2018/09/30/k8s-basic1/
本文出自方志朋的博客
Kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明性配置和自动化。 它拥有庞大,快速发展的生态系统。 Kubernetes服务,支持和工具广泛可用。
谷歌在2014年开放了Kubernetes项目.Kubernetes建立在谷歌大规模运行生产工作量的十五年经验基础上,结合了社区中最佳的创意和实践。
K8s架构图

Kubernetes是由一组节点组成,这些节点可以是物理主机,也可以是虚拟机。Kubernetes平台运行这些节点之上,构成了集群。Kubernetes集群分为两种Node,一种Master Node和用于实际部署的Pod的工作Node。一个集群往往由多个Master Node,这几个Master Node控制着整个集群的所有Node。
master节点包含以下的组件:
- etcd 用于存储集群中所有对象产生的数据
- api server 唯一可以和etcd 数据库交互的组件,通过通过kubectl调用api server 的api。
- controller manager 管理资源对象
- schedualer 调度Node,发布Pod
Node节点包含以下的组件
- kubelete 用于和Master节点交互,运行了node上的Service进程
- kube-proxy 负责网络相关,用于服务的负载
Master组件
Master节点上集群的大脑,是集群逻辑上的控制中心。
Master组件起到控制整个集群的作用。 Master组件做出关于群集的全局决策(例如调度),以及检测和响应群集事件(当rc控制器的’副本’字段不满足时启动新的pod)。
Master组件可以在群集中的任何计算机上运行。 但是,为简单起见,通常Mater组件在同一台计算机上运行。
下图是K8s的master节点的架构图,从图中可以看出,master节点爆款四个组件,分别为Etcd、Api Server、kube-scheduler、Controller。它们之间互相协作,共同控制着k8s集群。

etcd
etcd是Coreos开源的(Apache 2.0协议)一个分布式键值存储数据库,它提供了一种在一组机器上存储数据的可靠方法。 etcd采用了master-slave架构,在网络分区期间优雅地处理Leader选举,并且可以容忍机器故障,包括Leader。
CoreOs另外开源了CoreDns组件,也是一个对于K8s非常的重要的组件,这在后续文章会详细介绍。
etcd是一致性高和高可用的键值存储,用作Kubernetes的所有群集数据的存储,包括各种K8s对象和k8s状态等数据。
Api Server
Api Server 是唯一可以操作etcd 数据库的组件,并提供了认证、授权等机制。它严格遵守了REST规范,去操作这些资源,具有CRUD特性。它是Kubernetes控制的前端工程,它能够水平扩展,可以通过部署多个实例来达到高可用的目的。
kube-scheduler
通过API Server的watch接口监听新建Pod副本信息,并通过算法为该pod选择一个合适的node。调度器可用选择合适的策略,策略的考虑包括个人和集体资源的情况,软件、硬件条件的影响,亲和性和反亲和性的规范等因素。调度器是可插拔的,并且我们期待支持多集群的调度,未来甚至希望可以支持用户自定义的调度器。
controller-manager
集群内各种资源controller 的核心管理者。针对于每一种具体的资源,都有相应的Controller,保证其下管理的每个Controller所对应的资源始终处于“期望的状态”。
从逻辑上讲,每个控制器都是一个单独的过程,但为了降低复杂性,它们都被编译成单个二进制文件并在单个进程中运行。
这些控制器包括:
Node controller:负责在节点出现故障时注意和响应。
Replication Controller:负责为系统中的Replication Controller对象维护正确数量的pod。
Endpoint Controller:填充Endpoint Controller象(即,连接服务和窗格)。
Service Account & Token Controllers:为新的命名空间创建默认帐户和API访问令牌。
Node组件
Node是K8s集群中真正的工作负载节点,K8s集群由多个Node共同承担工作负载,pod被分配到某个具体的node上执行。k8s通过node controller对node资源进行管理。支持动态在集群中添加或删除node。
kubelet
它位于集群中每个 node上非容器形式的服务进程组件,是Master和node之间的桥梁。处理Master下发到本Node上的pod创建、启停等管理任务,向API server注册Node信息。监控本Node上容器和节点资源情况,并定期向Master汇报节点资源占用情况。它还会向Master汇报容器运行的健康情况。
Kube-proxy
Service抽象概念的实现,将到service的请求按策略(负载均衡算法分发到后端的pod )上,默认使用iptables mode实现;支持nodeport模式,实现从外部访问集群内的service。
总结
kubernetes组件由两类节点组成,分别为master和node。
其中master组件是控制整个集群大脑,它包括apiserver、scheduler、controller manager、etcd组件。apiserver为外部控制集群提供了REST API,并提供了安全机制;etcd是k8s记录各种资源的唯一数据库,只有api server能够直接访问;controller manager用来管理controller,保证了每种资源的正常工作;schedula是用来调度pod 到具体的节点。
而node节点包含了2个组件,分别为kubelete和kubeproxy,kubelete是pod管家,管理着pod的生命周期,与此同时与api server保持联系,实时上报pod的数据;kubeproxy组件实现了 service的抽象,使应用能够被访问。
由此可见,kubernetes集群是由众多的节点组成,每一个节点又有k8s的组件,这些组件相互协作,共同维护,保证集群的正常运行。
参考资料
书籍《k8s权威指南》
https://kubernetes.io/docs/concepts/overview/components/#master-components
https://www.kubernetes.org.cn/kubernetes设计架构
https://www.imooc.com/learn/978
关注我的公众号,精彩内容不能错过!
![]()
扫码关注有惊喜
(转载本站文章请注明作者和出处 方志朋的博客)
Kubernetes组件与架构的更多相关文章
- Docker Kubernetes 高可用架构设计
Docker Kubernetes 高可用架构设计 官方方案:保证master端不发生单点故障. 官方使用一台Load Balancer负载均衡代理3台master端,终端与etcd与work Nod ...
- Kubernetes 之上的架构应用
规划并运转一个兼顾可扩展性.可移植性和健壮性的运用是一件很有应战的事情,尤其是当体系杂乱度在不断增长时.运用或体系 本身的架构极大的影响着其运转办法.对环境的依靠性,以及与相关组件的耦合强弱.当运用在 ...
- Kubernetes【K8S】(一):Kubernetes组件
什么是Kubernetes Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化.Kubernetes拥有一个庞大且快速增长的生态系统. ...
- Kubernetes云供应商架构的未来
首先,我想分享SIG的使命,因为我们用它来指导我们现在和将来的工作.从我们的章程中直接来看,SIG的使命是简化,开发和维护云供应商集成,作为Kubernetes集群的扩展或附加组件.这背后的动机是双重 ...
- iOS开发之组件化架构漫谈
前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...
- kubernetes组件
kubernetes组件 @(马克飞象)[k8s] 组件 kubernetes除了必备的dns和网络组件外,官方推出大量的cluster-monitoring,dashboard,fluentd-el ...
- 构建Docker平台【第三篇】安装 kubernetes 组件
第一步:准备 1. 安装包: kubeadm-1.6.0-0.alpha.0.2074.a092d8e0f95f52.x86_64.rpm kubernetes-cni-0.3.0.1-0.07a8a ...
- Tomcat系列(4)——Tomcat 组件及架构详细部分
核心部分 1. 定义 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ...
- Tomcat系列(3)——Tomcat 组件及架构核心部分 4类主要组件(顶层,连接器,容器,嵌套)
1.架构图 2. 定义 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ...
随机推荐
- tp3.2开启允许跨域
在入口文件<?PHP下加上 header('Access-Control-Allow-Origin:*');header("Access-Control-Allow-Headers: ...
- select下拉框选择字体大小
效果: 结合Bootstrap.jQuery和ES6字符串模板与箭头函数使用JavaScript DOM操作动态添加option,随着option:selected选中的字号而改变相应的字体大小 代码 ...
- Hibernate 注解 (Annotations 三)多对一双向注解
注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来 ...
- img底部空白以及多余的空白文本节点解决方案
1:img底部有空白的问题 img的css属性display的默认值是inline,这样会导致img的vertical-align的默认值是 baseline; baseline又不是bottom,只 ...
- mysql case when & concat & SUBSTRING_INDEX & not & having 使用的小case
1. 代码 SELECT a.id, a.activity_name, ( CASE WHEN a.activity_end_time > now() THEN '参与中' ELSE ( CAS ...
- javascript实现SHA1算法
web里面密码直接传到后台是不安全的,有时候需要进行加密,找到一个不错的javascript SHA1算法: <!DOCTYPE html> <html lang="en& ...
- 如何在VS2010环境下编译C++程序
原文:http://blog.csdn.net/gupengnina/article/details/7441203 用 Visual Studio 编写 Visual C++ 程序的第一步是选择项目 ...
- javascript面向对象的写法02
面向对象特性的初步实现 1.封装 利用作用域封装变量 作用域的概念是一样的,for语句,if语句等这些作用域内定义的变量只能作用域内访问,函数内定义的变量只能函数内访问. function Class ...
- 程序单一实例实现 z
不少应用程序有单一实例的需求,也就是同时只能开启一个实例(一般也就是一个进程). 实现的方式可能有判断进程名字,使用特殊文件等等,但是最靠谱的方式还是使用系统提供的 Mutex 工具. Mutex是互 ...
- Linux 安装问题
问题1: root>sudo apt-get install yum 提示: dpkg was interrupted, you must manually run 'sudo dpkg --c ...