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