fbpx

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が選択でき、ネットワークにはCanalCalicoFlannelWeave 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を実行することができるので、是非この手軽さを体験してみてください。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA