OpenStack におけるコンテナーテクノロジーの適用シナリオ

著者: 禅とコンピュータープログラミングの芸術

1 はじめに

クラウド コンピューティングの新世代テクノロジーとして、コンテナー テクノロジーは開発者、企業、ユーザーからますます注目を集めています。しかし、OpenStack コミュニティではコンテナ テクノロジが広く使用されていないため、多くの OpenStack ユーザーが OpenStack がコンテナ テクノロジをサポートしているかどうかについて疑問を抱いています。この記事では、コンテナ テクノロジーをいつ使用するのが適切かなど、OpenStack でのコンテナ テクノロジーの適用シナリオを詳しく紹介します。OpenStack でコンテナー テクノロジーを使用するにはどうすればよいですか? 主な機能的な特徴は何ですか? コンテナテクノロジーには他にどのような利点がありますか? 最後に、いくつかの実際的なケースを組み合わせて、OpenStack コンテナー テクノロジーの実際的なアプリケーションを説明します。この記事が、読者が OpenStack のコンテナ テクノロジーのアプリケーション シナリオと特性を理解し、コンテナ テクノロジーの背後にある設計思想をより深く理解し、そのスケーラビリティと弾力性の利点を最大限に活用して迅速なビジネス展開を達成するのに役立つことを願っています。

2. 背景の紹介

コンテナテクノロジーの概要

コンテナテクノロジーとは、アプリケーションのパッケージ化、デプロイ、実行に使用される軽量の仮想化テクノロジーを指します。これは、単一のオペレーティング システム上で複数の分離されたアプリケーション プロセスを同時に実行できる標準化されたプラットフォームです。コンテナ テクノロジーは、大手企業 Docker によってオープン ソースとして発表され、Linux カーネルを使用して仮想化環境を提供し、その上に抽象化レイヤーを構築して、コンテナ間のリソース共有とネットワーク通信を管理します。現在、主流の Linux ディストリビューションは、Ubuntu、CentOS、CoreOS などのコンテナー テクノロジーのネイティブ サポートを提供しています。

従来の仮想マシン テクノロジーには次の欠点があります。

  • 起動時間が長い: 仮想マシンを作成するには、イメージ ファイルをダウンロードし、オペレーティング システム全体を最初から最後まで起動する必要があり、プロセスやスレッドに比べて時間がかかることがよくあります。
  • リソース使用率が高い: 仮想マシンが作成されるたびに、物理マシン全体のリソースが排他的に使用され、仮想マシンが相互にアクセスできないため、リソースが無駄になります。
  • 起動が遅い: 仮想マシンの作成には数分から 10 分かかるため、多数の仮想マシンを作成する場合は初期化プロセスに非常に時間がかかります。

コンテナ テクノロジは、ホストのオペレーティング システムを使用しますが、ホスト上の完全なリソースを独占的に所有するわけではなく、これらの問題を解決します。コンテナーはアプリケーション プロセスに少量のリソースのみを割り当て、ホスト上で軽量のオペレーティング システム仮想化環境のみを実行するため、ハードウェア リソースを大幅に節約します。コンテナは同じインフラストラクチャを使用し、迅速に起動および停止し、短期的な突然のニーズに対応するために動的な拡張と縮小を容易にすることもできます。一般に、コンテナ テクノロジーはサーバーに高い信頼性と弾力性を与え、クラウド コンピューティング、マイクロサービス アーキテクチャ、ビッグ データ処理において重要な役割を果たします。

OpenStackコンテナテクノロジー

OpenStack では、コンテナ テクノロジーはインフラストラクチャ レベルのテクノロジーであるため、その実装はインフラストラクチャ仮想化プラットフォームのサポートに依存します。現在、人気のあるコンテナ テクノロジ ソリューションは 3 つあります。LXC (Linux コンテナ) ベースの OpenVZ、Libvirt ベースの KVM/QEMU、および Docker ベースの libcontainer です。OpenStack コミュニティは、次の理由からコンテナ テクノロジー ソリューションとして Docker を推奨しています。

  • Docker は、軽量で便利なオープンソースのコンテナ技術フレームワークです。
  • Docker 自体には完全なライフサイクル管理メカニズムがあり、Dockerfile を使用してイメージを定義し、イメージ間の依存関係を適切に制御できます。
  • Glance、Nova などの OpenStack コンポーネントは、Docker を使用して簡単に統合できます。
  • Docker オープンソース コミュニティは完全なエコシステムを形成し、豊富なツールとサービス サポートを提供しています。
  • Docker ベースのコンテナ テクノロジでは、OpenStack のすべてのサービス コンポーネントが Dockerfile を通じてイメージを定義でき、Glance はさまざまなタイプのコンテナ イメージを保存できるため、展開の複雑さが軽減されます。

