Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Kubernetes python客户端库部署Knative服务_Python_Kubernetes_Knative - Fatal编程技术网

如何使用Kubernetes python客户端库部署Knative服务

如何使用Kubernetes python客户端库部署Knative服务,python,kubernetes,knative,Python,Kubernetes,Knative,我们正在尝试将knative与Kubernetes的python客户机库一起使用来部署服务。我们正在使用以下yaml文件: apiVersion: serving.knative.dev/v1 kind: Service metadata: name: test-{{ test_id }} namespace: default spec: template: spec: containers: - image: test-deployment:la

我们正在尝试将knative与Kubernetes的python客户机库一起使用来部署服务。我们正在使用以下yaml文件:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: test-{{ test_id }}
  namespace: default
spec:
  template:
    spec:
      containers:
        - image: test-deployment:latest
          resources:
            limits:
              cpu: 50m
              memory: 128Mi
            requests:
              cpu: 50m
              memory: 128Mi
      containerConcurrency: 1
如果我们使用kubernetes的命令行工具进行部署,它可以正常工作

kubectl create -f test.yaml
使用python客户端库,我们正在做:

import kubernetes
import yaml
import uuid

from jinja2 import Template
from urllib3 import exceptions as urllib_exceptions

api = kubernetes.client.CoreV1Api(api_client=kubernetes.config.load_kube_config(context=cluster))

with open(deployment_yaml_path, 'r') as file_reader:
    file_content = file_reader.read()

deployment_template = Template(file_content)

deployment_template = yaml.safe_load(template.render({
    'test_id': str(uuid.uuid4())
}))

deployment = kubernetes.client.V1Service(
    api_version=deployment_template['apiVersion'],
    kind="Service",
    metadata=deployment_template['metadata'],
    spec=deployment_template['spec']
)

try:
    response = api.create_namespaced_service(body=deployment, namespace='default')
except (kubernetes.client.rest.ApiException, urllib_exceptions.HTTPError):
    raise TestError
但是,我们遇到了以下错误:

Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Audit-Id': 'a1968276-e16b-44f4-a40d-5eb5eaee9d47', 'Content-Type': 'application/json', 'Date': 'Thu, 23 Apr 2020 08:29:36 GMT', 'Content-Length': '347'})
HTTP response body: {
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "Service in version \"v1\" cannot be handled as a Service: no kind \"Service\" is registered for version \"serving.knative.dev/v1\" in scheme \"k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go:30\"",
  "reason": "BadRequest",
  "code": 400
}
有没有办法用knative部署服务?据我所知,knative服务不同于普通的Kubernetes服务。我不知道问题是我试图以错误的方式部署服务,还是Kubernetes python客户端库还不支持这种部署

编辑:


尝试使用
create\u namespaced\u custom\u对象

参考:


这里的服务是特定于Knative的自定义资源。

尝试使用
create\u namespaced\u custom\u object

参考:


这里,服务是Knative特有的自定义资源。

kubernetes.client.V1Service
是对kubernetes“服务”概念的引用,它是一个跨POD的选择器,显示为网络端点,而不是Knative的“服务”概念,这是通过网络提供功能的整个应用程序

基于,您需要执行以下操作才能获取并使用Knative服务的客户端:

api=kubernetes.client.CustomObjectApi()
尝试:
resource=api.create\u命名空间\u自定义\u对象(
group=“serving.knative.dev”,
version=“v1”,
复数=“服务”,
namespace=“default”,
body=部署(模板)
除了(kubernetes.client.rest.ApiException、urllib_exceptions.HTTPError):
升起测试器错误

如果要经常这样做,您可能需要制作一个助手,该助手的参数类似于
create\u namespaced\u service
,还有一个类似于kubernetes.client.V1Service的包装器对象,用于简化创建Knative服务。

kubernetes.client.V1Service
是对kubernetes“服务”概念的引用,它是跨POD的选择器,作为网络端点出现,而不是Knative“服务”概念,这是通过网络提供功能的整个应用程序

基于,您需要执行以下操作才能获取并使用Knative服务的客户端:

api=kubernetes.client.CustomObjectApi()
尝试:
resource=api.create\u命名空间\u自定义\u对象(
group=“serving.knative.dev”,
version=“v1”,
复数=“服务”,
namespace=“default”,
body=部署(模板)
除了(kubernetes.client.rest.ApiException、urllib_exceptions.HTTPError):
升起测试器错误

如果要经常这样做,您可能需要制作一个助手,该助手的参数类似于
create\u namespaced\u service
,也可能是类似于
kubernetes.client.V1Service的包装器对象,以简化创建Knative服务。

python客户端版本和kubernetes版本请选择python客户端版本和kubernetes版本
Python Client Library: kubernetes==11.0.0

Kubernetes: 
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.4", GitCommit:"67d2fcf276fcd9cf743ad4be9a9ef5828adc082f", GitTreeState:"clean", BuildDate:"2019-09-18T14:51:13Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"15+", GitVersion:"v1.15.11-gke.5", GitCommit:"a5bf731ea129336a3cf32c3375317b3a626919d7", GitTreeState:"clean", BuildDate:"2020-03-31T02:49:49Z", GoVersion:"go1.12.17b4", Compiler:"gc", Platform:"linux/amd64"}