仮想化とは?コンテナのメリットと課題とは?〜仮想マシンとの比較と、Kubernetesが注目される理由(2/3)2019/12/18Dockerの使い方ここで、代表的なコンテナランタイムであるDockerの基本的な使い方を見てみましょう。開発、ステージング、本番の3つの環境を想定します。buildコマンドで、Dockerイメージを作成します。ここで言うイメージとは、カーネル以外のホストOSの差分です。OSの差分やアプリケーションの設定、環境変数の設定なども、まとめてパッケージ化されます。pushコマンドで、コンテナレジストリと呼ばれるプライベートリポジトリにイメージをアップロードします。runコマンドで実行します。ステージング環境で可用性テストや結合テストをクリアしたら、同様の手順で本番環境で実行し、リリースとなります。カーネルが同一であれば、開発環境、ステージング環境、本番環境問わずどこでもアプリケーションを動かすことができます。開発者の視点では様々なメリットを持つコンテナですが、運用管理の観点からは様々な課題が存在しています。仮想マシンと比較しながら、コンテナのデメリットについて見てみましょう。仮想マシンは集約化によるコストメリットを享受しつつも、物理マシンと同様に扱うことができるので、アプリケーションを作り直すことなく、そのまま稼働させることができます。セキュリティ対策についても、物理マシンの方法を流用することができます。運用管理についても十分な知見が蓄積され、vCenterなど管理ツールも揃っています。コンテナにはネットワークの扱いなど、物理・仮想マシンとは様々な違いがあるので、アプリケーションを作り直さなければならないこともあります。従って、コンテナの導入の際には、アプリケーションをコンテナ化できるのか精査する必要があります。カーネルを共有しているので、あるコンテナで生じたセキュリティインシデントが、他のコンテナに波及する恐れもあります。従って、コンテナを運用する際は、改めてセキュリティ要件を検討する必要があります。運用管理についても、まだ十分に知見が蓄積されておらず、ツールの成熟が今後の課題となっています。コンテナ技術特有の課題も存在します。ネットワークの仕組みを例に挙げると、コンテナが外部ホストと通信するには、NATを経由する必要があります。外部ホストのコンテナと通信する場合も同様です。ホストが少なければNATを手作業で設定するのは難しくありませんが、ホストの数が何十個にも増えると、コンテナ間通信に必要な設定作業は非常に複雑かつ煩雑なものとなります。マイクロサービスアーキテクチャといったデザインを採用すると、冗長性の確保や負荷分散の自動化がより重要になってきます。トラフィックが殺到したら、オートスケールする仕組みも必要です。リソースの空いているホストへのコンテナのデプロイや、そのイメージ管理はどうするのでしょうか。これらの仕組みを自前で実装するのはとても大変です。他にも、セキュリティ、可用性、監視、バックアップなど様々な点を検討しなければなりません。このように、コンテナには多くのメリットがあるものの、エンタープライズ環境で活用するには一定の課題をクリアする必要があります。Kubernetesの登場これらの課題を解決するために登場したのが、コンテナオーケストレーションツールであるKubernetesです。Kubernetesを使うことで、自前で仕組みを構築することなく、複数ホストでコンテナイメージを展開したり、ロードバランサを配備したり、オートスケールするといった作業を自動化することができます。Kubernetesが提供する機能は、具体的には以下の4つです。複数コンテナをポリシー準拠でデプロイマニフェストというYAML形式で書かれたファイルに沿って、複数のコンテナをデプロイします。負荷分散機能の提供コンテナの外部接続ネットワークの提供NGINXなどを利用して、負荷分散や外部ネットワークへの接続機能を提供します。障害時にコンテナを自動スケーリングコンテナが壊れたら、それをKubernetesが検知して、自動的に別のホストで復旧します。Nodes/マニフェスト/etcdの4つに分かれています。Nodeは、コンテナの管理を担うコンポーネントです。具体的には、複数のコンテナのデプロイや死活監視を行っています。Nodesは実際のコンテナの稼働環境です。マニフェストは、Kubernetesの動かし方やリソース設定をYAML形式で定義したファイルです。コンテナをいくつ動かすのか、またトラフィックが増えた際のオートスケールの設定や、リソースの使用量などを定義します。etcdというクラスタは、分散型のkey-valueストアで、Kubernetesのネットワークの設定などを保存します。Kubernetesでコンテナを管理するときの最小単位となるものがPodです。Podは、1つまたは複数のコンテナで構成され、ネットワークやIPアドレス、ストレージといったあらゆるリソースを共有しています。作成されたPodにはIPアドレスが割り当てられ、Pod間で通信を行うことができます。読者の中には、コンテナが外部と通信するときにはNATを経由する必要があることを思い出した人もいるかもしれません。Kubernetesは外部のOSSと連携することによってNATを経由することなく別のホストのコンテナ同士の通信を実現しています。OSSを利用する場合のいくつか選択肢がありますが、flannelを採用した場合はオーバーレイによるカプセリングを行うことで、従来の仮想マシンのようにIPアドレスを割り当てることが出来るようになります。〜クライアント環境の当たり前を変える仮想デスクトップ〜ニュースレターを購読IT価値創造塾の更新情報や、VMwareの最新情報、セミナーやイベントなどの情報を不定期でお届けします。Inc.本サイトに掲載されているコンテンツの内容、製品・ソリューションやスポンサーなどの情報は、予告なく変更となる場合があります本サイト内に記載されている社名、製品名またはサービス名は、各社の商標または登録商標ですTOP。