k8s CronJob定时删除es索引

文章介绍了一个使用KubernetesCronJob来定期清理Elasticsearch(ES)中18天前的日志索引的方法,旨在解决因容器日志过大导致ES磁盘空间不足的问题。配置中定义了一个定时任务,每天9点10分执行,删除指定格式的旧索引,从而实现日志管理的自动化,减少手动操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、公司es用来做EFK存容器日志,但是容器日志过于庞大,es磁盘空间动不动就满了,经常需要登录es机器手动去调es接口删除历史索引,过于繁琐

2、本着能懒就懒的原则,做一个一劳永与的操作,更改灵活就解放双手了,美滋滋

3、废话不多说,直接上yaml

  • 关键词: k8s、cronjob、es index
#设置定时删除es索引pod
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: es-delete-job
  namespace: xxxx
spec:
  schedule: "10 1 * * *"    #定时时间,注意时区,所以这里+8h,所以早上9点10执行
  successfulJobsHistoryLimit: 1   #最大保留成功的pod
  failedJobsHistoryLimit: 0
  startingDeadlineSeconds: 30     #下一个pod会在30s后把上一个pod删了,保留自己
  concurrencyPolicy: Forbid       #禁止并发
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: es-delete-job
            image: ubuntu:23.04   #这里随便选了个镜像,有curl命令即可
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - |
              curl -XDELETE --user elastic:xxxxx  -s  "http://es-log:9200/xxx-$(date  +"%Y.%m.%d" -d "18 days ago")"  #es地址、密码、删除18天前的索引名称,索引开头为xxx
              curl -XDELETE --user elastic:xxxxx  -s  "http://es-log:9200/aaaaaa-$(date  +"%Y.%m.%d" -d "18 days ago")"
          restartPolicy: OnFailure
<think>嗯,用户想了解Kubernetes CronJob的用法和配置示例。首先,我需要回忆一下CronJob的基本概念。CronJobKubernetes中用于定时任务,类似于Linux的cron,但管理的是容器化的任务。用户可能需要知道如何创建、配置以及常见问题的解决方法。 首先,我应该解释什么是CronJob,以及它的作用。然后,给出一个基本的配置示例,用YAML文件展示。这里需要注意字段的说明,比如schedule、jobTemplate、concurrencyPolicy等。用户可能需要了解如何设置定时表达式,如何处理并发任务,比如是否允许同时运行多个Job实例。 接下来,需要考虑用户可能遇到的问题,例如任务不执行、Job重复创建或者资源不足。这时候要给出排查步骤,比如检查CronJob状态、查看Pod日志等。还要提醒用户注意时区设置,默认是UTC,可能需要调整。 然后,生成相关问题,这部分要涵盖CronJob的高级配置、与普通Job的区别、监控方法、调试技巧以及最佳实践。这些问题应该能帮助用户更深入地理解和使用CronJob。 需要确保回答结构清晰,分步骤说明,并且配置示例正确。另外,引用格式要正确,虽然用户没有提供引用来源,但按照系统指令,可能需要假设有相关引用。不过示例中没有引用标识,可能需要检查是否符合用户的要求。最后,确保使用中文,语法正确,数学公式格式正确,不过这里可能涉及较少数学内容,主要集中在代码和配置上。</think>### Kubernetes CronJob 使用指南及配置示例 #### 1. CronJob 基础概念 Kubernetes CronJob 用于在集群中定时执行任务,类似于 Linux 系统的 cron 服务。它通过定义时间表达式(Cron格式)触发 Job 资源的创建,从而运行容器化任务[^1]。 #### 2. 核心配置字段 ```yaml apiVersion: batch/v1 kind: CronJob metadata: name: my-cronjob spec: schedule: "*/5 * * * *" # 每5分钟执行一次 concurrencyPolicy: Forbid # 禁止并发执行 startingDeadlineSeconds: 60 # 启动截止时间 jobTemplate: # Job模板定义 spec: template: spec: containers: - name: task-container image: busybox command: ["/bin/sh", "-c", "date; echo Hello Kubernetes"] restartPolicy: OnFailure ``` #### 3. 关键参数解析 - **schedule**: 使用5字段 Cron 表达式: $$ \text{分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-6)} $$ 例如 `"0 3 * * 1"` 表示每周一3:00执行 - **concurrencyPolicy**: - `Allow`(默认):允许并发 - `Forbid`:跳过新任务 - `Replace`:替换正在运行的任务 - **successfulJobsHistoryLimit**: 保留成功Job记录数(默认3) - **failedJobsHistoryLimit**: 保留失败Job记录数(默认1) #### 4. 常见问题排查 **问题:任务未按计划执行** 1. 检查CronJob状态: ```bash kubectl get cronjob my-cronjob kubectl describe cronjob my-cronjob ``` 2. 查看控制器日志: ```bash kubectl logs -n kube-system <cronjob-controller-pod> ``` **问题:Job重复创建** - 确认时区设置(默认UTC),可通过修改容器时区: ```yaml env: - name: TZ value: Asia/Shanghai ``` #### 5. 生产实践建议 - 设置合理的资源请求/限制 - 配置活跃期限(`activeDeadlineSeconds`) - 结合 Prometheus 监控任务执行状态 - 使用 `kubectl debug` 调试失败任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值