Ubuntu 18.04でRancher 2.1、Kubernetes、Docker Machineを使用してマルチノード展開をセットアップする方法

_著者はhttps://www.brightfunds.org/organizations/code-org[Code Org]を選択して、https://do.co/w4do-cta [Write for DOnations]プログラムの一環として寄付を受け取りました。

前書き

Rancherは、人気のあるオープンソースのコンテナ管理プラットフォームです。 2018年初頭にリリースされたRancher 2.Xはhttps://kubernetes.io/[Kubernetes]で動作し、マルチクラスター管理や組み込みCIパイプラインなどの新しいツールを組み込みました。 既にKubernetesにある強化されたセキュリティ、スケーラビリティ、および簡単な展開ツールに加えて、Rancherはコンテナの管理を容易にするグラフィカルユーザーインターフェイスを提供します。 RancherのGUIを介して、ユーザーはコマンドラインツールや複雑なYAMLファイルを必要とせずに、シークレットを管理し、ロールとパーミッションを安全に処理し、ノードとポッドをスケールし、ロードバランサーとボリュームを設定できます。

このチュートリアルでは、Ubuntu 18.04でDocker Machineを使用してマルチノードRancher 2.1サーバーをデプロイします。 最後に、Rancher UIを介して新しいDigitalOcean Dropletsとコンテナポッドをプロビジョニングし、ホスティング環境をすばやく拡大または縮小できます。

前提条件

このチュートリアルを開始する前に、以下に加えて、https://cloud.digitalocean.com/registrations/new [DigitalOceanアカウントが必要です]

  • DigitalOceanパーソナルアクセストークン。https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2#how-to-generate-a-の指示に従って作成できます。 personal-access-token [このチュートリアル]。 このトークンにより、RancherはDigitalOceanアカウントにAPIアクセスできます。

  • 手順1で作成したドロップレットのIPアドレスを指すAレコードを持つ完全に登録されたドメイン名。 DigitalOceanのhttps://www.digitalocean.com/docs/networking/dns/[Domains and DNS documentation]を読むと、ドメインをDigitalOcean Dropletsにポイントする方法を学習できます。 このチュートリアル全体を通して、ドメインを「++」に置き換えます。

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

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

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

image:https://assets.digitalocean.com/articles/multirancher_1804/step1a.png [ワンクリックアプリメニューからDocker 18.06画像を選択]

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

最後に、SSHキーを追加し、Dropletのホスト名を指定して、* Create *ボタンを押します。

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

ステップ2-Rancherの起動と設定

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

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

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

docker -v

リストされたDockerバージョンが期待どおりであることを確認してください。 https://rancher.com/docs/rancher/v2.x/en/installation/single-node/#2-choose-an-ssl-option-and-install-rancher [証明書を暗号化しましょう]でRancherを起動できます次のコマンドを実行することにより]

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

+-acme-domain +`オプションは、Let’s EncryptからSSL証明書をインストールして、Rancher管理者がHTTPS経由で提供されるようにします。 また、このスクリプトは、Dropletにhttps://hub.docker.com/r/rancher/rancher/ [+ rancher / rancher ` Docker image]をフェッチし、コンテナー内でRancherインスタンスを開始するよう指示します。誤ってダウンします。 データが失われた場合の回復を容易にするために、スクリプトはRancherデータを含むホストマシン上のボリュームを( ` / host / rancher +`に)マウントします。

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

docker ps

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

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

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

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

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

image:https://assets.digitalocean.com/articles/multirancher_1804/step3a.png [プロンプトを使用してRancherパスワードを設定]

  • RancherサーバーのURL *を求められたら、ドロップレットでポイントされているドメイン名を使用します。

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

image:https://assets.digitalocean.com/articles/multirancher_1804/step3b.png [Rancher管理者のホーム画面]

Rancherクラスタのセットアップを続行する準備が整いました。

手順3-単一ノードを使用したクラスターの構成

Rancherを使用するには、少なくとも1つの_node_で_cluster_を作成する必要があります。 クラスターは、1つ以上のノードのグループです。 https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes [このガイド]は、Kubernetesアーキテクチャに関する詳細情報を提供します。 このチュートリアルでは、ノードはRancherが管理するドロップレットに対応しています。 _Pods_は、Droplet内で実行中のDockerコンテナーのグループを表します。 各ノードは多くのポッドを実行できます。 Rancher UIを使用して、基盤となるKubernetes環境にクラスターとノードをセットアップできます。

