Kubernetes API服务器支持哪些数据格式?

Kubernetes API服务器支持哪些数据格式?,api,kubernetes,openapi,Api,Kubernetes,Openapi,当直接访问API服务器时(即不是使用kubectl,而是使用直接HTTP请求),API服务器支持哪些资源规范格式 到目前为止,在我看到的所有示例中,资源规范都是JSON(例如)。但是我找不到关于这个的任何一般信息 API服务器是否也接受其他格式的资源规范,如YAML或protobuf 类似地,当API服务器响应GET请求返回资源时,资源是否始终以JSON格式返回,或者是否支持任何其他格式?在Kubernetes中,JSON和YAML格式都受支持。我假设您使用kubectl创建和更新资源。kube

当直接访问API服务器时(即不是使用kubectl,而是使用直接HTTP请求),API服务器支持哪些资源规范格式

到目前为止,在我看到的所有示例中,资源规范都是JSON(例如)。但是我找不到关于这个的任何一般信息

API服务器是否也接受其他格式的资源规范,如YAML或protobuf


类似地,当API服务器响应GET请求返回资源时,资源是否始终以JSON格式返回,或者是否支持任何其他格式?

在Kubernetes中,JSON和YAML格式都受支持。我假设您使用kubectl创建和更新资源。kubectl接受这两种格式

如果您传递YAML格式,kubectl会在内部将其转换为json并将其发布到API服务器。

(部分“替代编码”)表示API服务器支持三种数据格式作为资源规范:

  • JSON
  • 亚马尔
  • 协议缓冲区(protobuf)
我使用
curl
测试了以这些格式创建资源的过程,它可以正常工作,如下所示

准备工作 为了方便与API服务器对话,请使用kubectl启动API服务器的代理:

kubectl代理
现在可以在上访问API服务器

Kubernetes API规范可在上访问

请求正文格式 您必须在
内容类型
标题中指定HTTP POST请求正文的格式(即资源规范)

支持以下数据格式:

  • application/json
  • application/yaml
  • application/vnd.kubernetes.protobuf
以下是具体的请求示例

使用JSON创建资源 用JSON定义资源规范并将其保存在文件中

例如,
pod.json

{
   "apiVersion":"v1",
   "kind":"Pod",
   "metadata":{
      "name":"test-pod"
   },
   "spec":{
      "containers":[
         {
            "image":"nginx",
            "name":"nginx-container"
         }
      ]
   }
}
调用API服务器以创建资源:

curl-H“内容类型:application/json”-d“$(cat pod.json)”-X POSThttp://127.0.0.1:8001/api/v1/namespaces/default/pods
使用YAML创建资源 在YAML中定义资源规范并将其保存在文件中

例如,
pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - image: nginx
    name: nginx-container
调用API服务器以创建资源:

curl-H“内容类型:应用程序/yaml”-d“$(cat pod.yaml)”-X POSThttp://127.0.0.1:8001/api/v1/namespaces/default/pods
使用protobuf创建资源 我没有对此进行测试,因为Kubernetes protobuf wire格式在资源的protobuf序列化过程中使用了一个自定义包装器(请参见和)。但是,原则上,这应该是可行的

响应体格式 如上所示创建资源时,API服务器会在HTTP响应中返回同一资源的完整规范(即,您提交的、使用所有默认值初始化的规范、状态字段等)

您可以使用请求中的
Accept
标题选择此响应数据的格式

接受
标题的接受格式与
内容类型
标题的接受格式相同:

  • 应用程序/json
    (默认)
  • application/yaml
  • application/vnd.kubernetes.protobuf
例如:

curl-H“内容类型:application/json”-H“接受:application/yaml”-d“$(cat pod.json)”-X POSThttp://127.0.0.1:8001/api/v1/namespaces/default/pods

内容类型
接受
标题中的所有格式组合都是可能的。

我的意思是当我直接访问API服务器时,也就是说,不是使用kubectl,而是直接向它发出HTTP请求,例如使用
curl
。在这种情况下,可接受的内容类型是什么?它只是JSON吗?