cover_image

云原生时代的基础设施Kubernetes

武艳军 金融IT那些事儿
2022年09月10日 05:58
随着IT架构从集中式架构发展到分布式微服务架构,大家在享受微服务带来的独立部署、水平扩展的好处的同时,也不得不面对开发运维更加复杂的现实。当前发展的方向是通过虚拟化基础设施来解决分布式架构问题,让业务开发人员只需要关注业务逻辑。Kubernetes为代表的容器编排框架是把大型软件系统运行所依赖的集群环境也进行了虚拟化,令集群得以实现跨数据中心的绿色部署,并能够根据实际情况自动扩缩,被认为是云原生时代的操作系统和基础设施,也是CNCF的第一个开源项目。
01 什么是Kubernetes?
Kubernetes是Google公司基于内部使用的Borg系统基础上在2014年6月开源的一个容器集群管理系统,使用Go语言开发,也叫K8S。Kubernetes的目标是让部署容器化的应用简单并且高效。Kubernetes提供了应用部署、规划、更新、维护的一种机制。
Kubernetes来自希腊语,中文翻译是“舵手”或者“飞行员”。为什么要用舵手来命名呢?大家来看这张图:
图片

2015年7月,kubernetes v1.0正式发布。截至2022年8月,kubernetes最新版本是v1.25版。
02 Kubernetes资源模型
Kubernetes将一切视为资源,不同资源之间依靠层级关系相互结合、协作。
图片

容器是镜像管理的最小单位。
Pod是容器组或生产任务,是隔离和调度的基本单位。同一个Pod的多个容器,只有PID名称空间和文件名称空间是隔离的,其他UTS(主机名、域名)、网络(网卡、网线、IP地址)、IPC、时间等名称空间都是共享的,以超亲密的方式进行协作。Pod可以实现原子性调度,即相互关联的协作任务同时被分配资源。
节点(Node)对应于集群中的单台机器,或者是物理机,或者是云环境中的虚拟节点,节点是处理器和内存等资源的资源池,是硬件单元的最小单位。
集群cluster,kubernetes提倡面向集群来管理应用。通过声明式API将管理意图写成一份元数据Manifest,并提交给集群。集群是处理元数据的最小单位。
集群联邦Federation,对应于多个集群,通过集群联邦可以统一管理多个Kubernetes集群,能满足跨可用区域多活、跨地域容灾的需求。
03 Kubernetes控制器模式
控制器模式是kubernetes核心设计理念。通过元数据描述清楚资源的期望状态,由kubernetes中对应监视这些资源的控制器来驱动资源的实际状态逐渐向期望状态靠拢,这种交互风格被称为kubernetes的声明式API

以下介绍三个最经典的Kubernetes使用场景:
  • 如何实现故障恢复?

ReplicaSet是工作负荷类资源,代表一个或多个Pod副本的集合。在元数据中明确副本数量,当成功创建之后,ReplicaSet Controller副本集控制器会持续跟踪该资源,如果一旦有Pod崩溃退出或状态异常,ReplicaSet都会自动创建新的Pod来替代异常的Pod;如果数量多了,也会自动回收。
  • 如何实现滚动更新?

由Deployment部署资源来创建ReplicaSet副本集,再由ReplicaSet来创建Pod,当更新Deployment的信息后,部署控制器会跟踪到新的期望状态,自动创建新的ReplicaSet,并逐渐缩减旧的ReplicaSet的数量,直至升级完成后彻底删除掉旧的ReplicaSet。
  • 如何实现水平扩展?

Autoscaling资源和自动扩缩控制器,可以自动根据度量指标,如处理器、内存占用率等,来设置Deployment或ReplicaSet的期望状态。当度量指标出现变化时,系统自动按照Autoscaling-Deployment-ReplicaSet-Pod这样的顺序层层变更,最终实现度量指标自动扩容/缩容。
04 Kubernetes整体架构
Kubernetes是按集群进行管理的,包括一个Master节点和多个工作节点。
图片

1. Kubernetes的Master 节点
Kubernetes的 Master 节点包含四个主要的组件:API Server、Controller、Scheduler 以及 etcd。如下图所示:

图片

