はじめに
Rancher2.0が出たので、試してみた。
実際やってみて、超高速で環境が立ち上がって、
俺の中で激震が走ったので、書きたくなった。
※今回はEC2で作ってみたけど、
別にEKSだとかに頼っていないので、
リージョンや、クラウドサービス、仮想マシンか物理マシンかどうかには、
影響を受けないやり方です。
Rancherってなに?
k8sをまとめて管理することができるソフト。
ついでに手動構築すると 面倒くさいk8sのインストールを自動化 してくれる。
手順
ここからインストール手順に入ります。
参考にしたとこ:https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/
今回は、こんな構成で作ります。
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
※rancher,kubernetesはすべてコンテナで実行されるため、
すべてのサーバーにDockerが入る。
rancherをインストール
sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
rancherへログイン
https://${作ったサーバのIP}
※PWは適当に。
ログイン時のサイトのURLを設定するように求められるが、
このURLはクラスタ構築時に、各サーバから接続するURLとして利用されます。
※今回、私は、AWSのEC2で作りました。
管理画面へのアクセスはパブリックIPで行い、
rancher-各サーバ間の通信はプライベートIPで行っています。
クラスタを作る
カスタムを選択してクラスタを作成。
Nextをクリックして次へ。
まずはマスターを3台つくります。
controlとetcdにチェック。
コマンドが表示されるので、コピペ
各サーバでコマンドを実行する。
多分、こんなコマンドになっている。
※サンプルなので、そのまま実行しないでください。
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]をクリック。
今、コントロールプレーンがインストールされ、この画像の状態になっているはず。
マスターできあがり
ノードの追加
コマンドが表示されるので、コピペ
各サーバでコマンドを実行する。
多分、こんなコマンドになっている。
※サンプルなので、そのまま実行しないでください。
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
今、ワーカーがインストールされ、この画像の状態になっているはず。
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も存在しており、
どんな環境でも仮想マシン構築からクラスタ作成までを完全自動化できるような、
ポテンシャルを感じます。