VM は、ハードウェア仮想化によってより強力な分離を提供し、マルチテナント環境や信頼できないコードに適しています。コンテナは、一般的に信頼できるワークロードに十分なプロセスレベルの分離を提供しますが、共有カーネルは、機密性の高いアプリケーションのための考慮事項であり続けます。
コンテナ仮想化のメリット
コンテナ仮想化は、開発の速度、運用効率、インフラのコストにわたって測定可能な改善を提供します。これにより、適切なワークロードをコンテナ化した後、展開時間を短縮し、インフラのコストを削減できます。
スピードと効率性
コンテナは、環境の一貫性を確保することで、「自分の環境では動作する」という問題を解消します。開発者は、あらゆる依存関係を持つアプリケーションをパッケージ化し、ノート PC から本番まで同じ動作を保証します。この一貫性により、デプロイの障害が軽減されます。
CI/CD パイプラインは、コンテナを活用して反復を高速化し、構築時間を数時間から数分に短縮します。ロールバックは些細なものになり、以前のコンテナ・イメージを再デプロイするだけです。例えば、Netflix は、1 日に最大 50 万のコンテナ・インスタンスを展開します。軽量性によって、リソース効率が大きく向上します。自動スケーリングはコンテナ規模で実用化されます。Kubernetes は新しいコンテナを数秒で起動し、負荷に応答します。VM の自動スケーリングには数分かかります。この応答性は、よりリーンに実行し、オーバープロビジョニングではなく、必要に応じて正確にスケーリングすることを意味します。
環境間のポータビリティ
コンテナは、基盤となるインフラからアプリケーションを抽象化し、真の移植性を可能にします。同じコンテナ・イメージが、開発者のノート PC、テストサーバー、本番クラスターのいずれでも、オンプレミスか複数のクラウド環境かを問わず、同一の状態で動作します。
このポータビリティにより、ベンダー・ロックインなしでマルチクラウド戦略が可能になります。AWS、Azure、オンプレミス・インフラ全体でコンテナを同時に実行し、コスト、性能、規制要件に基づいてワークロードを移動します。
しかし、移植性には限界があります。永続ストレージ要件を持つコンテナは、移行時にデータの可用性を維持するために慎重なアーキテクチャが必要です。データベース、ファイル・ストア、メッセージ・キューなど、ステートフルなアプリケーションには、ステートレスなマイクロサービスと比較して、さらに考慮する必要があります。
コンテナ・ストレージとデータの永続性
コンテナはステートレス・アプリケーションの実行に優れていますが、永続ストレージはコンテナ展開における最も重要な課題です。永続ストレージが組み込まれた VM とは異なり、コンテナは設計上一時的なものです。コンテナが停止すると、書き込み可能なレイヤーとその中に格納されたデータは消えます。
これにより、根本的な問題が発生します。多くのエンタープライズ・アプリケーションには、永続データ・ストレージが必要です。データベース、コンテンツ管理システム、トランザクション・ログは全て、コンテナの再起動後も存続するデータを必要とします。しかし、ほとんどのコンテナに関する議論では、ストレージは後回しとして扱われています。
永続ストレージの課題を解決
コンテナ・ストレージ・インターフェース(CSI)は、ストレージ・システムをコンテナ化されたワークロードに接続するための業界標準として登場しました。CSI は、ストレージ・ベンダーが CSI 準拠のオーケストレーターで動作するプラグインを記述することを可能にします。
永続ボリューム(PV)は、データの永続化のためのメカニズムを提供します。適切に構成されている場合、PV はコンテナのライフサイクルとは無関係に存在し、コンテナの更新、移行、障害を通じてデータを保持できます。モダン・コンテナ・ネイティブのストレージ・ソリューションは、アプリケーションが要求したときにストレージ・ボリュームが自動的に作成される動的プロビジョニングを通じて、これらの課題に対応します。
コンテナ対応のバックアップ・ソリューションは、アプリケーションの一貫性を維持しながら、永続ボリュームをスナップショットします。多くの場合、数分で測定される目標復旧時間(RTO)は、バックアップ・システムがコンテナのオーケストレーションを理解すると達成可能になります。データ・ローカリティは、性能に大きく影響します。高性能ストレージ・プラットフォームは、ローカル・スケジューリングを使用してコンテナをデータに近づけ、レイテンシーを低減します。
実装に関する考慮事項
コンテナ仮想化の導入を成功させるには、プラットフォームの選択、オーケストレーション、セキュリティに関する慎重な計画が必要です。
プラットフォームとオーケストレーション
Docker は、開発環境で最も広く使用されているコンテナ・ツールの 1 つであり、開発者の採用調査で上位またはほぼ上位にランクされています。本番環境の Kubernetes では、Amazon EKS や Google GKE などのマネージド・サービスを含め、containerd がコンテナ・ランタイムとして一般的に使用されます。CRI-O は、Kubernetes のみのデプロイ用に最適化された、Kubernetes ネイティブの軽量コンテナ・ランタイムを提供します。
Kubernetes は、コンテナ・オーケストレーションにおける市場シェア 77% という事実上の標準となっています。宣言型構成により、デプロイメント、スケーリング、管理を自動化します。必要な状態を記述すると、Kubernetes が実際の環境をその状態に一致させます。
特定のユースケースには、代替オーケストレーターが存在します。Docker Swarm は小規模なデプロイメント、Amazon ECS は AWS 統合、HashiCorp Nomad は異種ワークロードに対応します。スケール要件、チームの専門知識、既存のインフラに基づいて選択します。
セキュリティとコンプライアンス
コンテナ・セキュリティには、境界ベースのモデルからゼロトラスト・モデルへの移行が必要です。各コンテナは、ネットワークの境界に依存するのではなく、個別のセキュリティ・ポリシーを必要とします。イメージ・スキャンは、展開前に脆弱性を識別します。主要なレジストリは、既知の CVE を持つコンテナに自動的にフラグを立てます。
パブリック・イメージを使用する際は、サプライチェーンのセキュリティが重要になります。組織は、イメージ署名、プライベート・レジストリ、ベース・イメージの標準化を実装し、コンテナの出所を保証します。ポリシー・エンジンは、「重大な脆弱性を含むコンテナを本番環境で使用しない」「全てのコンテナを非ルート・ユーザーとして実行する」といったルールを適用します。
マルチクラウド・コンテナ戦略
コンテナのポータビリティは、マルチクラウド展開において最大限の可能性をもたらしますが、多くの組織はクロスクラウド管理に苦労しています。複数のクラウドでコンテナを実行するのではなく、多様な環境でコンテナを効率的に運用することが課題です。
真のクラウド・ポータビリティを実現するには、クラウド固有のサービスを抽象化する必要があります。アプリケーションをネイティブのクラウド・サービスに緊密に結合するのではなく、より高度な抽象化とオペレータを使用して、環境間で一貫した機能を提供します。
マルチクラウド環境のコンテナにより、高度なコスト裁定が可能になります。スポット・インスタンスのオーケストレーションはコストを削減できますが、クラウドや地域によって異なります。先進的なプラットフォームは、スポット価格、データ送信コスト、地域ごとの変動を考慮して、クロスクラウドの最適化を実装します。
データ・レジデンシー法は、マルチクラウドの展開を複雑にします。ポリシー主導の配置では、アドミッション・コントローラを使用してコンプライアンスを自動的に実行します。ラベルはデータの分類を示し、配置ポリシーでは、コンテナが準拠領域でのみ実行されることを保証します。