コンテナテクノロジーは完璧ではなく、多くの制限があります。例えば、コンテナ技術は仮想マシンを完全に置き換えることはできず、それぞれに利点と限界があり、実際の状況に応じて最適なソリューションを選択する必要があります。さらに、コンテナー テクノロジーは、リソースを大量に消費する動的なビジネスに特に適しており、ビジネスの拡大に伴ってリソースの消費量が直線的に増加するわけではありません。したがって、OpenStack コンテナ テクノロジの適用シナリオには一定の制限が必要です。OpenStack コンテナ テクノロジは、ビジネスの安定性と柔軟な拡張を確保することしかできず、既存の仮想化テクノロジを置き換えることはできないからです。

2. 基本的な概念と用語の説明

1.1 コンテナ

英語では「コンテナ」とも呼ばれるコンテナは、軽量で独立した安全なオペレーティング システム仮想化環境です。これは、複数の実行中のアプリケーション プロセスを含めることができるランタイム環境であり、各コンテナーは互いに分離されており、独立したファイル システム、リソース制限、権限制御、その他の属性を持ちます。これは従来の仮想マシン テクノロジーに似ていますが、ホストのカーネル上に構築されており、リソースのオーバーヘッドは非常に小さいです。コンテナー テクノロジーは、マイクロサービス アーキテクチャに基づいて分散アプリケーションをサポートするように設計されています。

1.2 画像

英語で「イメージ」と呼ばれるミラーは、Docker コンテナーの作成に使用される、軽量で独立した自己記述型のソフトウェア パッケージング環境を指します。イメージは、タスクを実行するために必要なすべての条件と設定を含む読み取り専用のテンプレートです。これは、オペレーティング システム、アプリケーション、ライブラリ、構成ファイル、その他のファイルを含むバイナリ実行可能ファイルです。

1.3 Dockerfile

Dockerfile は、中国語で「Docker ソース コード」と訳され、イメージ ファイルの作成に使用されるテキスト ファイルです。Dockerfile には、Docker にイメージの構築方法を指示する命令 (命令) が含まれています。Dockerfile は、FROM、RUN、CMD、ENTRYPOINT、EXPOSE、ENV、その他のコマンドなどの特定の構文ルールを使用します。Dockerfile は、自動化されたコンパイル メカニズムを提供します。これにより、複雑な手動構成プロセスが回避され、アプリケーションのデプロイがより便利になります。

1.4 リポジトリ

ウェアハウスは英語で「リポジトリ」と呼ばれ、Dockerがイメージを保存する場所です。Docker Hub はパブリック Docker イメージ ウェアハウスであり、デフォルトでは、すべてのユーザーがサイト上でイメージを取得、共有、公開できます。公式の Docker Hub に加えて、ユーザーがイメージを共有およびアップロードするためのサードパーティのイメージ ウェアハウスもあります。

1.5 コマンドラインインターフェイス CLI

コマンド ライン インターフェイス (CLI) は、コンピュータのオペレーティング システムがユーザーに提供するユーザー インターフェイスを指し、主にマシンと対話し、マシンにコマンドを入力し、出力結果を受け取るために使用されます。ユーザーは、CLI を通じてコン​​ピュータ システムと直接対話し、さまざまな操作を実行できます。現在、ほとんどの Linux ディストリビューションとほとんどの Unix 系オペレーティング システムが CLI を提供しており、Windows システムも部分的にサポートしています。

1.6 RESTful API

