1.与chatgpt对话
https://chat.openai.com/share/2df89e3e-3a73-45c4-968d-5e26bfd14b3b
2.教材学习
第十章:KVM及虚拟机技术
虚拟机技术是云计算最核心的技术,KVM是主流的虚拟机技术之一。虚拟机技术主要包括CPU虚拟化、内存虚拟化和I/O虚拟化。
1.CPU虚拟化
在实现上分为全虚拟化、半虚拟化和硬件辅助虚拟化。
KVM是基于硬件辅助虚拟化技术的虚拟化方案,在KVM中,一个虚拟机就是一个用户空间QEMU进程,vCPU就是分配给该进程的物理CPU核上的某个线程,由Linux内核动态调度。KVM的vCPU工作在3中模式下:客户模式、用户模式、内核模式。
KVM的执行环境是基于Linux系统扩展得到得,称为虚拟机扩展VMX(Virtual Machine eXtensions),是Intel处理器上硬件虚拟化技术的一部分,也称为Intel VT-x。它提供了对虚拟化的硬件支持,使得虚拟机监视器(VMM)r能够更有效地管理虚拟机。
2.内存虚拟化
是将Guest上的虚拟内存地址转换为Guest上得物理内存地址,进一步再转换为Host上的物理内存地址。它使用到了硬件辅助内存虚拟化技术和透明大页内存技术,提升内存得性能和转换效率。
3.I/O虚拟化
KVM支持多种I/O虚拟化技术,有全虚拟化得设备模拟和半虚拟化得virtio驱动,设备直通PCI和设备共享单根虚拟化、数据平面开发工具集与存储性能开发工具集。
4.KVM API
KVM API是一组用于控制KVM的iotcl系统调用,包括设置虚拟机内存、创建和配置虚拟机CPU和虚拟设备等。书中主要提到了它得使用方法。
5.QEMU-KVM实现原理
QEMU使用了KVM内核模块的虚拟化功能,为自己的虚拟机提供了硬件辅助虚拟化加速。虚拟机的配置和创建、虚拟机运行所依赖的虚拟设备、虚拟机运行时用户环境和交互,以及一些虚拟机的特定技术都是QEMU自己实现的。
6.Strato Virt
一种基于Linux内核KVM的开源轻量级虚拟化技术,在保持传统虚拟化的隔离能力和安全能力的同时,降低了内存资源消耗,提高了虚拟机启动速度。它与QEMU的区别在于Strato Virt 是一个专门为华为云平台设计的虚拟化解决方案,而 QEMU 则是一个通用的、开源的虚拟机监视器和仿真器。
第十一章:Linux容器技术
Linux 容器技术是一种轻量级虚拟化技术,使得应用程序及其依赖性能够在一个隔离的环境中运行,而不需要完整的虚拟机。
chroot
是一种 Unix 和类 Unix 操作系统中的系统调用和命令,用于改变进程的根文件系统。通过使用chroot,一个进程可以被限制在一个特定的目录下,将该目录作为其根目录。chroot是容器技术的基础,但并不提供容器所需的全部隔离和管理功能。容器技术,如 Docker,通过使用命名空间、控制组(cgroups)等技术,提供了更为强大的隔离和管理机制。
命名空间(Namespaces):
命名空间是 Linux 容器实现隔离的核心机制之一,它允许将系统资源隔离开,使得在一个命名空间中运行的进程无法感知到其他命名空间中的资源。常用的命名空间包括 PID(进程ID)、网络、挂载点、用户和IPC(进程间通信)等。
控制组(cgroups):
控制组是用于限制、账户和隔离系统资源的机制。通过 cgroups,可以对 CPU、内存、磁盘 I/O 等资源进行管理,确保容器不会无限制地消耗主机资源
容器运行时(Container Runtime):
容器运行时是负责创建和运行容器的组件。Docker 和 containerd 是两个常见的容器运行时,它们负责加载、运行和管理容器。
Docker:
Docker 是一种流行的容器平台,它提供了一个用户友好的命令行界面和图形界面,用于构建、部署和管理容器。Docker 使用容器镜像(Container Image)来封装应用程序和其依赖,使其在不同环境中具有相同的运行时行为。
OCI 标准(Open Container Initiative):
OCI 是一个开放标准,定义了容器格式和运行时规范。Docker、containerd 和其他容器工具都遵循 OCI 标准,这有助于确保容器在不同容器运行时中的互操作性。
Pods:
Pods 是 Kubernetes 中的概念,表示一个或多个紧密关联的容器共享相同的网络命名空间和存储卷。Pods 允许容器在同一主机上进行通信,并共享一些资源。
Kubernetes:
Kubernetes 是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。Kubernetes 提供了对容器的自动化操作,例如自动伸缩、负载均衡和容器升级。
容器编排(Container Orchestration):
容器编排是一种自动化和协调多个容器的过程,以确保它们在集群中协同工作。Kubernetes 是当前最流行的容器编排工具之一,还有其他一些如 Docker Swarm 和 Apache Mesos。
Linux 容器技术为开发人员和运维人员提供了更轻量、更快速的部署和管理应用程序的方式,同时能够实现资源隔离和应用程序之间的高度可移植性。