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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 容器技术基础-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组件的指令对容器启停或者是增加这样具体的启动命令。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
Kubernetes API 调度
k8s 到底是什么,架构是怎么样的?
Kubernetes(k8s)是Google开源的容器集群管理系统,它通过YAML文件自动化应用部署、扩展和管理。k8s架构包含控制平面(API Server、Scheduler、Controller Manager和etcd)和工作节点(Node,含kubelet、Container runtime、Kube Proxy等)。控制平面负责调度和管理,Node执行任务。kubectl是命令行工具,用于与k8s交互。k8s通过Ingress暴露服务,并通过Pod作为最小调度单位管理容器。Docker通常与k8s结合使用,提供容器化应用,但二者并非同一概念。
55 4
k8s 到底是什么,架构是怎么样的?
|
29天前
|
Kubernetes 容器
k8s容器时间与服务器时间不一致问题
k8s容器时间与服务器时间不一致问题
22 0
|
3天前
|
Cloud Native Linux 开发者
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
|
1天前
|
Linux Shell 虚拟化
【Linux学习】Linux 的虚拟化和容器化技术
【Linux学习】Linux 的虚拟化和容器化技术
|
3天前
|
Kubernetes 负载均衡 Docker
【专栏】构建高效微服务架构:Docker与Kubernetes的完美搭档
【4月更文挑战第27天】本文介绍了Docker和Kubernetes在构建微服务架构中的应用。Docker是开源容器引擎,用于打包和分发应用,实现隔离和封装,提升可扩展性和可维护性。Kubernetes是容器编排平台,自动化部署、扩展和管理容器,提供负载均衡和故障转移。二者结合,能高效支持微服务架构。文中通过实例展示了如何将用户、商品和订单服务用Docker打包,再用Kubernetes部署和管理,确保微服务稳定运行。
|
6天前
|
运维 Kubernetes Docker
这是一项颠覆性技术 - 容器
这是一项颠覆性技术 - 容器
|
6天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
15天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
18天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
28 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
2月前
|
存储 Kubernetes 数据安全/隐私保护
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(配置与密码安全)
36 0

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多