要在Kubernetes (k8s) 中使用Python创建一个Pod,你可以使用Kubernetes Python客户端库(通常称为kuberneteskubernetes-client)。以下是一个简单的步骤和示例代码,说明如何使用Python在Kubernetes集群中创建一个Pod。

步骤

两种方式

在pycharm中创建pod

  1. 添加k8s模块
    img

img

img

用国内的仓库源可以加快python下载包的速度,国内源如下:
阿里云 https://mirrors.aliyun.com/pypi/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
豆瓣(douban) https://pypi.douban.com/simple/
中国科学技术大学 https://pypi.mirrors.ustc.edu.cn/simple/
from kubernetes import client, config
from kubernetes.client.rest import ApiException

config.load_kube_config(r'C:\Users\4407\Desktop\config')
         # 反斜杠\是一个转义字符。**在字符串前加上r**,这样Python就不会解释反斜杠为转义字符了
         # **使用双反斜杠**,将每个单反斜杠替换为双反斜杠。
         # 使用**正斜杠**:在Windows中也可以使用正斜杠(尽管它们通常用于Unix和Linux系统),Python会理解它们为路径分隔符。

pod_manifest = {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "my-pod",
        "labels": {
            "app": "my-app"
        }
    },
    "spec": {
        "containers": [
            {
                "name": "my-container",
                "image": "nginx:1.19.1",
                "ports": [
                    {"containerPort": 80}
                ]
            }
        ]
    }
}

# api_instance = client.CoreV1Api()
v1 = client.CoreV1Api()
resp = v1.create_namespaced_pod(body=pod_manifest, namespace='default')
print("Pod created. status='%s'" % str(resp.status))

在k8s集群中使用python创建pod

  1. 安装python3 pip3 并且加载 Kubernetes 模块

使用pip安装:


pip3  install -i https://pypi.tuna.tsinghua.edu.cn/simple  kubernetes

pip3 install --upgrade pip

  1. 获取Kubernetes集群的访问凭据

你可能需要配置Kubernetes集群的访问凭据。这通常是通过设置环境变量(如KUBECONFIG)或使用~/.kube/config文件来完成的。
3. 编写Python代码来创建Pod

使用Kubernetes Python客户端库来定义Pod并发送到Kubernetes API服务器。

示例代码

以下是一个简单的Python脚本,用于在Kubernetes集群中创建一个Pod:

[root@master python]# cat pod.py 
#!/usr/bin/python3
from kubernetes import client, config, watch
from kubernetes.client.rest import ApiException
 
config.load_kube_config()  
 
pod_manifest = {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "my-pod",
        "labels": {
            "app": "my-app"
        }
    },
    "spec": {
        "containers": [
            {
                "name": "my-container",
                "image": "nginx:1.19.1",  
                "ports": [
                    {"containerPort": 80}
                ]
            }
        ]
    }
}
 
#api_instance = client.CoreV1Api()
v1 = client.CoreV1Api()  
resp = v1.create_namespaced_pod(body=pod_manifest, namespace='default')  
print("Pod created. status='%s'" % str(resp.status))

运行此脚本将在Kubernetes集群的默认命名空间中创建一个名为“my-pod”的Pod,该Pod运行“nginx:1.19.1”镜像。你可以根据需要修改Pod的规格和命名空间。

详细解释上面代码

当然可以,以下是对您提供的 pod.py Python 脚本的详细解释:

  1. Shebang
#!/usr/bin/python3

这一行是 shebang(也称为 hashbang 或 hashbang line)。它告诉系统应该使用哪个解释器来执行这个脚本。在这里,它指定了使用 /usr/bin/python3 作为解释器,即 Python 3。

  1. 导入必要的库
from kubernetes import client, config, watch
from kubernetes.client.rest import ApiException

这里从 kubernetes 包中导入了三个模块:clientconfigwatch。同时,还从 kubernetes.client.rest 中导入了 ApiException,这是 Kubernetes Python 客户端库中的一个异常类,用于处理与 Kubernetes API 交互时可能出现的错误。

  1. 加载 Kubernetes 配置
config.load_kube_config()

