著者は、 Write for DOnations プログラムの一環として、寄付を受け取るために CodeOrgを選択しました。

序章

Rancher は、人気のあるオープンソースのコンテナー管理プラットフォームです。 2018年初頭にリリースされたRancher2.Xは、 Kubernetes で動作し、マルチクラスター管理や組み込みのCIパイプラインなどの新しいツールを組み込んでいます。 すでにKubernetesにある強化されたセキュリティ、スケーラビリティ、簡単なデプロイツールに加えて、Rancherはコンテナの管理を容易にするグラフィカルユーザーインターフェイスを提供します。 ユーザーはRancherのGUIを使用して、コマンドラインツールや複雑なYAMLファイルを必要とせずに、シークレットの管理、役割と権限の安全な処理、ノードとポッドのスケーリング、ロードバランサーとボリュームのセットアップを行うことができます。

このチュートリアルでは、Ubuntu18.04でDockerMachineを使用してマルチノードRancher2.1サーバーをデプロイします。 最終的には、Rancher UIを介して新しいDigitalOceanドロップレットとコンテナポッドをプロビジョニングして、ホスティング環境をすばやくスケールアップまたはスケールダウンできるようになります。

前提条件

このチュートリアルを開始する前に、以下に加えて、DigitalOceanアカウントが必要です。

  • このチュートリアルの手順に従って作成できるDigitalOceanパーソナルアクセストークン。 このトークンにより、RancherはDigitalOceanアカウントにAPIアクセスできるようになります。

  • 手順1で作成したドロップレットのIPアドレスを指すAレコードを持つ完全に登録されたドメイン名。 DigitalOceanのドメインとDNSドキュメントを読むことで、ドメインをDigitalOceanドロップレットにポイントする方法を学ぶことができます。 このチュートリアル全体を通して、ドメインをexample.comに置き換えてください。

ステップ1—Dockerがインストールされたドロップレットを作成する

Rancherを起動して構成するには、Dockerがインストールされた新しいDropletを作成する必要があります。 これを実現するために、DigitalOceanのDockerイメージを使用できます。

まず、DigitalOceanアカウントにログインし、ドロップレットの作成を選択します。 次に、 [画像の選択]セクションで、マーケットプレイスタブを選択します。 18.04Docker18.06.1〜ce〜3を選択します。

Choose the Docker 18.06 image from the One-click Apps menu

次に、 2GB 以上のドロップレットを選択し、ドロップレットのデータセンターリージョンを選択します。

最後に、SSHキーを追加し、ドロップレットのホスト名を指定して、作成ボタンを押します。

サーバーがプロビジョニングされ、Dockerがダウンロードされるまでに数分かかります。 Dropletが正常にデプロイされると、新しいDockerコンテナでRancherを起動する準備が整います。

ステップ2—ランチャーの起動と構成

手順1で作成したドロップレットは、DockerコンテナでRancherを実行します。 この手順では、Rancherコンテナを起動し、 Let’s Encrypt SSL証明書があることを確認して、Rancher管理パネルに安全にアクセスできるようにします。 Let’s Encryptは、開発者が90日間のSSL証明書を無料でプロビジョニングできるようにする自動化されたオープンソースの認証局です。

新しいドロップレットにログインします。

  1. ssh [email protected]your_server_ip

Dockerが実行されていることを確認するには、次のように入力します。

  1. docker -v

リストされているDockerのバージョンが期待どおりであることを確認してください。 次のコマンドを実行することにより、Let’sEncrypt証明書がすでにインストールされているでRancherを起動できます。

  1. docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /host/rancher:/var/lib/rancher rancher/rancher --acme-domain example.com

--acme-domainオプションは、Let’s EncryptからSSL証明書をインストールして、Rancher管理者がHTTPS経由で提供されるようにします。 このスクリプトは、ドロップレットにランチャー/ランチャーDockerイメージをフェッチし、コンテナーでランチャーインスタンスを開始するように指示します。このインスタンスは、誤ってダウンした場合に自動的に再起動します。 データが失われた場合の回復を容易にするために、スクリプトは、Rancherデータを含むボリュームをホストマシン(/host/rancher)にマウントします。

実行中のすべてのコンテナーを表示するには、次のように入力します。

  1. docker ps

次のような出力が表示されます(一意のコンテナIDと名前を使用)。

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b2afed0a599 rancher/rancher "entrypoint.sh" 12 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp wizardly_fermat

コンテナが実行されていない場合は、docker runコマンドを再度実行できます。

