CDI 是什么

1 containerized data importer 数据导入到 kubenetes 服务,并改进了管理KubeVirtualt及其存储的工作流程
2 CDI 为了用于 kubevirt 并用于导入虚拟机映像
3 可以通过创建 PVC, 自动以通过导入指定的声明,创建 raw 镜像,关联到对应 PVC
4 通过 DataVolumes 用作 KubeVirt VM 的磁盘的设备
5 DataVolumes是Kubernetes资源PVC(Persistent Volume Claim)的抽象,它还利用其他CDI特性来简化将数据导入Kubernete集群的过程。
DataVolumes可以自己定义或嵌入VirtualMachine资源定义中

第一种方法可以用于根据 DataVolume 状态阶段编排事件
第二种方法可以简化为 VM 提供存储的过程

6 CDI 主要三个功能

将 images 映像从 web服务器 或 registry 导入到 DataVolume
将本地 images 映像上载到DataVolume
将现有PVC克隆到DataVolume

目的

在 kubernetes 部署 kubevirt ( 参考 kubernetes + kubevirt-0.58.0 部署 )
部署 cdi

参考

cdi github.com 地址

镜像

名称 版本
quay.io/kubevirt/cdi-controller v1.55.2
quay.io/kubevirt/cdi-importer v1.55.2
quay.io/kubevirt/cdi-cloner v1.55.2
quay.io/kubevirt/cdi-apiserver v1.55.2
quay.io/kubevirt/cdi-uploadserver v1.55.2
quay.io/kubevirt/cdi-uploadproxy v1.55.2
quay.io/kubevirt/cdi-operator v1.55.2

部署

部署 cdi

版本当前使用 v1.55.2

$ export VERSION=$(curl -s https://api.github.com/repos/kubevirt/containerized-data-importer/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')

部署 operator

$ kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-operator.yaml
namespace/cdi created
customresourcedefinition.apiextensions.k8s.io/cdis.cdi.kubevirt.io created
clusterrole.rbac.authorization.k8s.io/cdi-operator-cluster created
clusterrolebinding.rbac.authorization.k8s.io/cdi-operator created
serviceaccount/cdi-operator created
role.rbac.authorization.k8s.io/cdi-operator created
rolebinding.rbac.authorization.k8s.io/cdi-operator created
deployment.apps/cdi-operator created
configmap/cdi-operator-leader-election-helper created

参考 pod

# kubectl -n cdi get pod
NAME                            READY   STATUS    RESTARTS   AGE
cdi-operator-76ffcb6c69-5n96k   1/1     Running   0          41s

部署 cr

$ kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-cr.yaml

启用 CDI 特性

部署 CDI 需要启用 DataVolumes 特性
需要创建 kubevirt-config ConfigMap
需要对应 kubevirt 部署对应的 namespace (默认 kubevirt)

cat kubevirt-config-cm.yaml
---
apiVersion: v1
data:
  feature-gates: DataVolumes
kind: ConfigMap
metadata:
  name: kubevirt-config
  namespace: kubevirt 

kubectl apply -f kubevirt-config-cm.yaml

假如没有启用 datavolume 则返回下面信息

# kubectl -n kubevirt logs virt-controller-6d594d9b54-mqdtj | grep DataVolume
{"component":"virt-controller","level":"info","msg":"CDI not detected, DataVolume integration disabled","pos":"application.go:392","timestamp":"2023-02-07T03:25:37.705693Z"}
{"component":"virt-controller","level":"info","msg":"STARTING informer fakeDataVolumeInformer","pos":"virtinformers.go:330","timestamp":"2023-02-07T03:25:37.726211Z"}

假如启用了 datavolume, 则返回下面信息

# kubectl -n kubevirt logs virt-controller-6d594d9b54-mqdtj |grep DataVolume
{"component":"virt-controller","level":"info","msg":"CDI detected, DataVolume integration enabled","pos":"application.go:384","timestamp":"2023-02-13T06:17:58.175353Z"}
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