1. 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
```
  1. 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
```
  1. 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
```
  1. 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 适用于周期性任务,可以按照预定义的时间表执行任务,适用于定时备份、数据清理等周期性任务。

根据具体的应用需求和场景,可以选择适当的控制器来管理和扩展容器化应用程序。