it-swarm-ja.com

Dockerと一緒にPuppetを使用する理由はありますか?

DevOpsのOpsの部分を少し前に試しましたが、それはとても楽しかったですが、どのプロジェクトでも試す時間と理由がありません。しかし先週、私は新しい仕事を始めました。そこでボスは、会社のプロジェクトのステージング環境のようなものを作るようにサーバーを構成できるかどうか尋ねられました。それに加えて、私はプロジェクトを移行するだけでなく、devOpsになることを考え始めました。

私はDockerを使用してきましたが、これは非常に簡単でとても便利です。しかし、少し前にPuppetを試していたので、「DockerでPuppetを使用する理由はありますか?」という疑問が浮かびます。 DockerはPuppetと同じことをすべて実行しているようですが、より簡単な方法です。

[〜#〜] ps [〜#〜]少し前にHacker Newsに Consul がありましたサービスの発見、それで設定さえ解決することができます(そして私はこれも実装することを考えています)。

16
Hauleth

PuppetとDockerは同じことの多くを実行できますが、アプローチは異なります。

Puppetはファイル+パッケージ+サービスを管理します。 (三連符と呼ばれる)。 Dockerは、バイナリーと構成ファイルをコンテナー内にカプセル化します。

この記事の執筆時点では、Dockerはまだ不安定であり、本番環境では使用しないでください。 APIの多くは、バージョン1.0がリリースされるまで変更される可能性があります。

Dockerが安定した場合でも、すべてのプロセスと構成ファイルをdockerコンテナーに変換するのは大きな仕事です。

一方、Puppetは安定した製品であり、ツール(heira、mcollective、facter、razor)のエコシステム全体が付属しています。これらのツールは、問題が発生することを心配することなく、すばやく実装できます。

以下のリソースを強くお勧めします。

パペットでアプリケーションスタックを管理する方法のビデオ
https://www.youtube.com/watch?v=KSo_mcJxFIA

Dockerとpuppetがどのように連携するかについてのポッドキャスト
http://devopscafe.org/show/2014/1/23/devops-cafe-episode-46.html

Dockerと統合する方法に関する人形のブログ記事
http://puppetlabs.com/blog/building-puppet-based-applications-inside-docker

パペットとドッカーの共存に関する別のブログ記事
http://puppetlabs.com/blog/can-containers-and-configuration-management-co-exist

Dockerと対話するための人形モジュール
http://docs.docker.io/use/puppet/

Devopsの用語に関するマイナーな修正。 Devopsは、特定のツールよりも、開発者と運用が協力する ソフトウェア開発方法論 のようなものです。

更新

現在、私の会社は人形とドッカーの両方を使用しています。ここでは、puppet conf 2014で行われた、puppetとdockerを使用する理由についての素晴らしいプレゼンテーションがあります。人形劇の元雇用者であり、港湾労働者の本の著者でもあるジェームズターンブルによって与えられました。

https://puppetlabs.com/presentations/using-docker-puppet-james-turnbull-kickstarter

また、sysadmincasts.comが提供するdockerの優れた短いビデオチュートリアル

https://sysadmincasts.com/episodes/31-introduction-to-docker

Dockerプロ:

  • インスタンスをすばやく起動できます
  • 人形よりも学びやすい
  • ダウンタイムが簡単

Dockerの短所:

  • Devicemapperバックエンドを使用する場合、コンテナーには10GBの制限があります
  • 小さな構成変更は、コンテナーの再構築に長い時間がかかります
  • Hub.docker.com、quay.ioなどのDockerレジストリを使用すると、費用がかかります(自己ホスト型のDockerレジストリは非常にバグが多く、GUIがありません)
  • 適切な初期化システムがありません。一部のアプリケーションは、Niceを再生しません。
  • ネットワークをきめ細かく制御できない
  • サブシェルを必要とするアプリケーション(RVM + Rubyを見る)は、適切に機能させるのが非常に難しい
  • Windowsホストを管理できない、SLESやその他のあまり人気のないオペレーティングシステムは管理できない
  • 現在、Dockerオーケストレーションは非常に若いです。
  • 現在、ビルド時に/etc/resolv.confを設定できません
  • / etc/localtimeおよび/ dev/urandomをマウントしてホストのlocaltimeおよびurandomディレクトリにマッピングする必要があるさまざまなバグ。
  • パフォーマンスはそれほど速くありません(dockerはベアメタルの99%の速度である必要があるという主張にもかかわらず、他のマシンよりも30%遅い場合があります)。
  • 小さなコンテナには、依然として数百メガバイトのオーバーヘッドがあります。私たちのコンテナはすべて数ギガバイトです。

人形長所:

  • スケーリングが簡単
  • 既存のサーバー(windows、linux、sles)で動作します
  • 小さな変更をすばやく行う
  • 他のパペットユーザーとモジュールの強力なコミュニティ
  • すべてのプラットフォームにパッケージをインストールするための標準化されたAPI

人形の短所:

  • 大規模なインフラストラクチャは非常に複雑になります
  • 条件付きモジュールの依存関係がspagettiコードを作成する
  • より重い

現在、パッカーを使用してDockerコンテナーをプロビジョニングしています。 dockerコンテナーはjenkinsビルドに使用され、ビルドごとに破棄されます。それはうまく機能し、一貫した環境を提供します。つまり、コードを1回記述すれば、ubuntu、sles、centosマシンの両方を再構築する必要があります。コンテナの再構築には約15〜30分かかりますが、これはまだ手動のプロセスです。 DockerはクイックテストVMを起動するのに最適です。

つまり、パペットは既存のインフラストラクチャの管理に優れています。 Dockerは、100%linuxのグリーンフィールドがあり、テクノロジースタックが小さな一時的なインスタンスで囲まれている場合に適しています。一部の機能は重複していますが、相互に排他的ではありません。

18
spuder

Dockerはコンテナーのプロビジョニングと初期設定を支援しますが、コンテナーの初期化時に1回限りのコマンドを実行します。

Puppetは、デーモンとして実行したときに最も強力であり、指定したとおりに構成がとどまることを保証します。たとえば、サービスが実行を停止した場合、再び開始します。

(正しく設計された)パペット構成マニフェストの最も良い点の1つは、それらが べき等 であることです。それはあなたがなりたい状態を説明するためのものであり、必ずしもそこに到達するためのステップではありません。

また、構成を抽象化してパラメータ化することもできます エクスポートパラメータ を1つのサーバーまたはコンテナで作成し、別のサーバーまたはコンテナで使用できます(たとえば、監視アプリケーションのノードホスト名のリストを収集します)。

私はそれらが間違いなく異なるが関連する目的に役立つと言うでしょう。現在、既存のPuppetマニフェストを使用してコンテナーの構成を開始し、開発環境が実稼働環境のようになるように検討しています。

2
xtrade