kubernetes(k8s)架构及基础知识(一)
本栏目用于总结一下k8s和云原生相关的知识
文章目录
一、背景
随着 Docker 的崛起,各个公司大显神通,都想在容器平 台化领域抢占市场,竞争非常激烈,其中不乏大巨头公司 的身影。
Borg 系统(Google 公司的)是一个大规模的内部集群管 理系统,它可以运行数千个不同应用程序中的数十万个遍布多个集群的作业,每个集群拥有多达数万台器。
部分 Brog 核心功能及设计理念开源并正式命名 Kubernetes.
二、核心组件及架构
1.Kubernetes 架构
Kubernetes 整体架构图如下:
假设创建一个 nginx 服务:
Master
- 通过kubectl命令行创建 nginx 服务,kubectl 会调用 APIServer 往 ETCD 里面写入一个 Deployment 对象
- Controller-Manager 监听到有新的Deployment对象被写入,获取对象信息后,根据对象信息做任务调度,创建出对应的 Pod 信息。
- Scheduler监听到有新的 Pod 被创建,读取到 Pod 对象信息,根据集群状态将 Pod 调度到某一节点上,然后更新 Pod 信息(在信息中加入了节点绑定配置)
Worker
- Kubelet 服务监听到当前节点被指定了新的 Pod,就根据对象信息实际的运行 Pod
- Pod的网络访问由节点的 Kube-proxy 服务进行 Iptables 的转发规则设定
2.Kubernetes 核心组件
Etcd
Etcd是一种k-v存储仓库,可用于服务发现程序,是 Kubernetes 集群中的重要组件,记录了集群中各种资源对象信息,它除了具备状态存储的功能,还有事件监听和订阅功能,实际Master 上核心组件的通信,并不是互相调用 API 来完成,而是把状态写入 ETCD,其他组件通过监听 ETCD 的状态的的变化(类似订阅消息),然后做后续的处理,然后再一次把更新的数据写入 ETCD
API-Server
类似一个代理,通过标准的 Restful-API 重新封装了对Etcd的接口调用,API-Server 还实现了一些附加功能如身份认证、缓存等,通过调用 API-Server 的相关接口,就可以往 Etcd 中写入数据。
Controller Manager
主要实现任务调度和控制管理,包含多种管理模块,如:
任务:Deployment Controller、DaemonSet Controller,各种任务类型的管理
节点:Node Controller,监控节点信息,若有异常情况,则对节点进行某种操作,如变更节点状态为未就绪(NotReady)
资源:ResourceQuota Controller,判断系统请求资源时是否合法
网络:Endpoints Controller,负责生成和维护所有 Endpoints 对象的控制器。Endpoints 表示了一个 Service 对应的所有 Pod 副本的访
问地址
Scheduler
资源调度服务,Controller-Manager 会把服务对资源的要求,写到 Etcd 中,Scheduler 监听到有新的资源需要调度时,会根据集群的状态,将服务分配到具体的节点上,并将此绑定信息通过 API-Server 写回到 Etcd 中。
3.Kubernetes 特点-可靠性
Kubernetes 工作节点故障服务自愈过程图
在 Kubernetes 上运行的应用服务,会一直保 持期望的实例数量,不会被 Pod 或节点的故障 所中断。如果出现故障,Kubernetes 会创建必要的数量 的服务并分配到健康的节点上,直到系统恢复 ,这一过程用户基本无感知。
4.Kubernetes 特点-服务发现
服务发现过程图
在开发应用服务时,Java 开发人员必须控制服务可用性(就应用是否可以提供服务而言),并确保服务 持续存在,以响应客户端的请求,而没有任何例外。
Kubernetes 的服务发现功能意味着开发人员不再需要自己管理这些东西。
更多推荐
所有评论(0)