网站首页 > 博客文章 正文
大家好,我是mikechen。
Kubernetes(K8S)是云原生最核心的部分,也是云技术的未来,下面我就全面来详解K8S原理架构@mikechen
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
K8S
Kubernetes(简称K8S),是一个用于自动化部署、扩展、和管理容器化应用程序的开源平台。
K8S,主要解决:容器编排、弹性收缩、自我修复、和资源管理。
- K8S的核心功能之一是容器编排,它可以自动管理、和协调容器化应用程序的部署、扩展、和运行。
- 并且,K8S具备弹性伸缩功能,可以根据应用程序的需求、和负载,动态调整运行容器的数量。
- 可以自动扩展(Scale-Out),以应对高峰流量,还是在低负载时收缩(Scale-In)以节省资源。
- 此外,K8S还能根据实际资源,消耗情况动态调整资源分配,避免资源过度、或不足的问题。
K8S原理
K8S架构,主要由以下组件组成:
Master组件,主要会包含:API Server、Control Manager。。。等。
API Server
API Server,是集群的入口点,所有的资源操作(如:创建、更新、删除...等等),都是通过 API Server 进行的。
主要解决,如下问题:
提供 RESTful API 接口
API Server ,通过 RESTful API 接口来接收、和处理来自用户的请求。
1.集群唯一入口
API Server 是其他 Kubernetes 控制平面组件,比如:Scheduler、Controller Manager...与集群状态交互的唯一入口。
2.认证(Authentication)
API Server 验证请求的来源,确定请求者的身份(如:用户、服务账户....等)。
并且,支持多种认证机制,如:证书认证、令牌认证、集成 OAuth ......等。
3.授权(Authorization)
API Server 在认证通过后,会根据配置的访问控制策略,判断请求者是否有权限执行该操作。
4.准入控制(Admission Control)
在请求被实际处理之前,API Server 还会调用准入控制器(Admission Controllers),这些准入控制器可以执行额外的检查或修改请求,如资源配额、默认值设置等。
Scheduler
Scheduler 是 Kubernetes 中的重要组件,它的核心任务:是将新创建的 Pod 调度到最适合的节点。
Scheduler 的核心任务是对新创建的、尚未绑定到任何节点的 Pod 进行调度。
调度的过程包括从集群中的可用节点中选择一个最适合的节点,然后将 Pod 分配给该节点。
并且,Scheduler 会根据集群的资源使用情况,(如:CPU、内存...),以及节点的负载情况来做出调度决策。
尽量优化资源利用率,避免资源的浪费或节点的过载。
Controller Manager
Controller Manager ,是 Kubernetes 中的控制器管理器,负责:管理集群中的各种控制器。
比如:Deployment Controller、Node Controller、Endpoint Controller .....等。
这些控制器是 Kubernetes 控制平面的关键部分,用于持续监控集群的状态,并确保集群的实际状态、与用户定义的期望状态相匹配。
1.Deployment Controller
Deployment Controller ,负责管理、和调度 Deployment 对象。
Deployment Controller,确保集群中始终运行指定数量的 Pod 副本,并根据用户定义的策略进行 Pod 的创建、更新、和删除。
以及,如果在滚动更新过程中出现问题,Deployment Controller 支持自动回滚到之前的稳定版本。
2.Node Controller
Node Controller 负责管理和监控集群中的节点(Node)。
它主要监控节点的健康状况,并在节点发生故障时,做出相应的处理。
比如:Node Controller 定期检查每个节点的健康状态,它通过与 Kubelet 通信获取节点的状态信息。
以及,当一个节点被标记为不可用时,Node Controller 会触发驱逐操作,将该节点上的 Pod 从调度队列中移除。
3.Endpoint Controller:
Endpoint Controller ,负责维护 Kubernetes 中 Service 、和 Pod 之间的关系,即维护 Endpoints 对象。
4.Replication Controller:
确保集群中运行的 Pod 副本数量、与用户指定的数量一致,如果有 Pod 失败或被删除,它会启动新的 Pod 来补足。
etcd
分布式键值存储,保存了整个集群的状态。
etcd 存储,包括集群中的节点信息、Pod 状态、Service 配置、ConfigMap、以及其他 Kubernetes 资源对象的状态。
etcd 的设计目标是提供一个可靠的数据存储解决方案,确保数据在分布式环境中的一致性,并能在故障时快速恢复。
Node 组件
在 K8S集群中, 除了“Master组件”还,还有一个关键逐渐:Node 组件 。
Node组件,负责容器化应用程序的运行、管理、和网络通信。
整体架构,如下图所示:
主要会包含:Kubelet、Kube-Proxy......等核心组件。
Kubelet
节点上的代理,负责与 API Server 通信,管理节点上的 Pod 生命周期。
它确保 Pod 及其容器按照 PodSpec 正确创建、运行,并与 API Server 保持通信。
Kube-Proxy
负责维护网络规则,实现服务的负载均衡和网络通信。
主要功能,如下:
1.服务发现和负载均衡
Kube-Proxy 负责将 Kubernetes Service 的虚拟 IP 地址,映射到后端 Pod 的实际 IP 地址,并实现流量的负载均衡。
2.网络规则维护
Kube-Proxy 通过设置 iptables 、或 IPVS 规则,控制节点的入站、和出站流量。
这些规则使得不同 Pod 之间、Pod 、与 Service 之间的网络通信能够顺利进行。
3.支持多种模式
Kube-Proxy 支持多种工作模式,包括:基于 iptables 的模式、和基于 IPVS 的模式。
备注:IPVS 模式可以更高效地处理大规模集群中的网络请求。
4.跨节点通信
Kube-Proxy 还支持集群内跨节点的 Pod 通信,确保即使 Pod 位于不同的节点,它们仍然可以通过 Service 进行互相访问。
Container Runtime
Container Runtime 是 Kubernetes 用来运行容器的底层组件,它负责创建、运行、和管理容器化的应用程序。
主要解决,如下3大问题:
1.容器管理
Container Runtime 负责:管理容器的生命周期,包括:拉取容器镜像、启动容器、停止容器...等操作。
2.镜像管理
Container Runtime 负责,从镜像仓库拉取所需的容器镜像,并缓存镜像以便快速启动。
3.资源隔离
通过 cgroups 和命名空间等技术,Container Runtime 实现对容器的资源隔离和限制,确保每个容器能够独立运行且互不干扰。
常见的 Container Runtime:有Docker、containerd。。。等。
Docker:
Docker 是最早被 Kubernetes 支持的容器运行时,广泛应用于各种环境中。
containerd:
containerd 是一个高级容器运行时,被设计为轻量级且高效,能够直接与 Kubernetes 集成。
CRI-O:
CRI-O 是一个符合 Kubernetes CRI(Container Runtime Interface)标准的轻量级容器运行时,专为 Kubernetes 环境优化。
当然,目前使用最多的,还是Docker为主。
K8S使用场景
K8S主要应用场景,如下:
1.微服务架构
微服务架构,是K8S目前应用最大的场景之一。
K8S非常适合管理复杂的微服务应用,比如:支持自动伸缩、负载均衡/和滚动更新。。。等。
2.CI/CD
K8S可以与 Jenkins、GitLab 等 CI/CD 工具集成,实现自动化部署流水线。
3.大数据和机器学习
K8S可以运行 Spark、TensorFlow ...等大数据、和机器学习任务。
以上
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
猜你喜欢
- 2024-09-11 K8S从懵圈到熟练 - 我们为什么会删除不了集群的命名空间?
- 2024-09-11 从零开始入门 K8s | Kubernetes 存储架构及插件使用
- 2024-09-11 「云原生」Spark on k8s 讲解与实战操作
- 2024-09-11 K8S扫盲什么是云?什么是云架构?什么是云原生?什么是K8S?
- 2024-09-11 K8S | 核心原理分析(k8s原理图)
- 2024-09-11 《深入浅出Prometheus》 原理、应用、源码与拓展详解
- 2024-09-11 Kubernetes原理最全详解(图文全面总结)
- 2024-09-11 Kubernetes(k8s)CNI(flannel)网络模型原理
- 2024-09-11 「云原生」k8s 中的 hostNetwork 和 NetworkPolicy 讲解与实战操作
- 2024-09-11 「云原生」Kubernetes(k8s)最完整版环境部署(V1.24.1)
你 发表评论:
欢迎- 06-23MySQL合集-mysql5.7及mysql8的一些特性
- 06-23MySQL CREATE TABLE 简单设计模板交流
- 06-23MYSQL表设计规范(mysql设计表注意事项)
- 06-23MySQL数据库入门(四)数据类型简介
- 06-23数据丢失?别慌!MySQL备份恢复攻略
- 06-23MySQL设计规范(mysql 设计)
- 06-23MySQL数据实时增量同步到Elasticsearch
- 06-23MySQL 避坑指南之隐式数据类型转换
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)