LoginSignup
122
108

More than 5 years have passed since last update.

おうちKubernetes構築でハマったところ - ニッチ編 -

Last updated at Posted at 2019-02-11

おうちKubernetesが流行ってますね!

Raspberry Pi 3 Model Bがたまたま安く手に入ったので、もはや何番煎じかも分かりませんが、Raspberry Piとkubeadmを使って、自宅Kubernetesクラスタを構築しました。

k8s on raspi

構築方法の記事については、既に下記のような良記事が存在するので、本記事ではハマった細かい部分についてのみ記載します。

順番通りにホスト名を設定したい

無事筐体のセットやケーブリングの設定が完了し、Raspberry Piの設定でホスト名を設定しようとしたところ、どのIPがどのマシンに設定されているか分かりませんでした。

hostname setting

そのため、どのIPがどのRaspiと対応しているのか確認するために、LEDを消灯させることにしました。

pi@raspi:~ $ echo none | sudo tee /sys/class/leds/led0/trigger
none
pi@raspi:~ $ echo none | sudo tee /sys/class/leds/led1/trigger
none
pi@raspi:~ $ echo 0 | sudo tee /sys/class/leds/led1/brightness
0

power off led

消灯後、ホスト名を設定した後はrebootすれば元に戻ります。

他の方法としては、ディスクアクセスをさせれば、緑色のLEDが点滅するので、 sudo apt-get update コマンド等を実行してLEDの点滅を見ることで、IPと対応するRaspiを確認することもできます。

ちなみにRaspberry Piに接続するためのIPについては、arp コマンド等で確認できます。

$ arp -a

またホスト名が設定された後は、標準でAvahiが起動している為、MacからであればBonjourのおかげで下記のようにホスト名でアクセスすることができます。LinuxやWindowsもAvahiを入れれば、ホスト名でアクセスできるようになると思います。

$ ssh <ホスト名>.local

Dockerのバージョン

2019年2月現在 apt-get で入るDockerのバージョンは 18.09 です。現在Kubernetesでrecommendedされているバージョンは 18.06 の為、kubeadm init を実行した際にエラーになります。(オプションでskipできそうですが…)

そのため、バージョンを指定してインストールする必要があります。
apt-get でインストールできるバージョンは下記で確認することができます。


$ sudo apt-cache showpkg docker-ce
...
Provides:
5:18.09.0~3-0~raspbian-stretch -
18.06.1~ce~3-0~raspbian -
18.06.0~ce~3-0~raspbian -
18.03.1~ce-0~raspbian -
18.03.0~ce-0~raspbian -
17.12.1~ce-0~raspbian -
17.12.0~ce-0~raspbian -
17.09.1~ce-0~raspbian -
17.09.0~ce-0~raspbian -
Reverse Provides:

バージョンを指定してインストールする方法は下記の通りです。

sudo apt-get install docker-ce=<version>

Kubernetesクラスタにクライアントマシンからアクセスしたい

Kubernetesクラスタの構築も完了し、Raspberry Piにsshして kubectl を実行するところまで確認することができました。さて次に、クライアントのMacからも kubectl で操作したいと思ったところでハタと困りました。
普段は az コマンドや gcloud コマンドがよしなに設定してくれる箇所なのでKubernetesにおけるユーザの追加方法を意識していませんでした。

下記の記事を参考に 秘密鍵の生成kubectlの設定 を実行することでアクセスできるようになります。

ARM用のイメージを利用する

Pythonのサンプルイメージを利用して動作確認をしようとしたところ、動作しませんでした。

# Base Image
FROM python:3.6

# ...(中略

# Run the application
CMD ["python", "/opt/myapp/app.py"]

実行結果のエラーは下記の通り

$ kubectl logs  <pod>
standard_init_linux.go:190: exec user process caused "exec format error"

ローカルのdockerでは起動する為、理由が分からず悩みましたが、Base ImageのPythonがx86用にbuildされていたのが原因でした。考えてみれば当たり前で、RaspiのCPUはARMの為、ARM用のBuild Imageを利用する必要があります。

# Base Image
FROM armhf/python:3.6

# ...(中略

Docker HubにARM用のImageが存在するので、そちらを利用するように修正すると問題なく動作しました。

まとめ

まとめていて思いましたが、Kubernetes全然関係ありませんね。
実際のところ先達の良記事のおかげで、ほぼハマらずにスムーズに構築することができます。
kubeadmのおかげで、Kubernetesの構築もほぼコマンド一つです。
皆さん書いていますが、大変だったのは、ケースのアクリル板から保護ビニールを剥がすところくらいです。

構築前・構築中は実際のところ3Gしかないし、利用するかな?Docker for Mac等のローカルでのシングルノードクラスタで十分じゃないかなと思っていました。
構築後利用してみると、便利です。クライアント側マシンには負荷がかからないので、重い処理をしていても快適です。後所有感がすごいです。やはり一家に一台、Kubernetesクラスタですね!

それでは良いKubernetes生活を!

122
108
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
122
108