k8s 架构浅析
文章目录
Kubernetes 的电梯间演讲
Kubernetes 是一个 面向应用 的容器集群部署、管理及编排系统,旨在为最终用户屏蔽物理/虚拟计算、网络、存储基础设施的复杂度,关注以应用为核心、以容器为原语的自动化运营平台。

Kubernetes 具备完善的集群管理能力,包括多层次的安全认证和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。 Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。
Kubernetes 的核心层级对象

Cluster: 是一个被 k8s 协调的高可用集群,作为 k8s 集群的根操作对象,将多台计算节点(Master/Node)连接成一个工作整体,是计算、存储和网络资源的集合。
Master:下属于 Cluster,充当集群中的中央控制角色,负责管理、协调集群中的所有活动(e.g. scheduler app、维护 app 状态机、 弹性扩展 apps、发布 app 更新 etc.)。
Node:下属于 Cluster,作为集群中的 Worker,受 Master 指使。是 Containers 及其 runtime 引擎的允许载体。
Pod: 是一个抽象而统一的概念,屏蔽底层异构 Container Runtime 技术实现。k8s 的最小工作单元,是 Containers 的 “Container”。
Container:下属于 Pod,是真正意义上的、常规的容器。
NOTE:为什么要引入 Pod 逻辑对象?
可管理性:有些容器天生就是需要紧密联系,一起工作的。例如:微服务中的 Side Car 模式,Pod 中的一个 ContainerA 提供业务,另一个 ContainerB 专门负责对 ContainerA 进行收集、监控日志和流量信息;又例如:ContainerA 作为 File Puller 定期从外部拉取最新的文件,将其存放到共享 Volume 中,ContainerB 作为 Web Server 直接从 Volume 读取文件,两个 Containers 紧密合作;Pod 将 Containers 封装到一个部署单元中,k8s 以 Pod 为最小单位进行调度、扩展、资源分配、管理生命周期。
通信和资源共享:Pod 中的所有 Containers 使用同一个 network namespace,即 Containers 具有相同的 IP 地址和 Port 空间,它们互相之间可以直接用 localhost 进行通信。同样的,这些容器也会共享存储,当 k8s 挂载 Volume 到 Pod,本质上是将 Volume 挂载到 Pod 中的每一个 Container。
简单的理解, 是不是有点类似与进程和线程的关系?
Kubernetes 的组件架构

Kubernetes 是典型的中控分布式架构(Central control distributed architecture),下面分别列举 Master、Node 的组件。
Master:
etcd:提供高可用性、严格数据一致性的非关系型数据库,具有共享配置、服务发现、分布式等特点。常被用于构建服务发现系统。
API Server:统一且唯一的 Cluster 北向访问接口,依靠 CA 认证体系提供身份认证、授权、鉴权等访问控制功能,统称 3A(Authentication、Authorization、Admission),是 Kubernets Security Mechanism 的门神。
Controller Manager:中央控制管理器,Cluster 的核心管理模块,负责整个 Cluster 的 “运”(e.g. 故障检测、弹性扩展、滚动更新,etc.)
Scheduler:资源调度器,按照预设的策略将 Pod 调度到目的(最佳)Node 上启动。
Node:
kubelet:维护 Container 的生命周期,同时也负责存储(CSI)和网络(CNI)的管理。
kube-proxy:为 Service 提供 Cluster 内部的服务发现和负载均衡功能。
Container runtime:负责镜像管理以及 Pod 和 Container 的运行(CRI)。
Kubernetes 的组件通信协议/接口

Kubernetes 的分层架构

