febc技術メモ

Japanese version of http://febc-yamamoto.hatenablog.com

【さくらのクラウド】Kubernetesクラスタ構築用のモジュールをTerraform Registryに公開しました

f:id:febc_yamamoto:20180314182720p:plain

はじめに

先日 Open Service Broker for さくらのクラウドというプロダクトを公開しました。

参考: Open Service Broker for さくらのクラウドでKubernetes + Service Catalog出来るようになりました

これを試すには以下2つの方法があります。

Docker for Mac/Windowsの方は気軽に試せますが、やはりちゃんと複数台のサーバで構成されたKubernetesクラスタで動かしたいですよね。
でもVPC内に手動でクラスタを構築するのはなかなか大変な作業です。

そこで、Terraform(とTerraform for さくらのクラウド)でコマンド一発で構築できるようにしました。
Terraformの公式モジュールレジストリであるTerraform Registryに公開していますので非常に簡単に利用することができます。

Terraform Registry: sacloud/kubernetes-single-master/sakuracloud

f:id:febc_yamamoto:20180314183244p:plain

今回はこのモジュールの使い方について紹介します。

Terraform RegistryのモジュールでKubernetesクラスタを構築する

準備

terraformterraform for さくらのクラウドのインストールを行っておきます。

以下のドキュメントを参考にインストールし、APIキーの取得/設定などを行っておいてください。

Terraform for さくらのクラウド インストールガイド

構築

まずは以下のようなtfファイルを用意します。

module "kubernetes" {
    source = "sacloud/kubernetes-single-master/sakuracloud"

    // サーバーのrootユーザーのパスワード
    password = "<put-your-password-here>"

    // ワーカーノードの数(0でもOK、0だとマスター上でPodが稼働する)
    worker_count = 3
}

あとは通常のTerraformの流れでterraform initしてterraform applyすればOKです。
簡単ですよね?

あとは構築完了まで数分待ちましょう。

Kubernetesクラスタを使ってみる!

無事構築できましたでしょうか?

構築できたら早速使ってみましょう。

以下2通りの利用方法があります。

  • SSHでマスターノードに接続して利用
  • マスターノードからkubeconfigファイルをダウンロードして利用

順に説明します。

マスターノードにSSH接続

terraform applyを実行したディレクトリにcertsディレクトリが作成されています。
この中にサーバへのSSH接続用の秘密鍵が格納されています。

これを利用すればマスターノードだけでなく、ワーカーノードへもSSH接続が行えます。

さくらのクラウド CLI Usacloudを利用する場合は以下のようにすればSSH接続できます。

# サーバ名 kubernetes-master-01を指定してSSH接続
$ usacloud server ssh -i certs/id_rsa kubernetes-master-01

デフォルトではマスターノードの名前はkubernetes-master-01となっているはずです。
変更している場合はコマンドを適宜読み替えてください。

あとはkubectlコマンドやhelmコマンドが利用できるようになっています。

# クラスタの情報を表示
$ kubectl cluster-info

# ノードの状態を表示
$ kubectl get node

Type: LoadBalancerServiceは動かせませんがIngressなどはちゃんと動きます。

kubeconfigファイルをダウンロードして利用

SSH接続せずともkubeconfigファイルをマスターノードからダウンロードすることでローカルマシン上のkubectlコマンドから操作できるようになります。

kubeconfigファイルはマスターノードの/etc/kubernetes/admin.confに置かれていますのでSCPなどでダウンロードします。
Usacloudの場合は以下のコマンドでダウンロード可能です。

# SCPでダウンロード
$ usacloud server scp -i certs/id_rsa kubernetes-master-01:/etc/kubernetes/admin.conf ./admin.conf

ダウンロード後は--kubeconfigオプションで都度指定 or KUBECONFIG環境変数を設定するなどで利用します。

# コマンドラインオプションで都度指定する場合
$ kubectl --kubeconfig admin.conf cluster-info

# 環境変数で指定することも可能
$ export KUBECONFIG=$(pwd)/admin.conf
$ kubectl cluster-info

注意点

このモジュールはシングルマスタ構成で、耐障害性などは考慮していません。
開発/検証用途など向けとなっています。 必要であれば自分でetcdのバックアップなどを行ってください。

終わりに

ということで非常に簡単に使えますのでぜひご利用ください!!