读者朋友们好!在这篇文章中,我们将看到如何使用Kubernetes Python客户端创建一个作业。我们都知道,我们使用kubectl命令来创建、列出、更新和删除Kubernetes资源。
什么是K8s Python客户端?
要使用Kubernetes Rest API编写应用程序,你不需要自己实现API调用和请求/响应类型。你可以使用你所使用的编程语言的客户端库。客户端库通常为你处理常见的任务,如认证。
先决条件:
在我们继续使用K8s python客户端创建作业之前,我们需要遵循一些先决条件。
Kubernetes库为我们提供了客户端和配置等模块,我们将在这里使用这些模块。所以,让我们来安装Kubernetes Python客户端。
pip3 install kubernetes
在我的例子中,我已经安装了它,这就是为什么它显示我们已经满足。
现在,我们已经安装了python-Kubernetes包。
创建一个作业:
现在,我将创建一个目录,在这个目录中,我将创建一个名为job.py的文件。
mkdir k8s
cd k8s
touch job.py
我的job.py文件包含以下代码,用于使用Kubernetes Python客户端创建一个作业。现在我们已经安装了Python-Kubernetes包,我们可以导入它。
from kubernetes import client, config
在这段代码中,我创建了几个函数,第一个是create_service( ),第二个是create_job_object( ),第三个是create_job( )。我在我的默认命名空间中创建这个工作,如果你想,你也可以使用其他的命名空间。
from os import path
from time import sleep
import yaml
from kubernetes import client, config
JOB_NAME = "pi"
def create_job_object():
# Configureate Pod template container
container = client.V1Container(
name="pi",
image="perl",
command=["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"])
# Create and configure a spec section
template = client.V1PodTemplateSpec(
metadata=client.V1ObjectMeta(labels={"app": "pi"}),
spec=client.V1PodSpec(restart_policy="Never", containers=[container]))
# Create the specification of deployment
spec = client.V1JobSpec(
template=template,
backoff_limit=4)
# Instantiate the job object
job = client.V1Job(
api_version="batch/v1",
kind="Job",
metadata=client.V1ObjectMeta(name=JOB_NAME),
spec=spec)
return job
def create_job(api_instance, job):
api_response = api_instance.create_namespaced_job(
body=job,
namespace="default")
print("Job created. status='%s'" % str(api_response.status))
def main():
config.load_kube_config()
batch_v1 = client.BatchV1Api()
job = create_job_object()
create_job(batch_v1, job)
if __name__ == '__main__':
main()
现在,是时候创建这个工作了。所以,我现在将运行python代码。
$ python3 job.py


正如你在这里看到的,我的工作已经成功创建。
更新作业:
为了更新这个作业,我将创建一个名为update.py的文件。在这个文件中,我将更新这里的容器图像。我的文件包含以下代码来更新作业。
from os import path
from time import sleep
import yaml
from kubernetes import client, config
JOB_NAME = "pi"
def create_job_object():
# Configureate Pod template container
container = client.V1Container(
name="pi",
image="perl",
command=["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"])
# Create and configure a spec section
template = client.V1PodTemplateSpec(
metadata=client.V1ObjectMeta(labels={"app": "pi"}),
spec=client.V1PodSpec(restart_policy="Never", containers=[container]))
# Create the specification of deployment
spec = client.V1JobSpec(
template=template,
backoff_limit=4)
# Instantiate the job object
job = client.V1Job(
api_version="batch/v1",
kind="Job",
metadata=client.V1ObjectMeta(name=JOB_NAME),
spec=spec)
return job
def create_job(api_instance, job):
api_response = api_instance.create_namespaced_job(
body=job,
namespace="default")
print("Job created. status='%s'" % str(api_response.status))
get_job_status(api_instance)
def get_job_status(api_instance):
job_completed = False
while not job_completed:
api_response = api_instance.read_namespaced_job_status(
name=JOB_NAME,
namespace="default")
if api_response.status.succeeded is not None or \
api_response.status.failed is not None:
job_completed = True
sleep(1)
print("Job status='%s'" % str(api_response.status))
def update_job(api_instance, job):
# Update container image
job.spec.template.spec.containers[0].image = "perl"
api_response = api_instance.patch_namespaced_job(
name=JOB_NAME,
namespace="default",
body=job)
print("Job updated. status='%s'" % str(api_response.status))
def main():
config.load_kube_config()
batch_v1 = client.BatchV1Api()
job = create_job_object()
create_job(batch_v1, job)
update_job(batch_v1, job)
if __name__ == '__main__':
main()
在这段代码中,我使用了 update_job( ) 函数来更新这个作业。在这个函数中,我正在更新容器图像。现在,我将运行更新的代码。
$ python3 update.py


所以,我们现在已经成功完成了。这就是我们如何使用Kubernetes Python客户端的方法。