序言
专栏介绍
序号 | 文章 |
第一讲 | 深入解析 k8s:入门指南(一) |
第二讲 | 深入解析 k8s:入门指南(二) |
第三讲 | 深入解析Pod对象(一) |
第四讲 | 深入解析Pod对象(二) |
第五讲 | 深入解析无状态服务 |
第六讲 | 深入解析有状态服务 |
第七讲 | 深入解析控制器 |
第八讲 | 深入解析 ReplicaSet |
第九讲 | 深入解析滚动升级 |
第十讲 | 深入解析StatefulSet(一) |
第十一讲 | 深入解析StatefulSet(二) |
第十二讲 | 深入解析DaemonSet |
1 基础介绍
1.1 概念介绍
1.2 Job 的类型
1 单次 Job
单次:
并发示意图:
2 CronJob
2 原理介绍
2.1 单次 Job实现原理
2.2 CronJob 的实现原理
3单次job使用案例
3.1 创建一个容器镜像
Dockerfile示例:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3 python3-pip
COPY requirements.txt /app/
RUN pip3 install --no-cache-dir -r /app/requirements.txt
COPY main.py /app/
CMD ["python3", "/app/main.py"]
3.2 创建一个k8s Job
from kubernetes import client, config
# 加载k8s集群配置
config.load_kube_config()
# 创建k8s API客户端
api_client = client.BatchV1Api()
# 定义Job对象
job_name = "my-job"
job_namespace = "default"
job = client.V1Job()
job.metadata = client.V1ObjectMeta(name=job_name, namespace=job_namespace)
# 定义Job的Pod模板
pod_template = client.V1PodTemplateSpec()
pod_template.metadata = client.V1ObjectMeta(labels={"app": job_name})
container = client.V1Container(name="my-container", image="my-image:latest")
pod_template.spec = client.V1PodSpec(containers=[container])
# 定义Job的规范
job.spec = client.V1JobSpec(template=pod_template, backoff_limit=0, ttl_seconds_after_finished=600)
# 创建Job
api_client.create_namespaced_job(namespace=job_namespace, body=job)
3.3 查看Job的状态
kubectl命令行示例:
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
my-job 1/1 1s 5m
Python代码示例:
from kubernetes import client, config
# 加载k8s集群配置
config.load_kube_config()
# 创建k8s API客户端
api_client = client.BatchV1Api()
# 获取Job状态
job_name = "my-job"
job_namespace = "default"
job = api_client.read_namespaced_job(name=job_name, namespace=job_namespace)
status = job.status
if status.succeeded == 1:
print("Job completed successfully!")
else:
print("Job failed or is still running.")
3.4 小结:
4 CronJob
4.1 Python代码实现
1 创建一个容器镜像
Dockerfile示例:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3 python3-pip
COPY requirements.txt /app/
RUN pip3 install --no-cache-dir -r /app/requirements.txt
COPY main.py /app/
CMD ["python3", "/app/main.py"]
2 创建k8s CronJob
from kubernetes import client, config
# 加载k8s集群配置
config.load_kube_config()
# 创建k8s API客户端
api_client = client.BatchV1beta1Api()
# 定义CronJob对象
cron_job_name = "my-cronjob"
cron_job_namespace = "default"
cron_job = client.V1beta1CronJob()
cron_job.metadata = client.V1ObjectMeta(name=cron_job_name, namespace=cron_job_namespace)
# 定义CronJob的Pod模板
pod_template = client.V1PodTemplateSpec()
pod_template.metadata = client.V1ObjectMeta(labels={"app": cron_job_name})
container = client.V1Container(name="my-container", image="my-image:latest")
pod_template.spec = client.V1PodSpec(containers=[container])
# 定义CronJob的规范
cron_spec = client.V1beta1CronJobSpec(schedule="0 * * * *", job_template=client.V1beta1JobTemplateSpec(spec=pod_template))
cron_job.spec = cron_spec
# 创建CronJob
api_client.create_namespaced_cron_job(namespace=cron_job_namespace, body=cron_job)
3 查看CronJob的状态
kubectl命令行示例:
$ kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
my-cronjob 0 * * * * False 0 <none> 1h
Python Kubernetes客户端API示例:
from kubernetes import client, config
# 加载k8s集群配置
config.load_kube_config()
# 创建k8s API客户端
api_client = client.BatchV1beta1Api()
# 获取CronJob状态
cron_job_name = "my-cronjob"
cron_job_namespace = "default"
cron_job = api_client.read_namespaced_cron_job(name=cron_job_name, namespace=cron_job_namespace)
print(cron_job.status)
4 小结:
4.2 yaml配置实现
1 创建一个k8s CronJob
apiVersion: batch/v1beta1
kind: CronJob #资源类型
metadata:
name: my-cronjob
spec:
schedule: "0 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: my-cronjob
spec:
containers:
- name: my-container
image: my-image:latest
imagePullPolicy: Always
restartPolicy: OnFailure
2 应用CronJob配置
kubectl命令行示例:
$ kubectl apply -f my-cronjob.yaml
Python Kubernetes客户端API示例:
from kubernetes import client, config, utils
# 加载k8s集群配置
config.load_kube_config()
# 应用yaml文件
utils.create_from_yaml(client.BatchV1beta1Api(), "my-cronjob.yaml")
3 查看CronJob的状态
kubectl命令行示例:
$ kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
my-cronjob 0 * * * * False 0 <none> 1m
Python Kubernetes客户端API示例:
from kubernetes import client, config
# 加载k8s集群配置
config.load_kube_config()
# 获取CronJob列表
api_instance = client.BatchV1beta1Api()
cronjobs = api_instance.list_namespaced_cron_job(namespace="default")
for cj in cronjobs.items:
print(f"{cj.metadata.name}: {cj.status.active}")
4 小结
5 总结
5.1 单次Job
5.2 定期CronJob
6 投票