Kubernetes - 实战:Deployment、DaemonSet、Job、CronJob等各控制器介绍及演示

在 Kubernetes 中,控制器(Controller)是用来确保集群中 Pod 状态与期望状态一致的管理组件。以下是对 Deployment、DaemonSet、Job 和 CronJob 控制器的介绍及演示:

1. Deployment

简介
Deployment 是用于管理无状态应用程序的控制器,它负责创建、更新和回滚 Pod 的集合。Deployment 会维护一个或多个副本(ReplicaSets),确保任何时候都有指定数量的 Pod 正在运行。

实战演示
创建一个 Deployment,管理 3 个 nginx Pod 的副本:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19.10
        ports:
        - containerPort: 80

执行创建命令:

kubectl apply -f nginx-deployment.yaml

2. DaemonSet

简介
DaemonSet 确保在每个(或选定的)节点上运行一个 Pod 的副本。主要用于运行守护进程,如日志收集器、监控代理等,这些进程需要在集群的每个节点上运行一个实例。

实战演示
创建一个在每个节点上运行 fluentd 日志收集器的 DaemonSet:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-daemonset
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd:v1.12.4-debian-1.0
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log

执行创建命令:

kubectl apply -f fluentd-daemonset.yaml

3. Job

简介
Job 是一种控制器,用于运行一次性任务,确保任务完成后 Pod 会被清理。Job 确保某个任务只执行一次,或者在一定时间内执行固定次数。

实战演示
创建一个仅执行一次的任务 Job,运行一个打印欢迎消息的 Bash 脚本:

apiVersion: batch/v1
kind: Job
metadata:
  name: welcome-job
spec:
  completions: 1
  parallelism: 1
  backoffLimit: 4
  template:
    spec:
      containers:
      - name: welcome-container
        image: ubuntu
        command: ["bash", "-c", "echo 'Welcome to Kubernetes!' && sleep 10"]
      restartPolicy: OnFailure

执行创建命令:

kubectl apply -f welcome-job.yaml

4. CronJob

简介
CronJob 是基于时间计划触发 Job 的控制器,类似于 Unix cron 系统实用程序,用于定期执行任务。

实战演示
创建一个每天凌晨 1 点执行的 CronJob,运行一个清理日志目录的脚本:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: log-cleanup
spec:
  schedule: "0 1 * * *" # 每天凌晨1点执行(Cron 表达式)
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: log-cleaner
            image: alpine
            command: ["sh", "-c", "rm -rf /logs/*.log"] # 假设容器内有/logs目录
          restartPolicy: OnFailure

执行创建命令:

kubectl apply -f log-cleanup-cronjob.yaml

以上四个控制器均可以通过 kubectl 命令行工具进行管理,如查看状态、更新配置、删除等操作。通过这些控制器,Kubernetes 可以有效地管理各种类型的容器化应用。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值