LoginSignup
6
8

More than 3 years have passed since last update.

Rancherで簡単・本格Kubernetes

Posted at

RancherによるKubernetes環境構築

Rancherはk8sの構築・運用を容易にしてくれるツールです。
image.png
今回は、検証用の簡易なk8s Cluster環境構築が目的なので、Linuxサーバ2台による構成とします。(Rancherサーバ用・Clusterサーバ用)

作業にあたり、事前に全てのサーバにdockerおよびdocker-compose.ymlをインストールしてください。
今回構築に用いた環境は以下の通りです。
・サーバOS:Ubuntu 18.04
・docker:19.03.8
・docker-compose:1.24.0

Rancher起動

  • Rancher自体もdockerコンテナで起動することになります。

docker-compose.ymlファイルを作成し、以下内容を記載します。

docker-compose.yml
version: "3"
services:
  rancher:
    container_name: rancher
    restart: unless-stopped
    image: rancher/rancher
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/rancher/auditlog:/var/log/auditlog
      - /var/rancher/rancher:/var/lib/rancher

上記例では/var/rancherディレクトリにデータ保存用のディレクトリを作成し、それらにコンテナのディレクトリをバインドしています。ボリュームについては必要に応じて設定してください。

docker-compose.ymlを作成したら、コンテナを起動します。

$ docker-compose up -d

起動コマンド実行後、コンテナの動作を確認します。

$ docker ps
CONTAINER ID  IMAGE            COMMAND          CREATED        STATUS        PORTS                                     NAMES
50b7e0da7e98  rancher/rancher  "entrypoint.sh"  3 minutes ago  Up 3 minutes  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp  rancher

問題無く動作しているようでしたら、ブラウザからRancher http://(RancherサーバのIPまたはホスト名) にアクセスします。


image.png
初回接続時は上記のような画面が表示されます。
・adminのパスワード設定
Allow collection of anonymous atatisticsのチェックはOn/Offお好みで
I agree to the Terms and Conditions for using Rancher.にチェック
以上、入力を終えたらContinue押下します。


image.png
続いてRancherサーバのURLを設定する画面になります。IPアドレスまたはホスト名を入力しSave URL押下します。


image.png
これでRancherの利用準備はOKです。
簡単ですね!

Cluster構築

初期構築

では続いてClusterを作成していきます。
右上のAdd Clusterを押下します。


image.png
今回はオンプレのサーバでClusterを構築するので、左上のFrom existing Nodes (Custom)を選択します。


image.png
Cluster Nameに任意のClusterの名称を入力します。


image.png
「Cluster Options」は基本的にデフォルト設定で。
POD間通信に利用するNetwork Providerを変えたい人、コンテナのプライベートレジストリを運用している人などは必要に応じて適宜設定を変更してください。
設定が完了したらNextを押下します。


image.png
①Node Options でサーバに設定する役割を選択し、②コマンド右側にあるCopy to Clipboardボタンを押下します。
(今回は1台のサーバに全ての役割を担ってもらうのでetcd Controle Plane Worker全てをチェックしています。サーバの構成によって、チェックする項目を変更してください。)


Clusterサーバにて、上記でコピーしたコマンドを実行します。

$ sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.4.3 --server https://192.168.0.1 --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --ca-checksum XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --etcd --controlplane --worker

コマンド実行すると、Clusterを構築するためのコンテナのDLや起動が実施されます。
Rancherの先程の画面でDoneを押下したあと、ClusterのステータスがProvisioningになっていることが確認できます。
image.png

数分待つと、ClusterのステータスがActiveになります。これでClusterの構築は完了です。
image.png
Cluster Name(例ではhoge-cluster)をクリックすると・・・
image.png
Clusterの状態が表示されますね!当然ですが生まれたてなのでリソースはほとんど消費していません。
上部メニューでNodesを選択すると・・・
image.png
Clusterを構成するサーバの一覧、および各サーバのステータス、ロールが表示されます。

Clusterへのサーバ追加

