ラズパイ4+HypriotOSでKubernetesクラスタ構築
今回は2020/1/19日現在最新のラズパイ4(4GBメモリモデル)でKubernetesクラスタの構築をしていきます。
今回は構築のみを行いますが、まだわからないこともあるので今後も機会があれば別の記事にしてまとめられればと思います。
また、OSはRaspbianOS
ではなくDocker用に最適化されたHypriotOS
で構築していきます。
目標
- ラズパイ + HypriotOSでKubernetesクラスタを構築
注意点
- 今回は有線LANを使用します
- SSH接続などラズパイの使用経験がある前提で説明します
- ラズパイセットアップ環境: MacBookPro 2017
1. microSDにHypriotOSを書き込む
まずはHypriotOSイメージを入手しましょう。
以下のリンクから好きなバージョンを選択してダウンロードします。
筆者環境では最新のVersion 1.12.0
をしようしました。
次にmicroSDにOSイメージを行く方法として、Etcherを利用していきます。
まずは以下のリンクからEtcherをダウンロード&インストールを済ませましょう。
Etcherを起動すると下の画像のようなウィンドウが出てくるので、手順にしたがってmicroSDにイメージを書き込みます。
やることは全てGUI上で完結されていて、とても簡単にイメージを焼くことができます。
もちろんこのソフトはRaspbianOSのsdカード作成にも使えるのでインストールしておくのはおすすめです。
2. ラズパイの初期設定
OSの書き込みが終わったらまずはmicroSDの内容を編集します。
Etcherで書き込みが終わるとmicroSDはアンマウントされるので、一度パソコンから抜いてもう一度刺してマウントしましょう。
マウントしたディレクトリにuser-data
ファイルがあるのを確認したらhostname: black-pearl
と記述された部分を見つけ出してblack-pearl
の部分を好きなホスト名に編集しましょう。
またこの時、編集するのにはコマンドプロンプトからでnanoエディタ
かvim
を使って編集します。
Macのテキストエディット
を使って保存すると、筆者環境ではラズパイが起動しなくなったので使わないようにしましょう。

ここまでできたらmicroSDをラズパイに刺して起動しましょう。
今回は有線LANを利用するので、有線LAN接続してからラズパイに電源供給します。 しばらくするとルータにIPが割り振られるので、ラズパイのIPを確認してssh接続します。
筆者の環境ではLanScanを利用して確認しています。
ssh接続できたらまずIPアドレスを固定しましょう。/etc/network/interfaces
ファイルに以下を追記することでIP固定が可能になります。
今回はクラスタの構築なので、マスターと複数ノードできりのいい番号から連番にしておくことで管理しやすくなります。
allow-hotplug eth0 iface eth0 inet static address 192.168.x.x # 固定するIP netmask 255.255.255.0 gateway 192.168.x.1 # ゲートウェイ
3. クラスタに必要なパッケージのインストール
それではまずマスタの構築から入ります。
はじめにクラスタ構築に必要なパッケージをインストールしていきます。
まずHypriotOSのパッケージリストにインストールするパッケージを登録します。 以下のコマンドでGPGキーを追加します。
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
このコマンドを実行して、OK
と表示されれば成功です。
次に/etc/apt/sources.list.d/kubernetes.list
に以下の内容を追記します。
deb https://apt.kubernetes.io/ kubernetes-xenial main
ここまでできたら、sudo apt-get update
を実行すればリポジトリの登録が完了します。
そして以下の3つのコマンドを実行してKubernetesクラスタの必須パッケージをインストールします。
しかしここで注意点があり、三つのパッケージのバージョンを合わせることと、構築するクラスタのマスタ機とノード各機のパッケージバージョンは同じである方が良いようです。
ブログ執筆時も数日開けて環境構築をした際にバージョンが二回変わったので、更新間隔が近いので注意が必要です。
$ sudo apt-get install -y kubelet $ sudo apt-get install -y kubeadm $ sudo apt-get isntall -y kubectl # または $ sudo apt-get install -y kubelet kubeadm kubectl
エラーが出ずにインストールができれば完了です。
ここでインストールした三つのパッケージについて軽く説明します。
- kubelet: ポッドの管理(裏側の処理)
- kubeadm: Kubernetes環境をコマンドで簡単に立ち上げるのをサポートする(ルート権限で操作)
- kubectl: Kubernetesの操作コマンド(ユーザ権限で操作)
4. マスタの環境構築
ここまでで必要なパッケージがインストールできたので、本格的に環境構築に入ります。
まずはkubeadm
コマンドを使ってKubernetesを立ち上げます。
この作業には2~5分ほどかかるので待ちましょう。
$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
この処理が正常に終われば、最終行にkubeadm join ...
のようなコマンドが表示されるので、コピーしておきましょう。
もしこの時コピーを忘れてしまった時は、sudo kubeadm token create --print-join-command
を実行して結果を再度コピーしておきましょう。
次にkubectl
コマンドを使えるようにするために、以下を実行します。
$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config $ kubectl get node
次にCNIプラグインをインストールしましょう。
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
コマンドの実行が終わったらkubectl get node
を実行して以下のようにマスタのステータスがReady
になっていればマスタの設定は終了です。
5. ノードの追加
ノードの追加はマスタが正常に立ち上がっていればとても簡単です。
ノード側では3. クラスタに必要なパッケージのインストール
までの作業が済んでいればあとはマスタで発行されたkubeadm join
コマンドを実行するだけです。
この時、コマンドの実行はルート権限(sudo
付き)で実行してください。
実行したあとにエラーが出ていなければ、マスタで再度$ kubectl get node
を実行してみるとノードが追加されReady
またはNot Ready
になっているかと思われます。Not Ready
だった場合はしばらく待つか、マスタとノードを両方とも再起動してからもう一度4. マスタの環境構築
からやり直してみてください。
これでクラスタの構築が完了しました。
6. 導入後、再起動からクラスタ再構築まで
クラスタ構築完了後、ラズパイを再起動してまたクラスタを構築することがあると思います。
設定がうまくできていれば、再起動後も勝手にクラスタが構成されますがマスタの不調でもう一度立て直したい時の方法を紹介します。
まずはマスタでの操作で、以下のコマンド群を順に実行します。
$ sudo kubeadm reset $ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
次にノード側では以下を実行します。
$ sudo kubeadm reset
$ # マスタで発行された`kubeadm join`コマンドをルート権限で実行
これで構築時と同じようにマスタにノードが接続されているのがマスタで$ kubestl get node
を実行することで確認できるはずです。
もしThe connection to the server 192.168.x.x:6443 was refused - did you specify the right host or port?
のようなエラーが出た時はしばらく待つか、まっても変わらない場合はマスタと各ノード全てを再起動してください。
まとめ
・HypriotOSのインストールがラズパイにできた ・Kubernetesのクラスタがラズパイでたてられた ・次は機会があればKubernetesで何かイメージを動かしたい
コメント
コメントを投稿