Rancher管理パネルにアクセスする前に、管理者パスワードとRancherサーバーのURLを設定する必要があります。 ランチャー管理インターフェースを使用すると、実行中のすべてのノード、ポッド、およびシークレットにアクセスできるため、強力なパスワードを使用することが重要です。

Webブラウザで新しいドロップレットを指すドメイン名に移動します。 このアドレスに初めてアクセスすると、Rancherからパスワードを設定できます。

Set your Rancher password using the prompt

ランチャーサーバーのURLを求められたら、ドロップレットで指定されたドメイン名を使用します。

これでRancherサーバーのセットアップが完了し、Rancher管理者のホーム画面が表示されます。

The Rancher admin home screen

これで、Rancherクラスターのセットアップに進む準備ができました。

ステップ3—単一ノードでクラスターを構成する

ランチャーを使用するには、少なくとも1つのノードを持つクラスターを作成する必要があります。 クラスターは、1つ以上のノードのグループです。 このガイドでは、Kubernetesアーキテクチャに関する詳細情報を提供します。 このチュートリアルでは、ノードは、Rancherが管理するドロップレットに対応しています。 ポッドは、ドロップレット内で実行されているDockerコンテナーのグループを表します。 各ノードは多くのポッドを実行できます。 Rancher UIを使用すると、基盤となるKubernetes環境にクラスターとノードをセットアップできます。

この手順を完了すると、最初のポッドを実行する準備ができた単一ノードを持つクラスターがセットアップされます。

ランチャーで、クラスターの追加をクリックし、インフラストラクチャプロバイダーとしてDigitalOceanを選択します。

Select DigitalOcean from the listed infrastructure providers

クラスター名を入力し、ノードプールセクションまでスクロールダウンします。 名前プレフィックスを入力し、カウント 1 のままにして、 etcd コントロールプレーン、およびWorker

  • etcd は、環境全体の状態を維持するためのKubernetesのキーバリューストレージシステムです。 高可用性を維持するには、3つまたは5つのetcdノードを実行して、1つがダウンしても環境を管理できるようにする必要があります。
  • コントロールプレーンは、環境内のすべてのKubernetesオブジェクト(ポッドなど)をチェックし、Rancher管理インターフェースで指定した構成でそれらを最新の状態に保ちます。
  • Workers は、実際のワークロードと監視エージェントを実行して、コンテナーの実行とネットワーク化を維持します。 ワーカーノードは、ポッドがデプロイするソフトウェアを実行する場所です。

Create a Node Pool with a single Node

クラスターを作成する前に、ノードテンプレートの追加をクリックして、新しいノードの特定のオプションを構成します。

アクセストークン入力ボックスにDigitalOceanパーソナルアクセストークンを入力し、次へ:ドロップレットの構成をクリックします。

次に、手順1と同じ領域液滴サイズを選択します。 Image には、 Ubuntu 16.04.5 x64 を選択してください。現在、RancherおよびUbuntu18.04との互換性の問題があります。 Createを押してテンプレートを保存します。

最後に、クラスターの追加ページで作成をクリックして、プロビジョニングプロセスを開始します。 Rancherがこの手順を完了するには数分かかりますが、完了すると、DigitalOceanDropletsダッシュボードに新しいDropletが表示されます。

このステップでは、次のセクションでワークロードをデプロイする新しいクラスターとノードを作成しました。

ステップ4—Webアプリケーションワークロードのデプロイ

新しいクラスターとノードの準備ができたら、最初のポッドワークロードにデプロイできます。 Kubernetes Pod は、Kubernetes、ひいてはRancherで利用できる最小の作業単位です。 ワークロードは、一緒にデプロイするポッドの単一のグループを表します。 たとえば、1つのワークロードでウェブサーバーの複数のポッドを実行して、特定のリクエストで1つのポッドの速度が低下した場合に、他のインスタンスが着信リクエストを処理できるようにすることができます。 このセクションでは、 NginxHelloWorldイメージを単一のポッドにデプロイします。

ヘッダーのGlobalにカーソルを合わせ、Defaultを選択します。 これにより、デフォルトプロジェクトダッシュボードが表示されます。 このチュートリアルでは、単一のプロジェクトのデプロイに焦点を当てますが、このダッシュボードから複数のプロジェクトを作成して、分離されたコンテナーホスティング環境を実現することもできます。

最初のポッドの構成を開始するには、展開をクリックします。

Name を入力し、 DockerImageフィールドにnginxdemos/helloを入力します。 次に、コンテナのポート80をホストノードのポート30000にマップします。 これにより、デプロイするポッドがポート30000の各ノードで使用できるようになります。 ProtocolTCPに設定し、次のドロップダウンをNodePortのままにしておくことができます。

