2022云计算技能大赛容器云开发

这篇具有很好参考价值的文章主要介绍了2022云计算技能大赛容器云开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

仅供参考,学习测试使用

【任务 6】容器云运维开发:Kubernetes APIs 运维开发[10 分]

【题目 1】Python 运维开发:基于 Kubernetes Restful API 实现 Deployment 创建[2 分]

在提供的OpenStack 私有云平台上,使用 k8s-python-dev 镜像创建 1 台云主机,云主机类型使用 4vCPU/12G 内存/100G 硬盘。该主机中已经默认安装了所需的开发环境,登录默认账号密码为“root/1DaoYun@2022”。
使用Kubernetes Restful API 库,在/root 目录下,创建 api_deployment_manager.py 文件, 要求编写 python 代码,代码实现以下任务:
(1)编写 Python 程序实现 Deployment 资源的创建。Deployment 配置信息如下。如果同名Deployment 存在,先删除再创建。
(2)创建完成后,查询该Deployment 的详细信息,执行结果控制台输出,以yaml 格式展示。
创建Deployment 的yaml 的配置如下:

apiVersion: apps/v1 kind: Deployment metadata:
name: nginx-deployment labels:
app: nginx spec:
replicas: 3 selector:
matchLabels: app: nginx
template: metadata:
labels:
app: nginx spec:
containers:

  • name: nginx
    image: nginx:1.15.4 ports:
  • containerPort: 80
from kubernetes import client, config

# 加载 kubeconfig 配置文件
config.load_kube_config()

# 创建 Deployment 对象
deployment = client.AppsV1Api().create_namespaced_deployment(
    body={
        "apiVersion": "apps/v1",
        "kind": "Deployment",
        "metadata": {
            "name": "nginx-deployment",
            "labels": {
                "app": "nginx"
            }
        },
        "spec": {
            "replicas": 3,
            "selector": {
                "matchLabels": {
                    "app": "nginx"
                }
            },
            "template": {
                "metadata": {
                    "labels": {
                        "app": "nginx"
                    }
                },
                "spec": {
                    "containers": [{
                        "name": "nginx",
                        "image": "nginx:1.15.4",
                        "ports": [{
                            "containerPort": 80
                        }]
                    }]
                }
            }
        }
    },
    namespace="default"
)

# 获取 Deployment 对象的详细信息
deployment_info = client.AppsV1Api().read_namespaced_deployment(
    name="nginx-deployment",
    namespace="default"
)

# 将 Deployment 对象信息以 yaml 格式打印输出
import yaml

deployment_info_yaml = yaml.dump(
    client.ApiClient().sanitize_for_serialization(deployment_info)
)

print(deployment_info_yaml)

首先通过 config.load_kube_config() 加载 kubeconfig 配置文件,然后使用 client.AppsV1Api().create_namespaced_deployment() 方法创建 Deployment 对象,并使用 client.AppsV1Api().read_namespaced_deployment() 方法获取该对象的详细信息。最后,使用 yaml.dump() 方法将 Deployment 对象信息以 yaml 格式输出到控制台。

1.执行api_deployment_manager.py 脚本,成功创建 deployment 资源,计 1 分;
2.检查创建的 deployment 资源,配置信息无误计 1 分。

【题目 2】Python 运维开发:基于 Kubernetes Python SDK 实现 Job 创建[1 分]

在前面已建好的 Kubernetes 开发环境云平台上。使用 Kubernetes python SDK 的“kubernetes”Python 库,在/root 目录下,创建 sdk_job_manager.py 文件,要求编写 python 代码,代码实现以下任务:
(1)编写 Python 程序实现 Job 资源的创建。Job 配置信息如下。如果同名 Job 存在, 先删除再创建。
(2)创建完成后,查询该 Job 的详细信息,执行结果控制台输出,以 json 格式展示。
Job 创建 yaml 的信息如下:

apiVersion: batch/v1 kind: Job
metadata: name: pi
spec:
template: spec:
containers:

  • name: pi image: perl
    command: [“perl”, “-Mbignum=bpi”, “-wle”, “print bpi(2000)”] restartPolicy: Never
    backoffLimit: 4
from kubernetes import client, config

# 加载Kubernetes配置
config.load_kube_config()

