Kubernetes Python API客户端:执行完整的yaml文件

imzjd6km  于 2023-03-07  发布在  Python
关注(0)|答案(4)|浏览(186)

Kubernetes有一个非常好的官方Python API客户端,API客户端假设您将创建单独的资源(如pod或服务),并假设您将使用Python对象来编写和创建API请求。
但是,我想通过Python接口运行任意的kubernetes YAML文件(包含一个或多个k8s资源)。我想知道Python kubernetes客户端是否可以用于应用任意的YAML文件?
我基本上是在寻找Python的等价物:

kubectl apply -f some-file-containing-multiple-resources.yaml

我正在寻找一个基本上可以加载kubeconfig并通过Python以相当Python的方式应用yaml的东西。
我知道我可以用Python子进程调用来 Package kubectl命令,但我希望比这更像Python,希望核心K8s Python客户端可以做类似的事情,或者,如果有其他Python包做类似的事情。
Python kubernetes客户端可以调用任意的k8s yaml文件吗?如果不能,有什么可以调用的吗?
谢谢你的阅读-我很感激你提供的任何建议。

cygmwpex

cygmwpex1#

您可以尝试按以下方式使用kubernetes.utils提供的create_from_yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: ngnx-container
      image: nginx:latest
      ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
   - port: 8080
     targetPort: 80

现在,您可以尝试运行下面的代码,并检查它是否适合您。

from kubernetes import client, config, utils
config.load_kube_config()
k8s_client = client.ApiClient()
yaml_file = '<location to your multi-resource file>'
utils.create_from_yaml(k8s_client, yaml_file)
3qpi33ja

3qpi33ja2#

examples目录中似乎有这样的例子,特别是https://github.com/kubernetes-client/python/blob/6709b753b4ad2e09aa472b6452bbad9f96e264e3/examples/create_deployment_from_yaml.py,它执行以下操作:

from os import path

import yaml

from kubernetes import client, config

def main():
    # Configs can be set in Configuration class directly or using helper
    # utility. If no argument provided, the config will be loaded from
    # default location.
    config.load_kube_config()

    with open(path.join(path.dirname(__file__), "nginx-deployment.yaml")) as f:
        dep = yaml.safe_load(f)
        k8s_beta = client.ExtensionsV1beta1Api()
        resp = k8s_beta.create_namespaced_deployment(
            body=dep, namespace="default")
        print("Deployment created. status='%s'" % str(resp.status))

if __name__ == '__main__':
    main()
jq6vz3qz

jq6vz3qz3#

除了其他人推荐的方法外,您还可以使用Hikaru'sload_full_yaml来完成此操作。
光的优点是:
1.它是面向对象的,像Python一样,有Pod.create()这样的函数。
1.它是根据OpenAPI规范自动生成的,因此不会遗漏任何内容
在构建我自己的开源Python Kubernetes platform时,我评估了至少五个不同的Kubernetes库,Hikaru是迄今为止最容易使用的库。

l5tcr1uw

l5tcr1uw4#

注意Vedant的答案并不完全等同于“kubectl apply”命令,而是“kubectl create”命令,Github上有一个关于这个问题的讨论:https://github.com/kubernetes-client/python/issues/1168
似乎没有办法使用API来模拟“kubectl应用”。

相关问题