容器技术基础-Kubernetes 概念与架构

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-应用监控,每月50GB免费额度
云原生网关 MSE Higress,422元/月
简介: 容器技术基础-Kubernetes 概念与架构

开发者学习笔记【阿里云云原生助理工程师认证(ACA)课程:容器技术基础-Kubernetes 概念与架构】

课程地址:https://edu.aliyun.com/course/3112075/lesson/19013


容器技术基础-Kubernetes 概念与架构

 

内容介绍:

一、Kubernetes 核心概念

二、Kubernetes 架构

 

一、Kubernetes 核心概念

(1)pod

image.png

Kubernetes 的核心概念是 pod,它作为容器的扩容机制解决了很多问题,它将容器归类为一体,形成一个容器体,就是我们说的 pod,pod 集群可承载任务的原子单元。
一个 pod 实际上分装了多个容器化的应用,用于帮助用户调度工作,负载,并为这些容器提供所需的联网和存储服务。Kubernetes其他部分可以帮助用户在这些pod之间达成负载均衡,确保运行正确的数量容器,以充分来支持实际的工作负载。
我们可以理解为 Pod 是 Kubernetes 中能够创建和部署的最小单元,是 Kubernetes 实际的一个应用实例。在Kubernetes上,它并不是以Docker的容器方式去运行,而是以pod的方式来运行一个实例。一个pod总是部署在同一个节点的node上,Pod集群是可承载任务的原子单位。  Pod不仅仅支持这Docker样的一个环节,还是支持多种容器的环境。Docker是现在最流行的一个事实标准的技术。

Pod可以给我们带来哪些好处呢?

1.首先Pod作为一个可以独立运行的服务单元,解放了应用部署的难度,以更高的抽象性为应用部署提供了极大的方便。

2Pod作为最小的应用实例可以独立运行,可以方便的进行部署,包括水平扩展以及水平收缩,方便进行资源的调度管理,资源的合理分配。

3.pod中的容器共享相同的数据和网络空间,它们之间可以进行统一的资源管理与分配。

4.pod也有自己的生命周期,像单独的容器应用一样,pod并不是持久运行。pod创建后Kubernete为其分配一个uid,并且Container调度到 node 中运行,然后 pod 一直保持运行状态直到运行结束或者被删除。在node 发生故障时,Container负责将其调动到其他的node 中。node和容器的运行时是比较相似的,可能随时会被停止,启停或发生故障。由于其他的节点来去承担这个 pod 工作。这就是pod 一个核心概念,它是供你部署和创建的最小单元,Kubernetes集群中的一个应用实例。

(2)volume

image.png

第二个核心概念是volume,volume就是劵的概念, 它是用来管理Kubernetes存储的,是用来声明pod中的容器可以访问的文件目录。pod本身是不储存数据的,需要定制一个底层可以访问的文件目录。一个劵可以在挂在pod中一个或多个的容器指定的目录下。

volume本身也是一个抽象概念,一个 volume可以支持多种后端存储,比如Kubernetes volume就支持很多的存储插接的方式,它可以支持本地存储,也可以支持云的存储,还可以支持一些分布式的存储,还有阿里云上的云盘等。
默认情况下Docker容器中的数据是非持久化的,在容器消亡后数据也会消失,因此Docker提供了Volume机制以便实现数据的持久化。Kubernetes中 Volume 的概念与Docker 中的 Volume 类似,但不完全相同。区别主要在Kubernetes中的Volume 与pod的生命周期相同,但与容器的生命周期不相干,但容器终止或重启时Volume中的数据不会丢失,但pod被删除时,Volume才会被清理,并且数据是否丢失取决于Volume的具体类型。比如,App DIR类型的pod数据会丢失,而PV类型的数据则不会丢失。 要了解volume是pod中能够被容器共享的磁盘目录,要理解持久化的理念。

(3)deployment

image.png

第三个核心概念 deployment,Deployment是在 pod 这个抽象上更为擅长的一个抽象,它可以定义一组pop的复合数,以及这个pod的版本。
一般我们用Deployment这个抽象来做应用真正的管理。pod是组deploy最小的单元。 一般情况下,我们并不会直接去创建某一个pod的,而是先创建Development,然后通过Development再去创建pod。由Development负责创建、更新、维护管理所有pod。Kubernetes是通过controller,也就是我们刚才提到的控制器去维护Deployment中的pod数目, 他也会去帮助Deployment自动恢复失败的pod。

比如说我们定义了一个Deployment。 这个Deployment里面需要两个pod。 当一个pod失败的时候,控制器就会监测到,重新把Deployment中的pod数从一个恢复到两个,再去新生成一个pod。通过控制器,我们也会帮助完成发布的策略。比如说,进行滚动升级,进行重新生成的升级,或者进行版本的回归,这就是我们为什么在通过  Kubernetes上可以进行相应的自动回滚和进行相应的不同版本的发布。
它都是通过Development这个概念,通过控制器指定不同的策略来进行版本的发布。Development是管理pod种抽象的方式,  我们一般不直接创建pod,而是通过Development创建pod。这个也是我们需要了解的,这些核心概念能够更好的帮我们理解Kubernetes是如何来运转的。  

