DigitalOceanでDeisクラスターを設定する方法
序章
Deisは、独自のサーバーでのアプリケーションの展開と管理を簡素化するオープンソースのプライベートPlatform as a Service(PaaS)です。 DockerやCoreOSなどのテクノロジーを活用することで、Deisは、選択したホスティングプロバイダーで、Herokuと同様のワークフローとスケーリング機能を提供します。 Deisは、Dockerコンテナーで実行できるアプリケーションをサポートし、CoreOSをサポートする任意のプラットフォームで実行できます。
このチュートリアルでは、DigitalOceanで独自の3マシンDeisプラットフォームクラスターをセットアップする方法を示します。
注:このチュートリアルは、Deisのv1.9.0リリースに基づいています。
前提条件
このガイドを完了するには、次のものが必要です。
- 少なくとも4GBのメモリと40GBのディスクスペースを持つ少なくとも3つの液滴を作成する機能。 これらは、DeisプラットフォームがインストールされるCoreOSマシンになります
- ドロップレットに追加するSSHキー。
deisctl
ツールを使用する際の認証に使用されます - Deisのビルダーに対して認証するためのSSHキー
- クラスタマシンを指すドメイン–このチュートリアルでは、ドメインとして
example.com
を使用します。 別の方法は、xipを使用することです。
このチュートリアルは、DigitalOceanでCoreOSクラスターをセットアップする方法に大きく基づいています。 CoreOSクラスターの作成に関連するこのチュートリアルの手順に従うのに問題がある場合は、それを確認してください。
また、 Deis Control Utility 、deisctl
、および Deisクライアント、deis
をローカルのMacOSXコンピューターにインストールしますが、必要に応じて、Ubuntu14.04ドロップレットなどの他の場所にインストールします。 CoreOSドロップレットの作成に使用される公開SSHキーに対応する秘密SSHキーは、deisctl
がインストールされているコンピューターに存在する必要があります。
新しい検出URLを生成する
DeisプラットフォームをインストールするCoreOSクラスターを作成するには、最初に、ピアCoreOSアドレスとメタデータを格納する一意のアドレスである新しい検出URLを生成する必要があります。 これを行う最も簡単な方法は、無料の検出サービスであるhttps://discovery.etcd.io
を使用することです。 Webブラウザでhttps://discovery.etcd.io/new?size=3にアクセスするか、次のcurl
コマンドを実行して、新しい検出URLを指定します。
curl -w "\n" "https://discovery.etcd.io/new?size=3"
どちらのメソッドも、次のような一意の新しい検出URLを返します(強調表示された部分は一意のトークンになります)。
https://discovery.etcd.io/f8d48be35b794da45e249bb149729a27
結果の検出URLを使用して、新しいDeisプラットフォームクラスターを作成します。 特定のDeisプラットフォームクラスターに追加する各CoreOSサーバーのcloud-configのetcd
セクションで同じ検出URLを指定する必要があります。
検出URLができたので、それをcloud-config
に追加して、Deisクラスターの各マシンを作成する方法を見てみましょう。
Deisユーザーデータ
Deisクラスターで使用されるCoreOSマシンのクラスターを作成するには、Deisのメンテナーから提供された特別なcloud-config
ファイルを使用します。 このファイルは、DeisGitHubリポジトリで入手できます。
提供されたユーザーデータをテキストエディタで開き、検出URLが定義されている行を見つけます。 次のようになります。
--discovery #DISCOVERY_URL
コメントを外し、強調表示された#DISCOVERY_URL
を前の手順で生成した一意の検出URLに置き換えます。
このチュートリアルはDeis1.9.0に基づいていますが、サンプルユーザーデータで指定されているバージョンの方が最新である可能性があります。 次の行を探します(強調表示された数字はバージョンを表します)。
ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.9.0'
バージョン番号をメモしてください。 以下の手順でdeisctl
およびdeis
をインストールするときは、必ずユーザーデータのバージョンを使用してください。
必要に応じて、このユーザーデータファイルをどこかに保存できます。
CoreOSドロップレットを作成する
使用するユーザーデータができたので、CoreOSマシンを作成しましょう。 ドロップレットの作成中にユーザーデータを介してcloud-config
ファイルを提供する方法に慣れていない場合は、CoreOSクラスタリングのCloud-Configを提供する方法のセクションを参照してください。チュートリアル。
次の仕様で、同じ領域に少なくとも3つのドロップレットを作成します。
- 少なくとも4GBメモリおよび40GBディスクスペース
- プライベートネットワークが有効になっている場合。 選択した地域でプライベートネットワークを利用できない場合は、ユーザーデータを編集し、
$private_ipv4
が出現するたびに$public_ipv4
に置き換えます。 - ユーザーデータを有効にする前の手順のユーザーデータを入力します
- LinuxディストリビューションとしてCoreOSStableチャネルを選択します
- リストからSSHキーを選択します
docl
コンビニエンスツールを使用してドロップレットをプロビジョニングする場合は、こちらの手順に従ってください。
これらのマシンを少なくとも3台作成すると、Deisプラットフォームをインストールする準備ができたCoreOSクラスターができあがります。 DNSの設定に移りましょう。
DNSを構成する
Deisが正しく機能するには、ワイルドカードDNSレコードが必要です。 使用しているトップレベルドメイン(TLD)がexample.com
の場合、アプリケーションは*.example.com
レベルで存在します。 たとえば、「app」というアプリケーションには、app.example.com
からアクセスできます。
DigitalOceanでこれを構成する1つの方法は、DNSコントロールパネルを介してラウンドロビンDNSを設定することです。 これを行うには、ドメインに次のレコードを追加します。
- トップレベルドメインのワイルドカードCNAMEレコード、つまり 名前が
*
、正規ホスト名が@
のCNAMEレコード - 作成されたCoreOSマシンごとに、TLDを指すAレコード。 ドロップレットのパブリックIPアドレスを持つ
@
という名前のAレコード
これで、ゾーンファイルに次のエントリが含まれるようになります:(IPアドレスは異なります)
DNS Records 1 of 2* CNAME @ @ IN A 104.131.93.162 @ IN A 104.131.47.125 @ IN A 104.131.113.138
この例では、Deisルーター/コントローラーはdeis.example.com
を介して到達可能です。
便宜上、ノードごとにDNSレコードを設定することもできます。
DNS Records 2 of 2deis-1 IN A 104.131.93.162 deis-2 IN A 104.131.47.125 deis-3 IN A 104.131.113.138
DNSコントロールパネルの使用についてサポートが必要な場合は、このチュートリアルを確認してください。
xip.ioを使用する
独自のドメインを設定したくない場合は、xip.io
を使用してワイルドカードDNSを提供できます。 基本的に、これにより、「。xip.io」が付加されたDropletのIPアドレスを、IPアドレスに解決されるワイルドカードドメインとして使用できるようになります。
クラスターにDeisプラットフォームをインストールした後、[email protected]
ユニットをdeisctl list
で実行しているCoreOSマシンを特定します。次のセクションでdeisctl
をインストールします。 次に、そのマシンのパブリックIPアドレスを決定します。 104.131.47.125
の場合は、次のドメインを使用してDeisルーターにアクセスできます。
xip.io exampledeis.104.131.47.125.xip.io
セキュリティグループ設定を適用する
DigitalOceanドロップレットでは、デフォルトでファイアウォールが有効になっていないため、iptables
ルールを追加して、外部からコンポーネントにアクセスできないようにする必要があります。 Deisリポジトリは、まさにそれを実行できるここにあるスクリプトを提供します。
curl -O https://raw.githubusercontent.com/deis/deis/master/contrib/util/custom-firewall.sh
スクリプトの内容を確認した後、各サーバーでスクリプトを実行します。 たとえば、前に作成したDNSエントリを使用して、次のコマンドを実行します。
ssh [email protected] 'bash -s' < custom-firewall.sh ssh [email protected] 'bash -s' < custom-firewall.sh ssh [email protected] 'bash -s' < custom-firewall.sh
必ずすべてのサーバーでスクリプトを実行してください。
DeisToolsをインストールする
CoreOSクラスターがセットアップされたので、DeisControlUtilityとClientをインストールします。 これらのツールは、Deisクラスターを制御するコンピューターにインストールする必要があります。 それらを別のUbuntu14.04ドロップレットにインストールする方法を示しますが、好きな場所にインストールできます。
DeisControlUtilityをインストールします
Deis Control Utilityを使用すると、Deisマシンと対話し、クラスターにDeisプラットフォームをインストールできます。
deisctl
バイナリをインストールするディレクトリに移動します。 次に、次のコマンドを使用してインストールスクリプトをダウンロードして実行し、Deis Control Utilityをインストールします(バージョンをユーザーデータで見つかった番号に置き換えます)。
/bin/bash -c 'curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.9.0'
これにより、deisctl
が現在のディレクトリにインストールされ、Deisユニットファイルが更新されます。
/usr/local/bin
にリンクして、PATH
に表示されるようにします。
sudo ln -fs $(pwd)/deisctl /usr/local/bin/deisctl
これで、deisctl
コマンドを使用できます。
Deisクライアントをインストールします
Deisコマンドラインインターフェイスとも呼ばれるDeisクライアントを使用すると、Deisコントローラーユニットと対話できます。
deis
バイナリをインストールするディレクトリに移動します。 次のコマンドを使用してインストールスクリプトをダウンロードして実行し、Deisクライアントをインストールします(バージョンをユーザーデータで見つかった番号に置き換えます)。
/bin/bash -c 'curl -sSL http://deis.io/deis-cli/install.sh | sh -s 1.9.0'
これにより、現在のディレクトリのクライアントであるdeis
がインストールされます。 /usr/local/bin
にリンクして、PATH
に表示されるようにします。
sudo ln -fs $(pwd)/deis /usr/local/bin/deis
Deisクライアントがインストールされます。 これで、deis
コマンドを使用できます。
Deisプラットフォームのプロビジョニング
Deisツールをインストールしたコンピューターから、Deisプラットフォームをプロビジョニングします。
SSHエージェントが実行されていることを確認します(そして、CoreOSドロップレットに追加されたSSHキーに対応する秘密キーを選択します)。
eval `ssh-agent -s` ssh-add ~/.ssh/id_rsa_deis
次に、DEISCTL_TUNNEL
をエクスポートして、名前またはパブリックIPアドレスでDeisマシンの1つを指すようにする必要があります。 「便利な」DNSレコードを設定する場合は、それらの1つをトンネルに使用できます。 例えば:
export DEISCTL_TUNNEL=deis-1.example.com
これは、deisctl
がクラスターとの通信を試みる場所です。 deisctl list
を実行すると、正しく機能していることをテストできます。 1行の出力が表示される場合、制御ユーティリティは指定されたCoreOSマシンと通信しています。
プラットフォームをプロビジョニングする前に、SSHキーをDeisに追加して、deis run
中にリモートホストに接続できるようにする必要があります。
deisctl config platform set sshPrivateKey=~/.ssh/id_rsa_deis
また、アプリケーションをデプロイしているドメイン名をコントローラーに通知する必要があります。
deisctl config platform set domain=example.com
以前の構成コマンドを実行したら、次のコマンドを使用してDeisプラットフォームをプロビジョニングします。
deisctl install platform
次のような出力が表示されます。これは、Deisの実行に必要なユニットがCoreOSクラスターにロードされていることを示しています。
Install Output:● ▴ ■ ■ ● ▴ Installing Deis... ▴ ■ ● Storage subsystem... deis-store-metadata.service: loaded ... Done. Please run `deisctl start platform` to boot up Deis.
次のコマンドを実行して、Deisプラットフォームを起動します。
deisctl start platform
「Deisstarted。」が表示されたら、Deisプラットフォームはクラスター上で実行されています。
次のコマンドを実行して、すべてのDeisユニットがロードおよびアクティブであることを確認できます。
deisctl list
すべてのユニットがアクティブになっている必要があります。
Deis-store-adminのインストール(オプション)
先に進む前に、deis-store-admin
コンポーネントをインストールすることをお勧めします。 ストレージの問題を診断するときに役立つことがよくあります。
コンポーネントをインストールするには、次のコマンドを実行します。
deisctl install store-admin deisctl start store-admin
クラスタのプロビジョニングが完了したので、Deis管理者ユーザーを登録してプラットフォームの使用を開始します。
Deisユーザーを登録する
Deisプラットフォームが実行されているので、deis
コマンドでユーザーを登録する必要があります。 deis
コマンドは、routerユニットを介してDeisコントローラーと通信します。このユニットはdeis.example.com
でアクセスできます。
deis register http://deis.example.com
ユーザー名、パスワード、およびメールアドレスの入力を求められます。 これらのアイテムを提供すると、Deisプラットフォームに自動的にログインします。
次に、適切なSSHキーをdeis
に追加します。 次のコマンドを入力します。
deis keys:add
使用可能なキーからSSHキーを選択するように求められます。 追加するキーを選択します。
Deisにログインします
後でログインする必要がある場合は、次のコマンドを使用します。
deis login http://deis.example.com
以前に作成したログインの入力を求められます。
サンプルアプリケーションのデプロイ(オプション)
Deisは、アプリケーションを構築する3つの異なる方法をサポートしています。
- Herokuビルドパック
- Dockerfiles
- Dockerイメージ
Heroku Buildpackワークフローを使用して、Deisが提供するexample-ruby-sinatraを使用してアプリケーションをデプロイする方法を示します。
サンプルアプリケーションをダウンロードするディレクトリに移動します。 目的の場所に移動したら、次のコマンドを実行してgitリポジトリのクローンを作成します。
git clone https://github.com/deis/example-ruby-sinatra.git cd example-ruby-sinatra
deis create
コマンドを使用して、Deisコントローラーでアプリケーションを作成できます。 今すぐ実行:
deis create
これにより、アプリケーションが作成され、Deisの自動命名アルゴリズムを使用して名前が付けられます。
deis create output:Creating application... done, created dapper-yachting Git remote deis added
この場合、アプリケーションの名前はdapper-yachting
です。
ここで、アプリケーションをデプロイするには、git push deis master
を使用します。 今やれ:
git push deis master
デプロイするコマンドを実行すると、多くの出力行が表示されます。 完了すると、出力にはアプリケーションがデプロイされたことが示され、自動的に生成された名前とアクセスできる場所が示されます。
git push deis master output:... -----> Launching... done, dapper-yachting:v2 deployed to Deis http://dapper-yachting.example.com To learn more, use `deis help` or visit http://deis.io To ssh://[email protected]:2222/dapper-yachting.git * [new branch] master -> master
この例では、URLはhttp://dapper-yachting.dev.example.com
であり、これはアプリケーション名とクラスター名を組み合わせたものです。
WebブラウザでアプリケーションのURLにアクセスするか、次のcurlコマンド(独自のURLに置き換えてください)を使用して、動作することをテストできます。
curl http://dapper-yachting.dev.example.com
次のような出力が表示されます。
App output:Powered by Deis! Running on container ID a0d35733aad8
サンプルアプリケーションは、実行されている場所のコンテナIDを検索し、それを出力します。 おめでとうございます! Deisプラットフォームが機能します!
結論
Deisのセットアップが機能するようになったので、他の2つのワークフローを使用してDeisアプリケーションをデプロイしてみてください。 dockerfileワークフローはHerokuBuildpackフローに似ており、git push
を使用してデプロイしますが、 dockerimageワークフローはdeis pull
を使用して配備。 また、Deisは、ここで説明したよりもはるかに多くの機能を提供します。詳細については、ドキュメントを確認してください。