API Server:顾名思义是用来处理 API 操作的,Kubernetes 中所有的组件都会和 API Server 进行连接,组件与组件之间一般不进行独立的连接,都依赖于 API Server 进行消息的传送;
Controller:是控制器。它用来完成对集群状态的一些管理。比如刚刚我们提到的三个例子,都是由 Kubernetes 中的 Controller 来进行完成的;
Scheduler:是调度器。“调度器”顾名思义就是完成调度的操作。调度是指为新创建的Pod找到一个最恰当的宿主机节点来运行它。从编排系统角度看,Node是资源的提供者,Pod是资源的使用者。调度是对两者的撮合。Node提供三方面资源:计算资源、存储资源和网络资源。
调度过程分为两步,第一步是从集群所有节点中找出一批剩余资源可以满足该Pod运行的节点。第二步是从符合运行要求节点中找出一个最符合的节点完成调度。
etcd:是一个分布式的一个存储系统,API Server 中所需要的这些元数据都被放置在 etcd 中,etcd本身是一个高可用系统,通过 etcd 保证整个Kubernetes 的 Master 组件的高可用性。

2. Kubernetes工作节点
工作节点内部组件如下图所示:
图片

工作节点主要由以下核心组件组成:
本地的容器运行时环境,负责镜像管理以及pod和容器的真正运行。K8s本身并不提供容器运行时环境,但提供了接口,可以插入所选择的容器运行时环境,目前支持Docker和rkt。
kubelet是节点上最主要的工作代理,用于汇报节点状态并负责维护pod的生命周期,也负责volume(CVI)和网络(CNI)的管理。kubelet是pod和节点API的主要实现者,负责驱动容器执行层。作为基本的执行单元,pod可以拥有多个容器和存储卷,能够方便地在每个容器中打包一个单一的应用,从而解耦了应用构建时和部署时所关心的事项,方便在物理机或虚拟机之间进行迁移。
kube-proxy代理对抽象的应用地址的访问,服务Service提供了一种访问一群pod的途径, kube-proxy负责为服务提供集群内部的服务发现和应用的负载均衡(通常利用iptables规则),实现服务到pod的路由和转发。此方式通过创建一个虚拟的IP(clusterIP)来实现,客户端能够访问此IP,并能够将服务透明地代理至pod。
辅助组件,可选,Supervisord用来保持kubelet和Docker进程运行,Fluentd用来转发日志等。节点的重要属性有地址信息、状态、资源容量、节点信息。这些属性用来标识节点的运行状态,并可以被外部组件访问识别。
基本上这4类服务就能涵盖所有的在线交易类业务场景。
参考资料:《凤凰架构》等

《Kubernetes初探:原理及实践应用》下载方式:
1、关注本公众号“金融IT那些事儿”
2、公众号后台回复关键字:k8s,即可下载
近期文章精选
百信银行资深企业架构师武艳军:数字化转型需找到真正衡量成效的标尺
应用集成架构的演进
数字消费金融业务解析
场景金融:银行数字化转型的方向
单元化架构为什么这么火?
Serverless无服务器架构
银行发展与信用发现
欧冠、疫情以及演进式架构
互联网银行2021年年报金融科技解读
数字化运营是数字化转型的核心战场
五月荐书
金融行业“部落制”改革开启敏捷转型
业务中台建设方法
业务架构设计(六)业务组件
业务流程设计和优化
谈谈对央行《金融科技发展规划(2022-2025年)》的理解
数据中台是企业数字化转型的创新引擎
DataOps:从数据到价值
为什么说企业架构是数字化转型的底层方法论?
企业级技术架构设计方法
企业架构 | 美国国防部架构框架DoDAF2.0解读
企业架构 | FEA1.0 联邦企业架构
微众银行新一代分布式架构分析
数据架构 | 数据架构设计方法(一)
IBM金融数据服务模型FSDM介绍
阿里金融信息模型——飞马模型
数据架构 | 从数据仓库、数据湖到湖仓一体(Lake House)
数据架构 | 从传统数据仓库到基于大数据的数据仓库
数据挖掘的基本概念和工作流程
架构前沿 | 企业架构的24种武器
架构前沿 | IT架构全景视图(16000字长文)
如何评估企业数字化转型现状?
云原生 · 目录
下一篇华为ERP使用的元数据多租架构究竟是什么?
继续滑动看下一个
金融IT那些事儿
向上滑动看下一个