Kubernetes 的术语词典
Controller:Pod 的控制器,k8s 提供了多种控制器来对 Pod 进行管理,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等,以满足不同的业务需求。
Deployment:负责 Pod 的部署,并维护部署拓扑(e.g. 创建、监控、自修复 Pod),保证 Pod 按照期望的状态运行。
ReplicaSet:负责 Pod 的多副本管理,使用 Deployment 的同时会自动创建 ReplicaSet,也就是说 Deployment 实际是通过 ReplicaSet 来管理 Pod 多副本的,通常不需要直接使用 ReplicaSet。
DaemonSet:用于每个 Nodes 都运行且只运行一个 Pod 副本的场景。通常用于运行 daemon 服务进程。
StatefuleSet:保证 Pod 的所有副本的名称在其整个生命周期中是不变的。一般的,当 Pod 因为故障需要删除并重新启动时,它的名称是会发生变化的。StatefuleSet 还可以保证 Pod 的副本按照固定的顺序启动、更新或者删除。
Job:特殊的任务控制器,用于 App 运行结束就可以立即删除 Pod 的场景。
Service:用于定义外界访问一组特定 Pod 的方式。是一个北向提供外部访问方式(e.g. ClusterIP、NodePort、LoadBalancer),南向通过 Label 和 Selectors 来匹配 Pods 的 逻辑对象,还可以为 Pods 提供了负载均衡。
Namespace:k8s 实现多租户的方式,将一个物理 Cluster 从逻辑上划分成多个虚拟 Cluster,每个虚拟 Cluster 就是一个 Namespace,不同 Namespace 间的资源完全隔离。
- default Namespace:默认的 Namespace,如果创建任意资源时 不特别指定,就会将资源放到这个 namespace 下。
- kube-system Namespace:k8s 自己创建的系统资源将放到这个 namespace 下。
最后
一图抵万语,上文图源均来自互联网。实话说,并没有找到一张笔者满意的架构图,还是找个时间自己画一画吧。但依旧感谢这些图的原创作者们的贡献。
回到主题,Kubernets 的架构和整个部署的复杂度相较于 OpenStack 要更低,从这个角度来看好像的确为企业用户的运维成本省了不少。当然笔者对 k8s 也只是初学,做不得准。但可以肯定的是,k8s 的核心精髓在于 编排 二字,这是由 Container 的基因决定的。将 Container 当作 VM 来使用,那就是一个天大的误解了。所以每每看见市场上哪些为容器而容器,毫无编排特征的产品,笔者实在是难免感慨。
参考资料
- k8s 中文指南
- 每天 5 分钟学习 k8s
- 参考博客:http://blog.csdn.net/jmilk https://blog.csdn.net/Jmilk/article/details/85028828
k8s 架构浅析的更多相关文章
- boost.asio源码剖析(二) ---- 架构浅析
* 架构浅析 先来看一下asio的0层的组件图. (图1.0) io_object是I/O对象的集合,其中包含大家所熟悉的socket.deadline_tim ...
- Camera服务之--架构浅析
Camera服务之--架构浅析 分类: Camera 分析2011-12-22 11:17 7685人阅读 评论(3) 收藏 举报 android硬件驱动框架jnilinux内核平台 一.应用层 Ca ...
- Others-大数据平台Lambda架构浅析(全量计算+增量计算)
大数据平台Lambda架构浅析(全量计算+增量计算) 2016年12月23日 22:50:53 scuter_victor 阅读数:1642 标签: spark大数据lambda 更多 个人分类: 造 ...
- [k8s]k8s架构图解
k8s架构图解 启动参数及证书梳理 master端必须要装flannel 注: flannel网络能确保各节点间 Pod 网段实现互通 master 节点与 node 节点上的 Pods 通过 Pod ...
- [转帖]我花了10个小时,写出了这篇K8S架构解析
我花了10个小时,写出了这篇K8S架构解析 https://www.toutiao.com/i6759071724785893891/ 每个微服务通过 Docker 进行发布,随着业务的发展,系统 ...
- k8s架构与组件详解
没有那么多花里胡哨,直接进行一个K8s架构与组件的学习. 一.K8s架构 k8s系统在设计是遵循c-s架构的,也就是我们图中apiserver与其余组件的交互.在生产中通常会有多个Master以实现K ...
- k8s架构分析(二)--技术流ken
master节点 k8s的集群由master和node组成,节点上运行着若干k8s服务. master节点之上运行着的后台服务有kube-apiserver .kube-scheduler.kube- ...
- k8s架构
master节点 k8s的集群由master和node组成,节点上运行着若干k8s服务. master节点之上运行着的后台服务有kube-apiserver .kube-scheduler.kube- ...
- k8s架构分析(二)
master节点 k8s的集群由master和node组成,节点上运行着若干k8s服务. master节点之上运行着的后台服务有kube-apiserver .kube-scheduler.kube- ...
随机推荐
- 2018最新WordPress缩略图设置方法
缩略图设置的方法很多,但都不全面,且很多教程已经失效了,其中使用插件来实现,可是那些插件都使用过都不能实现效果,所以我整理了一份使用代码实现缩略图的方法. 1.找到网站根目录/wp-content/t ...
- javascript实现选项卡切换的4种方法
方法一:for循环+if判断当前点击与自定义数组是否匹配 <html lang="en"> <head> <meta charset="UT ...
- Android 接入微信分享错误码-6
官方的常见错误表示签名出错登录以后,需要重装微信(也就是清除微信本地数据)
- mysql5.5和5.6版本更新内容
mysql 5.5,5.6 比5.1改进地方: 1,5.5默认存储引擎为innodb2,5.5增加cpu多核处理能力:innodb_read_io_threads innodb_write_io_th ...
- CBIR--Survey.C/GPU优化.Sys搭建
一:CBIR综述:转自于wiki:http://zh.wikipedia.org/wiki/CBIR 参考链接:http://blog.csdn.net/kezunhai/article/detail ...
- Kattis - Game Rank
Game Rank Picture by Gonkasth on DeviantArt, cc by-nd The gaming company Sandstorm is developing an ...
- VMware VCSA 6.0安装过程 (转)
VMware VCSA 6.0安装过程(专版) 一.环境准备 VMware vCenter Server Appliance(VCSA)6.0的部署和之前的版本不同,在5.5及之前的版本可以通过 ...
- 路飞学城Python-Day107
88-Ajax简介 Ajax是前端的JS技术,目前向服务器发送请求是通过1.向浏览器的地址栏发送请求的方式:2.form表单的请求方式是两种get和post方式:3.a标签的href属性对接地址 是一 ...
- 使用Ansible安装部署nginx+php+mysql之安装php(2)
二.使用Ansible安装php 1.php.yaml文件内容 - hosts: clong remote_user: root gather_facts: no tasks: # 安装libseli ...
- matplotlib 显示两张图片,折线图 和 scipy
显示两张图片的代码: import numpy as np from scipy.misc import imread, imsave, imresize import matplotlib.pypl ...