0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🚀 Kubernetes上でVMを動かしてみた

Posted at

🚀 Kubernetes上でVMを動かす?KubeVirtで“仮想マシン再発見”してみた話

🧠 はじめに

Kubernetesといえば「コンテナを動かすためのオーケストレーター」。
しかし最近は、そのKubernetes上で仮想マシンを動かすことが注目されています。

その技術的中心にあるのが KubeVirt です。

本記事では、KubeVirt を使って Kubernetes クラスタ上で VM を起動し、cloud-init を使って Ubuntu VM に nginx を自動展開するところまでをわかりやすく紹介します。

🌍 なぜ Kubernetes 上で VM?

"仮想マシンはもうコンテナで置き換えられる"と思われがちですが、実際の現場はそんなに簡単ではありません。

以下のようなケースでは VM が必須です:

🛠 レガシーな商用ソフト (systemd 依存や特定ライブラリ必須)

📆 特定OS上でしか動作しないアプリケーション

🧪 研究やテストでフルOS環境が欲しい

🔐 コンテナでは保証できないセキュリティ・カーネル管理

🥉 KubeVirtとは?

KubeVirt は Kubernetes の CRD (独自のリソース)を使って、仮想マシン (VM)を Pod のように操作できるようにする拡張機能です。

内部的には libvirt + QEMU + Kubernetes API を統合しています。

特徴

仮想マシンを YAML で管理

CNI/ストレージなど Kubernetes の基盤技術を残らず使用

Pod と同じようにスケジュールされる

🔧 KubeVirt の実装手順

1. オペレーターのインストール

kubectl create -f https://github.com/kubevirt/kubevirt/releases/latest/download/kubevirt-operator.yaml
kubectl create -f https://github.com/kubevirt/kubevirt/releases/latest/download/kubevirt-cr.yaml

2. Ubuntu VM (nginx付き) のデプロイ

vim kubevirt-vm.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: ubuntu-vm
  namespace: default
spec:
  runStrategy: Always
  template:
    metadata:
      labels:
        kubevirt.io/domain: ubuntu-vm
    spec:
      domain:
        devices:
          disks:
            - name: containerdisk
              disk:
                bus: virtio
            - name: cloudinitdisk
              disk:
                bus: virtio
        resources:
          requests:
            memory: 1024Mi
            cpu: "1"
      volumes:
        - name: containerdisk
          containerDisk:
            image: quay.io/containerdisks/ubuntu:22.04
        - name: cloudinitdisk
          cloudInitNoCloud:
            userData: |
              #cloud-config
              users:
                - name: ubuntu
                  plain_text_passwd: ubuntu
                  lock_passwd: false
                  sudo: ['ALL=(ALL) NOPASSWD:ALL']
                  shell: /bin/bash
              ssh_pwauth: true
              disable_root: false
              chpasswd:
                expire: false
kubectl apply -f kubevirt-vm.yaml

ポイント:cloud-init を使ってユーザー/パスワードを作らないと、コンソールからはログインできません。

3. VMの確認 & 接続

1. ステータス確認
kubectl get vm -n default
kubectl get vmi -n default
2. virtctl コマンドのインストール
VERSION=$(curl -s https://api.github.com/repos/kubevirt/kubevirt/releases/latest | grep tag_name | cut -d '"' -f 4)
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-linux-amd64
chmod +x virtctl
sudo mv virtctl /usr/local/bin/
3. コンソール接続
virtctl console ubuntu-vm -n default

そして、次のようにログイン:

ubuntu login: ubuntu
Password: ubuntu

成功すると Ubuntu のテキストログインに入れます。

📖 参考リンク

KubeVirt 公式ドキュメント

NGINX公式: Content Caching

✍️ おわりに

KubeVirt は Kubernetes の基盤技術の利点を保ちつつ、VMの音も好きも取り入れられる便利な技術です。

例えば CDN/エッジ計算/レガシー資産を活用したインフラなど、Pod のみでは難しかった環境構築が、KubeVirt によって Kubernetes 上で簡単に実現できるようになります。さらにknative等と組み合わせれば、kubernetesでECSのようなクラウド基盤の構築も実現が可能となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?