首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes API服务器支持什么数据格式?

Kubernetes API服务器支持什么数据格式?
EN

Stack Overflow用户
提问于 2019-02-20 12:01:29
回答 2查看 983关注 0票数 2

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

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

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

类似地,当API服务器响应GET请求返回资源时,资源总是以JSON形式返回还是支持其他格式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-20 22:55:19

管理Kubernetes,第4章 (“备用编码”部分)说,API服务器支持资源规范的三种数据格式:

  • JSON
  • YAML
  • 协议缓冲器(原型)

我测试了使用curl以这些格式创建资源,它可以工作,如下所示。

准备工作

为了方便地与API服务器对话,使用kubectl启动API服务器的代理:

代码语言:javascript
复制
kubectl proxy

现在,API服务器可以在http://127.0.0.1:8001上访问。

Kubernetes API规范可以在http://127.0.0.1:8001/openapi/v2上访问。

请求体格式

您必须在Content-Type头中指定HTTP请求主体(即资源规范)的格式。

支持下列数据格式:

  • application/json
  • application/yaml
  • application/vnd.kubernetes.protobuf

以下是请求的具体例子。

用JSON创建资源

用JSON定义资源规范,并将其保存在文件中。

例如,pod.json

代码语言:javascript
复制
{
   "apiVersion":"v1",
   "kind":"Pod",
   "metadata":{
      "name":"test-pod"
   },
   "spec":{
      "containers":[
         {
            "image":"nginx",
            "name":"nginx-container"
         }
      ]
   }
}

调用API服务器来创建资源:

代码语言:javascript
复制
curl -H "Content-Type: application/json" -d "$(cat pod.json)" -X POST http://127.0.0.1:8001/api/v1/namespaces/default/pods

用YAML创建资源

在YAML中定义资源规范并将其保存在文件中。

例如,pod.yaml

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - image: nginx
    name: nginx-container

调用API服务器来创建资源:

代码语言:javascript
复制
curl -H "Content-Type: application/yaml" -d "$(cat pod.yaml)" -X POST http://127.0.0.1:8001/api/v1/namespaces/default/pods

使用protobuf创建资源

我没有测试这一点,因为Kubernetes protobuf格式使用了围绕资源的protobuf序列化的自定义包装器(请参阅这里这里)。但是,原则上,这应该是可行的。

响应体格式

创建资源时,API服务器返回HTTP中相同资源的完整规范(即您提交的规范,使用所有默认值、status字段等初始化)。

您可以使用请求中的Accept头来选择此响应数据的格式。

Accept头的可接受格式与Content-Type标头的格式相同:

  • application/json (默认)
  • application/yaml
  • application/vnd.kubernetes.protobuf

例如:

代码语言:javascript
复制
curl -H "Content-Type: application/json" -H "Accept: application/yaml" -d "$(cat pod.json)" -X POST http://127.0.0.1:8001/api/v1/namespaces/default/pods

Content-TypeAccept头中的所有格式组合都是可能的。

票数 3
EN

Stack Overflow用户

发布于 2019-02-20 12:21:58

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54785930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档