Kubernetes 详解笔记
1. 概述
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 设计和开发,目前由云原生计算基金会(CNCF)维护。Kubernetes 的目标是简化容器化应用程序的部署和管理,提高资源利用率,并支持大规模分布式系统的运行。
2. 核心概念
2.1 Pod
Pod 是 Kubernetes 中最小的部署单元,可以包含一个或多个容器。这些容器共享网络、存储和生命周期。Pod 内的容器可以相互通信,而无需通过网络。
2.2 Service
Service 是一种抽象资源,用于定义一组 Pod 的逻辑集合和访问策略。它允许外部流量访问 Pod,同时隐藏 Pod 的具体实现细节。
2.3 Deployment
Deployment 是一种控制器,用于管理 Pod 的副本数量和更新策略。它确保指定数量的 Pod 副本始终,并运行支持滚动更新。
2.4 Node
Node 是 Kubernetes 集群中的一个工作机器,可以是物理机或虚拟机。每个 Node 上运行着 kubelet、容器运行时(如 Docker 或 containerd)等组件。
2.5 Cluster
Cluster 是由多个 Node 组成的集群,用于运行容器化应用程序。集群由控制平面(Control Plane)和工作节点(Worker Nodes)组成。
3. 核心组件
3.1 控制平面组件
控制平面是 Kubernetes 集群的“大脑”,负责集群的管理和调度,主要组件包括:
-
API Server:提供 RESTful 接口,用于集群管理操作,如创建、更新和删除资源。它是集群的通信中心。
-
etcd:分布式键值存储,用于持久化集群状态。
-
Controller Manager:运行控制器进程,如节点控制器、副本控制器等。
-
Scheduler:负责决定将 Pod 分配到哪个 Node 上运行。
3.2 工作节点组件
工作节点是运行应用程序容器的机器,主要组件包括:
-
Kubelet:在每个 Node 上运行,负责管理 Pod 和容器的生命周期。
-
Kube-proxy:网络代理,用于实现 Service 的网络转发。
-
Container Runtime:容器运行时,如 Docker 或 containerd。
4. 运行原理
Kubernetes 采用主从架构,由控制平面(Master)和工作节点(Worker Nodes)组成。以下是其运行原理的详细说明:
4.1 控制平面的工作原理
控制平面的核心组件协同工作,确保集群的正常运行:
-
API Server:作为集群的入口,接收来自用户或内部组件的请求,并将资源状态存储到 etcd。
-
Controller Manager:运行各种控制器,如 ReplicaSet Controller、Deployment Controller 等,确保集群的实际状态与期望状态一致。
-
Scheduler:监控待调度的 Pod,并根据资源需求和调度策略将 Pod 分配到合适的 Node 上。
4.2 工作节点的工作原理
工作节点上的组件负责容器的运行和管理:
-
Kubelet:监控 Node 上的 Pod,确保容器按照定义运行。
-
Kube-proxy:维护网络规则,实现 Pod 之间的通信和负载均衡。
-
容器运行时:负责容器的生命周期管理,包括创建、启动、停止和销毁。
5. 工作过程
Kubernetes 的工作过程可以总结为以下几个步骤:
-
用户提交请求:用户通过
kubectl
提交资源定义(如 Deployment)到 API Server。 -
资源状态存储:API Server 将资源状态存储到 etcd。
-
控制器监控资源变化:Controller Manager 中的控制器(如 ReplicaSet Controller)监控资源变化,并创建或管理 Pod。
-
Pod 调度:Scheduler 监控未分配的 Pod,并根据资源需求和调度策略将 Pod 分配到合适的 Node。
-
容器启动:Kubelet 在 Node 上接收 Pod 定义,并通过容器运行时启动容器。
-
网络通信:Kube-proxy 确保 Pod 之间的网络通信和负载均衡。
6. 网络模型
Kubernetes 使用 CNI(容器网络接口)插件来管理集群网络。常见的 CNI 插件包括 Calico、Flannel 等。这些插件负责为 Pod 分配 IP 地址,并确保 Pod 之间可以相互通信。
7. 安全与扩展性
7.1 安全性
Kubernetes 提供了多种安全机制,包括:
-
RBAC(基于角色的访问控制):用于控制用户对集群资源的访问。
-
网络策略:通过 CNI 插件实现 Pod 之间的网络隔离。
-
安全上下文:为 Pod 和容器设置安全策略。
7.2 扩展性
Kubernetes 支持水平扩展和垂直扩展:
-
水平扩展:通过增加 Pod 或 Node 的数量。
-
垂直扩展:通过增加 Node 的资源(如 CPU 或内存)
8. 使用场景
Kubernetes 广泛应用于以下场景:
-
微服务架构:管理微服务的部署和扩展。
-
CI/CD 流水线:支持持续集成和持续部署。
-
混合云和多云环境:统一管理不同云平台上的资源。