動かし続ける
お店の Web サイトは一日中つながっていなければなりません。動かしているコンピューターが夜中の3時に壊れたら、誰かが別の場所で起動し直す必要があります。Kubernetes はその仕事をします。何を動かしたいかを伝えると、動かし続け、1つ消えるたびに新しいコピーを起動します。
このレッスンが終わると
メモ
Deployment が何をするかと、その Pod の1つを削除すると何が起こるかを説明できます。
キーワード
- クラスター:Kubernetes があなたのプログラムを動かすマシンの集まり。
- ノード(node):クラスターの1台のマシン。
- Pod:動いているプログラムの1つのコピー。1つ以上のコンテナでできている。
- Deployment:同じ Pod を何個ほしいかという願いで、Kubernetes が実現し続ける。
- 名前空間(namespace):あるグループのものを別のグループのものから分ける、名前の付いたフォルダー。
- kubectl:クラスターと話すコマンド。
ウォームアップ:すでに知っていること
メモ
頭の中で答えましょう。1. コンテナとは何ですか。2. プログラムが1台のコンピューターでしか動いておらず、そのコンピューターが壊れたらどうなりますか。3. プログラムをスケールするとはどういうことですか。もうすぐ3つとも必要になります。
はじめる前に
メモ
このレッスンの上のバーにある ラボを開始 を押します。このラボは、小さな Kubernetes クラスター k3s が入った、あなた専用の Ubuntu マシン まるごとなので、初回は起動に数分かかります。各 実行 ボタンは、そのコマンドをマシンのターミナルに、同じセッションで順番に入力します。クラスターの準備ができていないと表示されたら、1分待ってからもう一度押します。様子を見たり自分で入力したりするには、バーの ターミナルを開く を押します。Kubernetes には 2 GB のメモリが必要です。これは学校や大学のアカウントのマシンで、無料アカウントのマシンは 1 GB です。
読めるクラスター
このクラスターは1台のマシンなので、ノードは1つです。kubectl get nodes がそれを表示します。STATUS は Ready、役割は control-plane、最後の列は k3s のバージョンです。kubectl get pods -A は、すべての名前空間の Pod を表示します。kube-system のものは Kubernetes 自身が起動したもので、coredns はクラスターに名前を与え、local-path-provisioner は Pod にファイルの置き場所を与えます。
kubectl get nodesここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
kubectl get pods -Aここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Deployment が Pod を動かし続ける
まず自分用の名前空間 demo を作り、ここでの操作がラボの邪魔にならないようにします。次に hello という Deployment を作ります。小さなプログラム busybox が sleep を実行するコピーが3つです。このマシンはイメージのレジストリに届かないので、このラボの Pod はどれも、マシンにある唯一のイメージ busybox を使います。kubectl get pods -n demo は、名前が hello- で始まりランダムな文字で終わる3つの Pod を表示します。数秒で Running になり、それまでは Pending か ContainerCreating です。
kubectl create namespace demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
kubectl create deployment hello --image=busybox:1.37.0 --replicas=3 -n demo -- sleep 3600ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
kubectl get pods -n demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
Pod を削除するとプログラムが止まると思っている人が多くいます。止まりません。Deployment はまだ Pod を3つ望んでいるので、別のものを作ります。プログラムを止めるには、Deployment を削除するか、数を減らします。
Pod を削除すると、戻ってくる
3つの Pod をまとめて削除します。--grace-period=1 は素早く止めるためだけのものです。コマンドは、削除した Pod ごとに1行、合わせて3行を表示します。そのあとでもう一度 Pod を表示すると、3つあり、新しい名前で AGE は数秒です。Kubernetes に起動を頼んだ人はいません。Deployment が1つもないことに気づいて、3つ作ったのです。
kubectl delete pods -n demo -l app=hello --grace-period=1ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
kubectl get pods -n demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
チェック
ヒント
3つとも削除したのに、なぜまた Pod が3つあるのでしょうか。答え:Deployment は3つの Pod という願いで、Kubernetes はその願いを実現し続けるからです。
数を変えて、片付ける
スケールとは、願いの数を変えることです。kubectl scale は5つを求めます。2つの新しい Pod が起動するあいだ、Deployment の READY は 3/5 と表示され、そのあと 5/5 になります。最後のコマンドは名前空間を削除し、中のものもすべて消えて、ラボの準備ができます。
kubectl scale deployment hello -n demo --replicas=5ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
kubectl get deployment hello -n demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
kubectl delete namespace demoここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
さあ、ラボに取り組もう
ヒント
1つの Deployment が Pod を3つ保つのを見ました。あなたのラボはもっと求めます。1つの Service の名前の後ろに3台の Web サーバー、ページの元になる ConfigMap、そして Kubernetes の言うことを読んで直す3つの壊れた Deployment です。ターミナルで cat README.md を実行して、ホームフォルダーの README.md を開きましょう。
最後のチェック
ヒント
見返さずに答えましょう。1. Deployment は何をしますか。2. 3つの Pod の Deployment で Pod を1つ削除すると何が起こりますか。3. kubectl scale は何を変えますか。4. 名前空間は何のためにありますか。答え:同じ Pod を決まった数だけ動かし続ける。新しい Pod を作るので、また3つになる。Deployment が望む Pod の数。あるグループのものを別のグループのものから分ける。
先生へ
ヒント
このレッスンは、ラボで進めるレッスンの小さな例です。ステップと実行ボタンがレッスンで、ラボは生徒それぞれのコピーです。VM ラボで行い、生徒はそれぞれ自分の Ubuntu マシンを持ち、その中に1ノードの Kubernetes クラスター(k3s)があります。実行ボタンはそのターミナルに入力して、表示された結果を見せます。学習のポイント:1. Deployment は Pod の数という願いである。2. Kubernetes は願いを実現し続けるので、削除した Pod は戻る。3. スケールは数を変える。よくある間違い:Pod を削除するとプログラムが止まると思うこと。準備するもの:ラボとブラウザー、そして学校や大学のアカウント(クラスターに 2 GB が必要なため)。ヒント:Pod を削除する前に、何が起こるかとその理由をクラスに尋ねましょう。ラボ自体には、クラスターを採点するチェックがあります。レッスンは自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューでゼロから作れます。