Kubernetes : 仮想マシン作成2024/11/19 |
KubeVirt で仮想マシンを作成します。 当例では以下のように 4 台のノードを使用して Kubernetes クラスターを構成しています。 +----------------------+ +----------------------+ | [ mgr.srv.world ] | | [ dlp.srv.world ] | | Manager Node | | Control Plane | +-----------+----------+ +-----------+----------+ eth0|10.0.0.25 eth0|10.0.0.30 | | ------------+--------------------------+----------- | | eth0|10.0.0.51 eth0|10.0.0.52 +-----------+----------+ +-----------+----------+ | [ node01.srv.world ] | | [ node02.srv.world ] | | Worker Node#1 | | Worker Node#2 | +----------------------+ +----------------------+ |
[1] |
OS イメージを保管するための外部ストレージが必要となります。 |
[2] | OS イメージを保管するために Containerized Data Importer をインストールします。 |
[root@mgr ~]#
export TAG=$(curl -s -w %{redirect_url} https://github.com/kubevirt/containerized-data-importer/releases/latest) [root@mgr ~]# export VERSION=$(echo ${TAG##*/}) [root@mgr ~]# wget https://github.com/kubevirt/containerized-data-importer/releases/download/${VERSION}/cdi-operator.yaml [root@mgr ~]# wget https://github.com/kubevirt/containerized-data-importer/releases/download/${VERSION}/cdi-cr.yaml
[root@mgr ~]#
vi cdi-cr.yaml apiVersion: cdi.kubevirt.io/v1beta1 kind: CDI metadata: name: cdi spec: config: # 下行を追記してメモリーリミットを適当に増やす podResourceRequirements: limits: cpu: '1' memory: 4Gi featureGates: - HonorWaitForFirstConsumer imagePullPolicy: IfNotPresent infra: nodeSelector: kubernetes.io/os: linux tolerations: - key: CriticalAddonsOnly operator: Exists workload: nodeSelector: kubernetes.io/os: linux[root@mgr ~]# kubectl apply -f 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
[root@mgr ~]#
kubectl apply -f cdi-cr.yaml cdi.cdi.kubevirt.io/cdi created # 一定時間経過すると 関連 pod が起動 [root@mgr ~]# kubectl get pods -n cdi NAME READY STATUS RESTARTS AGE cdi-apiserver-555ccd5f7b-brqdw 1/1 Running 0 56s cdi-deployment-8bf6546cc-59tpz 1/1 Running 0 56s cdi-operator-659fd5d79-jtc9n 1/1 Running 0 63s cdi-uploadproxy-6dcd6d454b-njp8g 1/1 Running 0 56s |
[3] | 仮想マシンを作成します。当例では Fedora で作成します。 |
[root@mgr ~]# kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-client cluster.local/nfs-client-nfs-subdir-external-provisioner Delete Immediate true 2m42s apiVersion: v1 kind: PersistentVolumeClaim metadata: name: "fedora-pvc" labels: app: containerized-data-importer annotations: cdi.kubevirt.io/storage.import.endpoint: "https://download.fedoraproject.org/pub/fedora/linux/releases/41/Cloud/x86_64/images/Fedora-Cloud-Base-AmazonEC2-41-1.4.x86_64.raw.xz" spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: nfs-client
[root@mgr ~]#
[root@mgr ~]# kubectl apply -f fedora-pvc.yml persistentvolumeclaim/fedora-pvc created kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE fedora-pvc Bound pvc-561b6ef9-e3e6-4c20-85da-d5446570e050 10Gi RWO nfs-client <unset> 4s[root@mgr ~]# kubectl get pods NAME READY STATUS RESTARTS AGE importer-fedora-pvc 1/1 Running 0 10s # possible to see importing logs [root@mgr ~]# kubectl logs -f importer-fedora-pvc ..... ..... I1119 04:51:42.010489 1 data-processor.go:341] Expanding image size to: 10146021376 E1119 04:51:42.017564 1 prlimit.go:156] failed to kill the process; os: process already finished I1119 04:51:42.017579 1 data-processor.go:253] Validating image E1119 04:51:42.021225 1 prlimit.go:156] failed to kill the process; os: process already finished I1119 04:51:42.027198 1 data-processor.go:247] New phase: Complete I1119 04:51:42.027388 1 importer.go:231] {"scratchSpaceRequired":false,"preallocationApplied":false,"message":"Import Complete"} # データのインポートが終了するとimporter pod も終了 [root@mgr ~]# kubectl get pods No resources found in default namespace. apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: fedora41 labels: kubevirt.io/os: linux spec: runStrategy: Halted template: spec: domain: cpu: cores: 2 devices: disks: - disk: bus: virtio name: disk0 - cdrom: bus: sata readonly: true name: cloudinitdisk interfaces: - name: default masquerade: {} machine: type: q35 resources: requests: memory: 4096M networks: - name: default pod: {} volumes: - name: disk0 persistentVolumeClaim: claimName: fedora-pvc - cloudInitNoCloud: userData: | #cloud-config hostname: fedora41 ssh_pwauth: true disable_root: false chpasswd: list: | root:myrootpassword fedora:userpassword expire: False name: cloudinitdisk
[root@mgr ~]#
[root@mgr ~]# kubectl apply -f fedora-vm.yml virtualmachine.kubevirt.io/fedora41 created kubectl get vms
NAME AGE STATUS READY
fedora41 11s Stopped False
[root@mgr ~]# virtctl start fedora41
VM fedora41 was scheduled to start
[root@mgr ~]# kubectl get vmi NAME AGE PHASE IP NODENAME READY fedora41 8s Running 192.168.241.157 node02.srv.world True [root@mgr ~]# virtctl console fedora41 Successfully connected to fedora41 console. The escape sequence is ^] fedora41 login: root Password: [root@fedora41 ~]# # ホストのコンソールに戻るには Ctrl + ] キー # * virsh コマンドと同じ操作 # ssh で接続 [root@mgr ~]# kubectl get pods NAME READY STATUS RESTARTS AGE virt-launcher-fedora41-92j95 2/2 Running 0 2m11s [root@mgr ~]# kubectl port-forward pod/virt-launcher-fedora41-92j95 222:22 & [root@mgr ~]# ssh fedora@127.0.0.1 -p 222 Handling connection for 222 The authenticity of host '[127.0.0.1]:222 ([127.0.0.1]:222)' can't be established. ED25519 key fingerprint is SHA256:kjMzUxj9+6j/i4/Hc5xZrYL6ogDrd+Mtm4VxOQlo1qE. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '[127.0.0.1]:222' (ED25519) to the list of known hosts. fedora@127.0.0.1's password: [fedora@fedora41 ~]$ |
Sponsored Link |