「Kubernetes完全ガイド」 を元に、環境変数とSecretの設定確認を行った結果をまとめます。
実行環境
Kubernetes / kubectl version : 1.5.2
CentOS 7.4
環境変数の設定
Kubernetesで環境変数を設定するには、Podテンプレートに、envまたはenvFromを指定
静的設定
spec.containers.envに値を設定
sample-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample-env
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.12
env:
- name: MAX_CONNECTION
value: "100"
作成したPod/コンテナに、環境変数が設定されている
[root@master ~]# kubectl exec -it sample-env env | grep MAX_CONNECTION
MAX_CONNECTION=100
Podに関する情報(Podのアドレス、起動時間等)は、fieldRefを使って参照可能。参照可能な値はkubectl get pods -o yamlで見えたもの
例)稼働ノード
[root@master ~]# kubectl get pods sample-env -o yaml
中略
spec:
nodeName: worker
sample-env-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: sample-env-pod
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.12
env:
- name: K8S_NODE
valueFrom:
fieldRef:
fieldPath: spec.nodeName
稼働しているPodに、自身の情報(稼働ノード情報)が環境変数として、埋め込まれている事が確認出来る
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
sample-env-pod 1/1 Running 0 9s 172.17.0.4 worker
[root@master ~]# kubectl exec -it sample-env-pod env | grep K8S_NODE
K8S_NODE=worker
Secret
データベース接続用のユーザ名、パスワード等の機密情報のPod外部への格納機能(base64エンコード)。一般的なスキーマレスのGenericを作成
#Secretに埋め込む値をファイルに書き出す
[root@master ~]# echo -n "root" > ./username
[root@master ~]# echo -n "rootpassword" > ./password
作成したファイルを元にSecretを作成
[root@master ~]# kubectl create secret generic --save-config sample-db-auth --from-file=./username --from-file=./password
secret "sample-db-auth" created
作成したSecretを確認 kubectl get
[root@master ~]# kubectl get secrets sample-db-auth -o json
{
"apiVersion": "v1",
"data": {
"password": "cm9vdHBhc3N3b3Jk",
"username": "cm9vdA=="
},
中略
base64からのデコード
[root@master ~]# kubectl get secrets sample-db-auth -o json |jq -r .data.username | base64 --decode
root