引言
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具有高度的可扩展性和灵活性,能够满足各种容器集群管理的需求。