Vagrant、Docker、Chef、OpenStack (または類似製品) の関係は何ですか?

Vagrant、Docker、Chef、OpenStack (または類似製品) の関係は何ですか?

私は Web 開発者ですが、いくつかの管理タスクにも興味があります。そのため、純粋な管理から Dev-Ops への新しい移行は私にとって便利です。

とにかく、私は人間関係にいくつかの問題を抱えています。 おそらく何もないのでしょうが、それを明確にするために助けを求めたいと思いました。

基本的に、私が関連付けたいのは 4 種類のソフトウェアです (私の理解では)。正確な製品は重要ではなく、類似のソフトウェアを代替として配置できます。

  • Vagrant: 私の理解では、VM の作成と管理を自動化します。つまり、VM の設定、起動、停止です。これは、ローカル VM またはリモート (クラウド プラットフォームなど) を使用して実行できます。
  • Docker: いくつかの Linux カーネル概念に基づいた「軽量 VM」。共有 Web ホスティング環境などでプロセスを分離して実行するために使用できます。
  • Chef: VM 内などでオペレーティング システムをセットアップおよび構成するためのツール。
  • OpenStack: 独自のプライベートクラウドを構築できるツール。AWS などに匹敵します。

質問 1: 私の説明は正しいでしょうか、それともこれらの消費の一部 (またはすべて) が間違っているのでしょうか?

質問 2: これらすべてのツールを混在させるにはどうしたらよいでしょうか? 意味があるでしょうか?

私の想像と理解では、あなたは行って

  • OpenStackを使用して独自のクラウドを構築し、
  • Vagrantを使用してクラウドで実行されるVMを管理し、
  • Chefを使用してこれらのVMをセットアップする
  • 最後に、Docker を使用して VM 内でプロセスを実行します。

これは正しいでしょうか? もし正しいなら、これらすべてを使い始める方法についてアドバイスをいただけますか (一度にかなりたくさんあり、どこから始めればよいかまだわかりません)?

答え1

それぞれの Web ページを使用して、これらのプロジェクトが何であるかを調べてみましょう。ただし、リストの順序は変更します。

  • シェフChef は、インフラストラクチャをコードに変換する自動化プラットフォームです。

    これは構成管理ソフトウェアそれらのほとんどは同じパラダイムを使用しています。マシンの設定ファイル、インストールされたソフトウェア、ユーザー、グループ、その他多くのリソースタイプに関して、マシンがどのような状態になるかを設定します。また、ほとんどのマシンでは、特定のマシンに変更をプッシュする機能も提供しており、このプロセスは通常オーケストレーション

  • 浮浪者: 軽量で再現性があり、移植可能な開発環境を作成および構成します。

    それは、再現可能な生成方法完全に仮想化されたマシンOracleのVirtualBoxまたはVMWareテクノロジーを使用してプロバイダーVagrantは、オペレーティングシステムのインストーラが終了したところで、構成管理ソフトウェアと連携してインストールのプロセスを続行することができます。これは、プロビジョニング

  • ドッカー: あらゆるアプリケーションを軽量コンテナとしてパッケージ化し、出荷し、実行するオープンソース プロジェクト

    このソフトウェアの機能は、オペレーティングシステムのインストールを定義する手段を提供するという点でVagrantの機能と多少重複していますが、この目的で使用される技術は大きく異なります。DockerはLinux コンテナは、仮想マシンそのものではなく、分離されたファイルシステムで実行される分離されたプロセスです。Dockerは、構成管理システムコンテナをプロビジョニングします。

  • オープンスタック: プライベート クラウドとパブリック クラウドを構築するためのオープン ソース ソフトウェア。

    OpenStackは単一のマシンに導入可能このような展開は純粋に概念実証のためであり、リソースの制約によりあまり機能的ではない可能性があります。

    OpenStackのインストールの主なターゲットは、ベアメタルのマルチノード環境であり、異なるコンポーネント専用ハードウェアで使用すると、より良い結果が得られます。

    OpenStackの重要な機能は、完全仮想化(VirtualBox、VMWare)から準仮想化(KVM/Qemu)、コンテナ(LXC)、さらにはユーザーモード Linux (UML)

