API Server响应用户请求时附带一个状态码,该状态码符合HTTP规范。以下列出了API Server可能返回的状态码。
状态码 | 编码 | 描述 |
---|---|---|
200 | ok | 表明请求完成 |
201 | Created | 表明创建类的请求完全成功 |
204 | NoContent | 表明请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回 |
307 | TemporaryRedirect | 表明请求资源的地址被改变,建议客户端使用Location首部给出临时URL来定位资源。 |
400 | BadRequest | 表明请求是非法的,建议客户端不要重试,修改该请求 |
401 | Unauthorized | 表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为客户端必须提供认证信息。 如果客户端提供了认证信息,则返回该状态码,表明服务端指出所提供的认证信息不合适或非法。 |
403 | Forbidden | 表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置成拒绝访问,建议客户不要重试,修改该请求 |
404 | NotFound | 表明所请求的资源不存在。建议客户不要重试,修改该请求。 |
405 | MethodNotAllowed | 表明请求中带有该资源不支持的方法。建议客户不要重试,修改该请求 |
409 | Conflict | 表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成 |
422 | UnprocessableEntity | 表明由于所提供的作为请求部分的数据非法,创建或修改操作不能被完成 |
429 | TooManyRequests | 表明超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的 Retry-After首部,然后等待该首部指出的时间后再重试 |
500 | IntemalServerError | 表明服务端能被请求访问到,但是不能理解用户的请求:或者服务端内产生非预期中的一个错误,而且该错误无法被认知;或者服务端不能在一个合理的时间内完成处理(这可能由于服务器临时负载过重造成或者由于和其他服务器通信时的一个临时通信故障造成〉 |
503 | ServiceUnavailable | 表明被请求的服务无效。建议客户不要重试修改该请求 |
504 | ServerTimeout | 表明请求在给定的时间内无法完成.客户端仅在为请求指定超时( Timeout)参数时 会得到该响应 |
在调用API接口发生错误时,Kubernetes 将会返回一个状态类别(Status Kind)。下面是两种常见的错误场景:
- 当一个操作不成功时(例如,当服务端返回一个非2xx HTTP 状态码时);
- 当一个HTTP DELETE方法调用失败时。
状态对象被编码成JSON格式,同时该JSON对象被作为请求的响应体。该状态对象包含人和机器使用的域,这些域中包含来自API的关于失败原因的详细信息。状态对象中的信息补充了对HTTP状态码的说明。 例如:
$ curl -v -k -H "Authorization: Bearer WhCDvq4VPpYhrcfmF6ei7V9qlbqTubUc" HTTPs://10.240.122.184:443/api/v1/namespaces/default/pods/grafana
> GET /api/v1/namespaces/default/pods/grafana HTTP/1.1
> User-Agent: curl/7.26.0
> Host: 10.240.122.184
> Accept: */*
> Authorization: Bearer WhCDvq4VPpYhrcfmF6ei7V9qlbqTubUc
>
< HTTP/1.1 404 Not Found
< Content-Type: application/json
< Date: Wed, 20 May 2015 18:10:42 GMT
< Content-Length: 232
<
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "pods \"grafana\" not found",
"reason": "NotFound",
"details": {
"name": "grafana",
"kind": "pods"
},
"code": 404
}
- “status”域包含两个可能的值:Success和Failure。
- “message”域包含对错误的可读描述。
“reason”域包含说明该操作失败原因的可读描述。如果该域的值为空,则表示该域内没有任何说明信息。“reason”域澄清HTTP状态码,但没有覆盖该状态码。
“details”可能包含和“reason”域相关的扩展数据。每个“reason”域可以定义它的扩展的“details”域。该域是可选的,返回数据的格式是不确定的,不同的reason类型返回的“details”域的内容不一样。