DigitalOceanでCoreOSクラスターをセットアップする方法

提供:Dev Guides
移動先:案内検索

ステータス:期限切れ

この記事は最新ではありません。 この記事の更新を書くことに興味がある場合は、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-01coreos-02 、およびcoreos-03と呼びます。

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

DigitalOceanコントロールパネルを使用したドロップレット作成プロセスの詳細については、このガイドを参照してください。

DigitalOcean API

DigitalOcean APIを使用してCoreOSドロップレットを作成する場合は、ドロップレット作成POSTリクエストのuser_dataパラメーターを介してcloud-configを指定できます。スクリプト全体をそこに貼り付けるだけです。

NYC3で、プライベートネットワークを使用して coreos-01coreos-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-addrIPアドレスで識別できます。 出力の例を次に示します。

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コンテナーとサービス検出を使用する方法について説明します。