在K8S中,如何让Pod运行一次?如何解决一次性任务?

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 在K8S中,如何让Pod运行一次?如何解决一次性任务?

在Kubernetes(K8S)中,要让Pod运行一次并完成一次性任务,可以使用Job资源。Job是Kubernetes中用于运行一次性任务的工作负载API对象。它创建一个或多个Pod,并确保指定数量的Pod成功终止。当Pod成功完成后,Job将跟踪成功完成的情况。当达到指定的成功完成次数时,任务(即Job)就完成了。

以下是如何使用Job来运行一次性任务的步骤:

  1. 创建Job资源配置文件
    创建一个YAML文件(例如job.yaml),其中包含Job的配置信息。指定apiVersion为batch/v1,kind为Job,并定义Job的元数据(metadata)和规格(spec)。
apiVersion: batch/v1
kind: Job
metadata:
name: my-one-time-job
spec:
completions: 1 # 指定需要成功完成的任务数量,默认为1
parallelism: 1 # 指定并发运行的任务数量,默认也为1,即一次仅运行一个Pod
backoffLimit: 4 # 在Pod重试失败后放弃任务前的最大重试次数,默认为6
template:
spec:
restartPolicy: OnFailure # 对于一次性任务,推荐设置为OnFailure,这样只有任务失败时才会重试
containers:
- name: my-container
image: my-image:latest
command: ["./run-my-task.sh"] # 执行脚本或命令,这里假设有一个运行一次性任务的脚本
  1. 应用Job资源配置
    使用kubectl apply -f job.yaml命令来创建Job。
kubectl apply -f job.yaml
  1. 这将创建一个Job资源,Kubernetes将启动一个或多个Pod来执行该Job。
  2. 检查Job状态
    使用kubectl get jobs命令来查看Job的状态。
kubectl get jobs
  1. 当Job成功完成时,你将看到类似于COMPLETIONSSUCCESSFUL都为1的状态。
  2. 清理
    一旦Job成功完成,你可以选择删除Job资源以清理它。
kubectl delete job my-once-off-job
  1. 如果你不希望手动删除Job,也可以设置TTL(Time-To-Live)策略,让Job在一定时间后自动删除。

综上所述,一旦Job创建成功,Kubernetes会根据parallelismcompletions设置创建并运行Pod。当Pod完成任务并退出(正常退出码0)时,Job会被视为已完成。如果Pod因为某种原因未能成功完成任务(非零退出码),Job控制器将会根据backoffLimit设置重试Pod,直到达到最大重试次数或者任务成功完成。若只需要运行单个Pod完成一次性任务,以上配置即可满足需求。如果需要并行运行多个Pod来加速任务执行,只需适当调整parallelism值即可。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
13天前
|
Kubernetes API 调度
k8s中节点无法启动Pod
【10月更文挑战第3天】
50 6
|
20天前
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
13天前
|
存储 Kubernetes Perl
K8S中Pod启动异常
【10月更文挑战第3天】
28 2
|
16天前
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
20天前
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
|
20天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA策略应用案例
|
16天前
|
JSON Kubernetes API
在K8S中,什么是静态Pod?
在K8S中,什么是静态Pod?
|
17天前
|
Kubernetes 应用服务中间件 调度
k8s的Pod常见的几种调度形式
k8s的Pod常见的几种调度形式
18 0
|
20天前
|
Kubernetes 固态存储 调度
k8s学习--如何控制pod调度的位置
k8s学习--如何控制pod调度的位置
|
20天前
|
Kubernetes Docker Perl
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)