私は、これらの製品を特定のアーキテクチャのコンポーネントとして紹介しようとしました。私の観点からすると、まず必要な環境 (Chef、Puppet、Ansible など) に関するニーズを定義し、次にそれを制御された方法で展開 (Vagrant、Docker など) し、最後に必要に応じてグローバル サイズに拡張できることが理にかなっています。

これらすべての機能のうちどれだけが必要かは、プロジェクトの範囲内で定義する必要があります。

また、ほとんどすべての技術的な説明は過度に簡略化されていることに注意してください。詳細な情報については、参照リンクを使用してください。

答え2

開発者のバックグラウンドを持つと、実際には「DevOps」になることがより困難になると思います。あなたの質問はほぼ 3 年前のものですので、あなたがその道のりをどのように感じているかを聞くのは興味深いでしょう。私は、あなたが上で言及したアプリケーションについてシステム管理者の観点から回答します。うまくいけば、それが何らかの光を当てるか、または、人 (管理者または開発者) があなたが尋ねたまさにそのことを考え始める理由をいくらか説明するのに役立つ非技術的な観点を提供します。たとえば、DevOps の観点から、x、y、z の関係は何ですか? これらのツールは、各部分の合計よりも優れていますか?

実際、システム管理者がここで優位に立っていると思います。質問で言及されているアプリケーションのほとんどは、管理者の「問題」を解決し、それによってより抽象的なデータ センター環境を提供します。その結果、開発者や新しい「DevOps」戦略 (戦略/チームと読み替えてください。DevOps は人ではありません) にとってよりプログラム可能になります。では、あなたが言及しているアプリとの関係はどのようなものですか? これはどのようにして IT サービスへの総合的なアプローチを提供するのでしょうか?

OpenStack: 独自のプライベートクラウドを構築できるツール。AWS などに匹敵する。

それがOpenStackですが、何をするのでしょうか?最も適切な名前のオペレーティングシステムはDOSでした。BIOSを抽象化することでディスクを操作し、OpenStackはデータセンターを操作し、インフラストラクチャを抽象化します(IaaSはデータセンターオペレーティングシステムの専門用語です)。現在、データセンターにはAPI、コマンド構文、GUIがあり、OpenStackはハイパーバイザー、スイッチ、ルーター、ファイアウォール、ストレージエリアネットワーク、ロードバランサー、Dockerホストなどを操作できます。OpenStackはハードウェアメーカーの「プラグイン」を使用します。または特定の機能はソフトウェア定義としてソフトウェアのみで存在することができる何かまたはネットワーク機能の仮想化。この上にOpenStackや他のクラウドは、オーケストレーションエンジンに投げたスクリプトを読んだり、ルール(スケールアップ、スケールダウンなど)に基づいてトリガーしたりすることで、独自のインフラストラクチャをオーケストレーションすることができます。つまり、OpenStackは抽象化の巨大なレイヤーです。たとえば、どんなスイッチを持っているかは気にせず、これコマンド、または、複雑な負荷分散、HA、公開、自動スケーリング、ドメイン名登録、ストレージ接続を構築しますもの-インターネットで見つけたこのスクリプトを使って。

Docker: いくつかの Linux カーネル概念に基づいた「軽量 VM」。共有 Web ホスティング環境などでプロセスを分離して実行するために使用できます。

Docker は抽象化のもう 1 つのレイヤーであり、クラウドと同様に破壊的なテクノロジーであり、ソフトウェアの依存関係、アップグレード、データの分離、移植性など、多くの運用上の「問題」を解決するため、業界を変えています。Java が人気になったのは、開発者が考える必要のないソース コードの移植性があったためです。実行中の JVM は、Java をサポートしている限り、コーヒー マシンでコードを実行できることを意味していました。Docker は同様の問題を解決します。私のアプリを実行するには、Docker ホストが必要です。ない、このバージョンの Python、このカーネル、この Linux ディストリビューションなどが必要で、もちろんアプリにはそれらの依存関係が残っていますが、基盤となるホストは気にしませんし、管理者も、分離されたコンテナー内で何が行われるかは気にしません (ある程度まで)。Docker は開発と運用の両方のパラダイムを変えており、オペレーティング システム全体とそのサービスをバイナリのように扱っています。リポジトリから取得できます、バージョン管理、変更、パラメータ指定による実行などを行います。