(4)Service

image.png

Kubernetes还有一个核心概念 Service,Service 是 Kubernetes最核心的概念,通过创建service服务为一组具有相同功能的容器应用提供一个统一的入口地址,并且将其请求进行负载分发到后端的各个容器应用上。
在上面我们也看到一个Deployment,可以有两个或者更多的这种相同的pod,对外部用户来说,访问哪个pod其实都是一样的,所以就希望做一次负载均衡,所以做负载均衡的同时,我们可能只访问某一个固定的VIP,也就是虚拟的ip地址,而不希望知道每个具体pod ID地址。
Pod本身像容器一样,随时可能会被停止或随时会被终止,一个pod败了会换成另外一个新的pod来提供服务。

对一个外部用户来说,如果把每个pod都用来提供一个访问ip的话, 用户需要不停的更新pod地址会带来很多的麻烦,Pod在失败重启之后,我们希望有一个抽象把所有pod访问能力抽象成第三方的一个ip地址。用来实现 Kubernetes这种抽象,我们称之为Service。
它相当于是一组服务的一个统一入口地址,就是提供一个或者多个pod指令,一组具有相同功能的容器来提供一个统一的入口地址,稳定的访问地址。
service和网络有很大的关系,网络本身的分配才能实现service访问,所以说Service本身支持多网络访问方式的实现,比如常见的class ID、No pot和no balance多种方式来实现设备访问。
知道了服务概念就能理解pod之间如何形成多个服务,服务之间如何来发现,需要统一的入口,通过统一的入口保证pod失败,而不影响对外的服务,这就是Service重要的一个概念。  

 

(4)Namespace

 image.png

Kubernetes还有一个核心的概念namespace。namespace做为一个集群内部的逻辑隔离,它包括健全管理、资源管理。
Kubernetes的每个资源在很多情况下, Namespace是用于实现多用户的资源管理,相当于同一个 Namespace资源需要命名不同的kubernetes资源可以重名,Kubernetes相当于为用户提供了一个逻辑隔离的空间,可以让他为不同的开发者去做相应的部署和服务。可以认为Namespace是供应集群的一个虚拟化集群,在一个库里集群中可以拥有多个命名空间,他们在逻辑上是彼此隔离的,他们可以为你的团队提供组织安全性能方面的保障,通过这种方式 Namespace实现了逻辑的隔离。可以把它理解为一个虚拟化机群,帮助实现多租户的概念。
kubernetes平台上多个考察团队他们相互之间的开放运行就会受到影响,能够更好的帮们管理多团队多用户之间的资源划分和管理,这就是Namespace概念。

前面我们说了pod、Volume Deployment.、Service.Namespace,这些概念都是Kubernetes技术实现的一个核心基础。

首先Kubernetes通过 pod 实现这个容器的管理,我们认为一个 pod就是方块,它可以包含多个容器运行的示例,volume就是实现数据持久化的存储。
关注 pod来写底层数据,pod失败的时候不会影响数据存储和数据化的泄露。deployment是实现容器的这种部署和扩容以及历史版本的回归。service实现了容器应用对外提供的一个统一的目录地址,实现服务被外部的统一访问和调用。
namespace实现了多租户的资源隔离,提供了整个租户类的资源安全性等方面的保障,知道了这几个概念之后,就能够帮助kubernetes实现核心的功能。

 

二、Kubernetes 核心架构

 image.png

Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序,提供了零停机时间部署、提供相应的版本自动回滚、扩缩容和容器的自愈,自动配置、自动重启、自动复制的高弹性基础架构。Kubernetes是如何实现的呢?
Kubernetes也是遵循CS,也就是客户端和服务端得到架构模式。系统架构分为Master节点和Node节点两部分。
Master是主控节点,Master为服务端,Node节点作为客户端。控制系统具有多个Master,可以部署多个Master服务端,帮助系统来实现高可用。
在MOD情况下,一个Master服务端可以完成所有的工作,但需要做相应的高可用。

我们推荐三个或者甚至更多的节点去做Master。多个Master可以帮助我们更好的提高系统的高可用。

Kubernetes Master (主控节点)是集群的“大脑”,负责管理所有节点(Node),相当于中间的主控节点,负责所有集群信息的通知,调度Pod在哪些节点上运行,负责控制集群运行过程中的所有状态。

Kubernetes Node(工作节点)是负责管理Node节点上所有运行的Pod,负责监控上报Node节点上所有Pod的运行状态。
Node是一个容器运行的环境和状态时,主控节点是它的一个管理节点,可以这样去理解它。

 image.png

Master服务端核心组件包括apiserver、controller-manager,scheduler集群调度服务,etcd一个分布式的存储系统。

1. kube-Apiserver

