mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-04-15 20:55:24 +00:00
Add StatefulSet DaemonSet Job CronJob sections
This commit is contained in:
@@ -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 的命令行工具,用于与集群进行交互。常用命令如下:
|
||||
|
||||
|
||||
@@ -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 使用的分布式存储
|
||||
|
||||
Reference in New Issue
Block a user