Help us understand the problem. What is going on with this article?

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も存在しており、
どんな環境でも仮想マシン構築からクラスタ作成までを完全自動化できるような、
ポテンシャルを感じます。

3364git
ap-com
エーピーコミュニケーションズは「エンジニアから時間を奪うものをなくす」ため、ITインフラ自動化のプロフェッショナルとして、クラウドも含めたインフラ自動化技術で顧客の課題を解決すると同時に、SI業務の課題を解決するプロダクト・サービスを提供するNeoSIer(ネオエスアイヤー)です。
https://www.ap-com.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away