RESTful API、つまりRepresentational State Transfer用のAPIは、構造が明確で標準に準拠しており、理解しやすく、使いやすい設計スタイルであり、現在のほとんどのWebサーバープログラミング言語の主流となっています。 。RESTful API は統一インターフェイス プロトコルを使用し、さまざまなクライアント (ブラウザ、モバイル アプリ、アプレットなど) が同じ方法でサーバー リソースにアクセスできるようにし、クライアントとサーバー間の通信を大幅に簡素化できます。

1.7 Kubernetes

Kubernetes は、「Kuberentes Local, Global and Scalable Cluster Management System」の正式名で、Google、IBM、Microsoft、Amazon、Twitter などの大規模インターネット企業向けのオープンソース コンテナ クラスタ管理システムです。これは、コンテナ化されたアプリケーションを管理および調整できるオープン ソース システムです。任意のサイズのコンテナ クラスタを管理し、クロスホストおよび内部クラスタ アプリケーションの自動展開を提供できるスケーラブルな分散システムです。拡張および管理します。

3. コアアルゴリズム原理、具体的な操作手順、数式の説明

コンテナテクノロジーには複数の機能がありますが、その中で最も重要なのは、デプロイメントアプリケーションの移植性です。コンテナ テクノロジはホストのオペレーティング システム上で実行されるため、Linux、Mac OS X、Windows、またはその他のシステムなど、互換性のある任意のオペレーティング システム上で実行できます。

デプロイされたアプリケーションの移植性を実現するために、コンテナ テクノロジーでは抽象化レイヤー、つまりコンテナ イメージを使用します。イメージは、オペレーティング システム、アプリケーション、ライブラリ、構成など、必要なすべての条件と設定を含む読み取り専用のテンプレートです。コンテナーを作成するときは、イメージを指定するだけで済みます。このようにして、異なるホスト上の同じイメージで異なるアプリケーションを実行できます。さらに、コンテナ テクノロジには、コンテナの相互接続、コンテナの移植性、コンテナの動的なスケーラビリティ、ライフ サイクル管理などの他の機能もあります。

OpenStackにおけるコンテナ技術の適用シナリオを紹介します。

3.1 コンテナーテクノロジーを使用するのが適切なのはどのような場合ですか?

一般に、コンテナー テクノロジーは次のシナリオに適しています。

  1. マイクロサービス アーキテクチャ: コンテナ テクノロジーに基づくマイクロサービス アーキテクチャは、企業がテクノロジー スタックの学習コストを削減し、ソフトウェア配信効率を向上させ、IT リソースへの投資を削減し、企業の競争力を効果的に強化するのに役立ちます。マイクロサービス アーキテクチャに基づくコンテナ テクノロジは、アプリケーションの高度なモジュール化を効果的に達成し、サービスの結合を軽減し、それによってソフトウェアの保守性、拡張性、および再利用性を向上させることができます。
  2. アジャイルな開発と展開: コンテナ テクノロジーは、研究開発チームがアジャイルな開発と展開を実現するのに役立ちます。開発者は、パッケージ化してイメージを生成するためのコードを記述するだけで済み、その後、オーケストレーション ツール (Kubernetes、Mesos など) を使用して、テスト環境、実稼働前環境、および正式な環境に迅速にデプロイできるため、作業効率が大幅に向上します。
  3. ビッグ データ分析とリアルタイム コンピューティング: コンテナー テクノロジは、企業に拡張性の高いデータ分析機能を提供できます。ビッグ データ分析では、コンテナー クラスターを使用してコンテナー ノードを迅速に起動およびデプロイし、データ分析に対するリアルタイムの応答を実現できます。
  4. トラステッド コンピューティング: コンテナ テクノロジは、企業に信頼性の高いコンピューティング機能を提供します。企業は、機密データとコンピューティング タスクをコンテナに配置し、コンテナの分離特性を使用してデータ セキュリティを実現し、コンテナ クラスタ上のさまざまなノードのリソースを使用してタスクの高度な並列処理を実現できます。

3.2 OpenStack でコンテナ テクノロジーを使用する方法

OpenStack は Docker ベースのコンテナ テクノロジ ソリューションを提供しますが、OpenStack アプリケーション コンテナに関する詳細なドキュメントは提供していません。このセクションでは、OpenStack におけるコンテナー技術の具体的な使用方法を紹介します。

コンテナインスタンスの作成

