Kubernetes技术与架构(六)

1     前言

1.1   CNCF

1.2   云原生

1.3   公有云服务

1.4   私有云服务

1.5   混合云服务

2     Kubernetes定义

2.1   基本概念

2.2   架构演进

2.2.1 传统部署(Traditional deployment 

2.2.2 虚拟化部署(Virtualized deployment

2.2.3 容器化部署(Container deployment

2.3   使用场景

2.4   使用约束

3     Kubernetes架构

3.1   集群架构

3.2   控制面(Control Plane)组件

3.2.1 kube-apiserver

3.2.2 etcd

3.2.3 kube-scheduler

3.2.4 kube-controller-manager

3.2.5 cloud-controller-manager

3.3   节点(Node)组件

3.3.1 kubelet

3.3.2 kube-proxy

4     Kubernetes技术

4.1   容器化技术

4.1.1 cgroups技术

4.1.1.1 基本定义

4.1.1.2 核心接口文件

4.1.1.3 基本运作

4.1.1.3.1     挂载

4.1.1.3.2     进程

4.1.1.3.3     线程

4.1.1.3.4     事件

4.1.1.3.5     控制器

4.1.1.3.6     委派授权

4.1.1.3.7     指导原则

4.1.1.4 资源分发模型

4.1.1.4.1     权重

4.1.1.4.2     限制

4.1.1.4.3     保护

4.1.1.4.4     分配

4.1.1.5 控制器

4.1.1.5.1     处理器

4.1.1.5.2     内存

4.1.1.5.3     IO

4.1.1.5.4     进程

4.1.1.5.5     设备

4.1.1.5.6     RDMA

4.1.2 Docker容器运行环境

从系统架构的角度看,docker只是一个容器化运行环境,部署在docker中的应用的其他特性,例如高可用性、高可靠性、高可扩展性、弹性可伸缩等相关的非功能性特性需要Kubernetes体系架构的保证。本章节主要描述docker容器运行环境相关的性质。

由前面的章节分析可知,Kubernetes使用kubelet组件对接Kubernetes容器化CRI接口与docker容器运行环境,因此,用户可以使用kubelet组件提供的操作命令直接操作docker容器运行环境。

4.1.2.1 Docker架构

Kubernetes技术与架构(六)_第1张图片

如上图所示,docker架构由以下几个部分组成:

Docker daemon

该进程是每个服务器主机中docker运行环境的后台进程,负责监听请求、管理docker对象包括镜像、容器、网络以及存储容量,多个docker后台进程之间可以相互通讯

Docker client

Docker客户端是一个控制台,用户可以使用控制台与 docker进程相互通讯例如发送操作指令,用户可以同时与多个docker进程相互通讯

Docker registries

Docker注册中心是负责存储docker容器镜像(images),用户可以发布容器镜像到该注册中心实现管理,用户可以从该注册中心拉取对应的容器镜像到本地容器运行环境中部署运行

Docker objects

容器对象包括以下几个分类:

镜像(images):一个容器镜像(image)是只读类型的文件,提供给容器运行环境创建一个运行时的docker容器实例,一般情况下,一个运行环境需要依赖其他组件,所以,一个容器镜像可以依赖其他容器镜像。用户可以使用dockerfile创建容器镜像,也可以直接从docker镜像注册中心下载容器镜像。用户可以重建容器镜像并重新发布到容器镜像注册中心。因此,docker是比虚拟机技术更加轻量化的容器化技术。

容器(Containers):一个容器(container)是一个容器镜像(image)的运行实例。用户可以使用docker客户端命令创建、启动、停止、移动、删除一个容器。用户可以指定容器的网络、存储以及容器的隔离级别。

4.1.2.2 使用场景

Kubernetes技术与架构(六)_第2张图片

如上图所示,docker容器化技术在实际的devops架构中的使用场景。在devops标准化流程中,docker的镜像注册中心是连接开发阶段与运维阶段的中心区,是实现CI持续集成与CD持续发布的中心纽带。

同理,在kubernetes环境中编排应用服务时,也可以从以上容器镜像中心中拉取业务对应的应用服务镜像,使用该方法可以对接传统的docker环境与kubernetes环境,从而实现同一镜像能快速发布到不同环境中的需求。

4.1.3 containerd容器运行环境

containerd是实现kubernetes的CRI标准接口的容器运行环境。

4.1.3.1 Containerd架构

Kubernetes技术与架构(六)_第3张图片

Containerd是CNCF标准项目,由以上的架构图可知,docker与kubernetes都使用containerd作为容器的运行环境。Containerd实现kubernetes的标准CRI接口,因此,kubernetes可以使用kubelet客户端对容器运行环境中的容器对象实现全生命周期的管理。

Containerd的主体架构分API接口层、核心层、后端层,如下所述:

API接口层

接口层提供三个对外开放的模块接口,分别是containerd client、service handlers、metrics

containerd client:对外提供客户端,可以直接使用或者对接CRI标准接口

service handlers:对外提供的协议类型的服务接口

metrics:对外提供信息统计类型的接口,由Prometheus组件实现

Core层

容器服务层,提供不同的服务,包括容器元数据管理、容器镜像管理、容器对象管理等相关服务

Backend层

操作系统级别的底层技术服务,主要对接操作系统内核态与用户态之间交互的核心功能

4.1.3.2 使用场景

在containerd架构图中可知,在上层的生态系统的建设领域中,大部分的云厂商都使用CNCF云原生的关键组件作为云支撑平台。

4.1.4 Pod的基本概念

4.1.4.1 Pod的定义

Pod是kubernetes集群架构实现资源调度的最小单元,Pod封装了上述章节中所述的容器对象,Pod可以封装一个或者多个容器对象,每个容器对象中可运行业务应用对应的容器镜像,因此,一个Pod中的容器对象共同分享该Pod所分配的资源,包括命名空间、cgroup控制的例如处理器或者内存相关的系统资源、网络资源、存储资源等。其中,Pod与Pod之间相互独立与实现资源隔离。如下所示:Pod的部署结构举例:

Kubernetes技术与架构(六)_第4张图片

如上图所示,该Pod包括多个容器对象,Pod内的对象共享相同的存储容量。

4.1.4.2 Pod的编写

Kubernetes提供一套标准规范支持Pod的编写,使用该规范可以实现Pod内的应用编排以及实现对应资源的调度,举例如下所示:

Kubernetes技术与架构(六)_第5张图片

使用命令执行Pod的定义描述文件即可运行指定的Pod:

kubectl apply -f pod.yaml

4.1.4.3 Pod的生命周期

4.1.4.3.1     Pod的阶段

一个Pod的生命周期分为以下几个阶段:

Pending

该阶段表示Pod已经在kubernetes集群创建完成,正在等待从容器镜像中心中拉取镜像到本地并运行容器对象以及等待kubernetes调度运行容器镜像所需要的资源

Running

该阶段表示Pod已经被kubernetes调度到指定的工作节点,Pod内的所有容器对象已经被创建,最少一个容器对象已经成功运行或者正常启动或者正在重新启动中

Succeeded

该阶段表示Pod内所有的容器对象已经被成功终止,而且不再被重新启动

Failed

该阶段表示Pod内所有的容器对象已经被成功终止,而且最少有一个容器对象是被终止失败,也就是该对象被系统强行终止或者是无状态地退出

Unknown

该阶段表示kubernetes集群无法获取到Pod的当前状态,一般情况下是因为网络通讯原因无法与Pod所在的工作节点通讯

4.1.4.3.2     Pod的状态

一个Pod分为以下几个状态:

Waiting

该状态表示Pod正在等待其他操作完成Pod的正常启动,例如从容器镜像中心拉取容器镜像到本地运行、执行一些数据加密等操作

Running

该状态表示Pod正在正常运行中,能正常执行应用业务操作

Terminated

该状态表示Pod已经被成功终止,已经停止提供应用业务操作

(未完待续)

你可能感兴趣的:(kubernetes,架构,java)