Skip to content

Vagrant CoreOS Cluster

Kubernetes Vagrant CoreOS Clusterにあるインストーラを利用して、Kubernetesクラスターを構成します。 このインストーラーでは、ローカルPC上に複数のVirtualBox仮想マシンを立ち上げ、それらの上にKubernetesマルチノードクラスターを構成します。

併せて、Kubernetesを操作するためのコマンドラインツールである、kubectlのセットアップも行います。

前提条件

この手順は以下の環境で実施することを前提とします。

  • OS
    • MacOS X
    • Linux (Ubuntu 16.04)
    • Windows
  • インストールSW
    • Vagrant 1.8.6+
    • VirtualBox 5.0.0+

以降の手順は、ほとんどの操作をコマンドラインツールから実行します。Mac/Linuxの場合はターミナル、Windowsの場合はWindows PowerShellを利用するものとして、手順を記述します。

Warning

Linux(ubuntu 16.04)で、VirtualBox 5.1.x以上のバージョンでは動作しない問題を確認しています。当該OSを利用する場合は5.0.xの利用を推奨します。

1. Kubernetesクラスターのセットアップ

1.1. 準備作業

以下、お使いのマシンの環境に応じて、該当する準備作業を実施してください。

Windowsのみ - gitクライアントの設定変更

このチュートリアルで利用するKubernetesのインストールスクリプトには、Core OSの仮想マシン上で実行されるものが含まれます。

git clone時にこれらのスクリプトの改行コードが変換されてしまうと、Core OS上で正しく動作しない場合があります。これを避けるため、改行コードの自動変換を無効化するようにGitを設定しておきます。

以下は、CLIのgitクライアントを利用してこの設定を行う例です。

git config --global core.autocrlf false; git config --global core.eol lf

MacOS Xのみ - homebrew、wgetのインストール

先の手順でインストールスクリプトを実行すると、Macの場合wgetを使ってkubectl(Kubernetesのコマンドラインツール)がダウンロードされます。このため、事前にwgetをインストールしておく必要があります。

ここではhomebrewを使ってwgetをインストールします。まず、homebrewのインストールです。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

次に、以下のコマンドでwgetをインストールします。

brew install wget

Linuxのみ - NFSのインストール

今回作成するクラスターは、Kubernetesノードの共有ディスクとしてNFSを利用します。NFSがインストールされていなければ、ここでインストールしておきます。

apt-get install nfs-kernel-server

Note

WindowsではNFSと同等の機能を提供するVagrantプラグインが自動的に利用されます。Macの場合は標準でNFSがインストールされています。

1.2. インストールスクリプトの取得

コマンドラインツールを起動し、適当なディレクトリにインストールスクリプトをクローンします。この時、タグ”1.7.11”を指定します。

git clone -b 1.7.11 https://github.com/pires/kubernetes-vagrant-coreos-cluster.git

クローンして作成されたディレクトリをカレントディレクトリにしておきます。

cd kubernetes-vagrant-coreos-cluster

Windowsのみ - インストールスクリプトの修正

Windowsの場合は、クローンして作成されたディレクトリ直下にあるVagrantfileを一部修正する必要があります。テキストエディタでVagrantfileを開き、以下の様に修正してください。

  331          end
  332          if not res.is_a? Net::HTTPSuccess
  333            if OS.windows?
- 334              run_remote "/opt/bin/kubectl create -f /home/core/dns-deployment.yaml"
+ 334              run_remote "/opt/bin/kubectl apply -f /home/core/dns-deployment.yaml"
  335            else
  336              system "kubectl create -f temp/dns-deployment.yaml"
  337            end

1.3. Firewall無効化の確認

NFSへの通信がFirewallによって遮断されてしまうことが多いので、ここで無効化しておきます。利用しているOS/セキュリティソフトウェアの手順に従って操作を行ってください。

Note

特にWindowsの場合、デフォルトのFirewallの設定でも遮断されてしまうので、注意してください。

1.4. インストールスクリプトの実行

インストールスクリプトをデフォルトの設定で実行すると、以下のような構成のクラスターが構築されます。

  • マスターノード:
    • ノード数: 1
    • CPU: 2 vCPUs
    • メモリ: 1024 MB
  • ワーカーノード:
    • ノード数: 2
    • CPU: 2 vCPUs
    • メモリ: 2048 MB

デフォルトの構成でインストールスクリプトを実行するには、以下のコマンドを実行します。

vagrant up

