k8s 自动清理完成的 job

需求:自动清理完成的 job

[root@iZbp deploy]# kubectl get node -o wide
NAME                       STATUS   ROLES    AGE   VERSION             INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                                                         KERNEL-VERSION            CONTAINER-RUNTIME
cn-hangzhou.172.24.4.71     Ready    <none>   87d   v1.20.11-aliyun.1   172.24.4.71     <none>        Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)   4.19.91-24.1.al7.x86_64   docker://19.3.15
cn-hangzhou.172.24.4.81     Ready    <none>   87d   v1.20.11-aliyun.1   172.24.4.81     <none>        Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)   4.19.91-24.1.al7.x86_64   docker://19.3.15
cn-hangzhou.172.24.4.154   Ready    <none>   87d   v1.20.11-aliyun.1   172.24.4.154   <none>        Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)   4.19.91-24.1.al7.x86_64   docker://19.3.15
[root@iZbp deploy]#

阿里云的k8s版本信息

[root@iZbp deploy]# kubectl version
Client Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.11-aliyun.1", GitCommit:"88d5e8b", GitTreeState:"", BuildDate:"2021-10-25T13:55:31Z", GoVersion:"go1.15.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.11-aliyun.1", GitCommit:"d966b365d87fb2783deab0d244047d340f1be146", GitTreeState:"clean", BuildDate:"2022-01-19T01:10:01Z", GoVersion:"go1.15.15", Compiler:"gc", Platform:"linux/amd64"}
[root@iZbp10t1lvw1hrjeukfmsyZ deploy]# kubelet --version
Kubernetes v1.20.11-aliyun.1
[root@iZbp deploy]#

注意:1.22.3-aliyun.1 版本的集群测试是支持的 1.20.11-aliyun.1 集群版本不支持 Job 的 .spec.ttlSecondsAfterFinished 字段

所以采用以下的办法实现

代码下载地址

https://github.com/hjacobs/kube-job-cleaner

查看 job 和 cronjob 的版本

[root@iZbp ~]# kubectl api-resources | grep job
cronjobs                          cj               batch/v1beta1                          true         CronJob
jobs                                               batch/v1                               true         Job
[root@iZbp ~]#

rbac.yaml

[root@iZbp deploy]# cat /root/kube-job-cleaner/deploy/rbac.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-job-cleaner
  namespace: kube-job-cleaner

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kube-job-cleaner-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: kube-job-cleaner
  namespace: kube-job-cleaner
roleRef:
  kind: ClusterRole
  name: edit
  apiGroup: ""
[root@iZbp deploy]#

cronjob.yaml

[root@iZbp deploy]# cat /root/kube-job-cleaner/deploy/cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: kube-job-cleaner
  namespace: kube-job-cleaner
  labels:
    application: kube-job-cleaner
    version: "0.1"
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            application: kube-job-cleaner
            version: "0.1"
        spec:
          serviceAccountName: kube-job-cleaner
          restartPolicy: OnFailure
          containers:
          - name: cleaner
            command: ["/cleaner.py","--seconds","10","--namespace","opt-tool"]
            image: "registry.test.cn/exchange/hjacobs/kube-job-cleaner:0.8-2-g5f9c3ab-dirty"
            resources:
              limits:
                cpu: 200m
                memory: 100Mi
              requests:
                cpu: 50m
                memory: 50Mi
          tolerations:
          - effect: NoSchedule
            key: key
            operator: Equal
            value: xsj

部署

kubectl create ns kube-job-cleaner
kubectl apply -f deploy/
# 如果等不急,可以手动出发cronjob
kubectl create job xyz --from=cronjob/kube-job-cleaner -n opt-tool

查看

[root@iZbp ~]# kubectl get cronjob -n kube-job-cleaner
NAME               SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
kube-job-cleaner   * * * * *   False     1        18s             14h
[root@iZbp10t1lvw1hrjeukfmsyZ ~]# kubectl get job -n kube-job-cleaner
NAME                          COMPLETIONS   DURATION   AGE
kube-job-cleaner-1646361420   1/1           3s         2m16s
kube-job-cleaner-1646361480   1/1           3s         76s
kube-job-cleaner-1646361540   1/1           4s         16s
[root@iZbp ~]#

测试

[root@iZbp ~]# cat test-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: test-job
  namespace: opt-tool
