序章


Chefは、制御された反復可能な方法でインフラストラクチャを構築および管理できるようにする構成管理システムです。 Chefを使用すると、インフラストラクチャの決定がすべて一元的に文書化され、いつでも簡単に再実装できるようになります。

以前の記事では、基本的なChefの用語、ソフトウェアのインストール方法( Chef12またはChef11 を使用)、の操作方法について説明しました。クックブック、および役割と環境の操作方法

この記事では、Chef構成ツールであるknifeのプラグインを使用して、DigitalOceanドロップレットを操作する方法について説明します。 このツールを使用すると、インフラストラクチャドロップレットを作成し、Chefシステム内から簡単に構成できます。

サーバーとワークステーションをインストールして構成し、新しいノードを作成してブートストラップする方法を知っていることを前提としています。

KnifeDigitalOceanプラグインをインストールします


Chefシステム内からDigitalOceanドロップレットの操作を開始する前に、ナイフツール用のDigitalOceanプラグインをインストールする必要があります。

これは、gemをインストールするだけで実行できます。

ワークステーションの構成方法で、次のように入力した場合:

gem install knife-digital_ocean

次のようなエラーが発生します。

Fetching: knife-digital_ocean-0.4.0.gem (100%)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /opt/chef/embedded/lib/ruby/gems/1.9.1 directory.

同様に、sudoを指定してこのコマンドを実行すると、コマンドが見つかりません。

sudo gem install knife-digital_ocean

sudo: gem: command not found

問題は、ユーザーの環境内でChef実行可能ファイルへのパスを指定したが、コマンドを正しく実行するために必要な特権がないことです。

Chef gem実行可能ファイルへのフルパスを使用することで、これを回避できます。

sudo /opt/chef/embedded/bin/gem install knife-digital_ocean

これにより、DigitalOceanナイフプラグインがインストールされ、含まれている機能を利用できるようになります。

DigitalOceanクレデンシャルを使用してKnifeプラグインを構成します


ナイフプラグインを使用するには、DigitalOceanアカウントを使用するためのナイフ認証を与える必要があります。 これは、アカウントのAPIキーとクライアントIDを使用して実行できます。

DigitalOceanコントロールパネルで、左側のナビゲーションメニューのAPIリンクをクリックします。 アカウントの「クライアントID」がここに表示されます。

DigitalOcean client ID

すぐに構成ファイルにこの値が必要になります。

すでにAPIキーを生成している場合は、それを使用してDigitalOceanアカウントに接続している別のアプリケーションからその値を収集する必要があります。 セキュリティ対策として、インターフェースから現在のAPI値を取得することはできません。

APIキーをまだ生成していない場合、または古いキーを紛失したか不要になった場合は、[新しいキーの生成]ボタンを入力して新しいキーを生成できます。

DigitalOcean generate key

新しいキーを生成したら、画面を終了する前に、生成された値をコピーする必要があります。 上記のように、このページを離れるとこの値にアクセスできなくなります。そのため、新しい値を生成するか、すでに使用しているアプリケーションからAPIキーを取得する必要があります。

クライアントIDとAPIキーの両方を取得したら、これらの値を使用するようにknifeを構成する準備が整います。

ワークステーションで、Chefリポジトリ内のChef構成ディレクトリに移動します。

cd ~/chef-repo/.chef

次の場所にあるknife.rbファイルを編集します。

nano knife.rb

log_level                :info
log_location             STDOUT
node_name                'station1'
client_key               '/home/demo/chef-repo/.chef/station1.pem'
validation_client_name   'chef-validator'
validation_key           '/home/demo/chef-repo/.chef/chef-validator.pem'
chef_server_url          'https://chef_server.com:443'
syntax_check_cache_path  '/home/demo/chef-repo/.chef/syntax_check_cache'
cookbook_path [ '/home/demo/chef-repo/cookbooks' ]

ファイルの最後に、次のように資格情報を追加する必要があります。

log_level:info log_location STDOUT node_name'station1' client_key'/home/demo/chef-repo/.chef/station1.pem' validate_client_name'chef-validator' validate_key'/home/demo/chef-repo/.chef/chef-validator .pem'chef_server_url' https://chef_server.com:443'syntax_check_cache_path' /home/demo/chef-repo/.chef/syntax_check_cache'cookbook_path ['/home/demo/chef-repo/cookbooks']knife [:digital_ocean_client_id ] =' your_client_id 'ナイフ[:digital_ocean_api_key] =' your_api_key '

完了したら、ファイルを保存して閉じます。