Clusterにサーバを追加するときは、上部メニューのClusterを選択し、右上のEditを押下します。
Edit Cluster: hoge-cluster (Custom)画面が表示されるので、最下部までスクロールします。
image.png
初期構築時と同様に、①Node Options でサーバに設定する役割を選択し、②コマンド右側にある「Copy to Clipboard」ボタンを押下します。
その後追加するサーバにてコピーしたコマンドを実行します。
あとは数分待って追加されたノードがActiveになれば、Clusterへのサーバの追加は完了です。

コンテナのデプロイ

Clusterの準備が出来たら、次は実際にサービスを提供するコンテナのデプロイです。

名前空間の作成

まずは名前空間の作成です。既存の「Default」を使ってもいいですが、より厳密にPODを管理したい場合は名前空間を作成しましょう。
RancherのクラスタTOP画面で、Projects/Namespacesを選択します。
image.png

次に右上のAdd Projectボタンを押下します。
image.png

プロジェクト(名前空間)の入力画面が表示されるので、必要事項入力のうえCreateボタンを押下します。
image.png

  • まずは、Project Nameに任意の名称を入力、その他項目はデフォルトでOKです。

これでプロジェクト(名前空間)ができました。上部メニューでクラスタ名→クラスタ名と辿り、今作成したプロジェクト(名前空間)を選択しましょう。
image.png

続いて、上部メニューよりResourcesWorkloadsを選択しましょう。
image.png

当然ですが、POD(コンテナ)が何も無い状態です。
POD(コンテナ)を展開するには、右上のDeployボタンを押下します。
image.png

