Kubernetes のラボ:専用の Ubuntu VM に生徒ごとの1ノード k3s クラスター
このラボは、生徒ごとに自分専用の Kubernetes クラスターを渡します。小さな Kubernetes である k3s が、生徒の1台の Ubuntu VM の中で1つのノードとして動き、生徒は本物の kubectl コマンドで作業します。Deployment で Web サーバーを動かし、削除した Pod を Kubernetes が戻すのを見て、Service で Pod に1つの名前を付け、ConfigMap を渡し、Pod が動かない理由を調べます。
生徒のコンピューターには何もインストールせず、他の生徒と共有するものもありません。失敗しても失うのは自分のクラスターだけで、ラボはやり直せます。
生徒が学ぶこと
Kubernetes が何をするか:動かしたいものを伝えると、動かし続けてくれます。5つの部分に分かれます。まずクラスター、そのノード、名前空間、Kubernetes 自身が起動する Pod を見て回ります。次に3台の Web サーバーの Deployment を増減させ、Pod を1つ削除して戻ってくるのを見ます。次に Service で、クラスター独自の DNS を通して別の Pod が見つけられる1つの名前を Pod に付けます。次に ConfigMap の言葉が各ページに入ることと、動いている Pod は置き換えるまで変更が見えないことを学びます。最後に、それぞれ違う壊れ方をした3つの Deployment を、kubectl describe と kubectl logs を読んで直します。
マシンの中身
1つのノード、k3s バージョン 1.35 で、ラボの setup が GitHub にある k3s プロジェクトの公開リリースからインストールします。ファイルはリリースが公開しているチェックサムで固定され、それ以外のファイルは受け付けません。Traefik、サービスのロードバランサー、メトリクスサーバーはメモリに収めるためオフにしてあり、Ingress と kubectl top はありません。kubectl、crictl、ctr は使えます。
生徒の VM が届くのは Ubuntu のパッケージアーカイブ、PyPI、npm、GitHub で、イメージのレジストリには届きません。そのため、このラボの Pod はすべて k3s に付属する唯一のイメージ、busybox 1.37.0 で動きます。sh、httpd、wget、nslookup があり、レッスンに必要なのはこれだけです。nginx のようなイメージを求める Pod は ImagePullBackOff のままになり、README の冒頭でもそう書いてあります。
ブラウザーで動かす
VM ラボは、モジュールのラボタスクとして設定し、サンプルはラボのページにあります。マシンは CPU 2つ、メモリ 2 GB、ディスク 10 GB を求めます。k3s は何も動かしていないときで約半分のギガバイトを使い、残りは Pod と Ubuntu のためです。
- ラボを追加する. 担当するモジュールでタスクを追加し、Ubuntu VM ラボのカードを選びます。ページには compose ファイルの代わりに、マシンの短い説明が表示されます。
- サンプルから始める. ページには、すぐ使えるラボが用意されています。Kubernetes with k3s を選びます。サンプルを使うとテキストが置き換わり、元に戻すで自分のテキストを取り戻せます。
- 公開して自分用のコピーを起動する. 公開してから開始を押します。VM の初回起動時に、ラボの setup スクリプトが GitHub の公開リリースから k3s(約 270 MB)をダウンロードし、k3slab コマンド、作業する2つのファイル、README を作ります。クラスターは数分後に使えるようになります。
- ターミナルを開く. ターミナルを開き、クラスターの準備ができたと表示されるまで k3slab status を実行して、ホームフォルダーの README.md を読みます。5つの部分に分けて何をするかが書かれていて、答えは書かれていません。
誰が動かせるか
このラボには 2 GB が必要で、これは学校や大学のアカウントのマシンです。無料アカウントのマシンは 1 GB で、ラボはそこでは k3s を自動で起動せず、そう表示します。sudo k3slab install --anyway は試したい生徒向けで、動く保証はありません。アカウントのない訪問者は 1 GB で Ubuntu のアーカイブにしか届かないので、k3s をダウンロードできません。授業では学校や大学の中で設定してください。
このラボの基本レッスン
Kubernetes Basics は、この Ubuntu VM のラボで行う小さなレッスンです。導入、「できる」で書いた目標、キーワード、スターター、各ポイントのあとの確認、よくある間違い、最後の確認があり、各ステップの 実行ボタンがコマンドをマシンのターミナルに入力します。生徒はノードとシステムの Pod を読み、3つの Pod の Deployment を作り、Pod を削除して新しい3つが現れるのを見て、5つに増やします。
このレッスンは自分用の名前空間で作業して最後に削除し、ラボ本来のタスクである Service、ConfigMap、壊れた Deployment は生徒に残すので、答えは渡しません。
採点の仕組み
ラボにはチェックがあります。保存されたマシンのコピーを新しく起動して実行し、生徒の作業が残ったまま k3s が立ち上がるのを待って、ファイルではなくクラスターに問い合わせます。Deployment web は準備のできた Pod が3つあり、Service web はポート 80 を3つ全部のポート 8080 に送る必要があります。次にクラスター内の Pod が http://web に12回アクセスします。名前が通り、答えが複数の Pod から返り、各ページに ConfigMap の言葉が出る必要があります。続いてチェックは ConfigMap を誰も見たことのない言葉に変えて Pod を1つ削除します。Deployment は新しい言葉をページに出す Pod を戻さなければならず、Deployment に直接書いたページではそうなりません。最後に3つの壊れた Deployment が動き、3つ目はログで準備できたと言う必要があります。チェックの出力の1行目に、合格しなかった理由が出ます。
チェックに使える時間は3分なので、生徒はクラスターを動かしたままラボを止め、起動を待ってください。
- 配る. 他のタスクと同じようにラボを割り当てます。希望すれば期限も付けられます。生徒ごとに専用の VM が用意され、セッションをまたいで保たれ、クラスターはそのディスクにあります。
- チェックを実行する. クラス一覧で生徒の行にあるチェックを実行を押します。保存されたマシンのコピー(保存し直されません)を起動し、クラスターが立ち上がるのを待って問い合わせ、合格したか、何を出力したか、いつ実行したかを表示します。結果は生徒には伝わりません。
- 採点する. チェックの出力の1行目を読みます。web という Service がない、ページに ConfigMap の言葉が出ない、壊れた Deployment がまだ動かない、など何が正しくないかが書かれています。足りなければ理由を添えて差し戻します。
GitHub の定義ファイル
このファイルはラボの定義の全てで、プラットフォームが実行するのと同じテキストです。サイズ、setup スクリプト、k3slab コマンド、作業する2つのファイル、README、チェックが入っています。コピーして Deployment や broken.yaml の不具合を変えれば、もっと長いラボが作れます。
このラボを試す、そして費用
無料の個人アカウントで、このラボの基本レッスンに取り組めます。毎月、ほとんどのレッスンに足りる無料クレジットがあり、カードは要りません。クラスで使う場合、学校は最初の365日間、生徒50人まで無料で、その後は生徒1人あたりの年額です。すべてのラボが含まれ、教職員は無料です。
よくある質問
- Kubernetes のラボにライセンスは必要ですか?
- 必要ありません。k3s は Apache 2.0 ライセンスのオープンソースで、生徒の VM が起動するときに k3s プロジェクト自身のリリースからダウンロードされます。私たちは何も配布しません。パッケージに入っているイメージもプロジェクトのもので、変更していません。
- Pod が nginx ではなく busybox を使うのはなぜですか?
- 生徒の VM はイメージのレジストリに届かないので、Pod が動かせるのはマシンにすでにあるイメージだけです。k3s は少数を持ってきますが、役に立つのは busybox で、Web ページを返し、取得し、名前を引けます。Deployment、Service、ConfigMap について学ぶことは、イメージが何でも同じです。
- 生徒は何かを壊せますか?
- 壊せるのは自分のコピーだけです。クラスターは VM の中の1つのノードで、VM が届くのは Ubuntu のアーカイブ、PyPI、npm、GitHub だけです。クラスターを壊したら、k3slab files で2つのファイルを戻せ、kubectl delete namespace lab で演習をやり直せます。
- 無料アカウントの生徒でも使えますか?
- 確実には使えません。無料アカウントのマシンは 1 GB で、k3s は Pod を少し動かすと約 2 GB が必要なので、ラボはそのマシンでは k3s を自動で起動しません。学校や大学のアカウントのマシンは 2 GB で、ラボが求めるのはこれです。
- このラボは本物の生徒用 VM でテストしましたか?
- 実際のダウンロードを含む setup、レッスンのコマンド、そしてあらゆる偽装を試したチェックは、k3s が動く本物の Ubuntu 26.04 で、VM の代わりのコンテナの中で実行しました。systemd のユニットから k3s を起動し、2 GB とプラットフォームのネットワークプロキシを備えた、実際に起動した生徒用 VM では、授業の前に一度試すことをお勧めします。