クラウドネイティブアーキテクチャとコンテナ化の採用は、アプリケーションの開発、展開、管理方法を変革しています。コンテナはスピード、俊敏性、スケーラビリティを提供し、IT戦略に大きな変革をもたらしています。しかし、多くの組織にとっての現実は、仮想マシン(VM)が引き続き重要な役割を果たしており、特にレガシーまたはステートフルなアプリケーションに関わる場合にはそうです。ゴールドマン・サックスなどの主要金融機関でも、VMとコンテナ化されたワークロードの価値を認識し、効率的な管理方法を模索しています。
これにより、コンテナ化の利点とVMの持続的な必要性という、二つの側面が生じます。KubeVirtは、Kubernetesのパワーを仮想マシンの管理に拡張することで、インフラストラクチャを統合し、クラウドネイティブテクノロジーへのスムーズな移行を可能にします。
この記事では、IT運用を効率化し、ハイブリッドインフラストラクチャ環境で柔軟性を獲得したい組織にとって、KubeVirtが魅力的なソリューションである理由について探求します。
KubeVirtとは具体的に何ですか?
KubeVirtは、Kubernetesをコンテナと仮想マシンの両方を管理できる強力なプラットフォームに変えるオープンソースプロジェクトです。単純に言えば、KubeVirtはKubernetesをあなたのインフラ全体のシングルコントロールプレーンに変えるのです。
こうした仕組みが機能します:
- KubeVirtの拡張機能: KubeVirtはKubernetesにカスタムリソース定義(CRD)を追加し、仮想マシンを表す新しいオブジェクトタイプを導入します。
- 「ポッド」としての仮想マシン: KubeVirtを使用すると、各VMは専門のポッド内で実行され、VMがKubernetesエコシステムに密接に統合されます。
- KubernetesによるVM管理の簡素化: これにより、同じKubernetesツール(
kubectl
やKubernetes API)およびベストプラクティスを利用して、コンテナ化されたワークロードとともにVMを作成、起動、停止、移行、監視できます。
KubeVirtを仮想化の言語を話すKubernetesとして考え、インフラ管理の可能性を広げましょう。
KubeVirtのビジネスインパクト
KubeVirtは、技術的な優雅さを超えた具体的な利点を提供します。KubeVirtを採用することで、あなたの組織は以下の利益を得ることができます:
- シームレスなワークロード管理: VMベースのアプリケーションとコンテナ化されたワークロードの間の壁を取り払いましょう。単一のプラットフォームからすべてを管理し、同じツールとプロセスを使用することで、運用を大幅に簡素化し、複雑さを減少させます。
- リソース効率の向上: KubeVirtは、従来のVMとコンテナを同じ基盤のクラスターハードウェア上で実行できるようにします。リソースの利用効率を最適化し、インフラの密度を向上させ、コストの大幅な削減を実現する可能性があります。
- 加速された近代化: VMに依存するレガシーアプリケーションは、イノベーションの障害になる必要はありません。KubeVirtは、あなたのペースでアプリケーションを近代化するための段階的な道筋を提供します。時間をかけてコンテナ化し、コンポーネントを移行することができ、すべて同じKubernetes環境内で行うことができ、混乱を最小限に抑えます。
- 未来に備えたインフラストラクチャ: KubeVirtに投資することで、クラウドネイティブの原則と整合し、Kubernetesをテクノロジースタックの基盤として位置づけます。これにより柔軟性と機動性が促進され、進化するビジネス要件に迅速に適応できます。
なぜあなたの組織が気にするべきなのか?
KubeVirtは、特に以下の分野で魅力的な価値を提供します:
- ITチームとDevOps: KubeVirtは、すべてのワークロードに対して統一されたコントロールプレーンを提供することで、運用を簡素化します。これにより、ワークフローを効率化し、ツールのオーバーヘッドを減らし、チーム全体の生産性を向上させます。
- 経営者: 操作の柔軟性を得て、コスト削減とインフラストラクチャの近代化へのスムーズな道を実現します。KubeVirtは、テクノロジーへの投資を長期的なビジネス成功と整合させます。
- 混合ワークロード: レガシーのVMベースのアプリケーションと現代のコンテナ化されたデプロイメントの両方を管理している場合、KubeVirtは不可欠です。これにより、ベンダーロックインを回避し、複雑さを最小限に抑え、インフラストラクチャの選択肢を完全にコントロールできます。
KubeVirtが解決する具体的な痛点は以下の通りです:
- VMとコンテナ用の別々の環境を管理することに苛立っていますか?KubeVirtはそれらを統合し、管理をはるかに容易にします。
- 既存の投資を犠牲にせずに柔軟性を求めていますか?KubeVirtを使用すると、VMインフラストラクチャを活用しながら最新化できます。
- コスト効率とリソース利用を改善したいですか?KubeVirtは、より良い利用のためにワークロードを統合するのに役立ちます。
- レガシーアプリの複雑な移行に苦労していますか?KubeVirtを使用して段階的に最新化し、ペースをコントロールできます。
始めに: デプロイメントと実装
KubeVirtをデプロイするには、準備が整ったKubernetes環境が必要です。このセクションでは、インフラストラクチャにKubeVirtを設定し実装するための詳細なガイドを提供します。
前提条件
始める前に、以下の要件が満たされていることを確認してください:
1. Kubernetesクラスター
KubeVirtのリリース時に利用可能な最新の3つのKubernetesリリースのいずれかに基づくKubernetesクラスター(またはOpenShiftなどの派生物)が必要です。
2. Kubernetes APIサーバーの設定
KubeVirtの特権DaemonSetを実行するには、Kubernetes APIサーバーを--allow-privileged=true
で設定する必要があります。
3. Kubectlユーティリティ
kubectl
クライアントユーティリティがインストールされ、クラスターと対話できるように設定されていることを確認してください。
4. コンテナランタイムのサポート
KubeVirtは以下のコンテナランタイムでサポートされています:
Containerd
crio
(runv
付き)
他のコンテナランタイムも機能するはずですが、上記のものが主要なターゲットです。
5. ハードウェア仮想化
仮想化サポートのあるハードウェアを推奨します。ホストが仮想化ワークロードを実行できるかどうかを確認するには、virt-host-validate
を使用します:
$ virt-host-validate qemu
ネットワークおよびセキュリティの考慮事項
-
ネットワーク構成:VMが外部ネットワークやKubernetes環境の他の部分とどのように接続し、相互作用するかを計画します。
-
AppArmor統合:AppArmorが有効なシステムでは、KubeVirt特権コンテナの実行を許可するためにAppArmorプロファイルを修正する必要がある場合があります。たとえば:
# vim /etc/apparmor.d/usr.sbin.libvirtd
/usr/libexec/qemu-kvm PUx,
# apparmor_parser -r /etc/apparmor.d/usr.sbin.libvirtd
KubeVirtのインストール
KubeVirtをインストールするには、以下の手順に従います:
1. KubeVirt Operatorのインストール
KubeVirtオペレーターは、KubeVirtコンポーネントのインストールと管理を簡素化します。最新のKubeVirtリリースをデプロイするには、以下のコマンドを実行します:
# Point at latest release
$ export RELEASE=$(curl https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)
# Deploy the KubeVirt operator
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/$ RELEASE /kubevirt-operator.yaml
# Create the KubeVirt CR (instance deployment request) which triggers the actual installation
$ kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/$ RELEASE /kubevirt-cr.yaml
# Wait until all KubeVirt components are up
$ kubectl -n kubevirt wait kv kubevirt --for condition=Available
2. ハードウェア仮想化がない場合の設定
ハードウェア仮想化が利用できない場合は、KubeVirt CR内でuseEmulationをtrueに設定してソフトウェアエミュレーションを有効にします:
$ kubectl edit -n kubevirt kubevirt kubevirt
# Add the following to the kubevirt.yaml file
spec
configuration
developerConfiguration
useEmulationtrue
実装のベストプラクティス
KubeVirtを最大限に活用するために、以下のベストプラクティスに従ってください:
1. ワークロード評価を実施する
コンテナ化に適したVMを優先的に選定します。実践的な経験を積むために、ミッションクリティカルでないアプリケーションから始めましょう。
2. ネットワーキングとストレージを評価
VMのネットワーキングを既存のKubernetesネットワーキングとブリッジする方法、およびContainer Storage Interface (CSI) プラグインを使用して永続データのストレージソリューションを統合する計画を立てます。
3. モニタリングと管理を重視
Kubernetesのモニタリングツールを使用するか、KubeVirt固有のソリューションを探求して、コンテナと並行してVMのパフォーマンスを可視化します。
4. ライブマイグレーション
ダウンタイムなしに稼働中のVMを他のコンピューティングノードに移行するために、ライブマイグレーションを有効にし、設定します。これには、KubeVirt CRでの機能ゲートの設定とマイグレーション固有のパラメータの構成が含まれます:
apiVersion kubevirt.io/v1
kind KubeVirt
metadata
name kubevirt
namespace kubevirt
spec
configuration
developerConfiguration
featureGates
LiveMigration
migrations
parallelMigrationsPerCluster5
parallelOutboundMigrationsPerNode2
bandwidthPerMigration 64Mi
completionTimeoutPerGiB800
progressTimeout150
OKD(OpenShift)での例:インストール
OKDを使用している場合、追加の手順にはセキュリティコンテキスト制約(SCC)の構成が含まれます:
$ oc adm policy add-scc-to-user privileged -n kubevirt -z kubevirt-operator
k3OSでの例:インストール
k3OSの場合、KubeVirtを展開する前にすべてのノードに必要なモジュールをロードすることを確認します:
k3os
modules
kvm
vhost_net
この構成でノードを再起動し、その後、上記のようにKubeVirtを展開します。
デイリーデベロッパービルドのインストール
最新のデベロッパービルドを実行するには、次のコマンドを実行してください:
$ LATEST=$(curl -L https://storage.googleapis.com/kubevirt-prow/devel/nightly/release/kubevirt/kubevirt/latest)
$ kubectl apply -f https://storage.googleapis.com/kubevirt-prow/devel/nightly/release/kubevirt/kubevirt/$ LATEST /kubevirt-operator.yaml
$ kubectl apply -f https://storage.googleapis.com/kubevirt-prow/devel/nightly/release/kubevirt/kubevirt/$ LATEST /kubevirt-cr.yaml
ソースからの展開
これらのステップとベストプラクティスに従うことで、KubeVirtの導入がスムーズかつ成功することを確保でき、仮想マシンとコンテナの両方を活用した統一インフラ管理ソリューションを提供します。
導入ベストプラクティス
KubeVirtを最大限に活用するためのベストプラクティスは以下のとおりです:
- ワークロード評価を実施する:すべてのアプリケーションがすぐにKubeVirtに適しているわけではありません。コンテナ化の可能性が高いVMを優先してください。ミッションクリティカルでないアプリケーションは、リスクを最小限に抑えながら実践的な経験を得るのに最適です。
- ネットワークとストレージを評価する:VMのネットワークを既存のKubernetesネットワークと橋渡しする方法を慎重に検討してください。Container Storage Interface (CSI)プラグインのようなソリューションを使用して、永続データのストレージ統合を計画します。
- 監視と管理を重視する:既存のKubernetes監視ツールを適応させるか、KubeVirt特有のソリューションを探求して、コンテナと並行してVMのパフォーマンスを可視化します。
結論
KubeVirtは、既存の仮想マシン投資の価値を最大化しながら、クラウドネイティブ技術の利点を享受しようとする組織にとって魅力的な道を提供します。運用効率を向上させ、柔軟性を促進し、モダナイゼーションの旅を加速します。
Source:
https://dzone.com/articles/kubevirt-implementation-who-needs-it-and-why