这一行代码调用了 config.load_kube_config() 方法,它会加载 Kubernetes 的配置文件(通常是 ~/.kube/config),以便脚本能够与 Kubernetes 集群进行交互。

  1. 定义 Pod 清单
pod_manifest = {
    "apiVersion": "v1",
    "kind": "Pod",
    # ... 其他字段 ...
}

这里定义了一个 Python 字典 pod_manifest,它描述了要创建的 Pod 的属性和配置。这个字典遵循 Kubernetes 的 API 规范,用于定义 Pod 的各种属性,如名称、标签、容器配置等。

  1. 创建 Pod
v1 = client.CoreV1Api()
resp = v1.create_namespaced_pod(body=pod_manifest, namespace='default')

首先,创建了一个 CoreV1Api 的实例 v1,它是 Kubernetes Python 客户端库中的一个类,用于与 Kubernetes API 的核心 v1 版本进行交互。

然后,调用了 v1.create_namespaced_pod() 方法来在指定的命名空间(在这个例子中是 'default')中创建一个新的 Pod。这个方法需要两个参数:bodynamespacebody 参数是一个包含 Pod 定义的字典(在这里是 pod_manifest),而 namespace 参数指定了要在哪个命名空间中创建 Pod。

create_namespaced_pod() 方法返回一个响应对象 resp,该对象包含了关于创建的 Pod 的信息。

  1. 打印 Pod 创建状态
print("Pod created. status='%s'" % str(resp.status))

最后,这一行代码打印出 Pod 创建的状态。然而,这里有一点需要注意:resp.status 可能不是直接包含 Pod 状态的字段。通常,Kubernetes API 的响应包含一个状态码(例如 HTTP 201 表示成功创建)和一个包含 Pod 详细信息的对象。如果想要打印 Pod 的实际状态(如 RunningPending 等),可能需要从响应对象中提取更多信息。

使用

  • 运行脚本
[root@master python]# python3 pod.py
//此处不可用python,会报错,因为脚本中指定了python3
  • 查看Pod状态
[root@master python]# kubectl get po
NAME         READY   STATUS    RESTARTS      AGE
my-pod       1/1     Running   0             29m

总结

为了独立写出上面的代码,需要掌握Python的一些基本概念和库的使用。

