ご家庭 k8s はじめました

ずっと電源すら入れてなかった Core i7 第4世代の PC、最近家で作業してるし置いとくのももったいなかったので k8s で遊ぶ用に整備した

ESXi 7.0 をインストールして、その上の仮想マシンで 1 master + 2 worker 構成で k8s を立てた
この構成の作成手順は無限にインターネットの海にただよっているので、私がはまって辛かったことを書き残しておく

ESXi 7.0 編

インストーラ付属の NIC ドライバではマザーボードNIC を認識できなかった

結論

Intel NIC 買うのが一番早い

試行錯誤

[ESXi no network adapters] でググると ESXi 6.7 での対処方法が大量に見つかる
方法は ESXi-Customizer-PS と PowerCLI をインストールして、使用する NIC のドライバをバンドルしたカスタムインストーラを作成するというものである
...が、所持していたマザーボードNIC(Killer network 製)のドライバが見付からず...(もしかしたら他のドライバで互換性のあるものがあったのかもしれないがそこまでは試していない)

UEFI モードでは起動できない

結論

Legacy モードで起動する

試行錯誤

まず、インストーラhttps://my.vmware.com/jp/web/vmware/evalcenter?p=free-esxi7 からダウンロードする
// バージョンが変わると死んでしまいそうな URL なので、一つ前のページも... https://www.vmware.com/jp/try-vmware.html ここの "無償製品のダウンロード" にあるリンクから辿る 購入した Inter NIC を使えば、ドライバ周りでハマることもなく、インストール完了まですんなりと辿りついた
で、再起動すると EFI shell が起動するのである... BIOS 画面から起動モードを UEFI から Legacy モードに変更して起動しなおすとブートローダを見付けることができ、起動に成功した

Kubernetes

やっとの思いで起動まで辿り付いた ESXi を操作して VM を適当に 3 つ立てる(なお 公式 によると CPU は 2 コア以上、メモリは 2GB が最低要件とのこと)

公式のインストール手順に従い、kubeadm で k8s クラスタを構築していく
CNI は Calico を選択した

Pod の IP アドレスへの疎通が無い

結論

kubeadm reset した後は

  • iptables の全テーブルちゃんと消す
  • /etc/cni/net.d を消す

試行錯誤

原因について明確なところは分かってないのだが、どこかのタイミングで iptables の状態が中途半端になってしまったため

  • 同一 Node の Pod 間(caliXXXXXXXX - caliYYYYYYYY)
  • IPIP の tunnel interface から Pod(tunl0 - caliXXXXXXXX)

に疎通が無い状態になってしまった
この状態になったときに行なっていた作業を書き残しておく

kubeadm での Kubernetes クラスタ構築がひとしきり完了した後、ふと Pod に割り振られている IP アドレスが気に入らなくなったので、Calico の IP Pool を変更しようとした

  1. Migrate from one IP pool to another の手順に従って(ここで手順の逸脱をしてしまっていたかもしれない) 移行先 IPPool を作成し、既存 IPPool で起動している Pod を削除した
  2. このとき calico-kube-controllers の Pod が CrashLoopBackOff 状態に入ってしまい、kubectl describe を読んだところ、kube-apiserver への疎通が無くなってしまっているようだった
  3. 元に戻すための試行錯誤をした後、あきらめてクラスタを作成しなおそうと、kubeadm reset を各 Node で実行した
  4. kubeadm reset の後、ちゃんと標準出力には "iptables 削除しろよ!" "/etc/cni/net.d 削除しろよ!" って書いていたのだが、そのときの私はそれをよく読んでおらず、再度 kubeadm init からクラスタを構築した
    結果、先に書いた状態に陥ってしまった

  5. の状態がきっかけであったのだが、その状態に陥った原因(恐らく 1. で手順の逸脱をしたのだろうが、何をやったかは覚えていない)は分からずじまいである
    が、さらに完全に Pod への通信が不通になってしまってからの回復方法は 結論 に書いたとおりである

(おまけ) Kubernetes the hard way 編

github.com

をひとしきりやってみて(後述の理由により、全部ではないが...)、ハマったところも書き残しておく

GCP アカウント作成直後の Quota に引っ掛り、必要な数の VM を立てることができない

結論

数日かけてのんびりやる

試行錯誤

Kubernetes the hard way は GCP 上で実行することを前提としており、私もそれに従って進めていた
構成は 3-master/3-worker で VM は全部で 6個必要であった

03-compute-resources

しかし、GCP アカウント作成直後は internal な IP アドレスが 4 つまでしか使用することができないようになっており、最後の 2 つの VM 作成に失敗してしまう
// 制限は "IAM と管理" > "割り当て" 内で確認できる
この制限を解除するための操作をしたところ、この操作はサポートへ直接お願いするという操作だったようで、サポートから "課金アカウント作成から 48h 待って作業してくれ" と言われてしまったので結論としてはゆっくり時間をかけて進めていく、ということになりそう
幸いにも worker 1 台分は確保できていたので、手順を worker 1 台で読み換えてそのまま続行することができた

という感じで、私のように書いてあることを全然読まずに変なハマり方をする人に届けば幸い
// 半分くらいは元も子も無いような結論ではあるが...