このステップの終わりまでに、最初のポッドを実行する準備ができている単一ノードでクラスターをセットアップします。

Rancherで、* Add Cluster をクリックして、 Infrastructure provider として DigitalOcean *を選択します。

image:https://assets.digitalocean.com/articles/multirancher_1804/step4a.png [リストされているインフラストラクチャプロバイダーからDigitalOceanを選択]

クラスタ名*を入力し、*ノードプール*セクションまでスクロールダウンします。 *名前の接頭辞*を入力し、 Count 1 のままにして、 etcd Control Plane 、および Worker *を確認します。

  • * https://kubernetes.io/docs/concepts/overview/components/#etcd [etcd] *は、環境全体の状態を維持するためのKubernetesのキーバリューストレージシステムです。 高可用性を維持するには、3つまたは5つのetcdノードを実行して、1つがダウンしても環境を管理できるようにする必要があります。

  • * https://kubernetes.io/docs/concepts/#kubernetes-control-plane [Control Plane] *環境内のすべてのKubernetesオブジェクト(ポッドなど)を確認し、指定した構成で最新の状態に保ちますRancherの管理インターフェースで。

  • * https://kubernetes.io/docs/concepts/architecture/nodes/ [Workers] *実際のワークロードと監視エージェントを実行して、コンテナの実行とネットワークを維持します。 ワーカーノードは、ポッドが展開するソフトウェアを実行する場所です。

image:https://assets.digitalocean.com/articles/multirancher_1804/step4b.png [単一ノードでノードプールを作成]

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

  • Access Token 入力ボックスにDigitalOcean Personal Access Tokenを入力し、 Next:Configure Droplet *をクリックします。

次に、ステップ1と同じ* Region および Droplet Size を選択します。 *画像*の場合は、現在https://github.com/rancher/rancher/issues/13888[RancherとUbuntu 18.04との互換性の問題]があるため、必ず Ubuntu 16.04.5 x64 *を選択してください。 [作成]をクリックして、テンプレートを保存します。

最後に、[クラスタの追加]ページで[作成]をクリックして、プロビジョニングプロセスを開始します。 Rancherがこのステップを完了するには数分かかりますが、完了するとhttps://cloud.digitalocean.com/droplets[DigitalOcean Dropletsダッシュボード]に新しいドロップレットが表示されます。

この手順では、次のセクションでワークロードを展開する新しいクラスターとノードを作成しました。

手順4-Webアプリケーションワークロードの展開

新しいクラスターとノードの準備ができたら、最初の_pod_を_workload_にデプロイできます。 Kubernetes Podは、Kubernetesと拡張機能Rancherが使用できる最小の作業単位です。 ワークロードは、一緒に展開するポッドの単一グループを表します。 たとえば、Webサーバーの複数のポッドを単一のワークロードで実行して、特定の要求で1つのポッドが遅くなった場合に、他のインスタンスが着信要求を処理できるようにすることができます。 このセクションでは、https://hub.docker.com/r/nginxdemos/hello/ [Nginx Hello World image]を単一のポッドにデプロイします。

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

最初のポッドの構成を開始するには、*デプロイ*をクリックします。

名前*を入力し、 Docker Image フィールドに `+ nginxdemos / hello +`を入力します。 次に、コンテナのポート 80 をホストノードのポート 30000 にマップします。 これにより、展開するポッドがポート30000の各ノードで使用可能になります。 * Protocol *を TCP に、次のドロップダウンを NodePort *に設定したままにすることができます。

image:https://assets.digitalocean.com/articles/multirancher_1804/step5b.png [ワークロードをデプロイするための入力フォーム]

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

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

image:https://assets.digitalocean.com/articles/multirancher_1804/step5c.png [サーバーアドレス、サーバー名、および実行中のNGINXコンテナーからのその他の出力]

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

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

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

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

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

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

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

image:https://assets.digitalocean.com/articles/multirancher_1804/step6a.png [上部のナビゲーションバーのドロップダウンを使用してクラスターを選択]

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

image:https://assets.digitalocean.com/articles/multirancher_1804/step6b.png [ノードプールをワーカーとしてのみ追加]

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

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

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

image:https://assets.digitalocean.com/articles/multirancher_1804/step6c.png [ワークロードで3つのHello Worldポッドを実行]

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

アプリケーションの要件に合わせてノードとポッドをスケーリングできるようになりました。

結論

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

前の投稿:DOMツリーとノードについて
次の投稿:Ubuntu 14.04のShipyardでWordpressを展開する方法