介绍
在 Kubernetes 中,Jobs 和 CronJobs 用于运行不属于长期运行的应用程序或服务的任务。Jobs 用于一次性任务,而 CronJobs 用于需要定期运行的任务。
在本实验中,我们将学习如何在 Kubernetes 中使用 Jobs 和 CronJobs 运行 Pods。我们将从一个简单的示例开始,逐步构建更复杂的示例。
在 Kubernetes 中,Jobs 和 CronJobs 用于运行不属于长期运行的应用程序或服务的任务。Jobs 用于一次性任务,而 CronJobs 用于需要定期运行的任务。
在本实验中,我们将学习如何在 Kubernetes 中使用 Jobs 和 CronJobs 运行 Pods。我们将从一个简单的示例开始,逐步构建更复杂的示例。
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。
导航到工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project
启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start
验证 Minikube 是否正在运行:
检查 Minikube 集群的状态:
minikube status
kubelet
和 apiserver
等组件是否显示为 Running
。minikube start
。如果启动 Minikube 时遇到问题,可以使用 minikube delete
来重置环境(如有需要)。
第一步是创建一个运行 Job 的 Pod。在本示例中,我们将创建一个 Pod,运行一个命令以在控制台打印 "Hello, World!"。
在 /home/labex/project/
目录下创建一个名为 job.yaml
的文件,内容如下:
apiVersion: batch/v1
kind: Job
metadata:
name: hello-job
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["sh", "-c", 'echo "Hello, World!"']
restartPolicy: Never
backoffLimit: 4
在此文件中,我们定义了一个名为 hello-job
的 Job,它运行一个名为 hello
的容器。该容器使用 busybox
镜像,并执行一个命令以在控制台打印 "Hello, World!"。
要创建 Job,请运行以下命令:
kubectl apply -f job.yaml
你可以通过运行以下命令检查 Job 的状态:
kubectl get jobs
Job 完成后,你可以通过运行以下命令查看 Pod 的日志:
kubectl logs <POD_NAME>
将 <POD_NAME>
替换为运行 Job 的 Pod 的名称,你可以通过 kubectl get pods |grep hello-job
命令获取 <POD_NAME>
。
恭喜,你已成功在 Kubernetes 中使用 Job 运行了一个 Pod!
在某些情况下,你可能需要运行一个包含多个 Pod 的 Job 以提高性能。在本示例中,我们将创建一个 Job,运行多个 Pod 以从远程服务器下载文件。
在 /home/labex/project/
目录下创建一个名为 multi-pod-job.yaml
的文件,内容如下:
apiVersion: batch/v1
kind: Job
metadata:
name: download-job
spec:
completions: 3
parallelism: 2
template:
spec:
containers:
- name: downloader
image: curlimages/curl
command: ["curl", "-o", "/data/file", "http://example.com/file"]
volumeMounts:
- name: data-volume
mountPath: /data
restartPolicy: Never
volumes:
- name: data-volume
emptyDir: {}
backoffLimit: 4
在此文件中,我们定义了一个名为 download-job
的 Job,它使用 curlimages/curl
镜像运行多个 Pod。每个 Pod 从 http://example.com/file
下载文件并将其保存到名为 data-volume
的共享卷中。
要创建 Job,请运行以下命令:
kubectl apply -f multi-pod-job.yaml
你可以通过运行以下命令检查 Job 的状态:
kubectl get jobs
Job 完成后,你可以通过运行以下命令查看 Pod 的日志:
kubectl logs <POD_NAME>
将 <POD_NAME>
替换为运行 Job 的任意 Pod 的名称。你可以查看文件的下载日志,并通过 kubectl get pod |grep download-job
命令获取 <POD_NAME>
。
恭喜,你已成功在 Kubernetes 中运行了一个包含多个 Pod 的 Job!
除了一次性任务(Job),Kubernetes 还支持 CronJob 以定期运行任务。在本示例中,我们将创建一个每分钟运行一次命令的 CronJob。
在 /home/labex/project/
目录下创建一个名为 cronjob.yaml
的文件,内容如下:
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cronjob
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["sh", "-c", 'echo "Hello, World!"']
restartPolicy: Never
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
在此文件中,我们定义了一个名为 hello-cronjob
的 CronJob,它每分钟运行一次命令。该命令与我们在第一个示例中使用的命令相同,用于在控制台打印 "Hello, World!"。
要创建 CronJob,请运行以下命令:
kubectl apply -f cronjob.yaml
你可以通过运行以下命令检查 CronJob 的状态:
kubectl get cronjobs
CronJob 运行后,你可以通过运行以下命令查看 Pod 的日志:
kubectl logs -f <POD_NAME>
将 <POD_NAME>
替换为由 CronJob 创建的任意 Pod 的名称,你可以通过 kubectl get pod |grep hello-cronjob
命令获取 <POD_NAME>
。
恭喜,你已成功在 Kubernetes 中运行了一个 CronJob!
在本实验中,我们学习了如何在 Kubernetes 中使用 Jobs 和 CronJobs 运行 Pods。我们从运行 Job 的简单示例开始,逐步构建了包含多个 Pod 的 Job 以及定期运行的 CronJob 等更复杂的示例。通过这些知识,你可以在 Kubernetes 中运行不属于长期运行的应用程序或服务的各种任务。