# 创建Kubernetes API客户端对象
api_client = client.BatchV1Api()

# 定义Job资源的元数据信息
metadata = client.V1ObjectMeta(name="pi")

# 定义Job的Pod模板
pod_template = client.V1PodTemplateSpec(
    spec=client.V1PodSpec(
        restart_policy="Never",
        containers=[
            client.V1Container(
                name="pi",
                image="perl",
                command=["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
            )
        ]
    )
)

# 定义Job的规格
job_spec = client.V1JobSpec(
    template=pod_template,
    backoff_limit=4
)

# 创建Job资源
try:
    api_client.delete_namespaced_job(name="pi", namespace="default")
except:
    pass
api_response = api_client.create_namespaced_job(
    body=client.V1Job(
        api_version="batch/v1",
        kind="Job",
        metadata=metadata,
        spec=job_spec
    ),
    namespace="default"
)
print("Job created. status='%s'" % str(api_response.status))

# 查询Job的详细信息
api_response = api_client.read_namespaced_job(name="pi", namespace="default")
print("Job details:")
print(api_response.to_json())

1.执行 sdk_job_manager.py 脚本,成功创建job 资源,计 0.5 分;
2.查询 job 资源,配置信息无误,计 0.5 分。

【题目 3】Python 运维开发:Pod 资源的 Restful APIs HTTP 服务封装[3 分]

编写 Python 程序实现Pod 资源管理程序,将 Pod 资源管理的封装成Web 服务。

在/root 目录下创建pod_server.py 程序,实现Pod 的增删查改等Web 访问操作。http.server 的 host 为 localhost,端口 8889;程序内部实现Kubernetes 认证。
提示说明:Python 标准库http.server 模块,提供了HTTP Server 请求封装。需要实现的 Restful API 接口如下:
GET /pod/{name} ,查询指定名称{name}的 Pod;Response 的 Body 以 json 格式输出。
POST /pod/{yamlfilename} 创建 yaml 文件名称为{yamlfilename}的 Pod;Response 的
Body 以 json 格式。
编码完成后,“手工下载”文件服务器主目录所有*.yaml 文件到 root 目录下,“手动执行”所编写pod_server.py 程序,提交答案进行检测。

import http.server
import json
import os
import ssl
import subprocess
import urllib.parse

from kubernetes import client, config
from kubernetes.client.rest import ApiException


class PodServer(http.server.BaseHTTPRequestHandler):

    def do_GET(self):
        parsed_path = urllib.parse.urlparse(self.path)
        path = parsed_path.path.split('/')
        if path[1] == 'pod':
            name = path[2]
            try:
                config.load_kube_config()
                api_instance = client.CoreV1Api()
                api_response = api_instance.read_namespaced_pod(name, 'default')
                response = {'name': api_response.metadata.name,
                            'status': api_response.status.phase,
                            'host_ip': api_response.status.host_ip,
                            'pod_ip': api_response.status.pod_ip}
                self.send_response(200)
                self.send_header('Content-type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps(response).encode())
            except ApiException as e:
                self.send_error(404, message=str(e))
        else:
            self.send_error(404)

    def do_POST(self):
        parsed_path = urllib.parse.urlparse(self.path)
        path = parsed_path.path.split('/')
        if path[1] == 'pod':
            yaml_filename = path[2]
            try:
                config.load_kube_config()
                with open(yaml_filename, 'r') as f:
                    pod_yaml = f.read()
                api_instance = client.CoreV1Api()
                api_response = api_instance.create_namespaced_pod(body=pod_yaml, namespace='default')
                response = {'name': api_response.metadata.name,
                            'status': api_response.status.phase,
                            'host_ip':

保存为pod_server.py文件并运行

1.HTTP 服务成功启动,计 1 分;
2.发起指定参数的GET 查询 Pod 请求,成功查询指定名称的 pod 服务,计 1 分;
3.发起指定参数的 POST 创建 Pod 请求,成功创建 Pod 服务,计 1 分。

【题目 4】Python 运维开发:Service 资源 Restful APIs HTTP 服务封装[4 分]

编写 Python 程序实现 Service 资源管理程序,将 Service 资源管理的封装成 Web 服务。在/root 目录下创建 service_server.py 程序,实现 Service 的增删查改等 Web 访问操作。
http.server 的 host 为 localhost,端口 8888;程序内部实现Kubernetes 认证。

提示说明:Python 标准库http.server 模块,提供了HTTP Server 请求封装。需要实现的 Restful API 接口如下:
GET /services/{name},查询指定名称{name}的 Service;Response 的 Body 以 json 格式输出。
POST /services/{yamlfilename} 创建yaml 文件名称为{yamlfilename}的 Service; Response 的Body 以 json 格式,(手工将文件服务器主目录所有*.yaml 文件下载到 root 目录下)。
DELETE /services/{name};删除指定名称的 Service;Response 的 Body 以 json 格式。编码完成后,自己手动执行提供 Web HTTP 服务的 service_server.py 程序,提交答案进
行检测。

import http.server
import json
import os
import subprocess

class ServiceHandler(http.server.BaseHTTPRequestHandler):

    def do_GET(self):
        if self.path.startswith('/services/'):
            service_name = self.path.split('/')[-1]
            service_info = self.get_service_info(service_name)
            if service_info is not None:
                self.send_response(200)
                self.send_header('Content-type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps(service_info).encode())
            else:
                self.send_response(404)
                self.send_header('Content-type', 'text/plain')
                self.end_headers()
                self.wfile.write(b'Service not found')

    def do_POST(self):
        if self.path.startswith('/services/'):
            yaml_file_name = self.path.split('/')[-1]
            yaml_file_path = os.path.join('/root', yaml_file_name)
            if not os.path.isfile(yaml_file_path):
                self.send_response(404)
                self.send_header('Content-type', 'text/plain')
                self.end_headers()
                self.wfile.write(b'YAML file not found')
                return
            service_name = self.create_service_from_yaml(yaml_file_path)
            service_info = self.get_service_info(service_name)
            if service_info is not None:
                self.send_response(200)
                self.send_header('Content-type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps(service_info).encode())
            else:
                self.send_response(500)
                self.send_header('Content-type', 'text/plain')
                self.end_headers()
                self.wfile.write(b'Failed to create service')

    def do_DELETE(self):
        if self.path.startswith('/services/'):
            service_name = self.path.split('/')[-1]
            result = self.delete_service(service_name)
            if result:
                self.send_response(200)
                self.send_header('Content-type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps({'result': 'success'}).encode())
            else:
                self.send_response(404)
                self.send_header('Content-type', 'text/plain')
                self.end_headers()
                self.wfile.write(b'Service not found')

    def get_service_info(self, service_name):
        command = ['kubectl', 'get', 'service', service_name, '-o', 'json']
        output = self.run_command(command)
        if output is None:
            return None
        service_info = json.loads(output)['metadata']
        return {
            'name': service_info['name'],
            'namespace': service_info['namespace'],
            'creationTimestamp': service_info['creationTimestamp'],
            'labels': service_info['labels'],
        }

    def create_service_from_yaml(self, yaml_file_path):
        command = ['kubectl', 'apply', '-f', yaml_file_path]
        output = self.run_command(command)
        if output is None:
            return None
        service_name = output.strip().split(' ')[-1]
        return service_name

    def delete_service(self, service_name):
        command = ['kubectl', 'delete', 'service', service_name]
        output = self.run_command(command)
        return output is not None

    def run_command(self, command):
        try:
            output = subprocess.check_output(command, stderr=subprocess.STDOUT)
            return output.decode()
        except subprocess.CalledProcessError as e:
            print(e.output.decode())
            return None


if __name__ == '__main__':
    server_address = ('localhost', 8888)
    httpd = http.server.HTTPServer(server_address, ServiceHandler)
    httpd.socket = ssl.wrap_socket(httpd

1.HTTP 服务成功启动,计 1 分;
2.发起指定参数的 POST 创建 service 请求,成功创建 service 资源,计 1 分;
3.发起指定参数的GET 查询 service 请求,成功查询指定名称的 Service,计 1 分;
4.发起指定参数的DELETE 删除 service 请求,成功删除指定名称的 Service,计 1 分文章来源地址https://www.toymoban.com/news/detail-497118.html

到了这里,关于2022云计算技能大赛容器云开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 23云计算全国职业技能大赛容器云-容器编排

    编写 Dockerfile 文件构建 mysql 镜像,要求基于 centos 完成 MariaDB 数据库的安装和配置,并设置服务开机自启。编写 Dockerfile 构建镜像 erp-mysql:v1.0,要求使用 centos7.9.2009 镜像作为基镜像,完成 MariaDB 数据库的安装,设置 root 用户的密码为 tshoperp,新建数据库 jsh_erp 并导入数据库文

    2024年02月08日
    浏览(33)
  • 虚拟机搭建23年云计算技能大赛容器云平台

    主机名 IP 资源配置 k8s-master-node1 192.168.200.65 16C_16V_200G k8s-worker-node1 192.168.200.66 16C_16V_200G vmware17,单网卡配置,资源一定要给高,起码10G的内存 由于和云主机环境不同,需要手动把所有集群需要的依赖安装上 node节点安装依赖 master节点执行 master节点执行

    2024年02月08日
    浏览(40)
  • 全国职业技能大赛云计算--高职组赛题卷②(容器云)

    说明:本任务提供有4台服务器master、node1、node2和cicd-node,都安装了centos7.5操作系统,在/opt/centos目录下有CentOS-7-x86_64-DVD-1804系统光盘文件所有文件,在/opt/containerk8s目录下有本次容器云运维所需的所有文件。 某公司技术部产品开发上线周期长,客户的需求经常得不到及时响应

    2024年02月07日
    浏览(43)
  • 全国职业技能大赛云计算--高职组赛题卷①(容器云)

    说明:本任务提供有4台服务器master、node1、node2和cicd-node,都安装了centos7.5操作系统,在/opt/centos目录下有CentOS-7-x86_64-DVD-1804系统光盘文件所有文件,在/opt/containerk8s目录下有本次容器云运维所需的所有文件。 某公司技术部产品开发上线周期长,客户的需求经常得不到及时响应

    2024年02月07日
    浏览(38)
  • 运维系列(仅供参考):将安全信息应用到以下对象时发生错误:C:\Users\lenovo\Application Data无法枚举容器中的对象。访问被拒绝。

    如果找不到Application Data 打开访问权限 右键属性安全高级 更改 高级 然后 确定确定应用 然后回到 应用。这样就能进入Application Data文件夹了 开始King 将安全信息应用到以下对象时发生错误:C:UserslenovoApplication Data无法枚举容器中的对象。访问被拒绝。

    2024年04月22日
    浏览(43)
  • 2022 年全国职业院校技能大赛高职组云计算赛项赛题解析-“公有云&华为云”

    目录 2022 年全国职业院校技能大赛高职组云计算赛项赛题解析-“公有云华为云” 系统管理与维护

    2024年02月11日
    浏览(43)
  • 2022 年全国职业院校技能大赛高职组云计算赛项赛题解析-“私有云 赛项” 之 《私有云服务搭建》!!超详细!!

    目录 2022 年全国职业院校技能大赛高职组云计算赛项赛题解析-《私有云》 【任务 1】私有云服务搭建[10

    2024年02月05日
    浏览(83)
  • hive学习(仅供参考)

    将结构化的数据文件映射为数据库表 提供类sql的查询语言HQL(Hive Query Language) Hive让更多的人使用Hadoop 提供了一个简单的优化模型 HQL类SQL语法,简化MR开发 支持在不同的计算框架上运行 支持在HDFS和HBase上临时查询数据 支持用户自定义函数、格式 常用于ETL操作和BI 稳定可靠(

    2023年04月08日
    浏览(43)
  • LCD1602操作指令(仅供参考)

    1.清屏指令( 0000 0001 ) 1.清除液晶显示器,即将DDRAM的内容全部清除。 2.光标回到液晶屏左上方。 3.地址计数器(AC)的值设置为0。 2.光标归位指令(0000 001x) 1.把光标返回到液晶屏左上方。 2.把地址计数器(AC)的值设置为0。 3.保持DDRAM的内容不变。 3.模式设置指令(0000

    2024年02月05日
    浏览(34)
  • restful接口设计规范[仅供参考]

    应该尽量将API部署在专用域名之下。 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。 应该将API的版本号放入URL。 另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github就采用了这种做法。 因为不同的版本,可以理解成同一种资源的不

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包