- Deployment(部署):
- 特点:适用于无状态应用程序的管理,支持滚动更新、回滚、扩展和自动修复等功能。
- 场景:适用于Web服务、后端API等无状态应用程序。
- 示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: example/image:latest
ports:
- containerPort: 80
```
- StatefulSet(有状态副本集):
- 特点:适用于有状态应用程序,为每个 Pod 分配唯一标识符,提供稳定的网络标识符和持久化存储支持。
- 场景:适用于数据库、队列服务等有状态应用程序。
- 示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: example-statefulset
spec:
replicas: 3
selector:
matchLabels:
app: example-app
serviceName: example-service
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: example/image:latest
ports:
- containerPort: 80
```
- DaemonSet(守护进程集):
- 特点:确保每个节点上运行一个 Pod 的副本,用于在集群中的每个节点上运行后台任务或系统级别的守护进程。
- 场景:适用于日志收集、监控代理等后台任务。
- 示例:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
spec:
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: example/image:latest
ports:
- containerPort: 80
```
- CronJob(定时任务):
- 特点:用于周期性地执行任务,类似于Cron表达式。可以设置任务的调度时间和重试策略。
- 场景:适用于定时备份、数据清理等周期性任务。
- 示例:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: example-cronjob
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: example-container
image: example/image:latest
command: ["echo", "Hello, Kubernetes!"]
```
这些控制器在不同的场景中使用,具体如下:
- Deployment 适用于无状态应用程序,用于快速部署和管理应用程序,例如Web服务、后端API等。
- StatefulSet 适用于有状态应用程序,提供唯一标识符和持久化存储支持,适用于数据库、队列服务等。
- DaemonSet 适用于在每个节点上运行守护进程,适用于日志收集、监控代理等后台任务。
- CronJob 适用于周期性任务,可以按照预定义的时间表执行任务,适用于定时备份、数据清理等周期性任务。
根据具体的应用需求和场景,可以选择适当的控制器来管理和扩展容器化应用程序。