前書き

インフラストラクチャでCoreOSの使用を計画している場合、最初にセットアップするのはCoreOSクラスターです。 CoreOSマシンがクラスターを形成するには、それらの `+ etcd2 +`インスタンスが接続されている必要があります。 このチュートリアルでは、DigitalOceanで3ノードのCoreOSクラスターをすばやく作成するための手順を説明します。

前提条件

CoreOSが構築されているコンポーネント(docker、etcd2、および艦隊)に慣れていない場合は、https://www.digitalocean.com/community/tutorials/an-introduction-to-coreos-systemを読むことを強くお勧めします。 -components [CoreOSシステムコンポーネントの概要]。 `+ etcd2 +`をカバーするセクションには特に注意を払う必要があります。そのコンポーネントはクラスター検出プロセスに不可欠だからです。

SSHキー

作成するすべてのCoreOSサーバーには、作成プロセス中に少なくとも1つのSSH公開キーがインストールされている必要があります。 キーは「+ core」ユーザー認証キーファイルにインストールされます。CoreOSサーバーにログインするには、対応するプライベートキーが必要です。

DigitalOceanアカウントに関連付けられたSSHキーをまだお持ちでない場合は、このチュートリアルのステップ1〜3に従って今すぐ行ってください:https://www.digitalocean.com/community/tutorials/how-to-use-ssh- keys-with-digitalocean-droplets [DigitalOcean DropletsでSSHキーを使用する方法]。 次に、次のコマンドを実行して、プライベートキーをクライアントマシンのSSHエージェントに追加します。

ssh-add

この手順の詳細については、https://www.digitalocean.com/community/tutorials/how-to-connect-to-your-Droplet-with-ssh#ssh-login-as-root [この記事]を参照してください。

DigitalOceanパーソナルアクセストークン

DigitalOcean APIを使用してCoreOSマシンを作成する計画がある場合は、https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2#how-to-generateを参照してください。 -a-personal-access-token [このチュートリアル]では、書き込み権限を持つパーソナルアクセストークンを生成および使用する方法について説明しています。

前提条件が整ったので、CoreOSクラスターの構築を始めましょう!

新しいディスカバリーURLを生成する

新しいCoreOSクラスターをセットアップする最初のステップは、新しい発見URLを生成することです。これは、ピアCoreOSアドレスとメタデータを格納する一意のアドレスです。 これを行う最も簡単な方法は、無料のディスカバリサービスである `+ https:// discovery.etcd.io `を使用することです。 Webブラウザでhttps://discovery.etcd.io/newにアクセスするか、次の「 curl +」コマンドを実行して、新しい検出URLを生成できます。

curl -w "\n" "https://discovery.etcd.io/new?size=3"

いずれの方法でも、次のような新しい一意の検出URLが返されます(強調表示された部分は一意のトークンになります)。

https://discovery.etcd.io/

結果のディスカバリー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で設定できるアイテムの完全なリストについては、https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/ [公式ドキュメント]をご覧ください。 また、クラウド構成ファイルの構文をチェックできる便利なツールhttps://coreos.com/validate/[Cloud-Config Validator]も提供します。

最小限のクラウド構成

前述のように、クラスター内の各CoreOSマシンのピアアドレスは、ディスカバリーURLとともに保存されます。 したがって、クラスター内の各マシンは同じディスカバリーURLを使用し、 `+ etcd2 `サービスに到達できる独自のIPアドレスを渡す必要があります。 これらは、「 etcd2 」セクションの下の「 cloud-config +」で指定され、以下のコードブロックに示されています。

また、 `+ units `セクションを指定する必要があります。これは、動作中のCoreOSクラスターに必要な ` etcd2 `および ` fleet +`サービスを開始します。

CoreOSマシンで新しいクラスターを作成するために使用できる基本的な `+ cloud-config `ファイルです(以前に生成したディスカバリーURLで ` discovery +`の値を置き換えます)。

#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 +`スクリプトを使用して、テスト目的で使用できる基本的なCoreOSをセットアップできます。残念ながら、あまり安全ではありません。 より深刻なセットアップを行うには、次のチュートリアルに従って安全なCoreOSクラスターをセットアップする必要があります。https://www.digitalocean.com/community/tutorials/how-to-secure-your-coreos-cluster-with-tls-ssl -and-firewall-rules [TLS / SSLおよびファイアウォールルールでCoreOSクラスターを保護する方法]。

CoreOSクラスターを作成する

