Rancherで簡単・本格Kubernetes
RancherによるKubernetes環境構築
Rancherはk8sの構築・運用を容易にしてくれるツールです。
今回は、検証用の簡易な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
ファイルを作成し、以下内容を記載します。
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またはホスト名)
にアクセスします。
初回接続時は上記のような画面が表示されます。
・adminのパスワード設定
・Allow collection of anonymous atatistics
のチェックはOn/Offお好みで
・I agree to the Terms and Conditions for using Rancher.
にチェック
以上、入力を終えたらContinue
押下します。
続いてRancherサーバのURLを設定する画面になります。IPアドレスまたはホスト名を入力しSave URL
押下します。
Cluster構築
初期構築
では続いてClusterを作成していきます。
右上のAdd Cluster
を押下します。
今回はオンプレのサーバでClusterを構築するので、左上のFrom existing Nodes (Custom)
を選択します。
Cluster Name
に任意のClusterの名称を入力します。
「Cluster Options」は基本的にデフォルト設定で。
POD間通信に利用するNetwork Providerを変えたい人、コンテナのプライベートレジストリを運用している人などは必要に応じて適宜設定を変更してください。
設定が完了したらNext
を押下します。
①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
になっていることが確認できます。
数分待つと、ClusterのステータスがActive
になります。これでClusterの構築は完了です。
Cluster Name(例ではhoge-cluster
)をクリックすると・・・
Clusterの状態が表示されますね!当然ですが生まれたてなのでリソースはほとんど消費していません。
上部メニューでNodes
を選択すると・・・
Clusterを構成するサーバの一覧、および各サーバのステータス、ロールが表示されます。
Clusterへのサーバ追加
Clusterにサーバを追加するときは、上部メニューのCluster
を選択し、右上の︙
→Edit
を押下します。
Edit Cluster: hoge-cluster (Custom)
画面が表示されるので、最下部までスクロールします。
初期構築時と同様に、①Node Options でサーバに設定する役割を選択し、②コマンド右側にある「Copy to Clipboard」ボタンを押下します。
その後追加するサーバにてコピーしたコマンドを実行します。
あとは数分待って追加されたノードがActive
になれば、Clusterへのサーバの追加は完了です。
コンテナのデプロイ
Clusterの準備が出来たら、次は実際にサービスを提供するコンテナのデプロイです。
名前空間の作成
まずは名前空間の作成です。既存の「Default」を使ってもいいですが、より厳密にPODを管理したい場合は名前空間を作成しましょう。
RancherのクラスタTOP画面で、Projects/Namespaces
を選択します。
プロジェクト(名前空間)の入力画面が表示されるので、必要事項入力のうえCreate
ボタンを押下します。
- まずは、Project Nameに任意の名称を入力、その他項目はデフォルトでOKです。
これでプロジェクト(名前空間)ができました。上部メニューでクラスタ名→クラスタ名と辿り、今作成したプロジェクト(名前空間)を選択しましょう。
続いて、上部メニューよりResources
→Workloads
を選択しましょう。
当然ですが、POD(コンテナ)が何も無い状態です。
POD(コンテナ)を展開するには、右上のDeploy
ボタンを押下します。
- 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
ボタンを押下します。
StateがUpdating
と表示されます。しばらく待つとActive
に変わります。
これでPOD(コンテナ)の準備は完了です。
ブラウザでhttp://(ClusterサーバのIPまたはホスト名):30001(上記で設定したOn listening portの番号)
にアクセスしてみましょう。
無事サービスが起動していますね。
基本的なPOD(コンテナ)のデプロイ手順は以上になります。GUIの操作のみでコンテナを起動できました。簡単ですね!
Rancher(k8s)監視
Rancherは様々な機能を具備しており、その中には監視機能もあります。
ここでは監視機能を有効化し、Clusterの監視を行えるようにしたいと思います。
まずはクラスタTOP画面で上部メニューよりTools
→Monitoring
を選択します。
設定画面が表示されます。入力項目がいろいろありますが、とりあえずデフォルトでOKです。
下部のEnable
ボタンを押下します。
上部メニューよりクラスタ画面に戻りましょう。
小さくMonitoring API is not ready
と表示されていますね。
しばらく待つと下のような表示に切り替わります。
これで監視機能が働き始め、Clusterの各種メトリックを監視できるようになりました。
ちなみに監視には「Prometheus」が、ダッシュボードには「Grafana」が利用されています。
ただし、この状態では不便なところがあるので、設定に少し手を加えます。
メニューよりクラスタ名→クラスタ名と辿り「System」を選択してください。
「Namespace:cattle-prometheus」となっているところが監視を担うPOD群になります。
この中で「grafana-cluster-monitoring」の右にある︙
→Edit
を選択します。
「grafana primary」のEdit
ボタンを押下します。
grafanaの設定編集画面が表示されます。
まずはメール通知を有効にしたいので、環境変数に設定を追加していきます。
Environment Variables
の項目を展開表示させAdd Variables
ボタンを押下し設定を追加していきます。
既存の設定に加え、以下設定を追加します。
・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
ボタンを押下します。
次に下部Add Volume
→Bind-mount a directory from the node
を選択します。
ボリュームの各設定について入力します。
・Volume Name:任意のボリューム名
・Path on the Node:データを保存するノード上のディレクトリのパス
・Mount Point:ノード上のディレクトリにマウントするコンテナ内のディレクトリのパス
上記のように、環境変数とボリュームの設定を入力し終えたら、下部のSave
ボタンを押下します。
しばらく待ってgrafana-cluster-monitoring
のStateがActive
になったら準備完了です。
ClusterのTOP画面に戻りましょう。
所々に マークが表示されているのが分かります。
どこでもいいのでマークをクリックしてみましょう。
grafanaのダッシュボードが表示されましたね。
いろいろ見てみる前に、まずはgrafanaにログインしましょう。左下Sign in
を選択します。
ユーザ名はadmin
、初期パスワードもadmin
です。
ログインするとパスワード変更を求められます。任意のパスワードに変更しましょう。
晴れてログイン完了です。左のメニューアイコンが多く並んでいます。
また、ダッシュボードもデフォルトでいくつか作成されています。
これらを表示することでクラスタの様々なメトリックを確認できます。
grafanaの詳細な利用方法についての説明は割愛します。別サイト等を参照ください。
情報を参照するのみであればこのままでも構いませんが、通知を実施する場合にはデフォルト設定だとうまくいきません。
通知を実施する場合は、以下手順によりデータソースを作成してそれを用いるようにしてください。
デフォルトでRANCHER_MONITORING
というPrometheusのデータソースが存在します。
このデータソースを使って各種メトリック監視設定をすると、通知の際エラーとなってしまいます。
そこで新たなデータソースを作成します。
右のAdd data source
ボタンを押下し、続けてPrometheus
を選択します。
Prometheusデータソースの設定画面が表示されますので必要事項を入力します。
・Name:任意のデータソース名
・Default:デフォルトのデータソースにする場合は有効にします(任意)
・URL:http://access-prometheus
・HTTP Method:GET
上記を入力したらSave & Test
ボタンを押下してください。
上のようにData source is working
の表示が出れば完了です。
通知を行う際は、ここで作成したデータソースを利用するようにしてください。
Rancher運用してみて
上記例は2台のサーバによる最小構成ですが、MasterノードおよびWorkerノードをそれぞれ複数台で構成すれば、それなりの規模のサービスの稼働にも耐えられますし、可用性の極めて高いシステムを稼働させることができます。その場合、Rancherサーバがシングル構成のままですが、Rancherが落ちても、ClusterやCluster上にあるPOD(コンテナ)は稼働し続けるためサービスは止まりませんし、オートヒーリングなどのk8sの機能も維持されます。上記例のようにRancherのデータをホスト上のディレクトリに外出ししておけば、再度docker-compose up -d
するとRancherも元通り!なので、今のところ個人的にはRancherの冗長化まではあまり必要性を感じていません。(簡単な冗長化の手段が思い付かないだけですが・・・)
監視機能もついていますし新しいバージョンではIstioも付いてきます。
またここでの例では英語表示でしたが、日本語表示も可能です。
kubernetesの敷居をかなり低くしてくれるとても優れた仕組みだと感じます。
みなさんも是非利用してみてはいかがでしょうか。
Author And Source
この問題について(Rancherで簡単・本格Kubernetes), 我々は、より多くの情報をここで見つけました https://qiita.com/ta24toy27/items/d5b04ad64455338179f2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .