クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Kubernetesで小さなアプリを動かす

このレッスンのあとで: Deployment、Service、ConfigMapを組み合わせて、小さなアプリを動かせる。

70分のレッスンコマンド14件Kubernetes のラボ:専用の Ubuntu VM に生徒ごとの1ノード k3s クラスター

3つの部品でアプリを動かす

Kubernetesで小さなアプリを動かすには、Deployment、Service、ConfigMapの3つを組み合わせます。Deploymentが動かし続け、Serviceが名前を付け、ConfigMapが設定を渡します。

このレッスンでは、パン屋の「本日のお知らせ」ページを、3つの部品で動かします。部品がどうつながるかも、書き方で確かめます。

このレッスンのゴール

メモ

Deployment、Service、ConfigMapを組み合わせて、小さなアプリを動かせる。

重要な言葉

ことばいみれい
マニフェスト部品の書き方を書いた、YAMLのファイル
YAML字下げで入れ子を表す、設定の書式
kubectl applyマニフェストの通りに、クラスタを合わせるコマンドkubectl apply -f app.yaml
dry-run実際には作らず、書き方だけを出す試し方
configMapKeyRef環境変数の値を、ConfigMapのキーから取る書き方

学生が入力するセルは、このプレビューでは空白です。

マニフェストは、部品の書き方のファイル

Kubernetesの部品は、ふつうマニフェストというYAMLのファイルで書きます。ファイルがあれば、kubectl apply -f で、そのとおりにクラスタを合わせられます。

--dry-run=client -o yaml を付けると、部品を作らずに、マニフェストの形だけを出します。まず、Deploymentの形を見ましょう。Serviceの形は、Deploymentができてから見ます。

Deploymentの書き方を見る

コマンド
kubectl create deployment bread --image=busybox:1.37.0 --replicas=2 -n bakery --dry-run=client -o yaml

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: Deploymentのマニフェスト

コード: bash
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: bread
  name: bread
  namespace: bakery
spec:
  replicas: 2
  selector:
    matchLabels:
      app: bread
  template:
    metadata:
      labels:
        app: bread
    spec:
      containers:
      - image: busybox:1.37.0
        name: busybox

部品をつなぐ4つの値

つなぐところ合わせる2つ外れるとどうなるか
Deploymentの中selector.matchLabels と template の labelsDeploymentが作れない
ServiceとPodServiceのセレクタと、Podのラベル送り先が空になる
ServiceのポートtargetPort と、Podのポート呼んでも届かない
環境変数configMapKeyRef の名前とキーPodが始まらない

学生が入力するセルは、このプレビューでは空白です。

3つの部品を順に作る

順番は、ConfigMap、Deployment、Serviceです。Deploymentは、起動のとき、環境変数 NOTICE と自分のPodの名前から、ページを1つ書きます。

Serviceは、ポート80をPodの8080につなぎます。最後に、試すPodから名前 bread を呼びます。返る文字は、ConfigMapの値と、答えたPodの名前です。

名前空間を作る

コマンド
kubectl create namespace bakery

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ConfigMapを作る

コマンド
kubectl create configmap shop-info -n bakery --from-literal=NOTICE=bread-is-ready

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

パン屋のDeployment

コマンド
kubectl create deployment bread --image=busybox:1.37.0 --replicas=2 -n bakery -- sh -c 'mkdir -p /www; echo "$NOTICE from $HOSTNAME" > /www/index.html; httpd -f -p 8080 -h /www'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ConfigMapを環境変数にする

コマンド
kubectl set env deployment/bread -n bakery --from=configmap/shop-info

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

入れ替わるまで待つ

コマンド
kubectl rollout status deployment/bread -n bakery

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Serviceの書き方を見る

コマンド
kubectl expose deployment bread --port=80 --target-port=8080 -n bakery --dry-run=client -o yaml

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Serviceを作る

コマンド
kubectl expose deployment bread --port=80 --target-port=8080 -n bakery

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

名前で呼ぶ

コマンド
kubectl run probe -n bakery --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://bread

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

お知らせを変えて、全部のつながりを確かめる

お知らせを変えるには、ConfigMapを書き換えて、Podを入れ替えます。Serviceは、新しいPodを自動で見つけます。

もう一度名前を呼ぶと、新しいお知らせと、新しいPodの名前が返ります。3つの部品が、1つのアプリとして動いている印です。

お知らせを書き換える

コマンド
kubectl patch configmap shop-info -n bakery -p '{"data":{"NOTICE":"sold-out"}}'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Podを入れ替える

コマンド
kubectl rollout restart deployment/bread -n bakery

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

入れ替わるまで待つ

コマンド
kubectl rollout status deployment/bread -n bakery

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

もう一度、名前で呼ぶ

コマンド
kubectl run probe -n bakery --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://bread

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

1つの部品が動いていれば、アプリ全体も動くと思いがちです。部品は、ラベル、ポート、ConfigMapの名前で、1つずつつながっています。どれか1つの綴りが違うだけで、つながりが切れます。作ったら、必ず名前で呼んで確かめます。

名前空間を片づける

コマンド
kubectl delete namespace bakery

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

このラボとソースについて: Kubernetes のラボ:専用の Ubuntu VM に生徒ごとの1ノード k3s クラスター

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。