注:すべてのノードのポートでポッドを実行するこの方法は簡単に開始できますが、Rancherには Ingress も含まれており、本番環境で使用するための負荷分散とSSLターミネーションを提供します。

The input form for deploying a Workload

ポッドを起動するには、一番下までスクロールして起動をクリックします。

ランチャーはデフォルトのプロジェクトホームページに戻り、数秒以内にポッドの準備が整います。 ワークロードの名前のすぐ下にあるリンク30000/ tcp をクリックすると、Rancherは実行中のコンテナーの環境に関する情報を含む新しいタブを開きます。

Server address, Server name, and other output from the running NGINX container

このページに表示されるサーバーアドレスとポートは、内部Dockerネットワークのものであり、ブラウザに表示されるパブリックIPアドレスではありません。 これは、Rancherが機能しており、トラフィックをhttp://first_node_ip:30000/からワークロードに期待どおりにルーティングしていることを意味します。

この時点で、1つのポッドの最初のワークロードを1つのRancherノードに正常にデプロイできました。 次に、Rancher環境をスケーリングする方法を説明します。

ステップ5—ノードとポッドのスケーリング

Rancherには、ホスティングリソースをスケーリングする2つの方法があります。ワークロード内のポッドの数を増やすか、クラスター内のノードの数を増やすことです。

ワークロードにポッドを追加すると、アプリケーションで実行中のプロセスが増えます。 これにより、より多くのトラフィックを処理し、ダウンタイムゼロの展開が可能になりますが、各ノードは有限数のポッドしか処理できません。 すべてのノードがポッドの制限に達した後、スケールアップを続行するには、ノードの数を増やす必要があります。

もう1つの考慮事項は、ポッドの増加は通常無料ですが、環境に追加するノードごとに料金を支払う必要があるということです。 このステップでは、ノードとポッドの両方をスケールアップし、Rancherクラスターに別のノードを追加します。

注:チュートリアルのこの部分では、APIを介して新しいDigitalOceanドロップレットを自動的にプロビジョニングするため、2番目のノードの実行中に追加料金が発生することに注意してください。

上部のナビゲーションバーからCluster:your-cluster-name を選択して、Rancherインストールのクラスターホームページに移動します。 次に、上部のナビゲーションバーからノードをクリックします。

Use the top navbar dropdown to select your Cluster

このページは、現在クラスター内に1つの実行中のノードがあることを示しています。 さらにノードを追加するには、クラスターの編集をクリックし、ページ下部のノードプールセクションまでスクロールします。 ノードプールの追加をクリックし、プレフィックスを入力して、ワーカーチェックボックスをオンにします。 保存をクリックしてクラスターを更新します。

Add a Node Pool as a Worker only

2〜5分以内に、Rancherは2番目のドロップレットをプロビジョニングし、クラスターのダッシュボードでノードをActiveとして示します。 この2番目のノードはワーカーのみです。つまり、Rancheretcdまたはコントロールプレーンコンテナーは実行されません。 これにより、ワーカーはワークロードを実行するための容量を増やすことができます。

注: etcdノードの数が不均一であると、常にクォーラム(またはコンセンサス)に到達できるようになります。 etcdノードが1つしかない場合、その1つのノードがダウンすると、クラスターに到達できなくなるリスクがあります。 実稼働環境では、3つまたは5つのetcdノードを実行することをお勧めします。

2番目のノードの準備ができたら、ブラウザでhttp://second_node_ip:30000/に移動すると、このノードで前の手順で展開したワークロードを確認できます。

ノードをスケールアップすると、ワークロードを分散するためのドロップレットが増えますが、ワークロード内で各ポッドのインスタンスをさらに実行することもできます。 ポッドをさらに追加するには、デフォルトプロジェクトページに戻り、hello-worldワークロードの左側にある矢印を押し、+を2回クリックしてポッドをさらに2つ追加します。

Running three Hello World Pods in a Workload

ランチャーは、より多くのポッドを自動的にデプロイし、可用性がある場所に応じて、実行中のコンテナーを各ノードに配布します。

これで、アプリケーションの要件に合わせてノードとポッドをスケーリングできます。

結論

これで、Ubuntu18.04でRancher2.1を使用してマルチノード展開をセットアップし、ワークロード内で2つの実行中のノードと複数のポッドにスケールアップしました。 この戦略を使用して、アプリケーションで実行する必要のあるあらゆる種類のDockerコンテナーをホストおよびスケーリングし、Rancherのダッシュボードとアラートを使用して、各クラスター内のワークロードとノードのパフォーマンスを最大化できます。