利用しているPCが上記のスペックを賄うには非力な場合には、所定の環境変数を設定することによって構成を調整することが可能です。例えば、Macbook Air - Late 2011 4G Memでは、以下の構成でクラスターが稼働することを確認済みです。

  • マスターノード:
    • ノード数: 1
    • CPU: 1 vCPUs
    • メモリ: 1024 MB
  • ワーカーノード:
    • ノード数: 2
    • CPU: 1 vCPUs
    • メモリ: 1024 MB

この構成でインストールスクリプトを実行するには、以下のコマンドを実行します。

Mac / Linux

MASTER_MEM=1024 MASTER_CPUS=1 NODES=2 NODE_MEM=1024 NODE_CPUS=1 vagrant up

Windows

set-item env:MASTER_MEM -value 1024;`
set-item env:MASTER_CPUS -value 1;`
set-item env:NODES -value 2;`
set-item env:NODE_MEM -value 1024;`
set-item env:NODE_CPUS -value 1;`
vagrant up

Note

パラメータの詳細は、インストールスクリプトのREADME.mdを参照してください。

コンソールに以下のような内容が出力されれば、クラスターの構築が成功しています。

Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'node-01' up with 'virtualbox' provider...
Bringing machine 'node-02' up with 'virtualbox' provider...
==> master: Running triggers before up...
==> master: 2017-11-15 01:25:08 +0900: setting up Kubernetes master...
...(中略)
    node-02: Running: inline script
==> node-02: Running triggers after up...
==> node-02: Waiting for Kubernetes minion [node-02] to become ready...
==> node-02: 2017-11-15 01:45:39 +0900: successfully deployed node-02

最後に、以下のコマンドで全ての仮想マシンが稼働していることを確認します。

vagrant status

正常に稼働している場合、以下のような内容が出力されます。

Current machine states:

master                    running (virtualbox)
node-01                   running (virtualbox)
node-02                   running (virtualbox)

1.5. クラスターの停止/再起動

ハンズオン終了後にクラスターを停止/再起動/削除する際には、以下の操作を行ってください

停止

vagrant halt

起動

vagrant up

初回のインストールスクリプト実行時に環境変数を設定している場合は、停止後に再度起動する際も同じ環境変数を指定してください。

削除(クラスターの停止後に実行)

vagrant destroy

2. kubectlのセットアップ

kubectlはKubernetesの管理操作を行うためのCLIです。ここではkubectlのセットアップをおこないます。

2.1. Windowsのみ - kubectlのインストール

Mac/Linuxの場合は、「2.2. Kubernetesクラスターへの疎通確認」に進んでください。)

Note

Mac/Linuxの場合は、インストールスクリプトにより自動でkubectlがインストールされます。

kubectlのバイナリファイルを、以下からダウンロードします。

ダウンロードしたバイナリを適当なフォルダに配置し、PATHを通します。続いてWindows PowerShellを再起動した後、以下のコマンドを実行してkubectlが動作することを確認します。

kubectl version

次に、Kubernetesクラスターにアクセスするための設定を行います。インストールスクリプト一式のトップをカレントディレクトリにしておきます。

cd kubernetes-vagrant-coreos-cluster

以下のコマンドを順に実行していきます。

kubectl config set-cluster default-cluster`
    --server=https://172.17.8.101`
    --certificate-authority=%CD%/artifacts/tls/ca.pem
kubectl config set-credentials default-admin`
    --certificate-authority=%CD%/artifacts/tls/ca.pem`
    --client-key=%CD%/artifacts/tls/admin-key.pem`
    --client-certificate=%CD%/artifacts/tls/admin.pem
kubectl config set-context default-cluster`
    --cluster=default-cluster`
    --user=default-admin
kubectl config use-context default-cluster

2.2. Kubernetesクラスターへの疎通確認

以下のコマンドを実行すると、Kubernetesクラスターの一般的な情報を取得することができます。このコマンドで、クラスターへの疎通を確認します。

kubectl cluster-info

コンソールに以下のような内容が出力されれば、クラスターとの疎通は問題ありません。

Kubernetes master is running at https://172.17.8.101
KubeDNS is running at https://172.17.8.101/api/v1/namespaces/kube-system/services/kube-dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

ここで、ノード一覧の取得も試してみます。

kubectl get nodes

コンソール出力は以下のようになります。

NAME           STATUS                     AGE       VERSION
172.17.8.101   Ready,SchedulingDisabled   12h       v1.7.11
172.17.8.102   Ready                      12h       v1.7.11
172.17.8.103   Ready                      12h       v1.7.11

以上で、Vagrant CoreOS Clusterの構築、及びkubectlのセットアップは完了です。