ConfigMapとは何か
ConfigMap(コンフィグマップ)は、アプリの設定を、アプリの外に置いておく入れ物です。設定を変えたいとき、イメージを作り直さずに、ConfigMapの値だけを書き換えられます。
注文アプリの「本日のおすすめ」は、毎日変わります。そのたびにアプリを作り直すのは、手間がかかります。
このレッスンのゴール
メモ
ConfigMapの値を、動いているPodに読ませ直せる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ConfigMap | 設定を、名前と値の組で入れておく部品 | |
| キー | ConfigMapの中の、設定1つの名前 | SPECIAL_DISH |
| 環境変数 | プログラムが始まるときに受け取る、名前と値 | |
| イメージ | コンテナのもとになる、アプリを1つにまとめた型 | |
| ロールアウト | Podを、新しいものに順に入れ替える作業 |
学生が入力するセルは、このプレビューでは空白です。
ConfigMapは設定の入れ物
ConfigMapには、キーと値の組を入れます。たとえば、キーが SPECIAL_DISH、値が curry です。
パスワードのような秘密は、ここに入れません。ConfigMapは、誰が見てもよい設定のためのものです。Podの外にあるので、Podを作り直さなくても値を書き換えられます。
名前空間を作る
kubectl create namespace cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
厨房のDeployment
kubectl create deployment kitchen --image=busybox:1.37.0 -n cafe -- sleep 3600ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ConfigMapを作る
kubectl create configmap board -n cafe --from-literal=SPECIAL_DISH=curryここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
値だけを読む
kubectl get configmap board -n cafe -o jsonpath='{.data.SPECIAL_DISH}'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ConfigMapの中身を見る
kubectl describe configmap board -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ConfigMapを環境変数としてPodに渡す
ConfigMapは、作っただけではPodに届きません。Deploymentの書き方に、「この値を環境変数で渡す」と足します。
kubectl set env --from=configmap/board は、そのキーを全部、同じ名前の環境変数にします。書き方が変わるので、ロールアウトでPodが入れ替わります。
環境変数として渡す
kubectl set env deployment/kitchen -n cafe --from=configmap/boardここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
入れ替わるまで待つ
kubectl rollout status deployment/kitchen -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Podの中の値を読む
kubectl exec deployment/kitchen -n cafe -- printenv SPECIAL_DISHここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
動いているPodは古い値のまま
環境変数は、Podが始まるときに1度だけ決まります。あとでConfigMapを書き換えても、動いているPodの値は変わりません。
新しい値を読ませるには、Podを入れ替えます。kubectl rollout restart が、順に入れ替えます。
ConfigMapを書き換える
kubectl patch configmap board -n cafe -p '{"data":{"SPECIAL_DISH":"ramen"}}'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ConfigMapの値を読む
kubectl get configmap board -n cafe -o jsonpath='{.data.SPECIAL_DISH}'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
Podの値は、まだ古い
kubectl exec deployment/kitchen -n cafe -- printenv SPECIAL_DISHここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ConfigMapとPodの値のずれ
| 出来事 | ConfigMapの値 | Podが見る値 |
|---|---|---|
| 環境変数として渡して、Podが始まる | curry | curry |
| ConfigMapを書き換える | ramen | curry |
| rollout restart で入れ替える | ramen | ramen |
学生が入力するセルは、このプレビューでは空白です。
Podを入れ替える
kubectl rollout restart deployment/kitchen -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
入れ替わるまで待つ
kubectl rollout status deployment/kitchen -n cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
新しい値を読む
kubectl exec deployment/kitchen -n cafe -- printenv SPECIAL_DISHここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
ConfigMapを書き換えれば、動いているPodも新しい値になると思いがちです。環境変数として渡した値は、Podが始まるときに決まります。書き換えたら、Podを入れ替えます。入れ替えるまで、古い値のままです。
名前空間を片づける
kubectl delete namespace cafeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。