DigitalOceanでCoreOSクラスターをセットアップする方法
ステータス:期限切れ
この記事は最新ではありません。 この記事の更新を書くことに興味がある場合は、DigitalOceanが技術チュートリアルを公開したいのをご覧ください。
理由: 2016年12月22日、CoreOSはフリートを維持しなくなったことを発表しました。 CoreOSは、すべてのクラスタリングのニーズにKubernetesを使用することをお勧めします。
代わりに参照してください:フリートなしでCoreOSでKubernetesを使用するガイダンスについては、CoreOSドキュメントのKubernetesを参照してください。
序章
インフラストラクチャでCoreOSを使用することを計画している場合、最初にセットアップする必要があるのはCoreOSクラスターです。 CoreOSマシンがクラスターを形成するには、それらのetcd2
インスタンスが接続されている必要があります。 このチュートリアルでは、DigitalOcean上に3ノードのCoreOSクラスターをすばやく作成するための手順を説明します。
前提条件
CoreOSが構築されているコンポーネント(docker、etcd2、およびフリート)に慣れていない場合は、CoreOSシステムコンポーネントの概要を読むことを強くお勧めします。 etcd2
のコンポーネントはクラスター検出プロセスに不可欠であるため、このセクションには特に注意を払う必要があります。
SSHキー
作成するすべてのCoreOSサーバーには、作成プロセス中に少なくとも1つのSSH公開鍵がインストールされている必要があります。 キーはcore
ユーザーの許可されたキーファイルにインストールされ、CoreOSサーバーにログインするには対応する秘密キーが必要になります。
DigitalOceanアカウントにSSHキーをまだ関連付けていない場合は、このチュートリアルの手順1〜3に従ってください。DigitalOceanドロップレットでSSHキーを使用する方法。 次に、次のコマンドを実行して、クライアントマシンのSSHエージェントに秘密鍵を追加します。
ssh-add
この手順の詳細については、この記事を参照してください。
DigitalOceanパーソナルアクセストークン
DigitalOcean APIを使用してCoreOSマシンを作成することを計画している場合は、書き込み権限を持つパーソナルアクセストークンを生成して使用する方法について、このチュートリアルを参照してください。
前提条件が整ったので、CoreOSクラスターの構築を始めましょう。
新しい検出URLを生成する
新しいCoreOSクラスターをセットアップするための最初のステップは、ピアCoreOSアドレスとメタデータを格納する一意のアドレスである新しい検出URLを生成することです。 これを行う最も簡単な方法は、無料の検出サービスであるhttps://discovery.etcd.io
を使用することです。 新しい検出URLは、Webブラウザで https://discovery.etcd.io/new にアクセスするか、次のcurl
コマンドを実行することで生成できます。
curl -w "\n" "https://discovery.etcd.io/new?size=3"
どちらのメソッドも、次のような新しい一意の検出URLを返します(強調表示された部分は一意のトークンになります)。
https://discovery.etcd.io/5c1574906b3502aa9d8dc43c1b185775
結果の検出URLを使用して、新しいCoreOSクラスターを作成します。 特定のCoreOSクラスターに追加する各サーバーのcloud-configのetcd2
セクションで同じ検出URLを指定する必要があります。
検出URLができたので、それを使用するcloud-config
ファイルを作成する方法を見てみましょう。
Cloud-Configファイルを作成する
CoreOSは、cloud-config
というファイルを使用します。このファイルを使用すると、ネットワーク構成、systemdユニット、およびその他のOSレベルのアイテムを宣言的にカスタマイズできます。 このファイルはYAML形式で記述されており、インデントを使用してデータ階層を示します。 cloud-config
ファイルは、マシンの起動時に処理され、etcd2
設定を使用してマシンを構成し、参加するクラスターを検出できるようにします。
最小限のcloud-config
を記述して、動作するCoreOSクラスターを稼働させる方法について説明します。 cloud-configで構成できるアイテムの完全なリストについては、公式ドキュメントを確認してください。 また、cloud-configファイルの構文 Cloud-ConfigValidatorをチェックできる便利なツールも提供します。
最小限のCloud-Config
前述のように、クラスター内の各CoreOSマシンのピアアドレスは、検出URLとともに保存されます。 したがって、クラスター内の各マシンは同じ検出URLを使用し、etcd2
サービスに到達できる独自のIPアドレスを渡す必要があります。 これらは、etcd2
セクションのcloud-config
で指定されており、以下のコードブロックに示されています。
また、units
セクションを指定する必要があります。これにより、動作中のCoreOSクラスターに必要なetcd2
およびfleet
サービスが開始されます。
CoreOSマシンで使用して新しいクラスターを作成できる基本的なcloud-config
ファイルを次に示します(discovery
の値を以前に生成した検出URLに置き換えます)。
#cloud-config coreos: etcd2: # generate a new token for each unique cluster from https://discovery.etcd.io/new: discovery: https://discovery.etcd.io/<$><discovery_token><$> # multi-region deployments, multi-cloud deployments, and Droplets without # private networking need to use $public_ipv4: advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001 initial-advertise-peer-urls: http://$private_ipv4:2380 # listen on the official ports 2379, 2380 and one legacy port 4001: listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 listen-peer-urls: http://$private_ipv4:2380 fleet: public-ip: $private_ipv4 # used for fleetctl ssh command units: - name: etcd2.service command: start - name: fleet.service command: start
注:#cloud-config
行は必須です。 $private_ipv4
および$public_ipv4
置換変数は、DigitalOceanのcloud-configで完全にサポートされています。これらの変数は、新しいVPSの実際のそれぞれのIPアドレスに置き換えられます。 また、fleetctl ssh
コマンドを使用する予定がない場合は、fleet
セクションは必要ありません。
このcloud-config
スクリプトは、テスト目的で使用できる基本的なCoreOSをセットアップするために使用できます。 残念ながら、それはあまり安全ではありません。 より深刻なセットアップについては、次のチュートリアルに従って安全なCoreOSクラスターをセットアップする必要があります: TLS/SSLおよびファイアウォールルールを使用してCoreOSクラスターを保護する方法。
CoreOSクラスターを作成する
新しいCoreOSクラスター内の各マシンのcloud-config
ファイルが何で構成されるかがわかったので、CoreOSクラスターを作成しましょう。 ドロップレットはDigitalOceanコントロールパネルまたはAPIを介して作成できるため、両方の方法を使用してCoreOSクラスターを作成する方法を示します。
DigitalOceanコントロールパネル
まず、 DigitalOceanコントロールパネルにアクセスし、ドロップレットの作成ボタンをクリックします。
次に、LinuxディストリビューションとしてCoreOSを選択し、使用するチャネル(Stable、Beta、またはAlpha)を選択します。
次に、希望の液滴サイズを選択します。 基本的なテストを行う場合は、サイズを小さくしても問題ありません。
次に、ご希望のデータセンターリージョンを選択します。
追加オプションの選択ヘッダーの下で、プライベートネットワークおよびユーザーデータを選択します。 cloud-config
スクリプトをコピーして[ユーザーデータ]テキストフィールドに貼り付けます。 次のようになります。
次に、ドロップレットへのログインに使用するSSHキーを少なくとも1つ選択します。
Finalize and create セクションで、少なくとも3つのドロップレットを作成し、それらのホスト名を指定します。 この例では、それらを coreos-01 、 coreos-02 、およびcoreos-03と呼びます。
最後に、 Create ボタンをクリックして、CoreOSクラスターを形成するドロップレットを作成します。
DigitalOceanコントロールパネルを使用したドロップレット作成プロセスの詳細については、このガイドを参照してください。
DigitalOcean API
DigitalOcean APIを使用してCoreOSドロップレットを作成する場合は、ドロップレット作成POSTリクエストのuser_data
パラメーターを介してcloud-config
を指定できます。スクリプト全体をそこに貼り付けるだけです。
NYC3で、プライベートネットワークを使用して coreos-01 、 coreos-02 、およびcoreos-03という名前の3つの1GBドロップレットを作成するとします。データセンター、CoreOS Stableチャネルイメージ、および前に示したcloud-config
ファイルを使用します。 DigitalOceanAPIを使用してコマンドを作成するために実行するcurl
コマンドの例を次に示します。
curl -X POST "https://api.digitalocean.com/v2/droplets" \ -d'{"names":["coreos-01","coreos-02","coreos-03"],"region":"nyc3","size":"1GB","private_networking":true,"image":"coreos-stable","user_data": "#cloud-config coreos: etcd2: # generate a new token for each unique cluster from https://discovery.etcd.io/new: discovery: https://discovery.etcd.io/<$><discovery_token><$> # multi-region deployments, multi-cloud deployments, and Droplets without # private networking need to use $public_ipv4: advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001 initial-advertise-peer-urls: http://$private_ipv4:2380 # listen on the official ports 2379, 2380 and one legacy port 4001: listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001 listen-peer-urls: http://$private_ipv4:2380 fleet: public-ip: $private_ipv4 # used for fleetctl ssh command units: - name: etcd2.service command: start - name: fleet.service command: start", "ssh_keys":[ <SSH Key ID(s)> ]}' \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json"
注:これは、通常のマルチドロップレット作成リクエストと同じですが、user_data
パラメーターを介して渡される例cloud-config
が追加されています。
SSHキーIDまたは指紋を<SSH Key ID(s)>
に置き換え、$TOKEN
が読み取り/書き込みDigitalOceanパーソナルアクセストークンの1つに設定されていることを確認する必要があります。
適切な置換を使用してこのコマンドを実行すると、3ノードのCoreOSクラスターが作成されます。
APIの使用方法の詳細については、このチュートリアルを参照してください。
クラスターの確認
3台のマシンのクラスターが正しく形成されたことを確認するには、クラスターメンバーの1つにSSHで接続する必要があります。
SSH経由でcore
ユーザーとしてcoreos-01マシンにログインし、-A
オプションを使用してSSHエージェントを転送します。 パブリックIPアドレスを置き換えることを忘れないでください。
ssh -A core@coreos-01_public_IP
コマンドプロンプトで、次のfleetctl
コマンドを入力して、クラスターのすべてのメンバーを表示します。
fleetctl list-machines
クラスタ内のすべてのオンラインマシンのリストが表示され、それぞれのpeer-addr
IPアドレスで識別できます。 出力の例を次に示します。
MACHINE IP METADATA 59b2fffd... 10.131.29.141 - 853b0df3... 10.131.63.121 - cd64a2e3... 10.131.63.120 -
作成したすべてのマシンを見ると、すべてのマシンがetcd2
を介して相互に認識しており、クラスターが正しく形成されています。
警告:クラスターのセットアップ後、ポート4001へのアクセスをCoreOSクラスター内のマシンに制限するようにIPTablesをセットアップしてください。 これにより、外部の許可されていないユーザーがCoreOSマシンを制御するのを防ぐことができます。 本番環境で使用する場合は、このガイドの手順に従って、TLS/SSL証明書とファイアウォールルールを使用してCoreOSクラスターを保護することを強く検討する必要があります。
新しいマシンの追加
既存のCoreOSクラスターに新しいマシンを追加する場合は、同じcloud-config
(および検出URL)を使用して新しいドロップレットを作成するだけです。 新しいCoreOSマシンは、既存のクラスターに自動的に参加します。
使用した検出URLを忘れた場合は、クラスターのメンバーの1つで検索できます。 既存のマシンの1つで、次のgrep
コマンドを使用します。
grep DISCOVERY /run/systemd/system/etcd2.service.d/20-cloudinit.conf
次のように、元の検出URLを含む行が表示されます。
Environment="ETCD_DISCOVERY=https://discovery.etcd.io/575302f03f4fb2db82e81ea2abca55e9"
結論
基本的なCoreOSクラスターがセットアップされ、これでテストに進むことができます。 安全なCoreOSクラスターのセットアップを検討している場合は、次のチュートリアルに従ってください: TLS/SSLおよびファイアウォールルールを使用してCoreOSクラスターを保護する方法。
このシリーズの残りのチュートリアルでは、CoreOSの詳細と、CoreOSクラスターでDockerコンテナーとサービス検出を使用する方法について説明します。