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のマニフェスト
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 の labels | Deploymentが作れない |
| ServiceとPod | Serviceのセレクタと、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ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。