热迁移是KubeVirt支持的一个常见虚拟化特性,在这个特性中,运行在一个集群节点上的虚拟机可以移动到另一个集群节点上,而不需要关闭来宾操作系统或其应用程序。

要在Kubernetes测试环境中试验KubeVirt实时迁移,需要进行一些设置。

启动Kubernetes集群,要求如下:

  • 两个或多个节点
  • CNI插件:Flannel是概念环境证明的好选择。
  • 嵌套或模拟虚拟化
  • KubeVirt

关于使用Minikube的简单测试环境,请参考本网站的Minikube快速入门。

检查节点和kubevirt状态

查询节点及其IP范围。

kubectl get nodes -o wide

这将返回一个类似于

NAME           STATUS   ROLES                  AGE     VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE               KERNEL-VERSION   CONTAINER-RUNTIME
minikube Ready control-plane,master 2m43s v1.20.7 192.168.39.240 <none> Buildroot 2020.02.12 4.19.182 docker://20.10.6
minikube-m02 Ready <none> 118s v1.20.7 192.168.39.245 <none> Buildroot 2020.02.12 4.19.182 docker://20.10.6

检查kubevirt是否已完全部署:

kubectl -n kubevirt get kubevirt
NAME AGE PHASE
kubevirt 3m20s Deployed

启用热迁移

在撰写本文时,动态迁移还不是KubeVirt的标准特性。要启用该特性,请在“kubevirt”命名空间中创建一个名为“kubevirt-config”ConfigMap

 kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: kubevirt-config
namespace: kubevirt
labels:
kubevirt.io: ""
data:
feature-gates: "LiveMigration"
EOF

创建虚拟机

接下来,创建虚拟机。请参考创建虚拟机章节。

kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml
virtctl start testvm

在多节点环境中,了解在哪个节点上运行pod是很有帮助的。使用-o wide查看其节点:

kubectl get pod -o wide

注意在这个例子中,pod显示为运行在NODE " minikube-m02 "上:

NAME                         READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
virt-launcher-testvm-c8nzz 2/2 Running 0 32s 10.244.1.12 minikube-m02 <none> <none>

在虚拟机上启动一个服务

使用virtctl,公开两个端口进行测试,ssh/22http/8080:

virtctl expose vmi testvm --name=testvm-ssh --port=22 --type=NodePort
virtctl expose vmi testvm --name=testvm-http --port=8080 --type=NodePort

首先登录控制台,使用netcat运行一个简单的web服务器:

virtctl console testvm

在控制台登录提示符中提到了默认用户“cirros”及其密码,请使用它们登录。接下来,运行下面的while循环,连续响应任何http连接尝试,并发送测试消息:

while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Migration test" ) | nc -l -p 8080; done

在控制台登录提示符中提到了默认用户“cirros”及其密码,请使用它们登录。接下来,运行下面的while循环,连续响应任何http连接尝试,并发送测试消息:


IP=$(minikube ip)
PORT=$(kubectl get svc testvm-http -o jsonpath='{.spec.ports[0].nodePort}')

现在使用curl从简单的web服务中读取数据:

curl ${IP}:${PORT}

这将输出Migration test。如果一切正常,就应该将虚拟机迁移到另一个节点。

迁移虚拟机

testvm vmi从一个节点迁移到另一个节点,执行以下命令:

virtctl migrate testvm

为了确保迁移发生,在“宽”视图下观察豆荚:

NAME                         READY   STATUS      RESTARTS   AGE    IP            NODE           NOMINATED NODE   READINESS GATES
virt-launcher-testvm-8src7 0/2 Completed 0 5m 10.244.1.14 minikube-m02 <none> <none>
virt-launcher-testvm-zxlts 2/2 Running 0 21s 10.244.0.7 minikube <none> <none>

注意,原始的virt启动器吊舱已经进入Completed状态,虚拟机现在正在minikube节点上运行。测试之前启动的服务是否仍在运行:

curl ${IP}:${PORT}

同样,这应该输出迁移测试。

总结
这个示例现在结束了。这个练习演示了KubeVirt Live Migration将正在运行的虚拟机从一个节点移动到另一个节点的能力,而不需要重新启动正在运行的应用程序。

