パート1 イデオロギー。 なぜだ。
5台のサーバーがある場合、それらをセットアップすることは非常にまれであり、2、3の手で十分です。 GitまたはSVNに/ etcを配置することもできます。定期的にバックアップを作成し、安心して生活してください。 アプリケーションの展開を自動化するために、管理者が最もよく知っているのは、たとえbash / python / rubyまたはcapistrano / fabric /などの単純なスクリプトであってもです。
類似または同一のほかに12台以上の車がある場合、スクリプト作成はすでに困難です。 Capistrano /ファブリック-複数のサーバーでいくつかの便利な並行起動を提供しますが、ロジックを自分で記述する必要があります。 特に同じ言語のアプリケーションを一緒にデプロイすると便利ですが、構成やセットアップはできません。 ここでは、独自の「クランチ」をフェンスするか、簡単な方法で既製のものを用意する必要があります。
Chefから、最後までロックを解除し、次のものに出くわしました。 同一のサーバーがn台あり、/などすべてが同じリポジトリブランチを持っているとします。 nginxの構成を変更しました。 他のすべてのマシンに変更を適用する必要があります。 どうやって? たとえば、dshを使用します。
dsh -r ssh -c -M -m node1 -m node2 -m nodeN -- 'cd /etc && sudo git pull'
ここでは、原則として、「/ etc / init.d / nginx reload」を追加して、どこでも一度にすべてを更新できます。 しかし、生産ではこれは良くありません。 また、ローカルユーザーにとって、中断はあまり快適ではありません。 他のすべてには、スーパーバイザー、postgres、mongodb、および同じストーリーを持つ他の多くのサービスがまだあります。 少なくとも、それぞれを再起動するスクリプトを実行する必要があります。 一般的に、「クランチ」が取得されます。
そして、シェフはこのためだけです。 構成を変更し、ファーム全体に分散し、必要な(そして必要なだけの)サービスが過負荷になりました。 さらに、* nixバージョンからの抽象化とMSがサポートされているようです。 設定には、サーバー設定に応じて「収集」されるテンプレートがあります。 一般的に、おいしいです。 ちなみに、現在のプロジェクトでは、bash、fabric、Chefの2つのスクリプトのすべてを一度に使用します。
練習に近い。 簡単なnginxインストールクックブックを最初から作成してデプロイし、同時にそれを理解します。 まず、sudoを備えたテストマシンが必要です。 この命令はUbuntu 11.10用に設計されていますが、どの* nixでも動作するはずです。
2.インストールと構成
シェフはRubyで書かれています。 また、 Rubyバージョンマネージャー(RVM)を使用してRubyをインストールする方が便利です。
彼のマシンで、通常のユーザーの下から:
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
次に、ログインするか、新しいターミナルを開きます(bashプロファイルが再起動するように)。
rvm install 1.9.2 rvm use 1.9.2 --default
RVMは、ルートの外部から実行される場合、自身と〜/ .rvmの両方をハックします。 システムが汚れることはありません。その場合は簡単に取り外すことができます。
シェフをソロにしました。 パッケージからインストールできますが、rubygemsはパッケージマネージャーから独立した、より「ネイティブ」な方法です。
gem install knife-solo
3つのChef構成があります。
構成:
cd ~ knife configure -r . --defaults
3.キッチン、料理の本、ナイフ
knife kitchen solodemo
solodemoフォルダーが作成されます。
cd solodemo tree . |-- cookbooks - . . |-- data_bags - (, , , ). |-- nodes - (). |-- roles - . . , Apache , MySQL . |-- site-cookbooks `-- solo.rb
これはいわゆる 「キッチン」。 実際、ローカルファイルシステム上でのみ、Chef Serverとの単純化された類似性があります。
クックブックを作成して、nginxをインストールします。
cd solodemo knife cookbook create nginx -o cookbooks
これもフォルダーです。 見ます。
cd cookbooks tree . |-- attributes |-- definitions |-- files | `-- default |-- libraries |-- metadata.rb |-- providers |-- README.md |-- recipes - " ". default.rb , . . | `-- default.rb |-- resources `-- templates - ERB. `-- default
レシピは、何をする必要があるかを記述するスクリプトです。 RubyとBash、Perl、Python、csh挿入の両方がサポートされています。
いくつかのレシピがありますが、(クックブックを呼び出すときに)特に指定しない限り、「デフォルト」が実行されます。
レシピ/ default.rbで追加
package "nginx"
保存します。
ここでの「パッケージ」はリソースです。 Wikiの組み込みリソースの説明を含むリストを表示できます 。 必要に応じて、クックブックで直接補完および拡張できます。 レシピが書かれている言語はRuby DSLです。 ロジックは反対から構築されます。 パッケージ「nginx」をサーバーにインストールする必要があるというだけです。 そしてChefは、必要なことを確実に実行します。 原則として、同じことは他の言語でも記述できます。 しかし、「箱から出して」と言うように、多くの便利なことがあります。 もちろん、微妙な違いがあります。 たとえば、パッケージの場合、名前を正しく設定することが重要です。 したがって、Apacheの場合、条件を記述する必要があります。 RPMベースのディストリビューションではhttpd、Debianではapache2です。
次に、テストサーバーに移動してホスト名を設定します。 これは重要です Chefはそれによってノードを区別します。
hostname testserver.example.com echo "testserver.example.com" > /etc/hostname
/ etc / hostsに追加します
10.10.10.10 testserver.example.com
私たちはチェックします:
hostname -f
答えが「testserver.example.com」の場合-すべてが正常です。 いいえ-/ etc / hostsを編集します。
次に、solodemoフォルダーのローカルマシンから:
knife prepare ubuntu@testserver.example.com
少し待って、おそらくsudoのパスワードを入力する必要があります。 「準備」は、コマンドを受け入れるchef-clientをインストールします。
testserver.example.com.jsonという形式のファイルがノードフォルダーに表示されます。 書き込みます:
{ "run_list": ["recipe[nginx]"] }
つまり、クックブック "nginx"を実行する必要があり、それからレシピ "default"を実行する必要があります。
それから
それだけですknife cook ubuntu@testserver.example.com
結論
はい、1つのnginxの周りにたくさんのダンスがあります。 しかし、些細なタスクのためのクックブックがあり、それらは非常に柔軟で思慮深いです。 そして、自明ではないもののために-書かれたクックブックがインストールを完全に自動化できるようになると、それは一種のドキュメントになります。 最初のサーバーのインストールを把握して説明するのに1週間かかりましたが、最初からインストールするのに約20分かかります。 まだです。 しかし、今すぐ設定するのは楽しいことです。 まだドキュメントを作成しているのであれば、Chefですぐに作成してみませんか? はい、顧客は2つのコマンドを使用して、仮想マシン上のすべてを持ち上げて「タッチ」できます。
私は情報で記事をオーバーロードしないことに決めました。 これはまだガイドです。 しかし、用語はリンクによって作成されるため、興味のある人は誰でも簡単に見つけられます。
参照資料
- Matt Schaefferによるビデオ 。彼に心から感謝しています。 :)すべてのエピソードを一度に視聴することをお勧めします。
- 公式クックブックのあるリポジトリ。 それらから多くを学ぶか、完全に使用することができます。
- サイトおよびシェフWiki。