摘要:在现代云计算和微服务架构的浪潮中,Kubernetes(简称 K8s)已成为容器编排领域的实际标准。它不仅简化了容器化应用的部署、管理和扩展,还为企业构建云原生应用提供了坚实的基础。根据 CNCF(云原生计算基金会)的 2025 年报告,Kubernetes
在现代云计算和微服务架构的浪潮中,Kubernetes(简称 K8s)已成为容器编排领域的实际标准。它不仅简化了容器化应用的部署、管理和扩展,还为企业构建云原生应用提供了坚实的基础。根据 CNCF(云原生计算基金会)的 2025 年报告,Kubernetes 的采用率在全球企业中已超过 70%,成为 DevOps 和云原生生态的核心支柱。然而,Kubernetes 的强大功能背后隐藏着复杂的架构和概念,对于初学者和进阶用户来说,理解其核心概念是掌握这一技术的关键。
Kubernetes 是一个分布式系统,其设计目标是自动化容器化应用的部署、扩展和管理。它采用主从架构(Master-Worker),由控制平面(Control Plane)和工作节点(Worker Node)组成。以下是核心组件的介绍:
控制平面是 Kubernetes 的大脑,负责管理和协调整个集群的状态。核心组件包括:
API Server(kube-apiserver):集群的入口,负责接收和处理所有 RESTful API 请求。它是用户、命令行工具(如 kubectl)以及其他组件与集群交互的桥梁。API Server 还负责验证和存储对象状态到 etcd。etcd:一个分布式键值存储,用于保存集群的所有状态数据,例如节点信息、Pod 配置等。它是 Kubernetes 的“真相之源”(Source of Truth)。调度器(kube-scheduler):负责将 Pod 调度到合适的节点。调度器根据资源需求、硬件约束、亲和性规则等条件选择最佳节点。控制器管理器(kube-controller-manager):运行多个控制器进程,确保集群的实际状态与期望状态一致。例如,副本控制器确保 Pod 的副本数符合预期。云控制器管理器(cloud-controller-manager):与底层云提供商(如 AWS、GCP、Azure)交互,管理云特定的资源,如负载均衡器和存储卷。工作节点是运行容器化应用的地方,每个节点包含以下组件:
Kubelet:节点的代理,负责与控制平面通信,确保 Pod 和容器按预期运行。它监控容器状态并向 API Server 报告。Kube-proxy:管理节点的网络规则,实现服务发现和负载均衡。它通过 iptables 或 IPVS 转发流量到正确的 Pod。容器运行时(Container Runtime):负责运行容器。常见运行时包括 containerd 和 CRI-O,支持 Docker 的 CRI 标准。Kubernetes 生态支持多种插件扩展功能,例如:
DNS:为集群提供内部域名解析。Dashboard:提供 Web 界面管理集群。监控工具:如 Prometheus,用于收集和分析集群性能数据。Kubernetes 使用“声明式”模型,用户通过 YAML 或 JSON 文件定义资源的期望状态,系统自动维护这些状态。以下是核心对象:
Pod 是 Kubernetes 的最小调度单位,通常包含一个或多个容器,这些容器共享网络和存储资源。Pod 具有以下特点:
单一职责:一个 Pod 通常运行一个主要容器,辅以 sidecar 容器(如日志代理)。短暂性:Pod 是临时的,可能因故障或调度被销毁和重建。共享上下文:Pod 内的容器共享 localhost 网络和挂载卷。示例 Pod 定义:
apiVersion: v1kind: Podmetadata: name: my-podspec: containers: - name: my-container image: nginx:latestService 定义了一组 Pod 的逻辑集合,并提供稳定的访问入口。它通过标签选择器(Label Selector)关联 Pod,支持以下类型:
ClusterIP:默认类型,提供集群内部 IP,仅限集群内访问。NodePort:暴露节点端口,外部通过 : 访问。LoadBalancer:集成云提供商的负载均衡器,分配外部 IP。ExternalName:将服务映射到外部 DNS 名称。Ingress 是一种高级路由机制,用于管理外部对集群内服务的 HTTP/HTTPS 访问。它需要 Ingress 控制器(如 nginx Ingress Controller)支持,提供域名路由、SSL 终止等功能。
示例 Ingress 定义:
apiVersion: Networking.k8s.io/v1kind: Ingressmetadata: name: my-ingressspec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80ReplicaSet 确保指定数量的 Pod 副本始终运行。它通过标签选择器管理 Pod,常用于无状态应用。
Deployment 是 ReplicaSet 的高级封装,支持滚动更新和回滚。它是无状态应用的首选控制器。
示例 Deployment 定义:
apiVersion: apps/v1kind: Deploymentmetadata: name: my-deploymentspec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: nginx:1.14StatefulSet 适合有状态应用(如数据库),提供稳定的网络标识和持久存储。每个 Pod 有唯一的名称和顺序。
DaemonSet 确保每个节点运行一个 Pod 副本,常用于日志收集(如 Fluentd)或监控代理。
Job:运行一次性任务,完成后终止。CronJob:按计划周期性运行 Job,类似于 Linux Cron。Kubernetes 的网络模型基于“全互联”原则,确保 Pod 间通信无需 NAT。核心网络概念包括:
每个 Pod 分配一个集群唯一的 IP 地址,Pod 内的容器共享此 IP。Pod 间通信直接使用 IP,无需端口映射。
Service 提供虚拟 IP(ClusterIP),通过 kube-proxy 实现负载均衡。DNS 插件为 Service 分配域名,如 ..svc.cluster.local。
Kubernetes 使用容器网络接口(CNI)实现网络功能。常见插件包括 Flannel、Calico 和 Weave Net,支持不同网络策略和性能优化。
NetworkPolicy 控制 Pod 间的网络流量,支持 ingress 和 egress 规则。例如,限制特定命名空间的访问。
容器是短暂的,数据需要持久化存储。Kubernetes 提供以下存储机制:
Volume 为 Pod 提供存储,生命周期与 Pod 绑定。支持多种类型,如 emptyDir(临时存储)、hostPath(节点本地路径)和云存储(如 AWS EBS)。
2. PersistentVolume(PV)和 PersistentVolumeClaim(PVC)PV:集群级存储资源,由管理员预配置。PVC:用户请求的存储抽象,动态绑定到 PV。示例 PVC 定义:
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: my-pvcspec: accessModes: - ReadWriteOnce resources: requests: storage: 1GiStorageClass 定义动态存储分配规则,简化 PV 创建。云提供商通常提供默认 StorageClass。
RBAC 管理用户和组件的权限,通过 Role 和 ClusterRole 定义规则,绑定到 ServiceAccount 或用户。
自定义资源定义(CRD)允许用户扩展 Kubernetes API,创建特定领域的资源。例如,Prometheus Operator 使用 CRD 管理监控配置。
Operator 是自动化管理复杂应用的模式,结合 CRD 和控制器。例如,MySQL Operator 自动化数据库的部署和备份。
Helm 简化应用部署,通过 Chart 打包 Kubernetes 资源,支持版本管理和依赖管理。
来源:wljslmz一点号