これで、現在アクティブなドロップレットのリストを要求することで、knifeがDigitalOceanサーバーに接続できるかどうかをテストできます。 ナイフコマンドを実行する前に、Chefリポジトリにいることを確認してください。

cd ~/chef-repo
knife digital_ocean droplet list

ID       Name             Size   Region      IPv4             Image                         Status
111111   irssi            512MB  New York 1  111.111.111.111  479972 (N/A)                  active
222222   try              4GB    New York 2  222.222.222.222  1575388 (Ubuntu-Init)         active
333333   nftables         4GB    New York 2  333.333.333.333  308287 (Debian 7.0 x64)       active
4444444  snmp             4GB    New York 2  444.444.444.444  1575388 (Ubuntu-Init)         active
5555555  node             4GB    New York 2  555.555.555.555  1575388 (Ubuntu-Init)         active

現在のドロップレットのリストを取得すると、接続に成功し、認証が機能しています。

ChefワークステーションでSSHキーを構成する


ナイフツールを使用してDigitalOceanアカウントに接続できるようになったので、さらに一歩進んで液滴作成プロセスを自動化する必要があります。 作成するドロップレットに埋め込むために、Chefワークステーション用のSSHキーを作成する必要があります。

ワークステーションコンピュータで、次のように入力して新しいSSHキーを作成する必要があります。

ssh-keygen

プロンプトからEnterキーを押して、デフォルト値を受け入れます。 これにより、ユーザーのホームディレクトリに.sshという隠しサブディレクトリが作成され、内部に公開鍵と秘密鍵が含まれます。

次のように入力して、今すぐこのディレクトリに移動します。

cd ~/.ssh
ls

id_rsa	id_rsa.pub  known_hosts

今必要なファイルはid_rsa.pubファイルです。 次のように入力すると、このファイルの内容を表示できます。

cat id_rsa.pub

sh-rsa AAAAB3NzaC1yc2EAAAAxAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIV.....................lANpl5qmhDQ+GS/sO............mHWL2irjuB9xBXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IKaKdlK0hbC1ds0+8/83PTb9dF3L7hf3Ch/ghvj5++twJFdFeG+VI7EDuKNA4zL8C5FdY.....................XIIeZvZ/z9Kp.....................nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip
[email protected]

DigitalOceanコントロールパネルに戻り、左側のメニューの[SSHキー]リンクをクリックします。 右上隅にある[SSHキーの追加]ボタンをクリックします。

DigitalOcean add SSH key

次のページで、新しいキーの名前を作成し、ファイルの内容を指定された領域に貼り付けます。

DigitalOcean create key

終了したら、下の[SSHキーの作成]ボタンをクリックします。

これで、ChefサーバーからのSSHキーを新しいドロップレットに埋め込むことができるはずです。 これにより、インターフェイス内からドロップレットを作成し、ログインして、作成したクックブックとロールを使用してサーバーを構成できるようになります。すべて1つのステップで実行できます。

ナイフプラグインの操作


ナイフプラグインの使用を開始しましょう。

まず、DigitalOceanアカウントに関連付けられているドロップレットをもう一度クエリします。

knife digital_ocean droplet list

ID       Name             Size   Region      IPv4             Image                         Status
111111   irssi            512MB  New York 1  111.111.111.111  479972 (N/A)                  active
222222   try              4GB    New York 2  222.222.222.222  1575388 (Ubuntu-Init)         active
333333   nftables         4GB    New York 2  333.333.333.333  308287 (Debian 7.0 x64)       active
4444444  snmp             4GB    New York 2  444.444.444.444  1575388 (Ubuntu-Init)         active
5555555  node             4GB    New York 2  555.555.555.555  1575388 (Ubuntu-Init)         active

これにより、液滴の概要がわかります。

ナイフプラグインはかなりシンプルですが、DNS機能を除いて、アカウント内のドロップレットを制御するために必要なすべての要素が含まれています。 主な機能は、クエリから取得できる情報を使用してドロップレットを作成および破棄することです。

Knifeプラグインを使用した情報のクエリ


さまざまなナイフクエリを使用して、作成コマンドと破棄コマンドに必要なすべての情報を見つけることができます。

ベース画像として使用できる標準のDigitalOcean画像を見つけるために、これを入力できます。 -Gフラグは、「グローバル」を表します。

knife digital_ocean image list -G

ID       Distribution  Name                                             Global
361740   Arch Linux    Arch Linux 2013.05 x32                           +
350424   Arch Linux    Arch Linux 2013.05 x64                           +
1602     CentOS        CentOS 5.8 x32                                   +
1601     CentOS        CentOS 5.8 x64                                   +
376568   CentOS        CentOS 6.4 x32                                   +
. . .

