陈同学
微服务
Accelerator
About
# K8s 架构简介 **Kubernetes** 源于希腊语,意为 **"舵手"** 或 **"飞行员"**,简称**"K8s"**。 简单来说可理解为 **容器编排工具**,放大来说理解为**构建分布式系统的基础依赖**。 ## 架构图 ![](https://blog-1256695615.cos.ap-shanghai.myqcloud.com/2020/02/09/2.png) 由 **Master** 节点和 **Node** 节点组成,Master为**控制节点**,Node为**计算节点**。 Master 围绕着 **如何编排、管理、调用用户提交的作业?** 这个主题。 ### Master Master节点负责维护集群的目标状态,由三个紧密协作的组件组成,分别为: * **kube-api-server**:提供 **"声明式"** API服务。 * **kube-scheduler**:负责调度,将新创建的Pod安排到**合适的**几点运行。"合适的" 需要考虑Pod的资源需求、硬件/软件/策略约束、数据位置等。 * **kube-controller-manager**:负责编排,用于调节系统状态。通过apiserver监控集群状态,并将状态调整为目标状态。现今,K8s自带的控制器包含:副本控制器、节点控制器、命名空间控制器和ServiceAccounts控制器。 **整个集群状态的持久化放在etcd这个kv数据库中**. ### Node #### kubelet Node最核心的是 **kubelet** 组件,既负责和Master通讯,也负责和容器运行时打交道,同时也负责和CRI、CNI、CSI等插件打交道。 #### kube-proxy kube-proxy 是网络代理。Node内Pod通过docker0网桥通讯,外部无法访问Pod。通过把一组Pod抽象为Service,提供统一的虚拟IP(VIP),外部可通过Service访问Pod,Pod也可通过Service访问外部。 kube-proxy就是实现Service通信与负载均衡的重要组件,类似于SLB、NAT。 #### 相关插件 * CRI(Container Runtime Interface):容器运行时接口,接口提供了容器运行时(如Docker)各项核心操作。**K8s 通过CRI屏蔽了具体的容器运行时,只要这个容器运行时能够运行标准的镜像,在实现CRI后就可接入K8s,这是拓展性的良好体现**。 > 容器运行时(CR),运行于每个Node。Docker作为K8s默认的CR,其他CR如containerd。对于具体的CR而言,如Docker会通过OCI这个容器运行时规范同底层Linux OS交互,把CRI请求翻译为对Linux的系统调用(Namespace、Cgroups等) 下图是CRI在Node中的位置示意图: ![](https://blog-1256695615.cos.ap-shanghai.myqcloud.com/2020/02/09/4.png) * CNI(Container Network Interface):容器网络接口,也是网络插件,为容器配置网络。 * CSI(Container Storage Interface):容器存储接口,为容器处理持久化存储。 ## 主要API对象 ![](https://blog-1256695615.cos.ap-shanghai.myqcloud.com/2020/02/09/5.png) ### 基础对象 #### Pod Pod 是K8s基础单位,可以封装单个容器或多个容器,容器间共享网络、存储等。 #### Service 将一组Pod抽象为Service,提供统一的IP和集群内可访问的域名,使得外部可访问Pod,且具备负载均衡能力。 #### Volume Volume用于解决Pod的存储问题,Volume有很多种不同的类型,如:emptyDir、hostPath、nfs等。 #### Namespace 通过一个物理集群抽象多个虚拟集群,每个Namespace就是一个虚拟集群。 ### 多形态"Pod" > 这些都属于控制器对象,基于Pod提供额外的特性。 通过对Pod的**"功能定制"**以满足不同场景需要,衍生出各种不同的"Pod",如:Job、CronJob、StatefulSet、DaemonSet。 * Job:用于运行一次性任务,例如部署应用前需要做一些初始化操作,可以跑一个Job。 * CronJob:用于运行定时任务,实际是 Job 的控制器,采用Unix Cron比表达式来调度。 * StatefulSet:指有状态应用,如Pod启动、删除现在先后关系,如:主从关系。StatefulSet 可以达到这样的效果。 * DaemonSet:容器守护进程,这个Pod会自动运行在每个Node上,节点创建/销毁时会同步创建和销毁。 ### 配置信息 ConfigMap、Secret用于存储外部化配置信息。 * ConfigMap:存储普通配置数据,单个属性或配置文件。 * Secret:将私密信息(token、密码、私钥等)以Secret对象形式存储起来,实际存储在Etcd中。在指定的Pod启动时自动把Secret以Volume形式加载进去
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
K8s 架构简介
文章链接:
https://chenyongjun.vip/articles/132
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力