Kubernetes The Hard Way をやってみた

言わずと知れたkelseyhightower/kubernetes-the-hard-wayをやってみた。
kubernetesのコンポーネントを1つずつ立ち上げていき、クラスタを構築するチュートリアルである。

目次はこんな感じ。

01-prerequisites.md
02-client-tools.md
03-compute-resources.md
04-certificate-authority.md
05-kubernetes-configuration-files.md
06-data-encryption-keys.md
07-bootstrapping-etcd.md
08-bootstrapping-kubernetes-controllers.md
09-bootstrapping-kubernetes-workers.md
10-configuring-kubectl.md
11-pod-network-routes.md
12-dns-addon.md
13-smoke-test.md
14-cleanup.md

inductor氏による日本語訳も公開されている。
https://github.com/inductor/kubernetes-the-hard-way

対象プラットフォームはGCPとなっている。
他プラットフォーム向け(Kubernetes the hard way with vagrant など) もいくつか有志により公開されているようだ。

今回は話のタネに、原典に従ってGCPでやることにした。
課金が気になるが、初回利用ならば無料枠に収まるらしい。私は無料枠は使い切っているようで課金されそうだ。

作業マシンはUbuntu 18.04.3 LTSを使った。
gcloudコマンドはすでに入れていたが、バージョンが古かったので以下のようにしてアップデートした。

# もともと入れていたバージョン、古い
$ gcloud version
Google Cloud SDK 225.0.0
alpha 2018.11.09
beta 2018.11.09
bq 2.0.37
core 2018.11.09
gsutil 4.34
kubectl 2018.11.09
$

# インストールスクリプト持ってきたり
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-245.0.0-linux-x86_64.tar.gz
tar zxvf google-cloud-sdk-245.0.0-linux-x86_64.tar.gz google-cloud-sdk
./google-cloud-sdk/install.sh
# まだちょっと古いかな
$ gcloud version
Google Cloud SDK 245.0.0
bq 2.0.43
core 2019.05.03
gsutil 4.38
$

# updateコマンドでアップデートできるみたい
gcloud components update

# うん、新しいわ
$ gcloud version
Google Cloud SDK 278.0.0
bq 2.0.52
core 2020.01.24
gsutil 4.47
$

また、gcloud configが昔作ったプロジェクトに向いていたので、今回用のプロジェクトに切り替えた。このコマンドに指定すべきはプロジェクトname( k8s-hard-way )ではなくてPROJECT_ID ( gcloud projects list で確認できる )であることに少しハマった。( コマンドは通ってしまうので。。あとでFailed to find project k8s-hard-way と怒られた。いやプロジェクトあるしとか思ったりした。)

gcloud config set project k8s-hard-way-266901

その後は、gcloudコマンドでVPCやFWの設定をしたのち、masterノード x 3、workerノード x 3のインスタンスを作成して構築していく流れになっていた。

作成したインスタンスにsshで入る際、なぜか10022ポートで接続しようとしているため、明示的に22ポートを指定するようにした。
当然だが、普通このようなオプション指定は不要である。( 別件で、おうちk8sマシンに外出先から入れるように、自宅のルーターで10022ポートに関するforward設定をしているのが関係してるのかなと思ったり思わなかったり。 )

# なんで10022ポートで入ろうとするねん
$ gcloud compute ssh controller-0
ssh: connect to host 35.233.135.198 port 10022: Connection timed out
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
$

# 明示的に -p 22 を指定した。普通こんなことはしなくて良い。
$ gcloud compute ssh controller-0 --ssh-flag "-p 22"
Enter passphrase for key '/home/loft/.ssh/google_compute_engine':
loft@controller-0:~$​

このHard Wayで得られる体験としては、etcdやAPI Server​など、master側のコンポーネントを1つずつ立ち上げていくところに価値があると感じた。

休憩時間などを除外した作業時間のトータルは5時間弱だった。ただ構築するだけならば機械的にコマンドをコピペでできるため、もっと短時間でできると思われる。

ただ理解を深めるには、コンポーネントのパラメタの意味などを調べていく必要がある、そのあたりは解説されていない。今回は全てのパラメタの確認はできなかったので、折を見て理解度を上げていきたい。

とりあえず1周完走。


この記事が気に入ったらサポートをしてみませんか?