web-dev-qa-db-ja.com

Vagrant、Docker、Chef、OpenStack(または同様の製品)の関係は?

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

とにかく、私はいくつかのことを関係に入れるのにいくつかの問題を抱えています。おそらく何もないので、明確にするために助けを求めたかったのです。

基本的に、私が理解したいのは、4つのタイプのソフトウェアです(私の理解から)。正確な製品は関係ありません。代わりに同様のソフトウェアを配置できます。

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

質問#1:私の説明は正しいですか、またはこれらの消費の一部(またはすべて)に誤りがありますか?

質問2:どうすればこれらのツールをすべて組み合わせることができますか?それは意味がありますか?

私の想像力と私の理解の点から、あなたは行くことができ、

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

これは正しいです?もしそうなら、あなたはこれをすべて使い始める方法についてアドバイスをくれますか?

57
Golo Roden

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

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

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

  • Vagrant :軽量で再現性のある移植可能な開発環境を作成して構成します。

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

  • Docker :任意のアプリケーションを軽量コンテナとしてパック、出荷、実行するためのオープンソースプロジェクト

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

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

    OpenStack 単一のマシンにデプロイ可能 であることは事実ですが、そのようなデプロイメントは純粋に概念実証のためのものであり、リソースの制約のため、おそらくあまり機能的ではありません。

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

    OpenStackの主要な機能は、完全仮想化(VirtualBox、VMWare)から準仮想化(KVM/Qemu)、さらにはコンテナー(LXC)に至るまで、多くの仮想化テクノロジーをサポートします ユーザーモードLinux(UML)

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

この必要な機能のどれだけを、プロジェクトのスコープで定義する必要があります。

また、ほとんどすべての技術的な説明を単純化しすぎたことにも注意してください。詳細については、参照リンクを使用してください。

55
dawud

開発者のバックグラウンドから来ると、実際には「開発者」になるのがもっとトリッキーになると思います。あなたの質問はほぼ3年前なので、どのようにして旅を見つけているのかを聞くのは興味深いでしょう。上記のアプリケーションについてのシステム管理者であり、うまくいけば、何らかの光を放つ、または技術的ではない観点から、人(管理者または開発者)があなたが尋ねたことを正確に検討し始める理由を説明することができます。 devopsの観点から、x、y、z間の関係はどうですか?これらのツールは、それらのパーツの合計よりも大きいですか?

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

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

それはそれですが、それは何をしますか? -ほとんどが適切に命名されたオペレーティングシステムはD.O.Sでした-BIOSを抽象化してディスクを操作し、OpenStackはデータセンターを操作し、インフラストラクチャを抽象化します(IaaS-はデータセンターオペレーティングシステムの専門用語です)。データセンターにAPI、コマンド構文、およびGUIが追加されました。OpenStackは、ハイパーバイザー、スイッチ、ルーター、ファイアウォール、ストレージエリアネットワーク、ロードバランサー、Dockerホストなどを駆動できます。Openstackは、ハードウェアメーカーの「プラグイン」または特定の機能は、ソフトウェア定義何かまたはネットワーク機能の仮想化としてソフトウェアにのみ存在できます。このOpenStackと他のすべてのクラウドの上で、オーケストレーションエンジンでスローしたり、ルール(スケールアップ、スケールダウンなど)に基づいてトリガーされたスクリプトを読み取ることで、独自のインフラストラクチャをオーケストレーションできます。したがって、openstackは抽象化の巨大なレイヤーです。私はどのスイッチを使用するかは気にせず、thisコマンドを使用してネットワークを提供するか、複雑な負荷分散されたHAを公開します。自動スケーリング、ドメイン名の登録、ストレージの接続thingy- このスクリプトを使用して、インターネットで見つけました。

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

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

Chef:オペレーティングシステムをセットアップして構成するためのツール。 VM内。

はい、そして最初の2つ、Chef、puppet、ansible、salt、System Center Operations Manager、およびこのスペースの他の膨大な数のアプリケーションほど破壊的ではありません。開発者と管理者は、デプロイメント、アップグレード、その他のアクション(config変更)、これらの取り組みを クラウド用 のように見ている標準化団体はないようです。しかし、インフラストラクチャほど決定的なものを扱っていないので、これらを学ぶことはより困難であり、一方から他方に転送することはあまりできません。

浮浪者:私の理解では、VMの作成と管理を自動化することです:VMのセットアップ、開始、停止。これは、ローカルVMまたはリモート、たとえばクラウドプラットフォームを使用して行うことができます。

これは、あなたが言及するアプリのリストの中で奇妙なものです。Vagrantは開発者向けのツールであり、管理者向けのおもちゃです。Vagrantを使用して開発環境をすばやく立ち上げることができます。 Androidアプリを開発したいIDE浮浪者から入手、すぐにDockerに追い越されると思います。

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

これが、管理者が優勢だと思う理由です。これのほとんどを手動で行う必要があり、何がうまくいかないかを知っていなければなりません。人形のマニフェスト、クラウドコンピューティング、Dockerオーケストレーションは私たちにとってより簡単になり、開発者は多くの問題に直面するでしょう。潜在的な開発者へのアドバイスは、最初に管理者になることです。

3
Sum1sAdmin

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

私はマシンをプロビジョニングするためにvagrantを使用します( 追加のクラウドプロバイダー があります)が、組み込みのVirtualBoxを使用しています。このアプローチを使用しているため、外部ネットワークとストレージはかなり手作業ですが、次のようなものを使用する場合 vagrant-aws プラグインを使用すると、AWSに必要なパーツをプロビジョニングするように指示できます。

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

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

私の場合、プロビジョニングスクリプトとしてyumまたはapt-getを実行する単純なポストインストールスクリプトを使用することを優先して、chefを削除しました。

また、vagrant-triggersプラグインを使用して、破棄する前に追加のスクリプトを追加します(私の場合、群れを離れます)。

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

0

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

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

0
kordless