# Kubernetes

## 概述

Kubernetes的亲爹是Google，基于其内部的Brog和Omega以及其他系统实践的开源操作系统。

Kubernetes是容器编排工具，可以为应用程序提供强大的编排功能，下图是应用在Kubernetes中的基本架构。

![应用在Kubernetes中的基本架构](https://2906552408-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6Ub8CloS5kJszh6xSR%2Fsync%2Fcadb869688ead1759eee23fe85511744e5f7c30d.png?generation=1588594612402414\&alt=media)

客户端（用户、运行在其他Pod或外部的客户端程序的统称）向Service发出请求，Service将请求转发至被ReplicationController或ReplicaSet接管的某一个Pod中，Pod中的容器执行具体的请求。

图中的Service、Pod、ReplicationController等都是Kubernetes提供的资源，Service和RC、RS都是通过标签选择器来匹配Pods。

{% hint style="info" %}
**Tips：**&#x50;od还可以被其他Controller接管，ReplicationController和ReplicaSet只是众多Controller中的两个，[**控制器章节**](https://yangsijie151104.gitbook.io/k8s-note/kong-zhi-qi-controllers/5.-kong-zhi-qi-controllers)中会进行更详细的说明。
{% endhint %}

## 资源

Kubernetes中有许多资源供我们使用，如Deployment、Pod、Service等，每一种资源都有各自的用途。

我们通常都通过编写YAML配置文件的方式创建资源，配置文件通常包括以下四个部分：

* `apiVersion`：资源所属的API组，可以通过`kubectl explain`的方式查看资源所属的组，随着Kubernetes版本的不同，部分beta版的资源类型可能会被放入其他组；
* `kind`：资源类型；
* `metadata`：资源的元数据，包含：资源名、资源标签等；
* `spec`：资源的规格（资源的相关配置）；
