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


56

私は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
これに完全に答えるのに十分なスキルはありませんが、VagrantとChefの評価は正しいようです。私の開発ボックスでは、Vagrantを使用してVMをスピンアップし、Chefでそれらをプロビジョニングすると、非常にうまく機能します。
GSP

回答:


54

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

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

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

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

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

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

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

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

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

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

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

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

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

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


あるシェフ人形は、同じツール?それらは同等ですか?Windows 10ホストでこれを実行する場合、どのツールを使用しますか?
ReynierPM

PuppetはChefに似たツールです。Windowsの方が良いかどうかわからない
。– Adeerlike

3

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

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

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

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

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

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

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

はい、最初の2つほど破壊的ではありません。Chef、Puppet、Ansible、Salt、System Center Operations Manager、およびこのスペースにある他の膨大な数のアプリケーションは、開発者や管理者がデプロイメント、アップグレード、その他のアクション(config変更)、クラウドの場合のようこれらの取り組みを検討している標準化団体は存在しないようです。しかし、私たちはインフラストラクチャのように決定的なものを扱っていないので、これらを学ぶのはより苦痛であり、一方から他方へ移すことはあまりありません。

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

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

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

これが、管理者が優位だと思う理由です。これのほとんどを手動で行い、何がうまくいかないかを知る必要がありました。パペットマニフェスト、クラウドコンピューティング、ドッカーオーケストレーションが簡単になり、開発者は多くの接線を取ることになります潜在的なdevopsへのアドバイスは、最初に管理者になることです。


0

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

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


0

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

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

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

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

私の場合、プロビジョニングスクリプトを実行する、またはオンにする単純なポストインストールスクリプトを使用するだけで、シェフを辞任しました。yumapt-get

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.