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

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 容器技术基础-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搭建和管理企业级网站应用
相关文章
|
27天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
21天前
|
监控 安全 API
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
本文详细介绍了PaliGemma2模型的微调流程及其在目标检测任务中的应用。PaliGemma2通过整合SigLIP-So400m视觉编码器与Gemma 2系列语言模型,实现了多模态数据的高效处理。文章涵盖了开发环境构建、数据集预处理、模型初始化与配置、数据加载系统实现、模型微调、推理与评估系统以及性能分析与优化策略等内容。特别强调了计算资源优化、训练过程监控和自动化优化流程的重要性,为机器学习工程师和研究人员提供了系统化的技术方案。
141 77
使用PaliGemma2构建多模态目标检测系统:从架构设计到性能优化的技术实践指南
|
21天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
84 24
|
6天前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
10天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
37 4
|
23天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
107 6
|
27天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
1月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
65 4
|
1月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
74 3
|
2月前
|
Cloud Native 持续交付 云计算
云原生技术在现代IT架构中的转型力量####
本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的关键作用与实践路径。通过具体案例分析,展示了云原生如何赋能企业实现更高效的资源利用、更快的迭代速度以及更强的系统稳定性,为读者提供了一套可借鉴的实施框架与策略。 ####
26 0

相关产品

  • 容器服务Kubernetes版