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 のためです。

  1. ラボを追加する. 担当するモジュールでタスクを追加し、Ubuntu VM ラボのカードを選びます。ページには compose ファイルの代わりに、マシンの短い説明が表示されます。
  2. サンプルから始める. ページには、すぐ使えるラボが用意されています。Kubernetes with k3s を選びます。サンプルを使うとテキストが置き換わり、元に戻すで自分のテキストを取り戻せます。
  3. 公開して自分用のコピーを起動する. 公開してから開始を押します。VM の初回起動時に、ラボの setup スクリプトが GitHub の公開リリースから k3s(約 270 MB)をダウンロードし、k3slab コマンド、作業する2つのファイル、README を作ります。クラスターは数分後に使えるようになります。
  4. ターミナルを開く. ターミナルを開き、クラスターの準備ができたと表示されるまで 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分なので、生徒はクラスターを動かしたままラボを止め、起動を待ってください。

  1. 配る. 他のタスクと同じようにラボを割り当てます。希望すれば期限も付けられます。生徒ごとに専用の VM が用意され、セッションをまたいで保たれ、クラスターはそのディスクにあります。
  2. チェックを実行する. クラス一覧で生徒の行にあるチェックを実行を押します。保存されたマシンのコピー(保存し直されません)を起動し、クラスターが立ち上がるのを待って問い合わせ、合格したか、何を出力したか、いつ実行したかを表示します。結果は生徒には伝わりません。
  3. 採点する. チェックの出力の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 では、授業の前に一度試すことをお勧めします。