K8s 的 Pod 资源对象如何实现微服务架构?
本期源来如此技术公开课为《深入理解 Kubernetes Pod 资源对象》。主讲教师为达内教育李欣。下面由小编来带领大家深入了解本期课程的重点内容。
容器技术的起源与发展
在 2013 年,一个名为 Docker 的项目开启了,这个项目一经发布就迅速成为了运维、开发、测试各阶段中不可或缺的基础技术支撑。随着容器技术的兴起,一种以容器为载体,使用多个小型服务组合起来构建复杂应用的微服务架构就逐渐清晰。各个服务之间可以采用不同的编程语言、不同的存储技术,运行在各自的进程之间,互不干扰,协同工作。从此,容器这个只流传在极客口中的技术词汇就走向了 IT 历史舞台的正中央。
在这个容器诞生之后,人们在容器中就开始着手布置各种各样的应用和服务。随着应用服务越来越多,大家发现对大规模的容器进行编排、管理、调度其实是一件非常麻烦的事情。这时候,人们迫切需要一款软件来解决这个问题。在需要这款软件的时候,有很多大公司就已经出手了。比如说 Docker 公司编写了自己的 Docker Swarm,Apache 基金会推出了他们的 Mesos,以及我们接下来要介绍的谷歌公司推出的 Kubernetes。
Kubernetes 的诞生及其市场地位
在 2014 年,谷歌公司推出的 Kubernetes 之后,仅仅用了短短两年的时间就彻底战胜了他的所有对手,包括 Docker 公司。甚至把 Docker Swarm 集成在 Docker 软件里面,也没有赢得容器战争的胜利。人们习惯把这个 Docker 时代称为微服务时代,又把这个后来的 Kubernetes 时代称为云原生时代,也有些人管它叫后微服务时代。
Kubernetes 架构概览
Kubernetes(简称 K8S)是谷歌开源的容器集群管理系统,被誉为云时代的操作系统。其迅速占领市场并赢得用户青睐的原因在于,它基于谷歌内部多年积累的网格计算系统(容器前身)的技术和实践,满足了用户多方面的需求。K8S 的推出并非全新发明,而是谷歌内部成熟容器管理系统的开源版本,因此一上市就深受用户欢迎。
Pod 资源对象详解
那么接下来让我们了解一下 K8S 是如何巧妙的设计 Pod 的资源对象,让它满足了用户的一切管理和需求的目标。首先,我们先来看一下 K8S 的一个整体架构。K8S(Kubernetes)通过 Pod 这一核心资源对象,巧妙地满足了用户管理和需求的目标。整体架构中,K8S 包含管理控制节点和多个计算节点,管理控制节点负责发布和操作指令,而计算节点承载应用和负载。
Pod 是 K8S 中最重要的资源对象,是 K8S 中可以创建部署的最小计算单元。官方形容是像一个豌豆荚一样,豌豆荚里头有很多很多的豆子。一般通俗可以把他理解为像一个盒子,用于盛放和管理容器。通过将容器放入 Pod 中,K8S 能够更方便地进行应用和服务的管理与部署。这种设计简化了复杂性和提高了管理效率。
Pod 的自动化管理与特性
Pod 作为 Kubernetes 中的核心资源对象,会自动维护其中的容器,并具有原子性、一致性等特性。将容器放入 Pod 中可以简化操作,便于配置和管理,尤其对于存在相互依存性和共享存储需求的业务模块。很多业务的功能之间有很多相互的依存性。需要保证各个业务模块中间的一致性、原子性,有些模块还有共享存储的一些需求。如果把它放到单独的每一个都放到单独的容器中,想要实现这些东西得在容器里进行大量的配置、部署和管理。这些配置、部署和管理带来的工作量是非常巨大的。K8S 中就巧妙地把这些容器放到 Pod 中,把容器放到 Pod 中可以简化操作,可以使我们很方便地进行配置和管理。
下面来说一说 Pod 有什么特性。Pod 中的容器共享网络、共享存储,并拥有相同的生命周期,具有原子性和一致性,它们紧密耦合,提供自维护和安全性。Pod 的创建涉及 Kubernetes 中的多个组件协同工作,体现了其复杂性和重要性。
Pod 可以帮助我们解决各种各样的问题。下面我们来说一说这个 Pod 到底是如何一步一步创建出来的。如果想让 Pod 顺利的创建出来,需要调用到 K8S 中非常非常多的组件。
Kubernetes 核心组件介绍
在这个了解 Pod 创建这个步骤之前,我们先了解一下 K8S 中各大组件的作用。在 K8S 中常见的有这么七个组件,其中前面这四个 API Server、etcd、scheduler 和 controller manager 是管理控制节点的四大核心组件。剩下那三个,像 Kubelet、Kube-proxy 和这个 runtime 一般是计算节点上必备的组件。
管理控制节点的四大核心组件
1.API Server,是整个系统对外的接口,我们用户在管理或者和 K8S 集群进行交互的时候,就需要使用管理工具与这个 API Server 进行打交道。
2.Scheduler:Pod 调度器,负责选择最佳的计算节点来运行 Pod。Scheduler 会统计各个节点的情况,会经过筛选和优选的机制,最终把 Pod 调度到指定的节点上去。
3.Controller manager,它并不参与直接创建 Pod,但是它会管理集群中的控制器,集群中有很多很多控制器可以辅助用户管理和控制 Pod。Controller manager 就是集群中的控制器的大管家,负责管理集群中的所有的控制器。
4.Etcd:Etcd 是 K8S 中的核心数据库,K8S 在运行过程中所有的元数据都存储在 Etcd 中。
计算节点上必备的组件
1.Kubelet,运行在每个节点上的一个代理,负责保证容器运行在 Pod 中。
2.Kube-proxy,负责为 Pod 提供代理和负载均衡的重要组件。
3.Runtime:容器运行时,它负责真正的去创建容器。
Pod 的创建流程
以下为 Pod 的创建过程图,图例中描述了一个 Pod 是如何创建出来的。首先在这个图例中,可以由使用 Kubectl 的命令或者使用其他的可以和 Kubernetes API 交互的方式与集群的管理控制节点进行交互。
用户向 Kubernetes 的 API 服务器发送创建 Pod 的指令,API 服务器将这些指令(包括 Pod 名称、镜像信息等)记录在 etcd 数据库中。这是一个异步过程,用户发送指令后,当 API 服务器将请求写入 etcd 数据库后,即认为请求完成。Kubernetes 的编排解决方案被广泛应用于容器化项目,特别是在金融行业,其核心系统正在向 Kubernetes 迁移。
Pod 的生命周期
Pod 的设计理念
在 Pod 的设计理念强调了单一职责、组合优于继承、共享资源、简化通信、面向对象的设计以及声明式 API 和可组合的 API 对象等原则,这些设计理念共同作用,使得 Pod 成为灵活、可扩展且易于使用的资源对象。
走进云原生时代
随着容器技术的普及,kubernetes 越来越被企业重视,现在 kubernetes 已被公认为云时代的操作系统,软件和硬件的界限越来越模糊,硬件彻底被抽象化、云化了,现如今已经全面进入云原生时代了。
随着越来越多的 Kubernetes 基础设施部署在企业中,市场对 Kubernetes 和云原生技术人员的需求不断增长。由此可见,对于 kubernetes 的学习刻不容缓,Linux 基金会和 CNCF 共同推出了多个云原生项目的云原生认证考试,包括:Kubernetes,Prometheus,Istio,Cilium 及 Argo 等。了解 CNCF 认证帮助您在云原生不同领域上装备自己,在事业上更上一层楼。
点此了解 CNCF 认证:装备一下自己,开启您的云原生事业!
版权声明: 本文为 InfoQ 作者【OSCTraining】的原创文章。
原文链接:【http://xie.infoq.cn/article/c7672324742166b3355419859】。文章转载请联系作者。
评论