これにより、新しいドロップレットを展開するために使用できるすべてのワンクリックアプリケーションを含む、すべての標準DigitalOceanイメージが提供されます。 ID列は、正しいイメージから展開するために注意する必要がある項目です。

同様に、スナップショットやバックアップなどのリストが必要な場合は、-Gフラグなしで同じコマンドを入力できます。

knife digital_ocean image list

ID       Distribution  Name             Global
11xxxxx  Ubuntu        Dokku            -
15xxxxx  Ubuntu        Ubuntu-Init      -
15xxxxx  Ubuntu        Ubuntu-LAMP      -
15xxxxx  Ubuntu        Ubuntu-WP        -

このリストのイメージIDをベースイメージとして使用して、柔軟性を高めることもできます。

ドロップレットをデプロイするために使用できる領域を見つけるには、次のように入力します。

knife digital_ocean region list

ID  Name
1   New York 1
2   Amsterdam 1
3   San Francisco 1
4   New York 2
5   Amsterdam 2

ドロップレットを展開するサイズのリストについては、次のように入力できます。

knife digital_ocean size list

ID  Name
63  1GB
62  2GB
64  4GB
65  8GB
61  16GB
. . .

イメージ内に埋め込むことができるSSHキーを一覧表示するには、次のコマンドを発行できます。

knife digital_ocean sshkey list

ID     Name
11111  Home key
22222  Chef key

ドロップレットの作成と破棄


これで、液滴を作成および破壊するために必要なすべての情報を取得する方法がわかりました。

破壊は常に作成よりも少ない労力で済むため、液滴を破壊することから始めることができます。

液滴を破壊するために必要なのは、液滴のIDだけです。 これは、液滴リストの最初の列で利用できます。

knife digital_ocean droplet list

ID名前サイズリージョンIPv4イメージステータス111111irssi512MBニューヨーク1111.111.111.111479972(N / A)アクティブ222222try4GBニューヨーク2222.222.222.2221575388(Ubuntu-Init)アクティブ333333nftables4GBニューヨーク2333.333.333.333308287( Debian 7.0 x64)アクティブ4444444snmp4GBニューヨーク2444.444.444.4441575388(Ubuntu-Init)アクティブ5555555ノード4GBニューヨーク2 555.555.555.555 1575388(Ubuntu-Init)アクティブ

削除するドロップレットのIDを取得したら、次のように入力して使用できます。

ナイフdigital_ocean液滴は111111を破壊します

これにより、削除のためにドロップレットがキューに入れられます。

ドロップレットを作成するには、より多くの情報が必要になります。 DigitalOceanコントロールパネルで通常入力する必要のあるフィールドはすべて、このコマンドにパラメーターとして入力する必要があります。

コマンドは次のようになります。

ナイフdigital_oceanドロップレットcreate--server- namename_for_server --image image_id --location region_id --size size_id --ssh-keys ssh_key_ids --bootstrap --run-list“ノード_run_list

たとえば、SSHキー1111を使用してNY2リージョンの1Gドロップレットに「hello」というx86_64 Ubuntu 12.04インスタンスを作成するには、次のように入力します。

ナイフdigital_ocean液滴作成--server-namehello--image 1505447 --location 4 --size 63 --ssh-keys 22222 

オンラインで接続できるように、ChefワークステーションのSSHキーを渡していることを確認してください。

ドロップレットの作成時にブートストラップし、run_listを渡してソフトウェアをインストールおよび構成する場合は、追加のパラメーターを追加できます。 ここで、新しいサーバーをWebサーバーとして構成するように指示できます。

ナイフdigital_oceanドロップレットcreate--server-namehello --image 1505447 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list“ role [web_server]” 

これにより、ノードのrun_listを作成した後に編集した場合と同じように、ロールに固有のすべてのレシピと属性が適用されます。

結論


DigitalOceanナイフプラグインを使用すると、必要に応じて新しいインフラストラクチャリソースを簡単に起動できます。 たとえば、データベースが以前よりも多くのトラフィックを取得している場合、その負荷を管理するために追加のデータベースサーバーを起動するのは簡単です。

インフラストラクチャを管理するのと同じ環境で新しいVPSインスタンスを作成する機能を含めることで、適切に設計されたクックブック、ロール、および属性を使用してインフラストラクチャを簡単にスケールアウトできます。 スケーリングは、方法ではなく、いつの問題になる可能性があります。

ジャスティン・エリングウッド