K8s容器概念
什么是Linux容器:
Linux 容器是与系统其他部分隔离开的一个或一组进程。运行这些进程所需的所有文件都由另一个特定镜像提供,意味着从开发到测试再到生产整个过程中,Linux 容器都是可移植且一致的。因此,相对于依赖重复传统测试环境的开发渠道,使用容器速度要快得多。容器比较普遍也易于使用,因此也成了 IT 安全方面的重要组成部分。
Linux容器是一种轻量级的虚拟化技术,它可以在一个主机上运行多个隔离的用户空间环境。它们提供了一个沙箱环境,使得应用程序和它们所依赖的库、配置文件和其他资源可以被封装在一个独立的环境中,而不必与主机系统或其他容器共享环境。这使得应用程序可以更加可靠地部署,并且可以在不同的环境中运行,而不需要重新编译或修改代码。Linux容器可以在单个主机上运行多个应用程序实例,同时保证它们相互隔离,从而提高了系统资源的利用率。Docker是一个非常流行的Linux容器化平台。
为什么需要 Linux容器:
假设您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用不止依赖于您当前的配置,还需要某些特定的库、依赖项和文件。与此同时,您的企业还拥有标准化的开发和生产环境,有着自己的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境,而不产生重新创建服务器环境的开销。因此,您要如何确保应用能够在这些环境中运行和通过质量检测,并且在部署过程中不出现令人头疼的问题,也无需重新编写代码和进行故障修复?答案就是使用容器。容器可以确保您的应用拥有必需的库、依赖项和文件,让您可以在生产中自如地迁移这些应用,无需担心会出现负面影响。实际上,您可以将容器镜像中的内容(使用 Buildah 等开源工具创建)视为 Linux 发行版的一个安装实例,因为其中完整包含 RPM 软件包、配置文件等内容。但是,安装容器镜像发行版,要比安装新的操作系统副本容易得多。这样可以避免危机,做到皆大欢喜。虽然这只是一个常见情况的示例,但在要求可移植性、可配置性和隔离的情况下,我们可以利用 Linux 容器解决很多难题。Linux 容器的价值在于,它能加速开发并满足新出现的业务需求。在某些情形中(如通过 Apache Kafka 进行实时数据流处理),容器是不可或缺的,因为它们是提供应用所需的可扩展性的唯一途径。无论基础架构是在企业本地还是在云端,或者混合使用两者,容器都能满足您的需求。
虚拟机 和 容器的区别是什么:
容器不就是虚拟化吗?实际上不完全如此。更确切的说法应该是:两者为互补关系。我们用一种简单方式来思考一下两者之间的关系:虚拟化使得您的操作系统(Windows 或 Linux)可同时在单个硬件系统上运行。容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。例如:ARM Linux 系统运行 ARM Linux 容器,x86 Linux 系统运行 x86 Linux 容器,x86 Windows 系统运行 x86 Windows 容器。Linux 容器具有极佳的可移植性,但前提是它们必须与底层系统兼容。这意味着什么?对于新手而言,虚拟化会使用虚拟机监控程序模拟硬件,从而使多个操作系统能够并行运行。但这不如容器轻便。事实上,在仅拥有容量有限的有限资源时,您需要能够进行密集部署的轻量级应用。Linux 容器在本机操作系统上运行,与所有容器共享该操作系统,因此应用和服务能够保持轻巧,并行化快速运行。Linux 容器镜像提供了可移植性和版本控制,确保能够在开发人员的笔记本电脑上运行的应用,同样也能在生产环境中正常运行。黄金镜像是一种特殊的容器镜像类型,可为系统配置创建一致可靠的基线。相较于虚拟机,Linux 容器在运行时所占用的资源更少,使用的是标准接口(启动、停止、环境变量等),并会与应用隔离开;此外,作为大型应用(包含多个容器)的一部分时更加易于管理,而且这些多容器应用可以跨多个云环境进行编排。甚至还存在将容器编排与虚拟机管理相结合的工具。
什么是 K8s:
K8s是指Kubernetes,是一个开源的容器编排平台,用于管理和部署容器化应用程序。它旨在简化容器应用程序的部署、扩展和管理,并提供自动化的容器操作和负载均衡。Kubernetes支持多种容器引擎,包括Docker,以及其他容器技术,如rkt和CRI-O。通过使用Kubernetes,用户可以更轻松地构建、运行和管理云原生应用程序。
什么是 containerd:
containerd是一个开源的容器运行时,它为Kubernetes、Docker和其他容器管理工具提供了基础设施。它由Docker维护,旨在提供一种轻量级、高度可扩展的容器管理方法,使容器化应用程序更加易于部署和管理。containerd可以在多个操作系统上运行,并提供API和插件机制,使其能够与不同的容器编排平台和工具集成。同时,它还提供了对容器镜像、网络、存储等方面的支持,使得容器的生命周期管理变得更加简单和便捷。
什么是 Docker:
K8s 1.24 开始不支持Docker
K8s 1.23 对Docker的支持较为完善
Docker是一款开源的容器化平台,其目标是为开发人员和系统管理员提供一个简单、快速、可移植的应用程序打包和部署解决方案。通过使用Docker,用户可以将应用程序及其依赖项打包到一个轻量级的、可移植的容器中,然后在不同的环境中运行这些容器,而无需担心环境差异性或应用程序依赖项的问题。Docker还提供了高效的镜像管理、容器编排、存储管理等功能,使得容器化应用程序的管理变得更加简单和可靠。Docker已经成为了当今最受欢迎和广泛使用的容器化技术之一。
Containerd 将容器内正在运行的进程称为任务(task),创建容器后,可以通过 ctr task strat 来启动容器中的任务,- d 为后台启动
task ID 是任务唯一的标识符,与容器名称相同
PID 是 任务在宿主机上的进程ID
status 是任务的当前状态,如 “RUNNING”(正在运行)或 “STOPPED”(已停止)
当容器中的任务运行时,无法直接删除容器,如需删除,需要先停止容器中的任务