关键点和技能:

  1. Python基础知识

    • 变量和数据类型(如字典、列表、字符串等)
    • 控制流(条件语句、循环语句)
    • 函数定义和调用
    • 导入模块和库
  2. Python字典

    • 字典的创建
    • 字典的访问和修改
    • 字典的嵌套
  3. Python异常处理

    • try-except语句的使用
    • 捕获和处理特定类型的异常(如上面的ApiException
  4. Python第三方库的安装和使用

    • 使用pip命令安装库(如kubernetes
    • 导入和使用第三方库中的类和函数
  5. Kubernetes基本概念

    • 了解Kubernetes集群的组成(如Master节点、Worker节点)
    • 理解Pod、容器、命名空间等Kubernetes资源
    • 了解Kubernetes API的基本操作和用途
  6. Kubernetes Python客户端库的使用

    • 加载Kubernetes集群配置(如使用load_kube_config()
    • 创建和配置Kubernetes资源对象(如V1Pod
    • 调用Kubernetes API进行资源的创建、读取、更新和删除操作
  7. JSON或YAML到Python对象的转换

    • 虽然上面的示例中直接使用了Python字典来定义Pod规格,但通常Kubernetes资源配置文件是以YAML或JSON格式编写的。因此,了解如何将YAML或JSON文件解析为Python对象(如使用PyYAMLjson库)也是很重要的。
  8. 错误处理和日志记录

    • 在实际代码中,您可能需要添加更详细的错误处理和日志记录功能,以便在出现问题时能够更快地定位和解决问题。
  9. 文档和社区支持

    • 阅读Kubernetes和Kubernetes Python客户端库的官方文档
    • 搜索和参与相关的社区讨论和问答,以获取帮助和解决方案
  10. 版本管理

    • 了解如何使用版本控制工具(如Git)来管理您的代码和配置文件

通过学习和实践上述技能和知识点,您将能够独立地编写出类似上面的Python脚本来与Kubernetes集群进行交互。

参数详解

config.load_kube_config() 是 Kubernetes Python 客户端库中的一个函数,用于加载 Kubernetes 的配置信息,以便 Python 脚本能够与 Kubernetes 集群进行交互。这个函数在大多数情况下不需要任何参数,因为它会默认从用户的家目录下的 .kube/config 文件中加载配置。

不过,为了更全面地解释 config.load_kube_config(),我们可以考虑一些可能的参数(尽管在标准的 Kubernetes Python 客户端库中这个函数通常不接受任何参数):

  • 默认的参数和行为

  • 无参数:当你不给 load_kube_config() 提供任何参数时,它会尝试从默认的 kubeconfig 路径(通常是 ~/.kube/config)加载配置。

  • 加载上下文:kubeconfig 文件可能包含多个集群、用户和上下文(contexts)。默认情况下,它会加载当前上下文(current-context),这个上下文定义了应该使用哪个集群和用户凭据。

  • 可能的参数(取决于具体实现)

虽然标准的 Kubernetes Python 客户端库中的 load_kube_config() 函数通常不接受参数,但某些扩展或修改版可能允许你传递额外的参数。这些参数可能包括:

  • kubeconfig 文件的路径:允许你指定一个非默认的 kubeconfig 文件路径。
  • 上下文名称:允许你指定一个特定的上下文来加载,而不是默认的当前上下文。
  • 用户代理:允许你设置用于 HTTP 请求的用户代理字符串。
  • 其他认证选项:在某些情况下,可能允许你通过参数直接提供认证凭据(如令牌、证书等),而不是从 kubeconfig 文件中加载。

实际使用中的注意事项

  • 权限:加载 kubeconfig 文件需要适当的文件系统权限。如果脚本没有足够的权限来读取该文件,load_kube_config() 将会失败。
  • 上下文:确保 kubeconfig 文件中的当前上下文是你想要与之交互的 Kubernetes 集群的正确上下文。如果需要,你可以使用 kubectl config 命令来修改或设置当前上下文。
  • 环境变量:在某些情况下,环境变量(如 KUBECONFIG)可能会影响 kubeconfig 文件的加载行为。确保这些环境变量被正确设置,以符合你的需求。
  • 错误处理:在调用 load_kube_config() 时,最好包含适当的错误处理逻辑,以便在加载配置失败时能够优雅地处理错误。

总结:
config.load_kube_config() 是 Kubernetes Python 客户端库中用于加载 Kubernetes 配置的关键函数。通过加载 kubeconfig 文件,Python 脚本可以获得与 Kubernetes 集群进行交互所需的认证信息和集群信息。

原理

使用Python创建Kubernetes Pod的原理主要涉及以下几个步骤和概念:

  1. Kubernetes API:
    Kubernetes提供了一个RESTful API,允许用户通过HTTP请求与集群进行交互。这个API支持对集群中的资源(如Pod、Service、Deployment等)进行增删改查等操作。

  2. Kubernetes Python客户端库:
    为了简化与Kubernetes API的交互,开发者们创建了多种语言的客户端库,包括Python。这些库封装了底层的HTTP请求,使得开发者可以使用更高级别的API来操作Kubernetes资源。在Python中,kubernetes客户端库就是这样一个工具。

  3. 认证和授权:
    在与Kubernetes API交互之前,你需要提供适当的认证凭据,以证明你有权限执行所请求的操作。这通常通过Kubernetes的配置文件(通常是~/.kube/config)或环境变量来完成。这些凭据可以是API令牌、客户端证书等。

  4. 定义Pod规格:
    在创建Pod之前,你需要定义Pod的规格(Specification)。这通常是一个包含Pod元数据和配置信息的字典或对象。规格中指定了Pod的名称、命名空间、容器列表(每个容器有名称、镜像、端口等配置)、存储需求等。

  5. 使用Python客户端库发送请求:
    一旦你有了Pod的规格和适当的认证凭据,你就可以使用Kubernetes Python客户端库来发送HTTP请求到Kubernetes API服务器。这个请求告诉Kubernetes API服务器你想要创建一个新的Pod,并提供了Pod的规格作为请求体。

  6. Kubernetes API服务器处理请求:
    当Kubernetes API服务器接收到你的请求时,它会验证你的认证凭据和请求的有效性。如果一切正常,API服务器就会根据你提供的Pod规格在集群中创建一个新的Pod。这通常涉及调度Pod到合适的节点上,并在该节点上启动Pod中的容器。

  7. 监视Pod的状态:
    一旦Pod被创建,你可以继续使用Kubernetes API(和Python客户端库)来监视Pod的状态。例如,你可以检查Pod是否已经被调度到某个节点上,或者容器是否已经启动并正在运行。

总的来说,使用Python创建Kubernetes Pod的原理就是通过Kubernetes API与集群进行交互,并使用Python客户端库来发送包含Pod规格的请求到API服务器。API服务器处理这些请求,并在集群中创建和管理Pod。

帮助文档

考试要求 创建pod,deployment,job(开发)

1.安装Openstack框架

模糊查询软件包名称

[root@controller ~]# yum list *-openstack-train
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile

  • base: mirrors.aliyun.com
  • extras: mirrors.aliyun.com
  • updates: mirrors.aliyun.com
    Available Packages
    centos-release-openstack-train.noarch 1-1.el7.centos extras

安装

[root@controller ~]# yum -y install centos-release-openstack-train

2.升级所有的软件包

自动检查所有可升级的软件包并升级

[root@controller ~]# yum upgrade -y

3.安装openstack客户端

[root@controller ~]# yum install -y python-openstackclient

4.查看openstack的版本号

[root@controller ~]# openstack --version
openstack 4.0.2

1.上传openStack-train.iso文件到/opt目录下

[root@controller opt]# du -sh *
0 mydriver
16G openStack-train.iso

2.将镜像文件挂载到文件夹中,即可访问镜像文件内容

[root@controller opt]# mkdir openstack
[root@controller opt]# ls
mydriver openstack openStack-train.iso

挂载命令:将镜像文件挂载到/opt/openstack

[root@controller opt]# mount openStack-train.iso openstack/
mount: /dev/loop0 is write-protected, mounting read-only
[root@controller opt]# df -H
...略
/dev/loop0 17G 17G 0 100% /opt/openstack

3.备份原有的yum的配置文件

[root@controller openstack]# cd /etc/yum.repos.d/
[root@controller yum.repos.d]# ls
CentOS-Base.repo CentOS-OpenStack-train.repo repo.bak

将阿里源改名,避免覆盖官方源备份

[root@controller yum.repos.d]# mv CentOS-Base.repo CentOS-ALIBABA-Base.repo

移动repo文件到备份目录

[root@controller yum.repos.d]# mv *.repo repo.bak/

4.编写本地YUM源文件,指向本地文件

[root@controller yum.repos.d]# vi OpenStack.repo
[base]
name=base
baseurl=file:///opt/openstack/base/
enable=1
gpgcheck=0
[extras]
name=extras
baseurl=file:///opt/openstack/extras/
enable=1
gpgcheck=0
[updates]
name=updates
baseurl=file:///opt/openstack/updates/
enable=1
gpgcheck=0
[train]
name=train
baseurl=file:///opt/openstack/train/
enable=1
gpgcheck=0
[virt]
name=virt
baseurl=file:///opt/openstack/virt/
enable=1
gpgcheck=0

5.清除原有的YUM源缓存并重建缓存

[root@controller ~]# yum clean all

重建缓存

[root@controller ~]# yum makecache

检查yum源

[root@controller ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base base 10,039
extras extras 500
train train 3,168
updates updates 3,182
virt virt 63
repolist: 16,952

长期挂载,避免重启丢失

[root@controller ~]# vi /etc/fstab

在最后添加如下内容

/opt/openStack-train.iso /opt/openstack/ iso9660 defaults,loop 0 0

posted on 2024-05-16 11:04  代码你敲我不敲  阅读(52)  评论(0编辑  收藏  举报

返回顶端