なんだかなぁ〜な今日この頃
鹿野です。
相変わらずご無沙汰しております。
え〜っと、まず言い訳させてください。
今日は毎年恒例、 openSUSE Advent Calendar 2022 の2日目、12/2 分の記事なのですが、(いつものように)時間が間に合わず、、鹿野相変わらずダメじゃん!!・・・って。
実は諸事情により、本来なら 12/2 って仕事もお休みの予定でした。
たっぷりブログ書く時間もあるはずだったわけ。
なのに、
どうして Kubernetes の罠にハマって結局仕事休めなくなるってどういうことよ〜!!
そんでもって今日は ↓ のコミックの発売日。
鹿野的にこれ絶対買わなきゃだめなやつやん!??
あ、アオのハコの鹿野さん、めっちゃ可愛いですよね〜
・・・・・。
って、これ読んでるからブログ書けなかったんやん!!(もはや言い訳にもなってない
というわけで、今日はそんな恨み節満載な、Kubernetes ネタを書いてみます。
まずは初歩中の初歩、マスターノードから構築してみましょう!!
そもそも openSUSE で Kubernetes ってできるんだっけ?
Caution:
本日は失敗編です。成功編を読みたい方はもう少々お待ちください。
失敗でも笑って許してくれる方のみ、続きを読んでいただけたらと思います(^^)
てかそもそも、openSUSE で Kubernetes なんてやってる人いるのかしら???
以前は確かにいましたけどね・・・最近は Kubic も開発停止したって聞くし。
なんて思って調べてみたら、こんな記事を見つけてしまった。。。
と、遠山さんや・・・(汗
仮想化技術の皆さんにはいつも大変お世話になってます!! という話は置いておきまして、
とりあえず Tumbleweed + K3s なら実績ってあるってことですね。
だったら Leap でもいけるべ。
・・・とその前に、ハマりたくないので最初のうちにやっておく。
Kubernetes をインストールする前に swap 領域を消しておきましょう。
YaST 開いて、 システム > パーティション設定 からさくっと、 swap のパーティションを削除しちゃいます。
削除をぽちっとえいっとな。
・・・はい、消えました〜!
(いいのかこんなにあっさり消してしまって。※私のはテスト環境なので皆さんは慎重にお願いします、、。
準備が整ったので、早速公式リポジトリから何が落とせのるか YaST で検索してみます。
いつものように YaST を開き、 ソフトウェア > ソフトウェア管理 を選んで Kubernetes で検索っと。
何かいますねぇ。とりあえず、 1.18.4 が降ってくるってことかしら???
と、そそくさとインストールしてみる。
インストールが完了したようなので、もしかしてもうマスターノードがどこかに!??
tsukimi@localhost:~> kubectl get node 'kubectl' が入力間違いでなければ、下記のように入力することで command-not-found を利用してパッケージを検索することができます: cnf kubectl
・・・なんてことはさすがにないようです。(当たり前だろ!
ここからは手動でやるってことですね。
kubeadm でマスターノード構築してみよう
一旦クラスタ構成とか考えずに、まずはこの PC をマスターノードにする前提でやってみます。
マスターノードとはワーカーノードを管理するサーバーのこと。 Kubernetes のコマンドはワーカーノードから叩くことはほぼなく、マスターノードの中の api-server を使って叩くことになります。(このあたり私もまだまだ勉強不足であるのだけど
ところでこの PC の IPアドレスは 192.168.0.99 だそうです。
マスターノードは本来 IPアドレスを固定にする必要がありますが、今回はお試しなのでそこは何を考えずに、細かい事抜きにして下記のコマンドで構築してみます。
sudo kubeadm init --apiserver-advertise-address=192.168.0.99 --pod-network-cidr=10.128.0.0/16
さて、どうなったかといいますと・・・。
[preflight] WARNING: Couldn't create the interface used for talking to the container runtime: docker is required for container runtime: exec: "docker": executable file not found in $PATH [WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
なんかいろいろ出てきたぞよorz
- Docker なんてコマンドしらね〜よ
- ファイアウォールで 6443 と 10250 を開けろやおら
- そもそも kubelet が起動してね〜よ
・・・そこからかぁ〜・・・
Docker を起動しよう!
気を取り直して、 YaST から Docker をインストールします。
つか、 kubeadm と Docker って依存パッケージじゃないんですね・・・。
ま、今どきコンテナランタイムに Docker は使わないと思う(最近は containerd が使われます)ので、気持ちはわからんでもないが。。。
YaST から ソフトウェア > ソフトウェア管理 を開いて、 docker を検索。インストールします。
インストールしただけではサービスが起動していないので、起動するように設定します。
YaST から システム > サービスマネージャ を開きましょう。
そしたら docker を探していきます。見つかったら、
- 「開始」ボタンをクリック
- 「開始モード」から「起動時」を選択
ですね。
ついでに、 kubelet も起動しておきましょう。
同じように kubelet を検索して、「開始」ボタンクリック、「起動時」に起動するよう選択してください。
sudo docker images
でこんな感じで出てきたら、ひとまずOKです。
tsukimi@localhost:~> sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE
ファイアーウォールの設定も忘れずに
さて、もうひとつ。ファイアーウォールの設定ですね。
最低限必要なポートは、下記の2つのようです。
- 6443 : Kubernetes API server
- 10250 : Kubelet API
YaST から、 セキュリティとユーザ > ファイアウォール を選択してください。
そしたら ゾーンを internal
を選択し、 kube-apiserver
を探して、追加をクリックします。
kubelet の方は実はまだ起動できていないので、「ポート」タグをクリック、「TCPポート」に 10250 と書いておきます。
これで準備ができたはず!!
今度こそ構築すっぞ!!・・・と思ったら。
さて、気を取り戻して、一番最初の kubeadm init
コマンドを叩いてみましょう。
tsukimi@localhost:~> sudo kubeadm init --apiserver-advertise-address=192.168.0.99 --pod-network-cidr=10.128.0.0/16 Found multiple CRI sockets, please use --cri-socket to select one: /var/run/dockershim.sock, /var/run/crio/crio.sock To see the stack trace of this error execute with --v=5 or higher
・・・・・。(あれ?
OKOK。ある意味予想通りですね。
ようはコンテナランタイムを指定しろや!って話のようです。
最近の Kubernetes では無きものとされてしまった(?) dockershim も、まだ 1.18 の段階では選択肢として残っているんですね。せっかく今回は Docker を選んだので、コマンドを下記に変えて実行してみましょう。
sudo kubeadm init --cri-socket=/var/run/dockershim.sock --apiserver-advertise-address=192.168.0.99 --pod-network-cidr=10.128.0.0/16
今度こそうまく行くはず・・・・・
ががが!??!?!???
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.17-ce. Latest validated version: 19.03 error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR KubeletVersion]: the kubelet version is higher than the control plane version. This is not a supported version skew and may lead to a malfunctional cluster. Kubelet version: "1.20.13" Control plane version: "1.18.18"
結果: 失敗
・・・てか待てやおらっ!!! ←原因はわかった(汗
本日のまとめ
え〜っと、せっかくなので続きます。(今日は疲れたとも言うw
Kubernetes の公式リポジトリのパッケージ等を使うとより最新の環境で構築できるのですが、今回は openSUSE 公式パッケージでやってみようとしています。
・・・が、結果的にそれが裏目に出て、見事なまでにハマったということですね(汗
続きは次回とします。今度こそマスターノード構築まで行ってみる予定です。 ですが、ファイアーウォールの設定やら、サービスの起動やらは、基本的に今日書いた手順で問題ないはず。(いやまだ動いていないのだからなんとも言えんのだけど!
とりあえず次回をお楽しみに!!