Kubernetes架构及核心部件

Kube.NETes有哪些核心部件,架构图和流程图又是怎样的,kubectl和kubelet经常分不清,声明式API和命令式API又有什么区别,本文一一详说 。
1、Kubernetes集群概述1.1、概述Kubernetes 是一个容器编排平台,它使用共享网络将多个主机(物理服务器或虚拟机)构建成集群 。分为 Master Node(主节点)和Worker Node(工作节点),Master负责管理整个集群,Worker 负责接收请求并以Pod(容器集合)形式运行工作负载 。下图为Kubernetes 集群工作模式示意图 。

Kubernetes架构及核心部件

文章插图
Master是集群的网关和中枢,负责为客户端提供API接口调用、确保各资源对象不断地接近用户期望的状态、并以最优的方式调度Pod到指定Node,以及编排其他组件之间的通信等任务,它是客户端访问集群的唯一入口 。生产环境通常部署多个Master,为了冗余和负载均衡 。
Worker Node负责接收来自 Master 下发的指令并相应创建或销毁Pod 对象,以及路由、流量转发等任务 。在生产环境中,随着微服务的增多或者业务应用的扩容,Worker会随之增多 。
概括来说,Kubernetes将所有工作节点的资源(CPU、磁盘、内存、网络等)集合在一起形成了一台更加强大的“服务器”,通过Master上的API接口暴露集群的计算和存储接口,再由 Master通过调度算法将客户端请求的工作负载指派至特定的Node上,并且Master 会自动处理因Worker Node的添加、故障、或移除等变动对 Pod 的影响 。
Kubernetes是构建在底层主机集群之上的“云原生应用操作系统”,而容器是运行在其上的进程 。
Kubernetes架构及核心部件

文章插图
Kubernetes 中每个对象都使用 “名称”作为其唯一标识符,出于名称的隔离和复用、资源隔离的目的,使用“Namespace” 作为作用域 。
1.2、通过声明式API即可在开发云原生应用时,主要使用声明式API,这种方式简单易用,程序员朋友可以更好地集中精力开发业务 。
在运行应用时,用户只需要通过 API声明业务应用的最终状态(例如为 Nginx 应用运行 6个实例等),Kubernetes 便能完成后续的所有任务,包括应用本身的运行实例数量、路由策略、访问策略以及存储等 。
以下为某个声明式yaml的示例,Kubernetes 也支持使用命令行工具 kubectl 提交请求 。
apiVersion: v1kind: Podmetadata:name: busyboxnamespace: testlabels:App: busyboxspec:contAIners:- name: busyboximage: busybox
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
2、Kubernetes 集群架构Kubernetes 属于Server-Client架构,Master  Node主要由API Server(kube-apiserver)、 Controller-Manager(Kube-controller-manager)和 Scheduler(kube-scheduler)这3个组件,以及一个用于存储集群状态的 etcd 存储服务组成,它们构成整个集群的控制平面;
而Worker Node则主要包含 kubelet、kube-proxy及容器运行时(以前Docker是常用的实现)3个组件,它们承载运行各类应用容器 。各组件如下图所示:
Kubernetes架构及核心部件

文章插图
2.1、Master 组件Master是集群的大脑,它维护了Kubernetes 的所有对象记录,负责管理对象状态、并响应集群中各种资源对象的管理操作,以及确保各资源对象的 实际状态 与 所需状态 相匹配 。控制平面各组件及其主要功能如下:
2.1.1、API ServerAPI Server 是Kubernetes 控制平面的前端,支持不同类型应用的生命周期编排,包括部署、缩放和滚动更新等 。它还是整个集群的网关接口,用于接收、校验以及响应所有的REST请求,并将结果状态存储到(etcd)中 。
2.1.2、集群状态存储Kubernetes集群的所有状态信息都需要存储于etcd 中 。etcd 是分布式键值存储,可用于服务发现、共享配置以及一致性保障 (如数据库主节点选择、分布式等) 。
etcd还为其存储的数据提供了监听 (warch)机制,用于监听和推送变更 。API Server是Kubernetes集群中唯一能够与etcd通信的组件,它封装了这种监听机制,并借此同其他各组件高效协同 。这一点类似于多个应用服务器借助zookeeper协同 。
2.1.3、控制器管理器控制器负责实现客户端通过 API Server 提交的请求,它驱动API 对象的当前状态逼近期望状态 。Kubernetes 提供了驱动 Node、Pod 、 Server、Endpoint、ServiceAccount 和 Token 等数十种类型对象的控制器 。


推荐阅读