まず、OpenStack コンソールにログインし、「コンピューティング」ページに入り、「コンテナー」タブをクリックし、コンテナー・リスト・ページに入り、「サーバーの作成」ボタンをクリックします。すると、図に示すように、コンテナーを作成するページがポップアップ表示されます。 :

[サーバーの作成] ページで、主に次のフィールドに入力します。

  1. 名前: ユーザー定義のコンテナ名を空にすることはできません。
  2. 画像ソース: 画像ソース、ローカル画像またはリモート画像を選択できます。デフォルトでは、Glance の標準画像が使用されます。リモートでプルする場合は、docker.io/library/centos:latest などのイメージ アドレスを入力してください。
  3. フレーバー: マシン構成タイプ。パフォーマンス タイプ、一般タイプ、コンピューティング タイプなどを選択できます。
  4. ネットワーク: ネットワーク構成では、外部ネットワークまたは内部ネットワークを選択できます。外部ネットワークの場合は、対応するセキュリティ グループ ポリシーを選択する必要があります。
  5. キー ペア: コンテナーへの接続に使用される SSH キー ペア。

情報が正しいことを確認したら、「起動」をクリックしてコンテナを作成します。作成が成功すると、ページには IP アドレス、使用可能なポート、起動コマンドなどのコンテナー関連の情報が表示されます。

コンテナの構成

コンテナーを作成した後、実行する前にコンテナーを構成する必要があります。次の図に示すように、コンテナーの ID リンクをクリックし、コンテナーの詳細ページを開き、[構成] タブをクリックします。

「Config」タブ・ページでは、主に次のフィールドに入力します。

  1. コマンド: 起動コマンド。カスタマイズすることも空にすることもでき、デフォルトの起動コマンドが使用されることを示します。
  2. 環境変数: 環境変数、キーと値のペアはコンテナー内で定義できます。たとえば、環境変数 MYVAR=myvalue が設定されている場合、その値はコンテナー内の echo $MYVAR を通じて取得できます。
  3. ボリューム: データ ボリュームはホスト データ ボリュームをコンテナーにマップでき、アプリケーション データの永続的なストレージとデータ共有を可能にします。
  4. ポート: ポート マッピング。コンテナ内のポートをホストにマッピングして、アプリケーションへの外部アクセスを実現します。
  5. 制限: コンテナのメモリ、CPU、ディスク、ネットワーク帯域幅、その他のリソースを制限する制限。
  6. 再起動ポリシー: 再起動ポリシー: コンテナーが終了または異常終了すると、コンテナーは再起動ポリシーに従って自動的に再起動します。
  7. ラベル: コンテナを分類、マーク、検索できるラベル。

[構成の更新] ボタンをクリックして構成を保存します。構成を変更した後、「再起動」ボタンをクリックしてコンテナを再起動し、構成を有効にします。

kubectl を使用してコンテナを管理する

OpenStack は、OpenStack コマンド ライン インターフェイス (CLI) の RESTful API インターフェイスを提供します。これを使用すると、コマンド ラインを通じてコン​​テナ サービスの RESTful API インターフェイスを呼び出し、コンテナを管理できます。OpenStack では、kubectl コマンド ライン ツールは、Kubernetes クラスターを管理するためのコマンド ライン ツールです。kubectl を使用すると、クラスター情報の取得、リソース オブジェクトの作成と削除、リソース オブジェクトのクエリと編集ができます。

kubectl コマンド ライン ツールをインストールするには、公式ドキュメント ( https://kubernetes.io/docs/tasks/tools/install-kubectl/) を参照してください。次に、OpenStack コンソールにログインし、ダッシュボード ページに入り、ページの右上隅でユーザー名を見つけて、ドロップダウン メニューをクリックし、[アクセスとセキュリティ] -> [API アクセス] を選択して、エンドポイント URL をコピーし、ターミナルを開きます。そして次のコマンドを入力します。

export KUBECONFIG=<endpoint url>

コマンドの実行が完了するまで待ってから、コマンドを入力します。

kubectl get nodes

クラスター内のすべてのノード情報を表示できます。

kubectl コマンドの詳しい使用方法については、公式ドキュメントhttps://kubernetes.io/docs/reference/kubectl/overview/ を参照してください。

おすすめ

転載: blog.csdn.net/universsky2015/article/details/133502319