Apiserver就是kube-apiserver,顾名思义它是用来做API操作的。Kubernetes中所有的组件都会和apiserver进行连接,组件与组件之间,它不会进行独立的连接,都是依赖于apiserver进行消息的传送,可以把apiserver简单的理解为Kubernetes统一对外的控制器的统一入口,无论在操作任何电器的时候,比如冰箱有冷冻冷藏统一有一个控制界面,相当于Apiserver

通过apiserver和其他所有的功能节点进行交互,来实现命令的传达和信息的传送。

2.kube-controller-manager

kube-controller-manager是集群中所有资源对象的自动化控制中心,controller-manager被称为管理控制器,负责管理Kubernete集群的节点以及Pod副本。service服务端点访问的端口namespace服务账户、资源定额等所有管控的一个组件。自动化控制中心控制器负责完成对集群状态的一些管理,其默认提供了一些控制器,它是由多个不同的控制器组合而成,例如deployment controller控制器、Lets base控制器等这些,每个控制器都通过kube-apiserver组件来提供接口实时监控,调入整个集群的资源来满足当前的一个状态。当发生一些故障而导致系统出现状态变化的时候,会尝试将系统的状态修复到一个可期望的状态,这就具备Kubernete治愈功能。

3.kube-Schedule

Schedule是调度器,调度器顾名思义就是完成所有资源的调度,可以把一个用户提交的容器以及对CPU和内存的请求大小,找到一个合适的Pod基点进行Pod放置。
后面的场景中,我们会来讲解一下Pod的调度算法,如何找到一个合适的Pod进行容器的放置,调度器每次只调度一个Pod资源对象,为每一个Pod资源对象找到一个合适的Pod过程,是调度的一个整体的周期。Pod本身是不具备此句话的,因此它需要一个Etcd,一个分布式的存储系统。apiserver中所需的原始信息都放置在Etcd中.

4.Etcd

Etcd本身就是一个高可用的系统,通过Etcd机制,能够保证整个Kubernetes Master组件高可用。apiserver是集群的统一入口,controller-manager控制器去做集群中所有状态的控制,scheduler调度服务器是对集群Pod的资源对象整体的一个调度服务,Etcd分布式存储系统.

Kubernetes 架构-node 客户端组件,Node节点客户端有哪些组件,起到哪些重要的作用

image.png

1. kubelet

Kubernetes Node是真正运行右负载的地点,每个右负载都会以pod形式进行运行,一个pod中会运行一个或多个容器,真正去运行pod组件叫做kubelet,kubelet负责管理节点上容器的创建,删除,启停等任务,与Master节点进行通信。

Kubelet是Kubernetes中最重要的Node节点控制器,是维护容器的生命周期,并管理容器存储和容器的网络,它是Pod和Node api主要实现的方式,kubelet负责驱动容器底层的执行层,在kubelet中应用容器彼此是隔离的,运行主机也是隔离的,对应用进行独立管理的关键节点是Kubelet,Node节点是对外执行命令的一个关键的统一路口,他是负责节点上容器的创建,删除、启停的功能。

2. Kube-proxy

Kube-proxy负责Kubernetes服务的通讯及负载均衡的服务,在Kubernete中自己环境中也会有Kubernete网络服务,为了提供severce net来进行搭网主网,真正完成service 主网的组建是Kubernetes,它是利用achetable的能力 组建Kubernetes network,就是classnetwork

3. Container Runtime

Container RuntimeKubernetes工作节点中的一个组建是为了运行每个节点上的容器。我们知道Kubernetes是容器的编排和管理引擎,容器运行是非常重要的。Container Runtime、K8s节点的底层使容器运行时支撑负责启停容器,理解容器的是docker,但它并不是唯一的事实。

事实上容器运行时在这个领域包含很多技术,使得Kubernetes扩展变得更加开放,扩展变得更加容易,node的客户端的关键的三个组件。

Kubernetes是负责管理节点上的容器的创建删除启停的任务,与master节点进行通讯,传达master节点所下发的apiserver的指令。

Kube-proxy是负责server网络的主管,负责Kubernetes服务的一种通信及负载均衡。Container Runtime负责容器的基础管理的服务,是接收kubelet组件的指令对容器启停或者是增加这样具体的启动命令。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
21天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
68 2
|
21天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
19天前
|
存储 分布式计算 关系型数据库
架构/技术框架调研
本文介绍了微服务间事务处理、调用、大数据处理、分库分表、大文本存储及数据缓存的最优解决方案。重点讨论了Seata、Dubbo、Hadoop生态系统、MyCat、ShardingSphere、对象存储服务和Redis等技术,提供了详细的原理、应用场景和优缺点分析。
|
1天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
1天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
10天前
|
Kubernetes Cloud Native API
深入理解Kubernetes——容器编排的王者之道
深入理解Kubernetes——容器编排的王者之道
28 1
|
19天前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
76 4
|
20天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
32 3
|
19天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
25 1
|
19天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。

相关产品

  • 容器服务Kubernetes版