展開するPOD(コンテナ)の各パラメータを設定します。
image.png

  • Name:任意のPOD(コンテナ)の名前。
  • Docker Image:dockerコンテナイメージ。
  • Namespace:任意の名前空間名称。プロジェクト(名前空間)内でさらに名前空間を作成しサービス同士を隔離することもできます。
  • Port Mapping
    • Port Name:任意のポート名。
    • Publish the container port:公開したいコンテナのポート番号。
    • Protocol:UDP or TCP
    • As a:ここではNodePort(On every node)とします。(Clusterの全Workerノードで待ち受ける。)
    • On listening port:As aでNode Port`を選択したので、「30000」~「327867」の範囲内で任意のポート番号を入力。外部からはこのポート番号で待ち受けることになります。

ほかボリューム等設定項目いろいろありますが、ここでは割愛します。
設定項目の入力を終えたら、下部のLaunchボタンを押下します。
image.png
StateがUpdatingと表示されます。しばらく待つとActiveに変わります。
image.png

これでPOD(コンテナ)の準備は完了です。
ブラウザでhttp://(ClusterサーバのIPまたはホスト名):30001(上記で設定したOn listening portの番号)にアクセスしてみましょう。
image.png

無事サービスが起動していますね。
基本的なPOD(コンテナ)のデプロイ手順は以上になります。GUIの操作のみでコンテナを起動できました。簡単ですね!

Rancher(k8s)監視

Rancherは様々な機能を具備しており、その中には監視機能もあります。
ここでは監視機能を有効化し、Clusterの監視を行えるようにしたいと思います。
まずはクラスタTOP画面で上部メニューよりToolsMonitoringを選択します。
image.png

設定画面が表示されます。入力項目がいろいろありますが、とりあえずデフォルトでOKです。
下部のEnableボタンを押下します。
image.png

上部メニューよりクラスタ画面に戻りましょう。
小さくMonitoring API is not readyと表示されていますね。
image.png

しばらく待つと下のような表示に切り替わります。
image.png
これで監視機能が働き始め、Clusterの各種メトリックを監視できるようになりました。
ちなみに監視には「Prometheus」が、ダッシュボードには「Grafana」が利用されています。
ただし、この状態では不便なところがあるので、設定に少し手を加えます。
メニューよりクラスタ名→クラスタ名と辿り「System」を選択してください。
image.png

「Namespace:cattle-prometheus」となっているところが監視を担うPOD群になります。
image.png
この中で「grafana-cluster-monitoring」の右にあるEditを選択します。
image.png

「grafana primary」のEditボタンを押下します。
image.png

grafanaの設定編集画面が表示されます。
まずはメール通知を有効にしたいので、環境変数に設定を追加していきます。
Environment Variablesの項目を展開表示させAdd Variablesボタンを押下し設定を追加していきます。
image.png
既存の設定に加え、以下設定を追加します。
・GF_SMTP_HOST=メールサーバのIPアドレスおよびポート番号
・GF_SMTP_FROM_NAME=メール送信元の任意の名前
・GF_SMTP_FROM_ADDRESS=メール送信元のアドレス
・GF_SMTP_ENABLED=true
・GF_SMTP_USER=メール送信時認証が必要となる場合のユーザ名
・GF_SMTP_PASSWORD=メール送信時認証が必要となる場合のパスワード

次に、grafanaの設定内容が揮発しないようにしたいので、ボリュームの設定を行います。
Volumesの項目を展開表示させ、まずはgrafana-storageを削除します。
grafana-storageの右にあるRemove Volumeボタンを押下します。

image.png

次に下部Add VolumeBind-mount a directory from the nodeを選択します。
image.png

ボリュームの各設定について入力します。
image.png
・Volume Name:任意のボリューム名
・Path on the Node:データを保存するノード上のディレクトリのパス
・Mount Point:ノード上のディレクトリにマウントするコンテナ内のディレクトリのパス

上記のように、環境変数とボリュームの設定を入力し終えたら、下部のSaveボタンを押下します。
しばらく待ってgrafana-cluster-monitoringのStateがActiveになったら準備完了です。
image.png

ClusterのTOP画面に戻りましょう。
所々に image.pngマークが表示されているのが分かります。
image.png
どこでもいいのでマークをクリックしてみましょう。
grafanaのダッシュボードが表示されましたね。
いろいろ見てみる前に、まずはgrafanaにログインしましょう。左下Sign inを選択します。
image.png
ユーザ名はadmin、初期パスワードもadminです。
image.png
ログインするとパスワード変更を求められます。任意のパスワードに変更しましょう。
image.png
晴れてログイン完了です。左のメニューアイコンが多く並んでいます。
また、ダッシュボードもデフォルトでいくつか作成されています。
これらを表示することでクラスタの様々なメトリックを確認できます。
image.png
grafanaの詳細な利用方法についての説明は割愛します。別サイト等を参照ください。
情報を参照するのみであればこのままでも構いませんが、通知を実施する場合にはデフォルト設定だとうまくいきません。
通知を実施する場合は、以下手順によりデータソースを作成してそれを用いるようにしてください。

まず左メニューよりData Sourcesを選択します。
image.png

デフォルトでRANCHER_MONITORINGというPrometheusのデータソースが存在します。
このデータソースを使って各種メトリック監視設定をすると、通知の際エラーとなってしまいます。
そこで新たなデータソースを作成します。
右のAdd data sourceボタンを押下し、続けてPrometheusを選択します。

Prometheusデータソースの設定画面が表示されますので必要事項を入力します。
image.png
・Name:任意のデータソース名
・Default:デフォルトのデータソースにする場合は有効にします(任意)
・URL:http://access-prometheus
・HTTP Method:GET
上記を入力したらSave & Testボタンを押下してください。
image.png
上のようにData source is workingの表示が出れば完了です。
通知を行う際は、ここで作成したデータソースを利用するようにしてください。

Rancher運用してみて

上記例は2台のサーバによる最小構成ですが、MasterノードおよびWorkerノードをそれぞれ複数台で構成すれば、それなりの規模のサービスの稼働にも耐えられますし、可用性の極めて高いシステムを稼働させることができます。その場合、Rancherサーバがシングル構成のままですが、Rancherが落ちても、ClusterやCluster上にあるPOD(コンテナ)は稼働し続けるためサービスは止まりませんし、オートヒーリングなどのk8sの機能も維持されます。上記例のようにRancherのデータをホスト上のディレクトリに外出ししておけば、再度docker-compose up -dするとRancherも元通り!なので、今のところ個人的にはRancherの冗長化まではあまり必要性を感じていません。(簡単な冗長化の手段が思い付かないだけですが・・・)
監視機能もついていますし新しいバージョンではIstioも付いてきます。
またここでの例では英語表示でしたが、日本語表示も可能です。
kubernetesの敷居をかなり低くしてくれるとても優れた仕組みだと感じます。
みなさんも是非利用してみてはいかがでしょうか。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8