KVM 和 OpenStack 学习笔记1. 虚拟化基础概念虚拟化是指在一台物理服务器上通过软件技术模拟出多台相互隔离的虚拟机。每台虚拟机都可以安装独立的操作系统并像真实服务器一样运行应用程序。传统物理机部署方式一台物理服务器 - 一个操作系统 - 一组业务应用虚拟化部署方式一台物理服务器 - 虚拟化层 - 多台虚拟机 - 多个操作系统 - 多组业务应用虚拟化的好处提高服务器资源利用率。降低硬件采购成本。方便创建、删除、迁移虚拟机。便于业务隔离。支持快照、备份、弹性扩容等能力。2. KVM 是什么KVM 全称是 Kernel-based Virtual Machine意思是基于 Linux 内核的虚拟机技术。它是 Linux 内核自带的虚拟化模块可以把 Linux 系统变成一个虚拟化平台。简单理解KVM Linux 内核中的虚拟化能力KVM 本身主要负责 CPU 和内存虚拟化通常还需要配合 QEMU、libvirt 等工具一起使用才能完整管理虚拟机。常见组合KVM QEMU libvirt Linux 下常见的虚拟机管理方案3. KVM 的核心组件3.1 KVM 内核模块KVM 是 Linux 内核模块主要提供硬件虚拟化能力。常见模块模块说明kvmKVM 通用模块kvm_intelIntel CPU 使用的 KVM 模块kvm_amdAMD CPU 使用的 KVM 模块检查 CPU 是否支持虚拟化egrep-c(vmx|svm)/proc/cpuinfo如果结果大于 0说明 CPU 支持硬件虚拟化。查看 KVM 模块lsmod|grepkvm3.2 QEMUQEMU 是一个硬件模拟器和虚拟机运行程序。它可以模拟 CPU、磁盘、网卡、显卡等硬件设备。在 KVM 场景中QEMU 负责创建虚拟机进程KVM 负责加速 CPU 虚拟化。简单理解QEMU 负责模拟虚拟机硬件KVM 负责让虚拟机跑得更快。3.3 libvirtlibvirt 是一个虚拟化管理工具和 API常用来统一管理 KVM 虚拟机。常见工具工具作用libvirtd / virtqemud虚拟化管理服务virsh命令行管理工具virt-install创建虚拟机工具virt-manager图形化虚拟机管理工具常用命令virshlist--allvirshstart vm01virshshutdownvm01virshdestroy vm01virshundefine vm013.4 虚拟机镜像KVM 常用的虚拟机磁盘镜像格式是qcow2和raw。格式说明特点qcow2QEMU 常用镜像格式支持快照、压缩、动态扩容raw原始磁盘格式性能较好功能简单创建 qcow2 镜像qemu-img create-fqcow2 vm01.qcow2 20G查看镜像信息qemu-img info vm01.qcow24. KVM 虚拟机网络KVM 常见网络模式有 NAT、桥接和仅主机模式。网络模式说明适用场景NAT虚拟机通过宿主机访问外网本地测试、实验环境Bridge虚拟机像局域网中的独立主机服务器部署、生产环境Host-only虚拟机只能和宿主机通信隔离实验环境桥接网络示意外部网络 - 物理网卡 - Linux Bridge - 虚拟机网卡查看虚拟网络virshnet-list--allvirshnet-info default查看网桥iplinkshow brctl show5. KVM 常用操作5.1 安装常用软件以 CentOS / Rocky Linux 为例yuminstall-yqemu-kvm libvirt virt-install virt-manager systemctlenable--nowlibvirtd以 Ubuntu 为例aptinstall-yqemu-kvm libvirt-daemon-system libvirt-clients virtinst systemctlenable--nowlibvirtd5.2 创建虚拟机virt-install\--namevm01\--memory2048\--vcpus2\--diskpath/var/lib/libvirt/images/vm01.qcow2,size20,formatqcow2\--cdrom/iso/CentOS-Stream-8.iso\--networknetworkdefault\--graphicsvnc\--os-variant centos-stream85.3 查看虚拟机virshlistvirshlist--allvirshdominfo vm015.4 管理虚拟机virshstart vm01virshrebootvm01virshshutdownvm01virshdestroy vm01shutdown是正常关机destroy是强制断电。5.5 快照操作virshsnapshot-create-as vm01 initvirshsnapshot-list vm01virshsnapshot-revert vm01 initvirshsnapshot-delete vm01 init快照适合实验环境回滚生产环境使用前需要考虑磁盘格式、性能和一致性问题。6. OpenStack 是什么OpenStack 是一个开源云计算管理平台用来管理计算、网络、存储、镜像、身份认证等资源。它可以把多台服务器组织成一个私有云平台让用户像使用公有云一样创建云主机、云硬盘、网络、安全组等资源。简单理解OpenStack 开源私有云管理平台OpenStack 本身不是虚拟化技术它通常调用底层虚拟化平台来创建虚拟机。最常见的底层虚拟化技术就是 KVM。用户创建云主机 - OpenStack 接收请求 - Nova 调度计算节点 - libvirt 调用 KVM - 创建虚拟机7. OpenStack 核心组件OpenStack 由多个服务组成每个服务负责一种云资源。组件服务名作用Keystone身份认证服务管理用户、项目、角色、TokenNova计算服务管理云主机生命周期Glance镜像服务管理云主机镜像Neutron网络服务管理虚拟网络、子网、路由、安全组Cinder块存储服务管理云硬盘Swift对象存储服务提供对象存储HorizonWeb 控制台图形化管理界面Placement资源调度服务管理计算资源库存和分配Heat编排服务使用模板创建云资源Ceilometer计量监控服务采集资源使用数据学习初期重点掌握KeystoneNovaGlanceNeutronCinderHorizon8. OpenStack 资源概念8.1 项目、用户、角色OpenStack 使用 Keystone 管理身份认证。概念说明User用户例如 admin、demoProject项目也叫租户用来隔离资源Role角色用来控制权限Token用户认证后获得的访问凭证用户登录后只能管理自己项目中的资源。管理员可以管理所有项目资源。8.2 镜像镜像由 Glance 管理是创建云主机的系统模板。常见镜像格式qcow2rawvmdkiso上传镜像示例openstack image createCentOS-Stream-8\--fileCentOS-Stream-8.qcow2\--disk-format qcow2\--container-format bare\--public8.3 规格规格也叫 flavor用来定义云主机的 CPU、内存、磁盘大小。查看规格openstack flavor list创建规格openstack flavor create small--vcpus1--ram1024--disk208.4 网络Neutron 负责管理 OpenStack 网络。常见网络类型网络类型说明Provider Network直接连接物理网络Self-service Network租户自助创建的私有网络External Network外部网络通常用于浮动 IPInternal Network内部网络云主机之间通信常见网络资源network网络。subnet子网。router路由器。port端口。security group安全组。floating ip浮动 IP。8.5 云硬盘Cinder 负责管理云硬盘。常见操作openstack volume create--size10>addvolume vm01>8.6 云主机云主机由 Nova 管理底层通常是 KVM 虚拟机。创建云主机示例openstack server create vm01\--imageCentOS-Stream-8\--flavorsmall\--networkprivate\--key-name mykey查看云主机openstack server list openstack server show vm019. OpenStack 基本工作流程以创建一台云主机为例1. 用户通过 Horizon 或 openstack 命令发起创建请求。 2. Keystone 验证用户身份和权限。 3. Nova 接收创建云主机请求。 4. Nova Scheduler 选择合适的计算节点。 5. Glance 提供系统镜像。 6. Neutron 创建虚拟网卡并分配 IP。 7. Cinder 按需提供云硬盘。 8. Nova Compute 调用 libvirt。 9. libvirt 调用 QEMU/KVM 创建虚拟机。 10. 云主机启动完成。简化流程图Horizon / CLI - Keystone - Nova - Glance - Neutron - Cinder - libvirt - QEMU/KVM10. KVM 和 OpenStack 的关系KVM 和 OpenStack 不是同一层面的东西。KVM 是底层虚拟化技术负责真正运行虚拟机。OpenStack 是上层云平台负责统一管理大量计算、网络、存储资源。OpenStack 管理云资源 - Nova 管理计算资源 - libvirt 管理虚拟机 - QEMU/KVM 运行虚拟机可以这样理解对比对象类比KVM发动机OpenStack整套汽车管理系统libvirt控制发动机的接口Nova调度和管理车辆运行的服务如果只有一台服务器直接使用 KVM 就可以创建和管理虚拟机。如果有很多台服务器需要做统一资源池、用户隔离、网络管理、云硬盘、镜像管理、配额管理就适合使用 OpenStack。11. KVM 和 OpenStack 对比对比项KVMOpenStack定位虚拟化技术云计算管理平台所在层级底层虚拟化层上层资源管理层主要作用运行虚拟机管理计算、网络、存储等云资源管理范围单机或少量宿主机多节点资源池核心对象虚拟机云主机、镜像、网络、云硬盘、项目、用户常用工具virsh、virt-install、virt-manageropenstack CLI、Horizon网络能力NAT、Bridge 等基础网络租户网络、路由器、安全组、浮动 IP存储能力本地镜像、挂载磁盘镜像服务、云硬盘、对象存储用户权限通常由系统管理员管理支持多租户、项目、角色、配额部署复杂度较低较高适用场景学习虚拟化、小规模虚拟机私有云、大规模资源管理一句话对比KVM 负责把虚拟机跑起来OpenStack 负责把很多 KVM 节点组织成云平台。12. KVM、OpenStack、Ceph 的常见组合在私有云环境中KVM、OpenStack、Ceph 经常一起使用。OpenStack - 管理云平台资源 KVM - 运行云主机 Ceph - 提供后端分布式存储常见对应关系OpenStack 组件后端技术说明NovaKVM创建和运行云主机GlanceCeph RBD / 文件存储保存镜像CinderCeph RBD提供云硬盘NeutronLinux Bridge / Open vSwitch提供虚拟网络整体架构示意用户 - OpenStack Horizon / CLI - Nova / Neutron / Glance / Cinder - KVM 计算节点 - Ceph 存储集群13. 学习路线建议建议按照下面顺序学习先理解虚拟化基本概念。学会使用 KVM 创建、启动、停止、删除虚拟机。掌握虚拟机镜像、快照、网络桥接等操作。再学习 OpenStack 的核心组件。理解 Keystone、Nova、Glance、Neutron、Cinder 的协作关系。最后学习 OpenStack 如何调用 KVM 和 Ceph。学习主线Linux 基础 - KVM 虚拟化 - libvirt 管理 - OpenStack 云平台 - Ceph 分布式存储14. 常用命令汇总14.1 KVM 常用命令命令作用lsmodgrep kvmvirsh list --all查看所有虚拟机virsh start vm启动虚拟机virsh shutdown vm正常关闭虚拟机virsh destroy vm强制关闭虚拟机virsh undefine vm删除虚拟机定义virsh dominfo vm查看虚拟机信息virsh console vm进入虚拟机控制台virsh net-list --all查看虚拟网络qemu-img info image查看镜像信息qemu-img create -f qcow2 image 20G创建 qcow2 镜像14.2 OpenStack 常用命令命令作用openstack token issue验证认证是否正常openstack service list查看服务列表openstack endpoint list查看服务端点openstack image list查看镜像openstack flavor list查看规格openstack network list查看网络openstack subnet list查看子网openstack server list查看云主机openstack volume list查看云硬盘openstack hypervisor list查看计算节点15. 总结KVM 和 OpenStack 的关系可以用一句话概括KVM 是虚拟机运行技术OpenStack 是云平台管理系统。学习时不要把两者混在一起KVM 解决的是“如何在一台物理机上运行虚拟机”。OpenStack 解决的是“如何把很多计算、网络、存储资源统一管理成云平台”。OpenStack 可以使用 KVM 作为底层虚拟化技术。在私有云中OpenStack 管理资源KVM 运行云主机Ceph 提供后端存储。