Posted at

Rancher2.0を使って超高速にkubernetesクラスタを構築した時のメモ

More than 1 year has passed since last update.


はじめに

Rancher2.0が出たので、試してみた。

実際やってみて、超高速で環境が立ち上がって、

俺の中で激震が走ったので、書きたくなった。

※今回はEC2で作ってみたけど、

 別にEKSだとかに頼っていないので、

 リージョンや、クラウドサービス、仮想マシンか物理マシンかどうかには、

 影響を受けないやり方です。


Rancherってなに?

k8sをまとめて管理することができるソフト。

ついでに手動構築すると 面倒くさいk8sのインストールを自動化 してくれる。


手順

ここからインストール手順に入ります。

参考にしたとこ:https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/


今回は、こんな構成で作ります。

ノードインストール.png

Rancherサーバが一台。

controlplaneが三台

nodeが三台

で作ります。

※ちょっと用語があやしいです。

 masterとcontrolplaneとcontrol、

 nodeとworker。

 kubernetesの考え方とイコールかどうか。。。


まず仮想マシンを立てます。

仮想マシンを起動します。

OSはCentOS7.5にしました。

※公式を見るとRHELがサポートされ、CentOSが書かれていません。

 ま、Dockerのバージョンあってれば大丈夫でしょ。


次に各サーバーにDockerをインストールします。

sudo yum update -y 

sudo yum install docker -y
sudo systemctl enable docker
sudo systemctl start docker

Dockerインストール.png

※rancher,kubernetesはすべてコンテナで実行されるため、

 すべてのサーバーにDockerが入る。


rancherをインストール

sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher

Rancherインストール.png


rancherへログイン

https://${作ったサーバのIP}

※PWは適当に。

初アクセス.png

ログイン時のサイトのURLを設定するように求められるが、

このURLはクラスタ構築時に、各サーバから接続するURLとして利用されます。

※今回、私は、AWSのEC2で作りました。

 管理画面へのアクセスはパブリックIPで行い、

 rancher-各サーバ間の通信はプライベートIPで行っています。


クラスタを作る

Add Clusterをクリック

クラスタ作成.png

カスタムを選択してクラスタを作成。

クラスタ種別の指定.png

クラスタのパラメータ指定.png

Nextをクリックして次へ。

まずはマスターを3台つくります。

controlとetcdにチェック。

コントローラのインストール.png

コマンドが表示されるので、コピペ

各サーバでコマンドを実行する。

多分、こんなコマンドになっている。

※サンプルなので、そのまま実行しないでください。

sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.0.3 --server https://10.0.1.56 --token 8cjzm57csctrsqrmtnch24p6lhk9fbnv5gt94vf6snfvpbv2j2kzg5 --ca-checksum 94f790d48151dacd2d30640466584075fe10a4fdb7c4f686abcff2840ab85c81 --etcd --controlplane

コマンドを叩くと、ノードが登録された旨、画面に出る。

[Done]をクリック。

コントールプレーンインストール.png

今、コントロールプレーンがインストールされ、この画像の状態になっているはず。

マスターできあがり


ノードの追加

クラスタの変更をする

Editをクリック

クラスタの変更.png

ノードを追加する。

workerのみにチェック。

ノードの追加.png

コマンドが表示されるので、コピペ

各サーバでコマンドを実行する。

多分、こんなコマンドになっている。

※サンプルなので、そのまま実行しないでください。

sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.0.3 --server https://10.0.1.56 --token 8cjzm57csctrsqrmtnch24p6lhk9fbnv5gt94vf6snfvpbv2j2kzg5 --ca-checksum 94f790d48151dacd2d30640466584075fe10a4fdb7c4f686abcff2840ab85c81 --worker

ノードインストール.png

今、ワーカーがインストールされ、この画像の状態になっているはず。

nodeできあがり


色々見てみる。

nodeの登録はどうなっているのか。

# Run kubectl commands inside here

# e.g. kubectl get all
>
> kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-1-133 Ready worker 24m v1.10.3
ip-10-0-1-193 Ready controlplane,etcd 35m v1.10.3
ip-10-0-1-197 Ready controlplane,etcd 33m v1.10.3
ip-10-0-1-202 Ready worker 24m v1.10.3
ip-10-0-1-227 Ready controlplane,etcd 33m v1.10.3
ip-10-0-1-65 Ready worker 25m v1.10.3

コントロールプレーン、ワーカーと関係無く、kubeletが動いており、

クラスタにノードとして登録されている。

ロールで役割を分けているのかな?

なんとなくnginxを実行

kubectl run nginx --image=nginx:latest --replicas=3

kubectl expose deployment/nginx --type=NodePort --port=80

portを確認

> kubectl get services

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 58m
nginx NodePort 10.43.154.226 <none> 80:31904/TCP 2m

curlを叩くといい感じに返ってきた。


最後に

今回、わざわざGKEやEKSなどの自動化された方法を使わずに構築しました。

イケているかというと、NOですが、どんな環境にも適用できそうだと実感できます。

RancherにはAPIも存在しており、

どんな環境でも仮想マシン構築からクラスタ作成までを完全自動化できるような、

ポテンシャルを感じます。