> For the complete documentation index, see [llms.txt](https://qiuyuetaodaye.gitbook.io/kubernetes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://qiuyuetaodaye.gitbook.io/kubernetes/kubernetes-ji-chu-fu-wu-yu-zu-jian-yi.md).

# Kubernetes 基础服务与组件（一）

### 什么是Kubernetes？

Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力，包括多层次的安全防护和准入机制/多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复功能、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制，以及多粒度的资源配额管理能力。同时kubernetes提供了完善的管理工具，这些工具覆盖了包括开发、测试部署、运维监控在内的各个环节；因此kubernetes是一个全新的基于容器技术的分布式架构解决方案，并且是一个一站式的完备的分布式系统开发和支撑平台

![](https://www.dgstack.cn/wp-content/uploads/2019/01/294d9d41bcbf4e5046a65eb44905d8a3.png)

### **一、Kubernetes 基础服务分类**

* [Kubernetes `Service`介绍](https://www.dgstack.cn/archives/2295.html#title-1)
* [Kubernetes `Pod`介绍](https://www.dgstack.cn/archives/2295.html#title-2)
* Service 和Pod如何关联
* [Kubernetes `RC`介绍](https://www.dgstack.cn/archives/2295.html#title-3)
* [Kubernetes `Master`介绍](https://www.dgstack.cn/archives/2295.html#title-4)
* [Kubernetes `Node`介绍](https://www.dgstack.cn/archives/2295.html#title-5)
* [Kubernetes 中`Master`与`Node`工作内容](https://www.dgstack.cn/archives/2295.html#title-6)

下面我们逐一的进行说明

### **二、Kubernetes Service介绍**

Service(服务)是分布式集群架构的`核心`，一个Server 对象拥有如下`关键特征`:

```bash
拥有一个唯一指定的名字(比如 mysql-server)
拥有一个虚拟IP (Cluster IP、Service IP或VIP)和端口号
能够提供某种远程服务能力
被映射到了提供这种服务能力的一组容器应用上
```

Service的服务进程是基于Socker对外提供服务，比如 redis、Mysql，web，虽然一个Service通常由多个相关的服务进程来提供服务，每个服务进程都有一个独立的终端地址(IP+Port)，但K8s能够让我们通过Service `虚拟集群（IP+Service Port）`连接到指定的Service上,K8s内置负载均衡和故障恢复机制，所以后端进程以及进程导致的服务宕机，都不会影响我们调用服务。Service本身`一旦创建就不再变化`，意味着k8s集群中，我们再也不用为了服务的IP地址变来变去的问题而头疼。

### **三、Kubernetes Pod介绍**

Pod概念 Pod运行在node节点中（node是我们自己给定义的），私有云公有云物理机都可以，通常在一个节点上运行几百个Pod;其次每个Pod里运行着一个特殊的被称之为Pause的容器，其它容器则为业务容器，这些业务容器`共享`Pause容器的网络栈和Volume挂载卷，因此他们之间的通讯和数据交换更为高效。在设计时我们可以充分利用这一特征,将一组密切相关的服务进程放入同一个Pod中。

并不是每个Pod和它里面运行的容器都能映射到一个Service 上，只有那些提供服务(无论是对内还是对外)的一组Pod才会被映射成一个服务。 ![](https://www.dgstack.cn/wp-content/uploads/2019/01/ca30f6f0b83b570bf9686e71d7f830cb.png)

#### 3.1 Service 和Pod如何关联

容器具有强大的隔离功能，所以把给Service提供服务的进程放到容器中隔离，k8s就设计了Pod对象；

```
Pod对象：将每个服务进程包装到相应的Pod中，使其成为Pod中运行的一个容器Container
```

为了建立Service 和Pod间的关联关系，K8s给每个Pod填上一个标签`Lable`,给运行MySQL的Pod贴上`name=mysql`标签，给运行PHP的Pod贴上`name=php`标签，然后给相应的Service定义标签选择器Label Selector，比如MySQL Service的标签选择器的选择条件为name=mysql，意为该Service 要作用于所有包含name=mysql Label的Pod上。这样就巧妙的解决了Service和Pod关联问题。

### **四、Kubernetes RC介绍**

在K8s集群中，如果您想给Service扩容，只要给它的Pod创建一个RC`Replication Controller`即可 定义一个RC文件包括以下3个关键点:

```bash
目标Pod的定义
目标Pod需要运行的副本数量(Replicas)
要监控的目标Pod的标签(Label)
```

在创建好RC`系统自动创建好Pod`后，k8s会通过RC中定义的标签`Label`筛选出对应的Pod实例并实时监控其状态和数量，系统会自动的对比实例数量，如果少就利用RC中Pod模板创建1个新的Pod，找个合适的Node去跑，直到Pod实例的数量达到预定目标，过程完成自动化，无需人参与，只需修改`RC`中副本的数量。

### **五、Kubernetes Master介绍**

K8s里master是用来`管理和控制`集群的，基本上k8s所有的控制命令都发给它，他负责具体的执行过程，后面我们实战的管理命令 都是在master上执行，如果`master宕机`或不可用，那么集群内容器的管理都会失效。

Master节点上的`三个关键`进程：

* K8s API Server (kube-apiserver)：提供了HTTP Rest接口的关键服务进程，是K8s里所有资源的增、删、改、查等操作的唯一入口，也是集群控制的入口进程
* K8s Controller Manager (kube-controller-manager):Kubernetes里所有的资源对象的自动化控制中心
* K8s Scheduler (kube-scheduler)：负责资源调度(Pod调度)的进程

  另外在Master节点上还需要启动一个`etcd`服务,因为Kubernetes里的所有资源对象的数据全部是保存在etcd中。

  ![](https://www.dgstack.cn/wp-content/uploads/2019/01/8b31a4fe25953598161417453ac2d70e.png)

### **六、K8s Node 介绍**

除Master以外的其它机器统称Node节点，每个Node都会被Master分配一些工作负载`Docker容器`，当某个Node宕机了，Master会自动将这个node上工作转移到其他节点上去。

#### 每个Node节点上都运行着以下一组关键进程。

* kubelet：负责Pod对应容器的创建、停止等任务，同时与Master节点密切协作，实现集群管理的基本功能
* kube-proxy：实现Kubernetes Service的通信与负载均衡机制的重要组件。
* Docker Engine(Docker)：Docker引擎，负责本机的容器创建和管理工作。

![](https://www.dgstack.cn/wp-content/uploads/2019/01/dc4512720a552c33b1b97332bd5d22d2.png)

### **七、Kubernetes 中Master与Node工作内容**

k8s集群一般是1个master+N个node节点，

> master 其中kube-apiserver、kube-controller-manager和kube-scheduler进程在master上运行，实现了整个集群的的资源管理，Pod调度，弹性收缩，安全控制，系统监控和纠错管理功能，并且都是`全自动`。
>
> node Node主要负责工作，真正的应用程序，在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着 Kubernetes的kubelet、kube-proxy服务进程，这些服务进程负责Pod创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡 ![](https://www.dgstack.cn/wp-content/uploads/2019/01/294d9d41bcbf4e5046a65eb44905d8a3.png) 此文参考 阳明博客 丛宇鸿 i4t|Kubernetes集群实战 以及 李振良 k8s集群入门与进阶 ，感谢三位大佬的分享。
