KubeVirt CDI的安装

原创
Lance.Wu 发表于: 2022-10-10   最后更新时间: 2023-02-02 15:12:04  
{{totalSubscript}} 订阅, 1,893 游览

集装箱数据导入器(CDI)的应用

你可以在线研究Killercoda

CDI是一个用于导入虚拟机映像以与Kubevirt一起使用的实用程序。

在高级使用,创建一个PersistentVolumeClaim (PVC)。自定义控制器监视特定于导入程序的声明,当发现时,启动一个导入过程以创建一个名为disk的原始映像。img和所需的内容到相关的PVC。

这个“示例”的目标是在一个节点上部署,因为它使用Minikube和它的hostpath存储类,每次只能在一个节点上创建持久化卷(pv)。在生产使用中,应该部署能够ReadWriteOnce或更好操作的StorageClass,以确保pv可以从任何节点访问。

安装CDI

在这个示例中,我们使用操作符部署CDI的最新版本。

export VERSION=$(basename $(curl -s -w %{redirect_url} https://github.com/kubevirt/containerized-data-importer/releases/latest))
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-operator.yaml
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-cr.yaml

检查上一步创建的cdi CustomResource (CR)的状态。CR的阶段将从部署阶段更改为已部署阶段,因为它部署的pods已经创建并达到了运行状态。

kubectl get cdi cdi -n cdi

检查添加的“cdi”单元。

kubectl get pods -n cdi

使用CDI方式导入磁盘映像

例如,我们将导入Fedora33云映像作为PVC,并启动使用它的虚拟机。

cat <<EOF > pvc_fedora.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: "fedora"
  labels:
    app: containerized-data-importer
  annotations:
    cdi.kubevirt.io/storage.import.endpoint: "https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.raw.xz"
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
EOF

kubectl create -f pvc_fedora.yml

这将创建带有适当注释的PVC,以便CDI控制器检测到它并启动导入器pod来收集在CDI .kubevirt.io/storage.import中指定的图像。端点注释。

kubectl get pvc fedora -o yaml
kubectl get pod # Make note of the pod name assigned to the import process
kubectl logs -f importer-fedora-pnbqh   # Substitute your importer-fedora pod name here.

注意,导入程序下载了公开的Fedora Cloud qcow映像。进入POD完成,这PVC准备在kubevirt使用。

如果导入器模块错误地完成,您可能需要重试它或为fedora云映像指定一个不同的URL。若要重试,首先删除导入的POD和PVC,然后重新创建PVC。

kubectl delete -f pvc_fedora.yml --wait
kubectl create -f pvc_fedora.yml

让我们创建一个使用它的虚拟机。查看文件vm1_pvc.yml。

wget https://kubevirt.io/labs/manifests/vm1_pvc.yml
cat vm1_pvc.yml

我们更改这个虚拟机的yaml定义,以在云实例中注入默认的用户公钥。

# Generate a password-less SSH key using the default location.
ssh-keygen
PUBKEY=`cat ~/.ssh/id_rsa.pub`
sed -i "s%ssh-rsa.*%$PUBKEY%" vm1_pvc.yml
kubectl create -f vm1_pvc.yml

这将创建并启动一个名为vm1的虚拟机。我们可以使用下面的命令来检查我们的虚拟机正在运行并收集它的IP。你要找的是virt发射舱旁边的IP地址。

kubectl get pod -o wide

由于我们运行的是all in one设置,对应的虚拟机实际上运行在同一个节点上,所以我们可以检查它的qemu进程。

ps -ef | grep qemu | grep vm1

等待虚拟机启动并可用于登录。您可以通过控制台监视它的进度。虚拟机引导的速度取决于是否使用裸金属硬件。当使用嵌套虚拟化时,速度会慢得多,如果您在云提供商的实例上完成这个实验,很可能就是这种情况。

virtctl console vm1

通过键入:ctrl+]断开与虚拟机控制台的连接

最后,我们将像普通用户一样连接到vm1虚拟机(VM),即通过ssh。如果我们在Kubernetes软件定义网络(SDN)中,这可以通过ssh到收集的ip来实现。如果我们连接到属于Kubernetes集群网络的节点,这是正确的。如果您遵循使用AWS的简单安装或使用GCP的简单安装,您的云实例可能已经是集群的一部分。

ssh fedora@VM_IP

另一方面,如果您遵循使用minikube进行轻松安装,请考虑您需要首先ssh到minikube,如下所示。

$ kubectl get vmi
NAME      AGE       PHASE     IP            NODENAME
vm1       109s      Running   172.17.0.16   minikube

$ minikube ssh
                         _             _
            _         _ ( )           ( )
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$ ssh fedora@172.17.0.16
The authenticity of host '172.17.0.16 (172.17.0.16)' can't be established.
ECDSA key fingerprint is SHA256:QmJUvc8vbM2oXiEonennW7+lZ8rVRGyhUtcQBVBTnHs.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.16' (ECDSA) to the list of known hosts.
fedora@172.17.0.16's password:

最后,在通常情况下,您可能希望将对vm1 VM的访问权限授予来自Kubernetes集群节点之外的其他人。实际上是从他或她的笔记本电脑连接的人。这可以通过minikube中已经安装的virtctl工具来实现。注意,这与从笔记本电脑连接到运行在本地Minikube实例上的vm1 VM是相同的情况

首先,我们将把vm1的ssh端口公开为NodePort类型。然后验证在Minikube或云实例的随机端口上成功创建了Kubernetes对象服务。

$ virtctl expose vmi vm1 --name=vm1-ssh --port=20222 --target-port=22 --type=NodePort
  Service vm1-ssh successfully exposed for vmi vm1

$ kubectl get svc
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
vm1-ssh   NodePort   10.101.226.150   <none>        20222:32495/TCP   24m

成功公开之后,检查Minikube虚拟机或云实例的IP,并验证可以使用之前配置的公共SSH密钥访问虚拟机。对于云实例,请验证应用的安全组是否允许流量通过创建的随机端口。

minikube ip
192.168.39.74
$ ssh -i ~/.ssh/id_rsa fedora@192.168.39.74 -p 32495
  Last login: Wed Oct  9 13:59:29 2019 from 172.17.0.1
  [fedora@vm1 ~]$

这部分的示例就到此结束了。

参考地址 https://kubevirt.io/labs/kubernetes/lab2.html



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容
更新于 2023-02-02

查看KubeVirt更多相关的文章或提一个关于KubeVirt的问题,也可以与我们一起分享文章