引言

K8s架构图

graph LR
A[用户请求] --> B{API Server}
B --> C{etcd}
C --> D[Scheduler]
D --> E[Pod]
E --> F[Node]
F --> G{Kubelet}
G --> H[Container Runtime]
H --> I[Pod]
I --> J{Service}
J --> K{LoadBalancer}
K --> L[外部访问]

架构图解析

1. 用户请求

用户请求通过API Server发起,这是K8s集群的统一入口点。用户可以通过API Server进行资源的增删改查操作。

2. API Server

API Server是集群的协调者,提供RESTful API接口服务。它负责处理所有对象资源的增删改查和监听操作,并将请求转发给etcd。

3. etcd

etcd是一个分布式键值存储系统,用于保存集群状态数据,如Pod、Service等对象信息。它是K8s集群的“大脑”,负责存储和管理集群配置信息。

4. Scheduler

Scheduler负责为新创建的Pod选择一个最优的Node节点。它可以部署在同一个节点上,也可以部署在不同的节点上。

5. Pod

Pod是K8s中最基本的调度单元,它包含一个或多个容器。Pod在Node上运行,由Kubelet管理。

6. Node

Node是集群中的物理或虚拟机,负责运行Pod。每个Node都运行着Kubelet进程,用于与Master节点通信。

7. Kubelet

Kubelet是运行在Node上的一个组件,负责监控Pod的状态,并确保Pod按照预期运行。它还负责启动和停止Pod中的容器。

8. Container Runtime

Container Runtime负责运行容器,如Docker或rkt。它负责容器的启动、停止、重启和销毁。

9. Service

Service是一个抽象层,它定义了一组Pod的逻辑集合。Service负责将请求转发到后端的Pods。

10. LoadBalancer

LoadBalancer是一个负载均衡器,它将外部流量分配到后端的Pods。它可以是云服务提供商提供的负载均衡器,也可以是自建的负载均衡器。

11. 外部访问

外部访问是指从集群外部访问Pods的流量。这可以通过LoadBalancer或NodePort实现。

总结

K8s架构的核心奥秘在于其模块化设计,将集群管理分解为一系列独立的组件。这种设计使得K8s具有高度的可扩展性和灵活性,能够满足各种容器集群管理的需求。