【1】云原生,kubernetes 与 Docker 的关系

Kubernetes?K8s?

Kubernetes经常被写作K8s。其中的数字8替代了K和s中的8个字母------这一点倒是方便了发推,也方便了像我这样懒惰的人。

什么是云原生?

云原生: 它是一种构建和运行应用程序的方法,它包含(容器容器编排微服务构架),优势是快速迭代部署应用,自动扩缩容资源,因为容器化与微服务化变得高可用与容错。让应用具备像在"云"上那样运行的能力 ------ 弹性、快速部署、自动扩缩、故障自愈、高可用、可观察......这些能力并不要求必须部署在公有云上,你可以在:

  • ☁️ 公有云(AWS、阿里云、腾讯云......)
  • 🏢 私有云(公司内部的数据中心 + 云平台)
  • 🖥️ 本地机房(只要能跑容器和 Kubernetes)
  • 💻 开发者本地环境(比如用 Minikube 跑个小型集群)
  • 🌍 边缘设备 / 混合云 / 多云环境

容器,容器编排

  • **容器:**简单来说就是它可以将应用程序与其运行需要依赖的库,容器运行时环境等打包封装(Docker 就是一种容器)。就像一个杯子?可以将他们装在一起,方便随时随地部署安装和运行。
  • **容器编排:**就是对刚刚说到的容器进行管理,包含将容器分配到合适地方运行,对各容器进行调度,实现容器之间的负载均衡,健康检查与故障恢复等等。最常用最大名鼎鼎的就是 kubernetes(k8s)

微服务

简单来说,一个服务可以由很多小而专的服务组件,通过互相通信组成一套完整的业务系统,例如 web 前端,分类服务,购物车,日志服务,付款服务...... 他们这些服务组件各司其职,各自的功能都很专一,他们组合起来就构成了一个购物软件,这个购物软件就是微服务架构的软件,而这些小而专的组件就是微服务

kubernetes 与 Docker 的关系

Docker:首先,Docker 是一个广泛使用的容器平台,它不仅提供了容器技术,还包含了镜像构建、运行、管理的一整套工具。我们平时说的 "Docker 容器",其实就是由 Docker 构建并运行的容器(也叫容器实例)。

**Kubernetes:**而 Kubernetes 是一个容器编排平台,它的作用是自动化地部署、管理、扩展和调度容器。不过这里有一个细节:Kubernetes 实际上并不是直接控制单个容器实例,而是以 Pod 为最小单位进行调度。Pod 可以理解为一个逻辑上更大的"容器组",通常包含一个主容器(有时也会有多个),这些容器共享同一个网络和存储空间。

Pod 的中文意思是"豆荚",这个比喻也很形象 ------ Docker 容器实例就像豆荚(Pod)里的豆子,Pod 是 Kubernetes 中运行容器的最小调度单位,Kubernetes 实际编排的是这些 Pod。

另外需要注意,现在 Kubernetes 通常使用像 containerdCRI-O 这样的容器运行时来运行容器,而不是直接使用 Docker。但只要镜像是标准格式(OCI),就还是可以用 Docker 构建镜像后让 Kubernetes 调用运行

如上图,Docker并非Kubernetes唯一支持的容器运行时。事实上,Kubernetes基于一系列特性实现了对容器运行时的抽象(从而可以兼容不同的底层容器运行时)。在 Kubernetes 中,容器运行时(如 containerd、CRI-O)需要和 Kubernetes 本身通信。这就引入了容器运行时接口(CRI, Container Runtime Interface)。

✅ 容器运行时接口(如 CRI,Container Runtime Interface):
  • 是 Kubernetes 和容器运行时之间通信的标准规范
  • 它就像一个"接口(interface) ",规定了一个容器运行时应该提供哪些功能(比如创建容器、启动容器、获取状态、删除容器等)。
✅ 容器运行时(如 DockercontainerdCRI-O):
  • 是这些接口的具体实现者(类)
  • 它们按照接口定义的方法和规范,写好了实际的代码逻辑,可以真正创建、运行和管理容器实例。

小知识-容器运行时

说到Docker容器的运行,就不得不说到容器运行时了,首先它与容器实例[1](#1)的关系就是工具产物的关系(更抽象一点的理解:容器镜像就像房子图纸,容器实例就是房子,容器运行时就是造房子或者装修房子的工具),容器镜像是由 构建工具(如 Docker CLI、BuildKit、Podman 等) 来构建和打包的,容器运行时将镜像转化为可运行的容器实例[1](#1),管理已经运行的容器实例的生命周期(启动,停止,删除,监控......)

Docker 是最常见的一种容器技术,它提供的容器运行时可以通过容器镜像创建并运行容器实例。不过,除了 Docker 之外,还有其他厂商提供的类似容器技术,比如 Kata、gVisor 等。虽然这些不同的技术实现方式各异,使用的容器运行时也不同,但它们都具备相似的功能:通过容器镜像创建和管理容器实例。

注意:在业内,一般"容器"就默认指运行时状态的实例,不再单独区分"容器"和"容器实例",在这里为了初学者能够分清楚,特此解释。

小知识-容器技术

容器技术是指一系列技术、工具和方法,它们共同帮助我们创建、管理、运行和隔离容器。容器技术包括但不限于以下几个核心组成部分:

  1. 容器镜像:容器的蓝图或模板。
  2. 容器运行时:创建并管理容器实例的工具。
  3. 容器编排:自动化管理容器生命周期的系统。
  4. 容器网络:实现容器间通信的网络机制。
  5. 容器存储:为容器提供持久化存储的技术。
  6. 容器镜像仓库:存储和分发镜像的系统。
  7. 容器安全:保护容器和应用程序的安全机制。

  1. 容器镜像和容器实例的关系可以类比为类与对象的关系。容器镜像类似于类,是静态定义和模板,而容器实例则像类的对象,是镜像的运行时实例。容器镜像必须经过容器运行时(如 Docker)创建容器实例后,才能被执行和运行。 ↩︎ ↩︎
相关推荐
努力搬砖的咸鱼1 小时前
容器之间怎么通信?Docker 网络全解析
网络·docker·云原生·容器
liming4954 小时前
Ubuntu18.04部署k8s
云原生·容器·kubernetes
元直数字电路验证6 小时前
ASP.NET Core Web APP(MVC)开发中无法全局配置 NuGet 包,该怎么解?
前端·javascript·ui·docker·asp.net·.net
YC运维6 小时前
Kubernetes资源管理全解析
java·容器·kubernetes
Leinwin6 小时前
微软发布Azure Kubernetes Service Automatic国际版
microsoft·kubernetes·azure
不爱笑的良田7 小时前
从零开始的云原生之旅(六):DaemonSet 实战日志采集器
云原生
chinesegf7 小时前
Docker篇6-项目app.py和flask_app.service配置和映射到docker中
docker·容器·flask
退役小学生呀8 小时前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton
橙色云-智橙协同研发8 小时前
PLM实施专家宝典:离散制造企业跨域协同与数字化审核方案
云原生·解决方案·数字化转型·plm·国产plm·工程方案·专家总结
维尔切8 小时前
搭建 k8s
云原生·容器·kubernetes