spec:
  ttlSecondsAfterFinished: 0
  manualSelector: true
  completions: 6
  parallelism: 3
  selector:
    matchLabels:
      app: counter-pod
  template:
    metadata:
      labels:
        app: counter-pod
    spec:
      restartPolicy: Never
      containers:
      - name: counter
        image: busybox:1.30
        command: ["bin/sh","-c","for i in 3 2 1; do echo $i;sleep 3;done"]
      tolerations:
      - effect: NoSchedule
        key: key
        operator: Equal
        value: xsj
[root@iZbp ~]#

窗口1:试验结果

[root@iZbp ~]# kubectl apply -f test-job.yaml
job.batch/test-job created
[root@iZbp ~]# kubectl get pod -n opt-tool -w
NAME                                          READY   STATUS    RESTARTS   AGE
airflow-6f76598ddf-r666r                      2/2     Running   0          3d14h
database-mysql-0                              1/1     Running   0          3d15h
test-job-khs8j                                1/1     Running   0          8s
test-job-n9qmc                                1/1     Running   0          8s
test-job-zqm9b                                1/1     Running   0          8s
test-job-zqm9b                                0/1     Completed   0          11s
test-job-2z7d5                                0/1     Pending     0          0s
test-job-2z7d5                                0/1     Pending     0          0s
test-job-khs8j                                0/1     Completed   0          11s
test-job-22xnz                                0/1     Pending     0          0s
test-job-22xnz                                0/1     Pending     0          0s
test-job-n9qmc                                0/1     Completed   0          11s
test-job-2b85t                                0/1     Pending     0          0s
test-job-2z7d5                                0/1     ContainerCreating   0          0s
test-job-2b85t                                0/1     Pending             0          0s
test-job-22xnz                                0/1     ContainerCreating   0          0s
test-job-2b85t                                0/1     ContainerCreating   0          0s
test-job-2z7d5                                1/1     Running             0          1s
test-job-2b85t                                1/1     Running             0          1s
test-job-22xnz                                1/1     Running             0          1s
test-job-22xnz                                0/1     Completed           0          10s
test-job-2z7d5                                0/1     Completed           0          10s
test-job-2b85t                                0/1     Completed           0          10s

窗口2:pod 跑完就自动删除了

[root@iZbp ~]# kubectl get pod -n opt-tool
NAME                                          READY   STATUS    RESTARTS   AGE
airflow-6f76598ddf-r666r                      2/2     Running   0          3d15h
database-mysql-0                              1/1     Running   0          3d15h
[root@iZbp ~]#
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在将xxl-job部署到Kubernetes(k8s)时,有一些背景和目标需要注意。当你的Java服务部署到K8S后,xxl-job的任务调度器需要对注册上来的执行器进行健康检测,而执行器的注册地址是Pod的IP地址。因此,任务调度器需要能够访问执行器的网络,这意味着xxl-job的任务调度器和执行器必须在同一个网络下并且能够相互通信。 为了实现这个目标,你可以按照之前的devops系列文章中的详细部署步骤进行操作,并根据需要修改xxl-job的源码、编写Dockerfile、在Jenkins创建Job、编写argocd-helm-yaml、在argocd创建Application,并创建xxl-job的数据库并执行相应的脚本。 在具体部署过程中,你需要注意一些细节。例如,你可以部署多个xxl-job的Pod节点以支持集群模式,并使用Service地址对外提供服务,可以选择NodePort或LoadBalancer方式。此外,你还可以替代官方推荐的集群模式,不再需要使用Nginx等组件来代理多个xxl-job任务调度器。最后,确保在K8S内部的Java服务能够正常地使用处于同一网络下的xxl-job来执行任务调度。 另外,部署过程中还可以执行一些其他操作,比如部署xxl-job-read-log服务,并在配置文件中设置xxl.job.read.log.path参数以指定执行日志的统一路径。同时,配置流量转发将/xxl-job-admin/joblog/logDetailCat请求转发到xxl-job-read-log服务,以实现随时查看执行日志的功能。 总之,在将xxl-job部署到k8s时,需要确保任务调度器和执行器在同一网络下,并能够相互通信。你可以按照上述步骤进行部署,并根据需要进行相应的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [k8s部署xxl-job分布式任务调度服务](https://blog.csdn.net/zhuganlai168/article/details/132054392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [解决k8s中xxl-job执行器pod重建后无法读取到执行日志的问题](https://download.csdn.net/download/iam098/88250428)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值