news 2026/5/2 7:09:53

告别传统虚拟化:在K8s集群里用Kubevirt跑CentOS虚拟机的保姆级教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别传统虚拟化:在K8s集群里用Kubevirt跑CentOS虚拟机的保姆级教程

告别传统虚拟化:在K8s集群里用Kubevirt跑CentOS虚拟机的保姆级教程

当运维团队面临既要管理容器又要维护虚拟机的混合环境时,传统方案往往需要在VMware和Kubernetes之间不断切换。这不仅增加了运维复杂度,还造成了资源利用率低下。现在,通过Kubevirt技术,我们可以在同一个Kubernetes集群中同时调度容器和虚拟机,实现真正的"一云多态"管理。

本文将手把手带您完成从传统虚拟化到Kubevirt的迁移之旅。不同于简单的技术介绍,我们会重点解决实际迁移过程中的三个核心痛点:如何将现有CentOS镜像转换为Kubevirt可用格式、如何实现虚拟机与容器的网络互通、以及如何通过Kubernetes原生方式管理虚拟机生命周期。

1. 环境准备与Kubevirt部署

1.1 节点环境检查

在部署Kubevirt前,需要确保所有Kubernetes节点满足以下条件:

# 检查CPU虚拟化支持(Intel/AMD) grep -E '(vmx|svm)' /proc/cpuinfo # 检查内核模块加载 lsmod | grep kvm # Ubuntu安装依赖 sudo apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils # CentOS安装依赖 sudo yum install -y qemu-kvm libvirt virt-install bridge-utils

如果硬件不支持虚拟化(常见于云主机环境),需要启用软件仿真模式:

kubectl edit kubevirt kubevirt -n kubevirt # 添加以下配置 spec: configuration: developerConfiguration: useEmulation: true

1.2 Kubevirt集群部署

推荐使用Operator方式部署最新稳定版:

# 部署Kubevirt Operator export KUBEVIRT_VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | jq -r .tag_name) kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-operator.yaml # 部署Kubevirt自定义资源 kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${KUBEVIRT_VERSION}/kubevirt-cr.yaml # 验证安装 kubectl get pods -n kubevirt

提示:生产环境建议同时部署CDI(Containerized Data Importer)用于管理虚拟机磁盘镜像

2. 虚拟机镜像处理与导入

2.1 转换传统镜像格式

从云平台下载的CentOS qcow2镜像需要转换为containerDisk格式:

# Dockerfile FROM kubevirt/container-disk-v1alpha ADD CentOS-7-x86_64-GenericCloud-2009.qcow2 /disk/disk.img

构建并推送镜像到私有仓库:

docker build -t registry.example.com/kubevirt/centos7:2009 . docker push registry.example.com/kubevirt/centos7:2009

2.2 使用DataVolume动态导入

对于大型镜像,推荐使用CDI的DataVolume功能:

apiVersion: cdi.kubevirt.io/v1beta1 kind: DataVolume metadata: name: centos-dv spec: source: http: url: "https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-2009.qcow2" pvc: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi

3. 虚拟机定义与高级配置

3.1 基础虚拟机定义

创建包含cloud-init初始化的完整VM配置:

apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: centos-vm spec: running: false template: metadata: labels: kubevirt.io/domain: centos-vm spec: domain: cpu: cores: 2 devices: disks: - disk: bus: virtio name: rootdisk - disk: bus: virtio name: cloudinitdisk interfaces: - name: default bridge: {} resources: requests: memory: 4Gi networks: - name: default pod: {} volumes: - name: rootdisk persistentVolumeClaim: claimName: centos-dv - name: cloudinitdisk cloudInitNoCloud: userData: | #cloud-config password: centos chpasswd: { expire: False } ssh_pwauth: True

3.2 网络高级配置

实现虚拟机与K8s Service互通:

apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: centos-vm-with-service spec: template: spec: networks: - name: default pod: {} - multus: networkName: bridge-network name: secondary

对应的Multus NetworkAttachmentDefinition:

apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: bridge-network annotations: k8s.v1.cni.cncf.io/resourceName: bridge.network.kubevirt.io/br0 spec: config: '{ "cniVersion": "0.3.1", "name": "br0", "type": "macvlan", "master": "eth0", "mode": "bridge", "ipam": { "type": "dhcp" } }'

4. 运维与监控实践

4.1 日常操作命令集

安装virtctl客户端工具:

# Linux wget https://github.com/kubevirt/kubevirt/releases/download/v0.58.0/virtctl-v0.58.0-linux-amd64 -O /usr/local/bin/virtctl chmod +x /usr/local/bin/virtctl # macOS brew install kubevirt/tap/virtctl

常用操作命令:

# 启动/停止VM virtctl start centos-vm virtctl stop centos-vm # 控制台连接 virtctl console centos-vm # 导出VM快照 virtctl snapshot create centos-vm --name=snapshot-01 # 虚拟机迁移 virtctl migrate centos-vm

4.2 监控与告警配置

创建Prometheus监控规则示例:

apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: kubevirt-vm-alerts spec: groups: - name: kubevirt.rules rules: - alert: HighVMMemoryUsage expr: kubevirt_vmi_memory_available_bytes / kubevirt_vmi_memory_usable_bytes < 0.2 for: 5m labels: severity: warning annotations: summary: "VM {{ $labels.name }} memory usage high" description: "VM {{ $labels.name }} has only {{ printf \"%.2f\" (mul 100 (div (sub 1 (kubevirt_vmi_memory_available_bytes / kubevirt_vmi_memory_usable_bytes)) 1)) }}% memory available"

5. 性能优化与故障排查

5.1 关键性能参数调优

在VM定义中添加性能优化参数:

spec: domain: cpu: model: host-passthrough features: - name: pdpe1gb policy: require devices: autoattachGraphicsDevice: false autoattachSerialConsole: true rng: {} resources: requests: memory: 8Gi limits: memory: 8Gi cpu: 4

5.2 常见问题解决方案

问题1:虚拟机启动超时

检查virt-launcher Pod日志:

kubectl logs -f virt-launcher-centos-vm-xxxxx -c compute

常见解决方法:

  • 增加虚拟机启动超时时间
  • 检查镜像是否损坏
  • 验证存储PV是否正常挂载

问题2:网络连接失败

网络排查步骤:

# 检查Multus注解 kubectl get pod virt-launcher-centos-vm-xxxxx -o json | jq '.metadata.annotations' # 进入virt-launcher网络命名空间 nsenter -t $(pgrep qemu) -n ip a

6. 生产环境最佳实践

6.1 资源配额管理

为Kubevirt设置专属资源池:

apiVersion: kubevirt.io/v1 kind: KubeVirt metadata: name: kubevirt spec: configuration: developerConfiguration: featureGates: - LiveMigration permittedHostDevices: pciDevices: - resourceName: "nvidia.com/gpu" externalResourceProvider: true workloadUpdateStrategy: workloadUpdateMethods: - LiveMigrate

6.2 高可用配置

启用虚拟机自动迁移:

apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: centos-ha spec: running: true template: spec: evictionStrategy: LiveMigrate domain: cpu: cores: 2 devices: disks: - disk: bus: virtio name: rootdisk volumes: - name: rootdisk persistentVolumeClaim: claimName: centos-dv
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 7:06:33

DESIGN.md:一个正在重塑AI开发美学的纯文本文件

DESIGN.md&#xff1a;一个正在重塑AI开发美学的纯文本文件 如果用一句话概括2026年AI开发圈最让人兴奋的变化&#xff0c;那一定是&#xff1a;AI终于开始“懂设计”了。 几个月前&#xff0c;你让Cursor或Claude Code帮你生成一个落地页&#xff0c;功能都没问题&#xff0c;…

作者头像 李华
网站建设 2026/5/2 7:06:06

GLM-5.1在Agent场景的性价比拆解:94%的Opus水准,价格只要1/3

最近在 OpenClaw 社区看到一个帖子说得很直接&#xff1a;"GLM 4.7 是 OpenClaw 最佳的 LLM&#xff0c;没有之一。它确实慢&#xff0c;但从没在工具调用上出过错。"智谱在 3 月底发了 GLM-5.1&#xff0c;Agent 能力更强了&#xff0c;Coding Plan 的 Lite 档低至 …

作者头像 李华
网站建设 2026/5/2 7:04:03

星盘接口开发文档:日运语料接口指南

星盘接口开发文档&#xff1a;日运语料接口指南1. 引言 本文档详细介绍了占星系统的日运语料接口的使用方法&#xff0c;包括请求参数详解、响应数据结构、错误处理机制以及最佳实践建议。 2. 接口基础信息 接口名称: 日运语料 请求方式: POSTContent-Type: application/x-www-…

作者头像 李华
网站建设 2026/5/2 7:03:14

LLM应用的灰度发布工程:生产环境安全更新模型与Prompt的完整策略

大模型版本更新、Prompt 迭代&#xff0c;一旦直接全量上线&#xff0c;风险极高。用户体验的任何下滑都直接影响口碑和留存。灰度发布&#xff08;Canary Release&#xff09;是 LLM 应用安全迭代的核心工程实践。 本文系统梳理 LLM 应用的灰度发布策略&#xff0c;从最基础的…

作者头像 李华
网站建设 2026/5/2 7:03:13

树莓派板子-学习

局域网模式连接 STA 局域网模式&#xff1a;开发板能够主动去连接指定的热点/Wi-Fi。&#xff08;可联通外部网络&#xff09; 先通过VNC或者MobaXterm连接&#xff08;AP 直连模式&#xff1a;电脑连接树莓派开发板的热点&#xff09;。 修改配置 gedit ~/hiwonder-toolbo…

作者头像 李华
网站建设 2026/5/2 7:02:41

手写一个B+树:从原理到数据库索引实战

前言你有没有想过&#xff1a;MySQL为什么能用几毫秒从几亿条数据中找到你要的那一行&#xff1f;答案是&#xff1a;B树。今天&#xff0c;我们手写一颗生产级的B树&#xff1a; 支持百万级数据的高效存储支持范围查询和分页支持顺序遍历完整实现&#xff0c;可直接用于…

作者头像 李华