好的,这是一个非常核心的问题。Kubernetes (K8S) 是一个庞大的系统,但其设计理念是围绕一组精心设计的基础概念构建的。理解这些概念是掌握 K8S 的关键。
以下是 Kubernetes 中最核心和相关的基础概念,可以分为以下几类:
一、集群架构相关概念
这些概念描述了 K8S 集群的物理和逻辑组成。
-
Cluster (集群):
- 一组节点(Node) 的集合,是所有计算、网络、存储资源的池化。K8S 管理的就是一个集群。
-
Node (节点):
- 集群中的一台工作机器,可以是物理机或虚拟机。
- 每个节点由 Control Plane 管理。
- 节点上运行着两个关键进程:
kubelet
:与 Control Plane 通信的代理,负责管理本节点上的 Pod 和容器。kube-proxy
:维护节点上的网络规则,实现 Service 的网络代理和负载均衡。
-
Control Plane (控制平面 / Master节点):
- 集群的“大脑”,负责管理集群的全局决策(例如调度)以及检测和响应集群事件。
- 核心组件包括:
kube-apiserver
:集群的唯一入口,所有内部、外部请求都必须通过它,是 RESTful API 的前端。etcd
:一个分布式的、高可用的键值存储数据库,用于持久化存储集群的所有配置数据和状态(即“唯一信源”)。kube-scheduler
:负责监视新创建的、未分配节点的 Pod,并选择最适合的节点来运行它们。kube-controller-manager
:运行着多种控制器的守护进程,这些控制器处理着集群中的常规任务(例如节点故障、Pod 复制等)。cloud-controller-manager
:用于与底层云提供商(如 AWS, GCP, Azure)的 API 交互。
二、工作负载相关概念
这些概念定义了如何在集群中运行和管理的应用程序。
-
Pod:
- K8S 最小、最简单的部署和管理单元。
- 一个 Pod 包含一个或多个紧密耦合的容器,它们共享网络命名空间、IP 地址、端口空间和存储卷。Pod 是容器的“逻辑主机”。
- Pod 是短暂的(ephemeral),会被频繁地创建和销毁。
-
Controller (控制器):
- 用于管理 Pod 的生命周期,确保集群的当前状态符合用户声明的期望状态。它们是 K8S 自动化能力的核心。
- 主要类型:
- Deployment:最常用的控制器,用于部署无状态应用,管理 Pod 的多个副本,并提供滚动更新和回滚功能。
- ReplicaSet:确保指定数量的 Pod 副本始终运行。Deployment 通过管理 ReplicaSet 来实现其功能。
- StatefulSet:用于部署有状态应用(如数据库),为 Pod 提供稳定的网络标识符和持久化存储。
- DaemonSet:确保所有(或部分)节点上都运行一个 Pod 的副本,常用于运行节点级别的守护进程(如日志收集器、网络插件)。
- Job:创建一个或多个 Pod 并确保它们成功运行至完成,用于一次性任务。
- CronJob:基于时间表来运行 Job,用于周期性任务。
三、网络相关概念
这些概念定义了 Pod 之间以及外部如何与服务通信。
-
Service:
- 一个抽象的 way to 暴露一组运行在 Pod 上的应用程序为一个网络服务。
- 为解决 Pod 是动态(IP 不固定)的问题而设计。Service 提供一个稳定的 IP 地址、DNS 名称和端口。
- 核心类型:
- ClusterIP:默认类型,为 Service 分配一个集群内部可访问的虚拟 IP。
- NodePort:在每个节点的 IP 上暴露一个静态端口(NodePort),从而可以从集群外部访问该 Service。
- LoadBalancer:使用云提供商的负载均衡器向外部暴露 Service。(是 NodePort 的扩展)
-
Ingress:
- 不是一种 Service,而是管理外部访问集群内服务的 API 对象,通常提供 HTTP/HTTPS 路由。
- 功能更强大,可以提供基于域名和路径的路由、SSL/TLS 终止等功能。通常需要一个 Ingress Controller(如 Nginx, Traefik)来实现。
四、存储与配置相关概念
这些概念允许向应用提供存储资源和配置信息。
-
Volume (存储卷):
- 抽象了 Pod 中容器可访问的存储。Pod 中所有容器可以共享卷。
- 生命周期与 Pod 绑定,Pod 消失,卷通常也会消失。
-
PersistentVolume (PV) / PersistentVolumeClaim (PVC):
- PersistentVolume (PV):集群中的一块网络存储资源,由管理员预先配置,或使用 StorageClass 动态配置。
- PersistentVolumeClaim (PVC):用户对存储的请求。Pod 通过 PVC 来申请和使用 PV。PVC 将 Pod 与特定的存储细节解耦。
-
ConfigMap:
- 用于将非机密性的配置数据(如配置文件、环境变量、命令行参数)与 Pod 解耦,实现应用配置的灵活管理。
-
Secret:
- 类似于 ConfigMap,但专门用于存储敏感信息,如密码、OAuth 令牌、SSH 密钥。数据会以 base64 编码(非加密,需配合其他安全措施)存储。
五、元数据与组织概念
-
Namespace (命名空间):
- 在物理集群内提供的虚拟集群或逻辑隔离。用于将资源分组到不同的项目中(如开发、测试、生产),实现资源配额和权限管理。
kube-system
,default
,kube-public
是默认的命名空间。
-
Label (标签) 和 Selector (选择器):
- Label:附加到对象(如 Pod)上的键值对,用于标识对象的特征,但不提供唯一性。例如
environment: production
,app: frontend
。 - Selector:客户端可以通过选择器来筛选和识别一组具有特定 Label 的对象。这是 Controller 和 Service 找到其管理对象的核心机制。
- Label:附加到对象(如 Pod)上的键值对,用于标识对象的特征,但不提供唯一性。例如
总结关系图
下图展示了这些核心概念是如何协同工作的:
flowchart TDsubgraph Cluster[Kubernetes Cluster]direction TBCP[Control Plane<br>集群大脑]NS[Namespace: default]subgraph NSDeployment -.-> |管理| ReplicaSetReplicaSet -.-> |管理| PodsPods --> |运行| ContainerSvc[Service<br>稳定IP/DNS] --> |负载均衡| PodsIngress --> |路由规则| SvcPVC[PersistentVolumeClaim] --> |申请| PV[PersistentVolume]Pods --> |挂载卷| PVCPods --> |引用| CM[ConfigMap]Pods --> |引用| SecretendCP --> |调度与管理| NSendUser --> |通过kubectl操作| CPExternalUser[外部用户] --> |通过公网IP访问| Ingress
理解这些基础概念及其相互关系,是进一步学习和高效使用 Kubernetes 的坚实基础。建议在实际操作中反复体会它们的作用。