美文网首页
第二章:docker+kubernetes微服务架构学习

第二章:docker+kubernetes微服务架构学习

作者: 蓝调_4f2b | 来源:发表于2020-08-06 15:51 被阅读0次

最近在学习如何在docker+k8s上部署开发的项目,在这里作为随笔进行一些记录。

1. 容器化微服务与传统虚拟机在理论上区别:

服务器虚拟化解决核心问题为资源调配,而容器解决的核心问题为应用开发、测试及部署。

2. 容器化微服务相对于传统虚拟机化服务优点:

(1)docker容器化的速度与效率比传统虚拟机的速度效率更快,docker利用宿主机的系统内核进行运行。“虚拟机需要数分钟启动的工作,Docker容器只需要50毫秒”。

(2)资源利用率高,一台物理机中可以运行很多容器。

(3)性能开销小,共用宿主机操作系统。

(4)用docker容器化打包项目代码及运行环境产生的镜像可更方便进行项目的迁移,将打包后的镜像部署于云平台上即可完成迁移。

容器化微服务相对于传统虚拟机服务的不足:

 (1)容器化微服务隔离性比服务器虚拟化差

 “不同的集装箱属于不同的运单(Docker上运行不同的应用实例),相互独立(隔离)。但由同一个库管人员管理(主机操作系统内核),因此通过库管人员可以看到所有集装箱的相关信息(因为共享操作系统内核,因此相关信息会共享)。”

 3. docker+kubernetes容器化架构方案:

(1)采用docker容器化框架的方案与VM虚拟机框架的方案结构图如下。

docker容器化与VM虚拟机框架

docker的架构相较于VM减少了一层虚拟机中的系统Guest OS,并将用于对硬件进行虚拟化的Hypervisor组件替换为直接使用docker硬件资源。通过减少硬件虚拟化的步骤,增加docker的效率。

(2)采用kubernetes管理docker项目

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

采用Kubernetes可以对创建的docker容器进行部署管理,Kubernetes由Master组件与Node组件组成。Node组件为一个虚拟机或物理机,每个包含运行pods的必要服务。pod为Kubernetes运行中的一个进程,内部会封装一个或多个容器(dokcer)。Kubelet用于监视指派到其所在Node上的pod,并可创建,修改,监控及删除所管理的pod。Kube-Proxy负责为pod对象提供代理。所有的运行在Kubernetes中的pod容器共享相同的IP。

Kubernetes集群架构

(3) 基于Kubernetes实现负载均衡

当前最流行应用于多个领域的负载均衡方式是Ingress,通过在Kubernetes pod中的控制器进行操作。Ingress Controller提供了四层负载均衡与七层负载均衡两种代理方式,控制器包含一个Ingress资源,一组管理流量的规则与一个应用这些规则的守护进程。当用户的url访问Kubernetes集群的api server时,Ingress会根据规则将用户的请求分发到不同的pod上,实现负载均衡。

最常见的负载均衡实现方式是开发者将实现前后端分离的项目分别部署于不同pod上,采用Ingress对前后端分别访问。这样做可以大大的方便运维同学的维护工作,当前端的代码进行更新或升级后,运维同学仅需要重新启动前端相关的pod即可完成整个项目的更新,若前后端一起部署于同一pod则重启工作占用时间更高,并消耗掉没有必要消耗的资源。

采用Ingress Controller负载均衡

(4)Kubernetes中的持久卷机制

鉴于pod在生命周期之后会销毁,在运行过程中也可能遇到异常发生中断,Kubernetes为pod提供了持久卷为其保存运行期间的重要数据,在该pod下次启动时自动恢复相关重要数据。Kubernetes主要为Pod提供了两种类型的持久卷。

静态持久卷:由集群管理员创建多个PV,它们携带着pod存储中的详细信息,这些信息对于集群中的用户往往十分重要。Kubernetes将这些信息存储于Kubernetes API中。

动态持久卷:当管理员创建的静态PV都不匹配用户的PVC时,集群可能会尝试专门地供给volume给PVC。这种供给基于StorageClass。PVC与PV以一对一进行映射,若无可以匹配的PV,那么PVC将一直处于未绑定状态。

4. Kubernetes集群高可用

Kubernetes集群node的高可用主要由Master节点实现。当node出现异常中断或挂掉时,负责监控的master会检查到node的异常,并会紧急从后备的node节点中选择一个作为顶替。

所以在一般使用过程中,我们只需做好master节点的高可用。由kube-controller-manager与kube-scheduler我们可以较方便的完成master高可用的配置,这两项服务为master的一部分功能,通过运行多份实例实现master的容灾。当master出现异常时,这两项服务的实例会通过向api server中Endpoint加锁的方式进行leader的选举,选出新的leader继续进行工作。

相关文章

网友评论

      本文标题:第二章:docker+kubernetes微服务架构学习

      本文链接:https://www.haomeiwen.com/subject/dqdzrktx.html