Windows 10 (ver 1809) + vagrant 2.2.4 + virtualbox 6.0のCentOS 7上にシングルノード Kubernetes クラスタを建ててみる(Rancher編)

posted in: Vagrant, 仮想化 | 0

第二システム部 第1課の小浜です。

前回の記事 の続きで、今回はRancher(RKE)を使ってシングルノードのKubernetesクラスタをWindows上で作成してみます。

背景解説

  • Dockerコンテナ
    プログラムの走行環境をまるごと一つのDockerイメージにまとめて配布&実行する入れ物です。
    開発言語や開発環境によってはバージョンの組み合わせで動かないケースもあるのですが、
    走行環境をまるごと1パックにまとめて配布&実行することでこの問題を解決します。
    Dockerコンテナを複数種類同時に使う場合でも、互いに干渉しない独立環境となるので
    環境衝突の心配もなく便利に使えます。

  • Kubernetes
    KubernetesはDockerコンテナ実行環境のオーケストレーションツールです。
    管弦楽団のオーケストラを想像してもらうとわかりやすいかもしれません。
    Dockerコンテナが10個以上走行するようになると、人力で管理するのが大変になってきます。
    そこで、コンテナの管理を手助けするツールがKubernetesです。

  • Rancher
    Rancher 社が開発しているコンテナ管理、クラスタ管理の統合ソフトです。
    元々はDockerコンテナを管理するソフトでしたが、Kubernetes対応を進めてRancher 2.0ではKubernetesツールになりました。
    インストールが何かと面倒なKubernetesクラスタを比較的短い手間で建てる機能を持っています。(今回の記事ではこの特徴を使います。)
    Kubernetesクラスタを10個以上管理することになると、色々大変なことになるので、複数のKubernetesクラスタを統合管理するソフトとしての性格も持っています。
    VMWare上、Amazon 上、Google Cloud 上にKubernetesクラスタを建てる機能もあります。
    (ただし、RancherがKubernetes Master Nodeになって管理する前提なので、Amazon EKSなどのKubernetesクラスタは管理できません。)

参考文献

前提とする構成

  • Windows 10 Pro version 1809 Hyper-VはOFFである必要があります。
  • Vagrant 2.2.4
  • VirtualBox バージョン 6.0.6 r130049
  • Windows機のメモリは8GB以上を想定しています。

作成する構成

  • Docker version 18.09.0
  • Kubernetes version 1.13.4
  • VirtualBoxで作成する仮想マシンのうち、一つ目のネットワークアダプタは通常のNAT型とし、2つ目のネットワークアダプタをホストオンリー型に設定して、ホストPCからIPアドレス192.168.33.11を宛先とすると仮想マシンに通信可能なように構成します。(NATのみだと、仮想マシン内部に建てたサービスにアクセスするためにポートフォワード設定が必要になるため)

セットアップ準備

chocolateyによる各種ツールのインストール

Windowsにvagrantをインストールするため、chocolateyを使用します。

chocolateyはWindows向けのパッケージマネージャーです。
Mac OS Xで言うところのHomebrewのようなもので、Microsoft公式提供ではありませんが、色々なソフトウェアをコマンドラインからインストールすることができます。

chocolateyのインストールを行います。管理者権限で起動したWindows PowerShellから以下を入力します。

次に、Chocolateyを使ってツールをインストールしていきます。

  • VirtualBox
    VirtualBoxはOracle提供のOS仮想化アプリケーションです。
    WindowsのHyper-Vはハイパーバイザー型であり、ホストOSのWindowsも内部的には仮想化されますが、VirtualBoxは仮想化アプリケーションなのでホストOS上で動作します。
  • vagrant
    vagrantはコマンドラインからVirtualBoxなどの仮想化アプリケーションを操作するラッパーコマンドです。
  • git
    この記事では、Git Bash for Windowsの実行環境(MSYS2)のGit Bashを利用します。
  • docker-cli
    dockerのclient側のコマンドをインストールします。利用例で使用します。
  • kubernetes-cli
    kubernetesのclient側のコマンドをインストールします。利用例で使用します。

