Rancher v2をVagrant+Virtualbox上で実行しよう #rancher #kubernetes #k8s
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
2018年5月にリリースされたRancher 2.0は、「Kubernetes Everywhere」というキャッチフレーズを掲げ、以前のバージョン1.xでのDockerコンテナプラットフォームからの転換を図りました。
本記事では、2020年1月現在最新のRancher 2.2系であるRancher v2.2.10をVagrantを使ってVirtualBox上で実行し、Dockerトレーニングで利用しているサンプルアプリケーションDockerCoinsをデプロイしてみた過程を紹介します。
なお、2020年1月現在、Rancher 2.3系も並行してリリースされており、Rancher 2.4系も開発中となっています。
構成
今回は次の構成で、シングルノードインストールを実施しました。
- ホスト側
- Debian 10
- Vagrant 2.2.6
- VirtualBox 6.1.2
- kubectl 1.7.1
- ゲスト側
- CentOS 7
- Docker CE 19.03.5
- Rancher 2.2.10
- メモリ4GBずつ割り当て
ゲストOSは3台用意します。
下準備
ゲストOSに次のIPアドレスとホスト名を割り振り、関係するマシンすべての /etc/hosts に記述します。
192.168.33.100 rancher-0 192.168.33.101 rancher-1 192.168.33.102 rancher-2
詳しくは後述しますが、それぞれの役割は次の通りです。
- rancher-0 : Rancherサーバ
- rancher-1 : Rancherエージェント(Kubernetesマスターノード)
- rancher-2 : Rancherエージェント(Kubernetesワーカーノード)
さらに、Docker CEをインストールしておきます。
Rancherサーバのインストール
rancher-0にログインし、次のコマンドを実行してRancherサーバをインストールします。
docker run -d --name rancher \ --restart=unless-stopped \ -p 80:80 -p 443:443 \ rancher/rancher:v2.2.10
次のコマンドでインストール・初期化の状況が確認できますので、興味があればご覧ください。
docker container logs -f rancher
しばらく待つと初期化が完了しますので、ウェブブラウザから rancher-0 のホスト名もしくはIPアドレスを開きます。
まず最初に管理者ユーザ admin のパスワードを決定します。自分で決めることもできますし、ランダム生成することも可能です。ここでは自分で決めて先に進みました。
パスワードを決定すると、RancherサーバのURLの確認を求められます。
プライベートIPアドレスだと警告が出ていますが、実際にプライベートIPアドレスなのでこのまま続行します。
パスワードの決定とURLの確認が完了すると、Rancherサーバが管理しているKubernetesクラスタの一覧を表示する画面になります。現時点ではもちろん1つも管理しておらず空になっています。Rancher v2.2.10の時点で管理できるKubernetesは次の通りです:
前述の通り、本記事では既存のノード(ここでは rancher-1 と rancher-2)でRancherのインストーラを使って新規にKubernetesクラスタを作成し、それを管理対象とします。
Rancherのインストーラを使ってKubernetesクラスタを準備
先のRancherサーバが管理しているKubernetesクラスタの一覧画面で、「Add Cluster」ボタンを押します。
入力欄が出てくるので、それに従ってクラスタ名を入力したくなりますが、一旦その手を止めて、画面を上にスクロールしてください。
デフォルトではGKEを想定しており、入力欄もGKEのものとなっていました。ここでは新規にKubernetesクラスタを作成するので、右下の薄くなっている「Custom」ボタンをクリックします。
画面を下にスクロールして改めて入力欄を見てみましょう。これから新規作成するKubernetesクラスタの設定をする内容に変わっています。
ここでは「Cluster Name」に例にある通りに「sandbox」と入力します。
Rancher v2.2.10では、インストールするKubernetesに1.15.5、1.14.8、1.13.12が選択でき、ネットワークにはCanal、Calico、Flannel、Weave Netが選択できます。ここではデフォルトの 1.15.5 と Canal のままとし、他もデフォルトのまま「Next」ボタンをクリックします。
Kubernetesをインストールするためのコマンドを表示する画面になります。
Kubernetesマスターのインストール
真ん中にある「etcd」「Control Plane」「Worker」の3つのチェックボックスをすべてチェックし、チェックボックスの右下にある「Show advanced options」をクリックします。Vagrantで作成したゲストOSのプライマリネットワークインターフェイスeth0には、すべて同じ10.0.2.15というIPアドレスが振られるため、このままインストールを進めると正常に動作しないクラスタになってしまいます。そこで、この設定にて正しいIPアドレスを設定します。rancher-1にインストールするので、Public AddressとInternal Addressの両方に「192.168.33.101」と入力しましょう。
次のようにインストールコマンドが更新されます。
rancher-1にログインし、更新されたインストールコマンドをコピー&ペーストして実行します。
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.10 --server https://192.168.33.100 --token mrgnj65h4t4jn2h5cppl4gxxvvbjbzl27ms49m4djcvnkn8gz9nhvc --ca-checksum 25300f3d3e6aca070a400d7affa3892e6b24b1f2ebd28aaaf0de30ab59db2223 --address 192.168.33.101 --internal-address 192.168.33.101 --etcd --controlplane --worker
Kubernetesワーカーのインストール
先ほどのチェックボックスの「etcd」「Control Plane」のチェックを外し、「Worker」だけをチェックした状態にします。Kubernetesマスターのときと同様に、IPアドレスを設定します。rancher-2にインストールするので、Public AddressとInternal Addressの両方に「192.168.33.102」と入力しましょう。
先ほどのKubernetesマスターのインストールコマンドと微妙に違っていることに注目しましょう。
rancher-2にログインし、表示されたインストールコマンドをコピー&ペーストして実行します。
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.10 --server https://192.168.33.100 --token mrgnj65h4t4jn2h5cppl4gxxvvbjbzl27ms49m4djcvnkn8gz9nhvc --ca-checksum 25300f3d3e6aca070a400d7affa3892e6b24b1f2ebd28aaaf0de30ab59db2223 --address 192.168.33.102 --internal-address 192.168.33.102 --worker
「Done」ボタンを押し、画面上のメニューバーから「Nodes」を選択します。Kubernetesマスターとワーカーのインストールが完了していれば、両方とも「Active」になっているはずです。
ネットワーク設定
先ほどのインストール時、Vagrantのプライマリネットワークインターフェイスの関係でPublic AddressとInternal Addressを設定しましたが、Rancher v2.2.10ではこの設定がうまく認識されていないようなので、手動でネットワーク設定を変更する必要があります。これを行わないと、Kubernetesマスターとワーカー間の通信がうまく行えません。
まず、画面の上のメニューバーから「Cluster」を選択します。
右上にある「Launch kubectl」ボタンをクリックすると、このクラスタ用のターミナルがブラウザ内に起動するので、そこで kubectl コマンドを実行しましょう。
また、「Launch kubectl」ボタンの隣の「Kubeconfig File」ボタンをクリックするとこのクラスタ用の kubeconfig ファイルが表示されるので、任意のターミナルから kubectl を実行することも可能です。
Canalの場合(今回の設定)
kubectl -n kube-system edit configmaps canal-config を実行し、
canal_iface: ""
を
canal_iface: eth1
に変更して canal daemonset の Pod を削除して、再起動します。
Flannelの場合(参考)
kubectl -n kube-system edit daemonsets kube-flannel を実行し、
- args: - --ip-masq - --kube-subnet-mgr command: - /opt/bin/flanneld
を
- args: - --ip-masq - --kube-subnet-mgr - --iface - eth1 command: - /opt/bin/flanneld
に変更してしばらく待ちます。
サンプルアプリケーションのデプロイ
ターミナルでサンプルアプリケーションDockerCoinsをデプロイしてみましょう。
そして、画面上のメニューから対象のクラスタである「sandbox」と、対象のネームスペースである「Default」を選択すると、今起動したサンプルアプリのPod群が見えるはずです。
「webui」Podのすぐ下にはNodePortのリンクがあるので開いてみましょう。
無事、サンプルアプリのWebUIが閲覧できました。
おわりに
本記事では、Vagrantを使ってVirtualBox上でRancher 2.2.10を実行し、同じVirtualBox上にKubernetesをインストールし、サンプルアプリケーションをデプロイしてみました。
Vagrant上でインストールを行ったため、Flannelのよくある問題についてもあわせて記載しました。Vagrantであれば比較的簡単にRancherやKubernetesを実行することができるので、是非この手軽さを体験してみてください。