【云原生 · Kubernetes】KubeVirt热迁移的更多相关文章

  1. 系列文章:云原生Kubernetes日志落地方案

    在Logging这块做了几年,最近1年来越来越多的同学来咨询如何为Kubernetes构建一个日志系统或者是来求助在这过程中遇到一系列问题如何解决,授人以鱼不如授人以渔,于是想把我们这些年积累的经验以 ...

  2. [云原生]Kubernetes - 集群搭建(第2章)

    目录 一.前置知识点 二.kubeadm部署方式介绍 三.安装要求 四.最终目标 五.准备环境 六.环境初始化 6.1 设置系统主机名以及Hosts文件的相互解析 6.2 安装依赖文件(所有节点) 6 ...

  3. 干货 | 京东云原生容器—SpringCloud实践(一)

    "云原生"成为近年热词并不是一种偶然,它不是一个软件,也不是一种框架,而是一堆理念集合,以及围绕这些理念所产生的一些最佳实践的工具.云原生天然就是作用于服务架构的,可以视作一个服务 ...

  4. Kubernetes 入门必备云原生发展简史

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 "未来的软件一定是生长于云上的"这是云原生理念的最核心假设.而所谓"云原生",实际上就是在定义一条能 ...

  5. Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31

    作者 | 徐迪.李传云.黄珂.汪萌海.张晓宇.何淋波 .陈有坤.李鹏审核 | 陈俊 上游重要进展 1. Kubernetes v1.17 版本发布 功能稳定性是第一要务.v1.17 包含 22 个增强 ...

  6. 云原生时代, Kubernetes 多集群架构初探

    为什么我们需要多集群? 近年来,多集群架构已经成为“老生常谈”.我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力.另一方面我们也希望通过多集群混合云来降低成本,利用到不同集群各自的 ...

  7. [转帖]Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31

    Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31 https://www.kubernetes.org.cn/6252.html 2019-12-13 11:59 ali ...

  8. 使用Velero Restic快速完成云原生应用迁移至ACK集群

    本文记录使用Velero Restic快速完成云原生应用迁移至ACK集群的实践过程. 0. 实践步骤概览 (1)创建GKE集群(或自建Kubernetes集群)(2)在GKE集群上部署示例应用Jenk ...

  9. 使用 Iceberg on Kubernetes 打造新一代云原生数据湖

    背景 大数据发展至今,按照 Google 2003年发布的<The Google File System>第一篇论文算起,已走过17个年头.可惜的是 Google 当时并没有开源其技术,& ...

  10. VMware vSphere 7.0 Update 2 发布 - 数据中心虚拟化和 Kubernetes 云原生应用引擎

    2021 年 3 月 9 日,VMware 发布了 vSphere 7 Update 2.它可以通过 VMware Customer Connect 和 vSphere Lifecycle Manag ...

随机推荐

  1. itoa与atoi函数

    // 自己参考并编写的itoa与atoi函数 // 支持10进制整形,支持16进制整形,支持负数 // 20220228,修复负数字符字符串会转换成正数的bug#include <stdio.h ...

  2. 重新扫描磁盘.bat

    工作需要,需要常常扫描磁盘, 以前是先调用磁盘管理器,然后使用alt+a,再按r,完成对磁盘的扫描 但是速度慢效率低 昨天帮朋友装台式电脑系统的时候,他说要给磁盘分区, 发现磁盘内有卷被占用,无法删除 ...

  3. Python数据科学手册-机器学习: 流形学习

    PCA对非线性的数据集处理效果不太好. 另一种方法 流形学习 manifold learning 是一种无监督评估器,试图将一个低维度流形嵌入到一个高纬度 空间来描述数据集 . 类似 一张纸 (二维) ...

  4. phpoffice文档笔记

    目录 phpword html转word phpexcel 从数据库导出 phpword html转word <?php namespace app\index\controller; use ...

  5. day03-代码实现02

    多用户即时通讯系统03 4.编码实现02 4.2功能实现-拉取在线用户 4.2.1思路分析 客户端想要知道在线用户列表,就要向服务器发送请求(Message),因为只有服务器端保持着所有与客户端相连接 ...

  6. Python实验报告——第4章 序列的应用

    实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...

  7. Alertmanager配置概述

    Alertmanager主要负责对Prometheus产生的告警进行统一处理,因此在Alertmanager配置中一般会包含以下几个主要部分: 全局配置(global):用于定义一些全局的公共参数,如 ...

  8. #css#如何使用hover,实现父对子的样式改变?

    思路及做法: 鼠标移动到父盒子的时候, 里面所有的子盒子的样式都发生变化的, 只需要直接在hover后面加上空格, 并且加上子盒子的类名 ,里面再写其他样式 .父盒子的类名:hover .子盒子的类名 ...

  9. SECS半导体设备通讯-1 SECS的基本概念

    一 什么是SECS SECS(SEMI Equipment Communication Standard),半导体设备通讯标准. 此标准由SEMI (Semiconductor Equipment a ...

  10. Node.js(五)学生管理CRUD

    npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) n ...