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 通常使用像 containerd
、CRI-O
这样的容器运行时来运行容器,而不是直接使用 Docker。但只要镜像是标准格式(OCI),就还是可以用 Docker 构建镜像后让 Kubernetes 调用运行
如上图,Docker并非Kubernetes唯一支持的容器运行时。事实上,Kubernetes基于一系列特性实现了对容器运行时的抽象(从而可以兼容不同的底层容器运行时)。在 Kubernetes 中,容器运行时(如 containerd、CRI-O)需要和 Kubernetes 本身通信。这就引入了容器运行时接口
(CRI, Container Runtime Interface)。
✅ 容器运行时接口(如 CRI,Container Runtime Interface):
- 是 Kubernetes 和容器运行时之间通信的标准规范。
- 它就像一个“接口(interface)”,规定了一个容器运行时应该提供哪些功能(比如创建容器、启动容器、获取状态、删除容器等)。
✅ 容器运行时(如 Docker、containerd、CRI-O):
- 是这些接口的具体实现者(类)。
- 它们按照接口定义的方法和规范,写好了实际的代码逻辑,可以真正创建、运行和管理容器实例。
小知识-容器运行时
说到Docker容器的运行,就不得不说到容器运行时了,首先它与容器实例1的关系就是工具
和产物
的关系(更抽象一点的理解:容器镜像就像房子图纸,容器实例就是房子,容器运行时就是造房子或者装修房子的工具),容器镜像是由 构建工具(如 Docker CLI、BuildKit、Podman 等) 来构建和打包的,容器运行时将镜像转化为可运行的容器实例1,管理已经运行的容器实例的生命周期(启动,停止,删除,监控……)
Docker 是最常见的一种容器技术,它提供的容器运行时可以通过容器镜像创建并运行容器实例。不过,除了 Docker 之外,还有其他厂商提供的类似容器技术,比如 Kata、gVisor 等。虽然这些不同的技术实现方式各异,使用的容器运行时也不同,但它们都具备相似的功能:通过容器镜像创建和管理容器实例。
注意:在业内,一般“容器”就默认指运行时状态的实例,不再单独区分“容器”和“容器实例”,在这里为了初学者能够分清楚,特此解释。
小知识-容器技术
容器技术是指一系列技术、工具和方法,它们共同帮助我们创建、管理、运行和隔离容器。容器技术包括但不限于以下几个核心组成部分:
- 容器镜像:容器的蓝图或模板。
- 容器运行时:创建并管理容器实例的工具。
- 容器编排:自动化管理容器生命周期的系统。
- 容器网络:实现容器间通信的网络机制。
- 容器存储:为容器提供持久化存储的技术。
- 容器镜像仓库:存储和分发镜像的系统。
- 容器安全:保护容器和应用程序的安全机制。
容器镜像和容器实例的关系可以类比为类与对象的关系。容器镜像类似于类,是静态定义和模板,而容器实例则像类的对象,是镜像的运行时实例。容器镜像必须经过容器运行时(如 Docker)创建容器实例后,才能被执行和运行。 ↩︎ ↩︎