背景
個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。
その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。
引用や参考と今回の自分の勉強用の書籍の紹介
技術評論社『Kubernetes実践入門』のサンプルコード
Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方
実際の学びについて
書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
勉強開始
apiVersion: v1
kind: ConfigMap
metadata:
name: my-cm
data: # キーバリューで設定情報を格納する (1)
DATABASE_HOST: db.example.com
nginx.conf: |
server{
listen 80 default;
server_name _;
access_log /dev/stdout;
location / {
root /var/www/html;
index index.html;
}
}
- key:value で値を保存して使うことができる
- |(バーティカルバー)を利用すると改行が保持されて設定できる
コマンド郡
実行前
ConfigMap のマニュフェストファイルを適用する
$ kubectl create -f my-cm.yaml
configmap/my-cm created
実行後
実行後(コマンド実施)
$ kubectl describe configmaps my-cm
Name: my-cm
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
DATABASE_HOST:
----
db.example.com
nginx.conf:
----
server{
listen 80 default;
server_name _;
access_log /dev/stdout;
location / {
root /var/www/html;
index index.html;
}
}
Events: <none>
ConfigMap をボリュームとして扱う場合
apiVersion: v1
kind: Pod
metadata:
name: cm-volume
spec:
containers:
- name: nginx
image: k8spracticalguide/nginx:1.15.5
ports:
- containerPort: 80
volumeMounts: # コンテナ内でマウントするVolumeのリスト (3)
- name: my-cm # 下記のVolumeの名前と一致しなければならない
readOnly: true
mountPath: /var/nginx
volumes: # コンテナでマウントするVolumeのリスト (2)
- name: my-cm # Volumeの名前
configMap:
name: my-cm # ConfigMap名と一致しなければならない
items: # 省略するとdataの全てがファイルとして配置される
- key: nginx.conf # dataのキー名
path: nginx.conf # 別名として配置することもできる
マニュフェストを適用する
$ kubectl create -f cm-volume.yaml
pod/cm-volume created
実行後
実行後(コマンド)
ファイルが作成されていることを確認できる
$ kubectl exec cm-volume -- ls /var/nginx
nginx.conf
作成されたファイルの中身は ConfigMap の中身になっていることを確認できる
$ kubectl exec cm-volume -- cat /var/nginx/nginx.conf
server{
listen 80 default;
server_name _;
access_log /dev/stdout;
location / {
root /var/www/html;
index index.html;
}
}
ConfigMap を環境変数として扱う場合
apiVersion: v1
kind: Pod
metadata:
name: cm-env
spec:
containers:
- name: nginx
image: k8spracticalguide/nginx:1.15.5
ports:
- containerPort: 80
env: # コンテナで設定される環境変数のリスト (4)
- name: DATABASE_HOST # 設定する環境変数名
valueFrom:
configMapKeyRef:
name: my-cm # ConfigMap名を指定
key: DATABASE_HOST # ConfigMapのキー名を指定
マニュフェストを適用する
$ kubectl create -f cm-env.yaml
pod/cm-env created
実行後(コマンド)
環境変数に値が設定されていることを確認できる
$ kubectl exec cm-env -- sh -c "env | grep DATABASE"
DATABASE_HOST=db.example.com
ConfigMap のすべてを環境変数として定義する場合
apiVersion: v1
kind: Pod
metadata:
name: cm-env2
spec:
containers:
- name: nginx
image: k8spracticalguide/nginx:1.15.5
envFrom: # ConfigMap my-cmの全てのdataが環境変数として定義される (5)
- configMapRef:
name: my-cm
マニュフェストを適用する
$ kubectl create -f cm-env2.yaml
pod/cm-env2 created
環境変数に値が設定されていることを確認できる
ここでは、ConfigMap は DATABASEだけ を確認
実行後(コマンド)
$ kubectl exec cm-env -- sh -c "env | grep DATABASE"
DATABASE_HOST=db.example.com
ConfigMap をコマンドライン引数として使う場合
apiVersion: v1
kind: Pod
metadata:
name: cm-arg
spec:
restartPolicy: Never # 再起動のポリシー
containers:
- name: busybox
image: k8spracticalguide/busybox:1.28
command: ["/bin/sh", "-c", "echo $(DATABASE_HOST)"] # 環境変数として定義したConfigMapを参照する (6)
env: # 環境変数として設定
- name: DATABASE_HOST # 設定する環境変数名
valueFrom:
configMapKeyRef:
name: my-cm # ConfigMap名を指定
key: DATABASE_HOST # ConfigMapのキー名を指定
マニュフェストを適用する
$ kubectl create -f cm-arg.yaml
pod/cm-arg created
実行後(コマンド)
マニュフェストで echo した内容がログに表示されていることを確認
$ kubectl logs cm-arg --timestamps
2020-04-12T01:32:16.2357517Z db.example.com
次は Secret をやっていきます。
秘密にしたい情報を使う方法は大切なのでやっていきたいと思います。
最後に
今回の ConfigMap の章は結構色々種類があって、色々な局面で使われる想定の概要を理解するのに良いと思いました。
自分はまだ細かい部分については次章以降で詳しく説明や思いを理解していきたいと思います。