管理者権限で起動したWindows PowerShellから以下を入力します。

ここで、管理者権限で起動したWindows PowerShellを終了します。

vagrant box イメージの取得

新しくWindows PowerShellを起動します。

vagrantを使用して、CentOS7イメージを取得します。

vagrant + virtualbox を使う場合は、ユーザー権限で起動したPowerShellから操作を行います。

作業用zipの展開

今回はセットアップスクリプトが大きいので、zip形式で提供します。

vagrant.zip

HDD/SDDの空き容量が200GB程度あるドライブで展開してください。

zipファイルを展開すると、以下のようなディレクトリ構成になります。

ファイル内容の確認

セットアップ動作の入り口となるファイルについて、少し見ていきます。

Vagrantfileの内容の確認

vagrant/310_centos_rancher_1node_rke_nfs/Vagrantfileの内容を確認します。

  1. 仮想マシンのメモリ量は vb.memory = “4000” としています。
  2. 仮想マシンに仮想ディスクを2個付加しています。
    一つはNFS用で、StorageClassから確保されるPV(Persistent Volume)用です。
    もう一つは、/var/lib/dockerにマウントします。
    巨大なDockerイメージを数多く扱うようになると、Dockerイメージ用のディスク領域が不足してくるので
    外部ディスクとして50GBを追加しています。

hoge.shの内容の確認

よく使うvagrantコマンドをまとめて、hoge.shという名前のBashスクリプトにしています。

vagrant/310_centos_rancher_1node_rke_nfs/hoge.shの内容を確認します。

  1. bash hoge.sh clean とすると、仮想マシンと付加した全ディスクを消去します。
  2. bash hoge.sh build とすると、仮想マシンをセットアップして、その後にスナップショットを作成します。
  3. bash hoge.sh restore とすると、build時に作成したスナップショットの所まで戻します。

コメントで色々設定方法が書いてありますので、参考にしてください。

セットアップ実行

Git-Bash for WindowsのBash端末を起動して、以下のコマンドでhoge.shを起動します。

セットアップスクリプトが自動実行されます。

大量にダウンロードしながら構築するので、数時間待ちます…。

以下のような表示になれば、セットアップは完了です。

上のログにも表示されていますが、Windows PCのwindows/system32/drivers/etc/hosts ファイルに「192.168.33.11 master.default.svc.k8s.local master」を追記して、
ブラウザから https://master.default.svc.k8s.local/ にアクセスすると、Rancherの Web画面にアクセスできます。

使用例

仮想マシンにsshで接続してkubectl

それではちょっと使ってみましょう。

一般ユーザー権限のPowerShellから操作します。

vagrantマシンにsshで入ります。

vagrantの場合、最初はvagrantというユーザー名でログインすることになります。

kubernetesやdockerは、rootになって操作します。

以下のコマンドを入力し、kubernetesのシステムが動作しているか確認します。

表示結果は以下のようになります。

Windows PCのGit Bashからkubectl

毎回仮想マシンにvagrant sshで入るのも大変なので、Windows PC側のGit Bash for Windowsから、仮想マシン内部のkubernetesに接続してみます。

Git Bash for WindowsのGit Bashを起動します。

以下のコマンドで、setup-rancher-kube-config.shをsourceすると、~/.kube/configファイルにKubernetesクラスタの接続先情報が書き込まれます。

これで、Windows PCから仮想内部マシン内部のKubernetesに接続して操作が可能になります。

以下、実行例を示します。

Windows PCのGit Bashからdocker コマンド

仮想マシンにvagrant sshでログインすれば docker build コマンドも使用できますが、Windows PC側からも利用できると便利です。

環境変数 DOCKER_HOST に tcp://192.168.33.11:2375 と指定すると、dockerコマンドは仮想マシン内部のdockerデーモンに接続しに行くようになります。

※ dockerデーモンの設定で、暗号化無し、認証無しの接続を許可するのは本当は良くありませんが、今回は仮想マシンのprivate network(接続できるのはホストOSからのみ)ということで、特別に見逃してください。

以下、使用例です。

LINEで送る
Pocket