Kubernetes
Kubernetes(常简称为K8s),是一个开源的容器编排平台,由Google设计,含义是舵手、或领航员容器编排系统。
主要解决以下场景:
1.容器编排
容器编排是K8S的核心功能,主要管理:多个容器的部署、扩展、和操作,以及自动处理容器的创建、删除、和重新分配。
2.自动伸缩
自动伸缩是K8S的核心功能,主要是:根据应用程序的负载情况,自动调整容器实例的数量。
比如:(增加、或减少容器数量)、和垂直扩展(调整容器的资源分配,比如:CPU、和内存)等,自动伸缩。
3.自动化管理
Kubernetes简化了容器化应用程序的部署、管理、和操作流程,比如:通过自动化的方式,可以减少人为操作错误…等场景。
4.自愈能力
比如:通过持续监控容器的健康状态,自动重启崩溃的容器,重新调度失败的容器实例…等场景,确保应用程序的高可用性。
这四大核心功能:使Kubernetes成为一个强大且灵活的容器编排平台,能够有效地简化、和自动化容器化应用程序的管理。
Kubernetes架构
Kubernetes的架构,由多个组件组成,如下图所示:
如下图所示:
整体由两部分构成,分别是:Master节点和Worker节点。
master(主节点)
Master节点,负责:整个集群的状态监控、调度、协调、和配置管理,如下:
- 集群管理:Master节点负责整个Kubernetes集群的管理,协调各个工作节点上的资源分配、和应用程序的部署;
- 调度和分配:根据资源需求和策略,决定将容器部署到哪个工作节点上;
- 控制和监控:持续监控集群的状态,确保应用程序按预期运行,自动处理故障、和异常情况;
- 配置存储:以及,存储、和管理集群的配置信息、状态数据、和元数据。
Master节点,会包含如下核心组件,比如:API Server、Control Manager。。。等。
API Server
API Server充当Kubernetes的前端,所有外部命令(如:通过kubectl发出的命令),都会首先到达API Server。
处理所有REST请求(如kubectl命令),并将其转发到相应的组件。
API Server会验证请求的有效性,将其转换为集群的状态变更,并将其保存到etcd中。
Scheduler
Scheduler负责资源调度,根据容器的资源需求和约束条件,决定将容器部署到哪个节点上。
Controller Manager
Controller Manager运行各种控制器,每个控制器都是一个独立的控制循环,持续监听集群的状态,并根据期望状态和实际状态的差异进行调整。
主要控制器包括:
节点控制器:管理节点的生命周期。
复制控制器:确保指定数量的Pod副本在任何时候都在运行。
端点控制器:填充Service和Pod的端点信息。
命名空间控制器:管理命名空间的创建和删除。
etcd
etcd是一个分布式键值存储,存储整个集群的配置信息、元数据和状态数据。
它是Kubernetes集群的数据库,提供一致性和高可用性的数据存储服务。
Work(工作节点)
Node节点是集群中的工作节点,主要解决:
- 运行容器:Worker节点负责运行分配给它的应用程序容器;
- 资源管理:管理、和分配本节点上的计算资源(CPU、内存、存储…等),确保容器高效运行。
- 网络通信:处理容器之间以及容器与外部世界的网络通信;
- 监控和日志记录:持续监控容器的状态并记录日志,帮助诊断、和解决问题。
主要会涉及到如下组件:
Kubelet
Kubelet是Worker节点上的核心代理,它持续监听来自API Server的指令(如:Pod的创建、更新和删除)。
Kubelet根据这些指令管理容器的生命周期,包括:拉取镜像、启动容器、监控运行状况、和处理终止…等。
Kube-proxy
Kube-proxy负责:实现Kubernetes服务的负载均衡、和网络代理。
比如:Kube-proxy配置网络规则(如:iptables或IPVS),以实现服务的负载均衡和路由。
它维护本地的网络规则,将外部请求正确地路由到集群内的相应容器。
容器运行时(如Docker)
Kubernetes支持多种容器运行时,通过CRI(容器运行时接口)与Kubelet进行通信。
常用的容器运行时,包括:Docker、containerd、CRI-O…等。
负责实际的容器操作,如拉取镜像、创建、和启动容器、管理容器生命周期。
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》