From 6668bfd7b3ec88a0e5c1617f1ede8e347c82b4ae Mon Sep 17 00:00:00 2001 From: yeasy Date: Sat, 4 Apr 2026 15:28:42 -0700 Subject: [PATCH] Add StatefulSet DaemonSet Job CronJob sections --- 13_kubernetes_concepts/13.2_concepts.md | 126 ++++++++++++++++++++++-- 13_kubernetes_concepts/summary.md | 7 +- 2 files changed, 125 insertions(+), 8 deletions(-) diff --git a/13_kubernetes_concepts/13.2_concepts.md b/13_kubernetes_concepts/13.2_concepts.md index 91e8ec7..4499702 100644 --- a/13_kubernetes_concepts/13.2_concepts.md +++ b/13_kubernetes_concepts/13.2_concepts.md @@ -178,7 +178,121 @@ Deployment 的核心能力包括: > 早期 Kubernetes 使用 Replication Controller (RC) 来管理副本,现已被 ReplicaSet/Deployment 取代。 -### 13.2.4 服务 +### 13.2.4 StatefulSet + +Deployment 适合无状态应用,而 **StatefulSet** 用于管理有状态应用(如数据库、消息队列)。与 Deployment 不同,StatefulSet 为每个 Pod 提供稳定的网络标识和持久化存储。 + +```yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mysql +spec: + serviceName: mysql + replicas: 3 + selector: + matchLabels: + app: mysql + template: + metadata: + labels: + app: mysql + spec: + containers: + - name: mysql + image: mysql:8.0 + volumeMounts: + - name: data + mountPath: /var/lib/mysql + volumeClaimTemplates: + - metadata: + name: data + spec: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 10Gi +``` + +StatefulSet 的核心特性: + +* **稳定的网络标识**:Pod 名称按顺序编号(mysql-0, mysql-1, mysql-2),配合 Headless Service 提供可预测的 DNS 名称 +* **有序部署与删除**:Pod 按序号顺序创建,逆序删除 +* **持久化存储**:通过 `volumeClaimTemplates` 为每个 Pod 自动创建独立的 PVC + +### 13.2.5 DaemonSet + +**DaemonSet** 确保在集群的每个节点(或指定节点)上运行一个 Pod 副本。典型用途包括日志收集、监控代理和网络插件。 + +```yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: fluentd +spec: + selector: + matchLabels: + app: fluentd + template: + metadata: + labels: + app: fluentd + spec: + containers: + - name: fluentd + image: fluent/fluentd:v1.17 + volumeMounts: + - name: varlog + mountPath: /var/log + volumes: + - name: varlog + hostPath: + path: /var/log +``` + +当新节点加入集群时,DaemonSet 会自动在该节点上创建 Pod;当节点被移除时,对应的 Pod 也会被回收。 + +### 13.2.6 Job 与 CronJob + +**Job** 用于运行一次性任务,确保指定数量的 Pod 成功完成后自动退出。**CronJob** 则按照 cron 表达式周期性地创建 Job。 + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: data-migration +spec: + completions: 1 + template: + spec: + containers: + - name: migrate + image: myapp/migrate:latest + command: ["python", "migrate.py"] + restartPolicy: Never + backoffLimit: 3 +``` + +```yaml +apiVersion: batch/v1 +kind: CronJob +metadata: + name: daily-backup +spec: + schedule: "0 2 * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: backup + image: myapp/backup:latest + restartPolicy: OnFailure +``` + +Job 的 `backoffLimit` 控制失败重试次数,`completions` 指定需要成功完成的 Pod 数量。CronJob 适用于定时备份、报表生成等场景。 + +### 13.2.7 服务 服务 (Service) 定义了一组 Pod 的逻辑集合和访问策略。由于 Pod 的 IP 地址是动态分配的,Service 提供了一个稳定的访问入口。 @@ -203,7 +317,7 @@ spec: | **NodePort** | 在每个节点上开放固定端口,集群外部可通过 `节点IP:端口` 访问 | | **LoadBalancer** | 通过云平台的负载均衡器暴露服务 | -### 13.2.5 卷 +### 13.2.8 卷 卷 (Volume) 为 Pod 中的容器提供持久化存储。Kubernetes 支持多种卷类型: @@ -216,7 +330,7 @@ spec: 生产环境中,推荐使用 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来管理存储,实现存储资源与使用者的解耦。 -### 13.2.6 标签 +### 13.2.9 标签 标签 (Label) 是附加到 Kubernetes 对象上的键值对,用于组织和选择对象子集。标签是 Kubernetes 中实现松耦合的关键机制。 @@ -229,7 +343,7 @@ $ kubectl get pods -l env=production ``` Service、Deployment 等资源都通过标签选择器 (`selector`) 来关联目标 Pod。 -### 13.2.7 API 访问控制 +### 13.2.10 API 访问控制 Kubernetes API 的访问通过三个阶段进行控制: @@ -237,11 +351,11 @@ Kubernetes API 的访问通过三个阶段进行控制: 2. **授权 (Authorization)**:判断请求者是否有权限执行操作(通常使用 RBAC) 3. **准入控制 (Admission Control)**:在请求被持久化之前对其进行校验或修改 -### 13.2.8 Dashboard +### 13.2.11 Dashboard Kubernetes Dashboard 是一个基于 Web 的用户界面,用于部署容器化应用、监控集群资源和排查问题。Dashboard 的部署方法详见[部署 Dashboard](../14_kubernetes_setup/14.7_dashboard.md) 章节。 -### 13.2.9 命令行工具 kubectl +### 13.2.12 命令行工具 kubectl `kubectl` 是 Kubernetes 的命令行工具,用于与集群进行交互。常用命令如下: diff --git a/13_kubernetes_concepts/summary.md b/13_kubernetes_concepts/summary.md index 213634e..53f20cb 100644 --- a/13_kubernetes_concepts/summary.md +++ b/13_kubernetes_concepts/summary.md @@ -5,14 +5,17 @@ Kubernetes 是当前最主流的容器编排平台,其声明式管理模型和 | 概念 | 要点 | |------|------| | **Pod** | 最小调度单位,包含一组共享网络和存储的容器 | -| **Deployment** | 管理 Pod 副本集,支持滚动更新和回滚 | +| **Deployment** | 管理无状态应用的 Pod 副本集,支持滚动更新和回滚 | +| **StatefulSet** | 管理有状态应用,提供稳定的网络标识和持久化存储 | +| **DaemonSet** | 确保每个节点运行一个 Pod 副本,适用于日志、监控等场景 | +| **Job/CronJob** | 运行一次性或定时任务,确保任务成功完成 | | **Service** | 为 Pod 提供稳定的网络访问入口和负载均衡 | | **Namespace** | 资源隔离和多租户支持 | | **ConfigMap/Secret** | 配置与敏感信息的管理 | | **Master 节点** | 运行 API Server、Scheduler、Controller Manager | | **Worker 节点** | 运行 kubelet、kube-proxy 和容器运行时 | -### 13.6.1 延伸阅读 +### 延伸阅读 - [部署 Kubernetes](../14_kubernetes_setup/README.md):搭建 Kubernetes 集群 - [Etcd](../15_etcd/README.md):Kubernetes 使用的分布式存储