92 lines
5.7 KiB
Markdown
92 lines
5.7 KiB
Markdown
|
---
|
||
|
title: Kubernetes API Overview
|
||
|
assignees:
|
||
|
- bgrant0607
|
||
|
- erictune
|
||
|
- lavalamp
|
||
|
- jbeda
|
||
|
---
|
||
|
|
||
|
The REST API is the fundamental fabric of Kubernetes. All operations and
|
||
|
communications between components are REST API calls handled by the API Server,
|
||
|
including external user commands. Consequently, everything in the Kubernetes
|
||
|
platform is treated as an API object and has a corresponding entry in the
|
||
|
[API](/docs/api-reference/{{page.version}}/).
|
||
|
|
||
|
Most operations can be performed through the
|
||
|
[kubectl](/docs/user-guide/kubectl-overview/) command-line interface or other
|
||
|
command-line tools, such as [kubeadm](/docs/admin/kubeadm/), which in turn use
|
||
|
the API. However, the API can also be accessed directly using REST calls.
|
||
|
|
||
|
## API versioning
|
||
|
|
||
|
To make it easier to eliminate fields or restructure resource representations, Kubernetes supports
|
||
|
multiple API versions, each at a different API path, such as `/api/v1` or
|
||
|
`/apis/extensions/v1beta1`.
|
||
|
|
||
|
We chose to version at the API level rather than at the resource or field level to ensure that the API presents a clear, consistent view of system resources and behavior, and to enable controlling access to end-of-lifed and/or experimental APIs. The JSON and Protobuf serialization schemas follow the same guidelines for schema changes - all descriptions below cover both formats.
|
||
|
|
||
|
Note that API versioning and Software versioning are only indirectly related. The [API and release
|
||
|
versioning proposal](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/versioning.md) describes the relationship between API versioning and
|
||
|
software versioning.
|
||
|
|
||
|
Different API versions imply different levels of stability and support. The criteria for each level are described
|
||
|
in more detail in the [API Changes documentation](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/api_changes.md#alpha-beta-and-stable-versions). They are summarized here:
|
||
|
|
||
|
- Alpha level:
|
||
|
- The version names contain `alpha` (e.g. `v1alpha1`).
|
||
|
- May be buggy. Enabling the feature may expose bugs. Disabled by default.
|
||
|
- Support for feature may be dropped at any time without notice.
|
||
|
- The API may change in incompatible ways in a later software release without notice.
|
||
|
- Recommended for use only in short-lived testing clusters, due to increased risk of bugs and lack of long-term support.
|
||
|
- Beta level:
|
||
|
- The version names contain `beta` (e.g. `v2beta3`).
|
||
|
- Code is well tested. Enabling the feature is considered safe. Enabled by default.
|
||
|
- Support for the overall feature will not be dropped, though details may change.
|
||
|
- The schema and/or semantics of objects may change in incompatible ways in a subsequent beta or stable release. When this happens,
|
||
|
we will provide instructions for migrating to the next version. This may require deleting, editing, and re-creating
|
||
|
API objects. The editing process may require some thought. This may require downtime for applications that rely on the feature.
|
||
|
- Recommended for only non-business-critical uses because of potential for incompatible changes in subsequent releases. If you have
|
||
|
multiple clusters which can be upgraded independently, you may be able to relax this restriction.
|
||
|
- **Please do try our beta features and give feedback on them! Once they exit beta, it may not be practical for us to make more changes.**
|
||
|
- Stable level:
|
||
|
- The version name is `vX` where `X` is an integer.
|
||
|
- Stable versions of features will appear in released software for many subsequent versions.
|
||
|
|
||
|
## API groups
|
||
|
|
||
|
To make it easier to extend the Kubernetes API, we implemented [*API groups*](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-group.md).
|
||
|
The API group is specified in a REST path and in the `apiVersion` field of a serialized object.
|
||
|
|
||
|
Currently there are several API groups in use:
|
||
|
|
||
|
1. the "core" (oftentimes called "legacy", due to not having explicit group name) group, which is at
|
||
|
REST path `/api/v1` and is not specified as part of the `apiVersion` field, e.g. `apiVersion: v1`.
|
||
|
1. the named groups are at REST path `/apis/$GROUP_NAME/$VERSION`, and use `apiVersion: $GROUP_NAME/$VERSION`
|
||
|
(e.g. `apiVersion: batch/v1`). Full list of supported API groups can be seen in [Kubernetes API reference](/docs/reference/).
|
||
|
|
||
|
|
||
|
There are two supported paths to extending the API.
|
||
|
1. [Third Party Resources](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/extending-api.md)
|
||
|
are for users with very basic CRUD needs.
|
||
|
1. Coming soon: users needing the full set of Kubernetes API semantics can implement their own apiserver
|
||
|
and use the [aggregator](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/aggregated-api-servers.md)
|
||
|
to make it seamless for clients.
|
||
|
|
||
|
|
||
|
## Enabling API groups
|
||
|
|
||
|
Certain resources and API groups are enabled by default. They can be enabled or disabled by setting `--runtime-config`
|
||
|
on apiserver. `--runtime-config` accepts comma separated values. For ex: to disable batch/v1, set
|
||
|
`--runtime-config=batch/v1=false`, to enable batch/v2alpha1, set `--runtime-config=batch/v2alpha1`.
|
||
|
The flag accepts comma separated set of key=value pairs describing runtime configuration of the apiserver.
|
||
|
|
||
|
IMPORTANT: Enabling or disabling groups or resources requires restarting apiserver and controller-manager
|
||
|
to pick up the `--runtime-config` changes.
|
||
|
|
||
|
## Enabling resources in the groups
|
||
|
|
||
|
DaemonSets, Deployments, HorizontalPodAutoscalers, Ingress, Jobs and ReplicaSets are enabled by default.
|
||
|
Other extensions resources can be enabled by setting `--runtime-config` on
|
||
|
apiserver. `--runtime-config` accepts comma separated values. For ex: to disable deployments and jobs, set
|
||
|
`--runtime-config=extensions/v1beta1/deployments=false,extensions/v1beta1/jobs=false`
|