有没有办法在GKE群集节点中启用嵌套虚拟化?

时间:2020-03-19 03:51:20

标签: kubernetes virtual-machine google-kubernetes-engine

我试图将KubeVirt与GKE集群一起使用。

我发现我能够创建一个嵌套虚拟化启用的GCP VM,但是我没有找到一种方法来为GKE群集节点实现相同的目的。

如果无法为GKE群集节点启用嵌套虚拟化,则只能将kubevirt与debug.useEmulation一起使用,这不是我想要的。

谢谢

2 个答案:

答案 0 :(得分:2)

是的,你可以——这并不难,只是不是很直观。

  1. 使用 ubuntu/containerd、n1 标准节点和 Haswell 的最低 CPU 启动 GKE 集群。我认为您还需要启用“基本授权”才能使 virtctl 正常工作(抱歉)。

  2. 找到用于新集群的模板,然后确定正确的源图像:

    gcloud 计算实例模板描述 --format=json | jq ".properties.disks[0].initializeParams.sourceImage"

  3. 在启用嵌套虚拟化的情况下创建源磁盘的副本:

    gcloud 计算图像 --project $PROJECT create $NEW_IMAGE_NAME --source-image $SOURCE_IMAGE --source-image-project=$SOURCE_PROJECT --licenses "https://www.googleapis.com/compute/v1/projects /vm-options/global/licenses/enable-vmx"

  4. 在 GKE 集群的模板上使用“创建类似”。将启动盘更改为 $NEW_IMAGE_NAME。您还需要深入到网络/别名并将默认子网更改为您的 pod 网络。

  5. 为您的 GKE 节点触发组的滚动更新,以将它们移动到新模板。

  6. 您现在可以安装 kubevirt(我必须使用 0.38.1 而不是当前的)

警告:我不知道如何为 kubevirt 使用谷歌磁盘映像,这将是一个明显的匹配。我什至不知道如何让私有 GCR 与 CDI 一起工作。哦,由于 websocket 问题,控制台无法工作。但是...你可以shell到gke节点并查看/dev/kvm,你也可以kubevirt一个VM然后ssh进入它,所以是的,它确实有效。

有谁知道如何让这一切变得更好?

答案 1 :(得分:1)

根据this docs,目前仅在GCE上提供嵌套虚拟化。

关于在Nested Virtualization上支持GKE的问题已经存在,可以在here上找到。我会说还没有介绍它,这就是为什么您找不到有关GKE和nested virtualization的适当文档。

还请考虑GCPGKE完全不同。

Google Compute Engine VM实例不受Google管理。因此,除了准备好的基础映像之外,您还可以执行任何需要的操作,就像普通的VM。

但是,Google Kubernetes Engine是专门为容器而创建的。那些虚拟机由Google管理。 GKE已经为您创建了集群,所有VM都自动成为集群的一部分。在GKE中,您将无法运行MinikubeKubeadm

Here,您具有GKE的某些特征