Chef: VM 内などでオペレーティング システムをセットアップおよび構成するためのツール。

はい、最初の2つほど混乱は生じませんが、Chef、puppet、ansible、salt、system center operations manager、およびこの分野の膨大な数の他のアプリケーションは、開発者と管理者がデプロイメント、アップグレード、およびその他のアクション(構成変更)をモデル化する方法を提供します。これらの取り組みを監視する標準化団体は存在しないようです。クラウド用がありますしかし、私たちが扱っているのはインフラストラクチャほど決定的なものでは無いので、これらを学ぶのはより苦痛であり、一方から他方へ転用できるものはあまりありません。

Vagrant: 私の理解では、VM の作成と管理を自動化します。つまり、VM の設定、起動、停止です。これは、ローカル VM またはリモート (クラウド プラットフォームなど) を使用して実行できます。

これはあなたが挙げたアプリのリストの中では異質なものです。Vagrant は開発者向けのツールであり、管理者向けのおもちゃです。Vagrant を使用すると、開発環境をすぐに立ち上げることができます。たとえば、Android アプリを開発したい場合、Vagrant から IDE を取得します。まもなく Docker に追い抜かれると思います。

これらすべてを使い始める方法についてアドバイスをいただけますか (一度にかなり多くのものがあり、どこから始めればよいかまだわかりません)?

これが、管理者が優位に立つ理由だと私は考えています。私たちは、ほとんどの作業を手動で行う必要があり、何が問題になる可能性があるかを把握しています。Puppet マニフェスト、クラウド コンピューティング、Docker オーケストレーションは私たちにとってより簡単になります。開発者は、多くのことに手を染めることになるでしょう。そのため、潜在的な DevOps の皆さんへの私のアドバイスは、まず管理者になることです。

答え3

Vagrant インスタンス内で Chef サーバーを使用する OpenStack デプロイメント プロジェクトを完了しました。https://github.com/bluechiptek/bluechipstack/blob/master/README.md

この方法で行う場合の主な問題は、ノードを管理するたびに Vagrant インスタンスに同じ IP が付与されることです。静的アドレス指定を行うとうまく機能します。VPN 経由で行うのは理想的とは言えません。

答え4

私の場合、Vagrant と Docker の組み合わせのみを使用しています。

私はマシンのプロビジョニングにvagrantを使用します(追加のクラウドプロバイダーしかし、私は内蔵のVirtualBoxを使用しています。このアプローチを使用しているため、外部ネットワークとストレージはほぼ手動で設定する必要がありますが、vagrant-awsプラグインを使用すると、必要な部分を自動的にプロビジョニングするように AWS に指示できます。

私が使用するプロビジョニング スクリプトは、CSR の署名に使用される CA 証明書とキー、およびdocker swarm joinトークンが含まれる安全な場所を指します。さらに、docker-engine をインストールし、swarm に参加するように構成します (swarm がない場合は初期化します)。

それが決まったら、docker stack deployローカル マシンまたはビルド ボックスからを実行して、必要なものがすべて揃ったスタックをデプロイするだけです。

私の場合は、ただ落としただけですシェフプロビジョニング スクリプトとして、yumまたはを実行する単純なインストール後スクリプトを使用することをお勧めします。apt-get

私も浮浪者トリガー破壊する前に追加のスクリプトを追加するプラグイン (私の場合は、群れから離れるため)。

Vagrant で集中管理する利点は、セクションを追加または変更するだけで、開発用に別のシステムまたは単一のコンピューターに環境を複製できることですprovider。ただし、VirtualBox を管理するために単一のコンピューターに OpenStack をセットアップしたことは一度もありません。

関連情報