新しいCoreOSクラスター内の各マシンの「+ cloud-config」ファイルの構成がわかったので、CoreOSクラスターを作成しましょう。 ドロップレットはDigitalOceanコントロールパネルまたはAPIを介して作成できるため、両方の方法を使用してCoreOSクラスターを作成する方法を示します。

DigitalOceanコントロールパネル

まず、https://cloud.digitalocean.com/ [DigitalOcean Control Panel]にアクセスし、[* Create Droplet *]ボタンをクリックします。

次に、LinuxディストリビューションとしてCoreOSを選択し、使用するチャネル(安定版、ベータ版、またはアルファ版)を選択します。

次に、目的のドロップレットサイズを選択します。 基本的なテストを行う場合は、サイズを小さくしても問題ありません。

次に、希望するデータセンター地域を選択します。

[追加オプションの選択]ヘッダーの下で、[プライベートネットワーク]および[ユーザーデータ]を選択します。 `+ cloud-config +`スクリプトをコピーして、[ユーザーデータ]テキストフィールドに貼り付けます。 これは次のようになります。

image:https://assets.digitalocean.com/site/ControlPanel/cp-userdata.png [ユーザーデータ]

次に、Dropletsへのログインに使用するSSHキーを少なくとも1つ選択します。

  • Finalize and create セクションで、 少なくともthree ドロップレットを作成し、ホスト名を指定します。 この例では、それらを coreos-01 coreos-02 、および coreos-03 *と呼びます。

image:https://assets.digitalocean.com/site/ControlPanel/cp-coreos-multi-create.png [3つのドロップレットを作成]

最後に、[作成]ボタンをクリックして、CoreOSクラスターを形成するドロップレットを作成します。

DigitalOceanコントロールパネルを使用したドロップレット作成プロセスの詳細については、https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet-virtual-server [thisガイド]。

DigitalOcean API

DigitalOcean APIを使用してCoreOS Dropletsを作成する場合、Droplet作成POSTリクエストの `+ user_data `パラメーターで ` cloud-config +`を指定できます。スクリプト全体をそこに貼り付けてください。

CoreOS Stableチャネルイメージを使用して、NYC3データセンターで、プライベートネットワーキングを使用して、* coreos-01 coreos-02 、および coreos-03 *という名前の3つの1 GBドロップレットを作成すると仮定します。前に示した `+ cloud-config `ファイル。 DigitalOcean APIを使用して作成するために実行する ` 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":[  ]}' \
     -H "Authorization: Bearer $TOKEN" \
     -H "Content-Type: application/json"

`+ <SSH Key ID(s)> `をSSHキーIDまたは指紋に置き換え、 ` $ TOKEN +`が読み取り/書き込みDigitalOcean Personal Access Tokenの1つに設定されていることを確認する必要があります。 。

適切な置換を使用してこのコマンドを実行すると、3ノードのCoreOSクラスターが作成されます。

APIの使用の詳細については、https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2 [このチュートリアル]を参照してください。

クラスターの検証

3台のマシンのクラスターが適切に形成されたことを確認するには、クラスターメンバーの1つにSSHで接続する必要があります。

SSH経由で `+ core `ユーザーとして* coreos-01 *マシンにログインし、 ` -A +`オプションを使用してSSHエージェントを転送します。 パブリック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 +」を介して相互に認識しており、クラスターは適切に形成されています!

新しいマシンの追加

既存のCoreOSクラスターに新しいマシンを追加する場合は、同じ + cloud-config +(および検出URL)を使用して新しいDropletを作成するだけです。 新しいCoreOSマシンが既存のクラスターに自動的に参加します。

使用したディスカバリーURLを忘れた場合は、クラスターのメンバーの1つで検索できます。 既存のマシンのいずれかで次の `+ grep +`コマンドを使用します。

grep DISCOVERY /run/systemd/system/etcd2.service.d/20-cloudinit.conf

次のような元の検出URLを含む行が表示されます。

Environment="ETCD_DISCOVERY="

結論

基本的なCoreOSクラスターがセットアップされ、これでテストに進むことができます! 安全なCoreOSクラスターをセットアップする場合は、このチュートリアルに従ってください:https://www.digitalocean.com/community/tutorials/how-to-secure-your-coreos-cluster-with-tls-ssl-and- firewall-rules [TLS / SSLおよびファイアウォールルールでCoreOSクラスターを保護する方法]。

このシリーズの残りのチュートリアルでは、CoreOSの詳細、およびCoreOSクラスターでdockerコンテナーとサービス検出を使用する方法について説明します。