# API Server

## API Server的功能

<mark style="color:blue;">**Kubernetes API Server**</mark>的核心功能是<mark style="color:blue;">**提供Kubernetes各类资源对象**</mark><mark style="color:blue;">（如Pod、RC、Service等）</mark><mark style="color:blue;">**的增、删、改、查及Watch等HTTP Rest接口**</mark>，成为集群内各个功能模块之间数据交互和通信的中心枢纽，是整个系统的<mark style="color:blue;">**数据总线**</mark>和<mark style="color:blue;">**数据中心**</mark>。除此之外，它还有以下一些功能特性。

* <mark style="color:blue;">**是集群管理的API入口**</mark>。
* 是资源配额控制的入口。
* 提供了完备的集群安全机制。

## kube-apiserver

Kubernetes API Server通过一个名为<mark style="color:blue;">**kube-apiserver**</mark>的进程提供服务，该进程运行在Master上。

* 在默认情况下，**kube-apiserver进程在本机的8080端口**（对应参数--insecure-port）**提供REST服务**。
* 可以同时启动**HTTPS安全端口（--secure-port=6443）来启动安全机制**，加强REST API访问的安全性。

通常可以通过命令行工具<mark style="color:blue;">**kubectl**</mark>来<mark style="color:blue;">**与Kubernetes API Server交互**</mark>，它们<mark style="color:blue;">**之间的接口是RESTful API**</mark>。

## API Server的特性

由于API Server是Kubernetes集群数据的唯一访问入口，因此<mark style="color:blue;">**安全性**</mark>与<mark style="color:blue;">**高性能**</mark>就成为API Server设计和实现的两大核心目标。

### 安全性：

* 通过采用<mark style="color:blue;">**HTTPS**</mark>安全传输通道与CA签名数字证书强制双向认证的方式，API Server的安全性得以保障。
* 此外，为了更细粒度地控制用户或应用对Kubernetes资源对象的访问权限，Kubernetes启用了<mark style="color:blue;">**RBAC访问控制策略**</mark>。

### 高性能：

API Server的性能是决定Kubernetes集群整体性能的关键因素，因此Kubernetes的设计者综合运用以下方式来最大程度地保证API Server的性能：

1. <mark style="color:blue;">**API Server拥有大量高性能的底层代码**</mark>。在API Server源码中使用**协程（Coroutine）+ 队列（Queue）**&#x8FD9;种轻量级的高性能并发代码，使得单进程的API Server具备了超强的多核处理能力，从而以很快的速度并发处理大量的请求。
2. <mark style="color:blue;">**普通List接口结合异步Watch接口**</mark>，不但完美解决了Kubernetes中各种资源对象的高性能同步问题，也极大提升了Kubernetes集群实时响应各种事件的灵敏度。
3. <mark style="color:blue;">**采用了高性能的etcd数据库而非传统的关系数据库**</mark>，不仅解决了数据的可靠性问题，也极大提升了API Server数据访问层的性能。

   在常见的公有云环境中，一个3节点的etcd集群在轻负载环境中处理一个请求的时间可以低于1ms，在重负载环境中可以每秒处理超过30000个请求。
