Kubernetes 初戰(五) 環境設定 ConfigMap、Secret
2021, Jun 18
過去使用 docker 在包裝應用程式時會一併把環境變數寫入到 Dockerfile 中作為服務的設定,但是難道每次更改設定都要重 build 一個 image 嗎,k8s 有提供比較方便的做法,那就是本篇要介紹到的 ConfigMap 與 Secret,可以直接從外部資源來設定容器內的環境變數
ConfigMap
ConfigMap 是 k8s 中用來設定環境變數的其中一個資源,主要用於設定一些較不敏感的資料,直接以明文撰寫就好
configmap.yml
# configmap.yml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cm
data:
TEST_VAR: testt
# pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
env:
- name: TEST_VAR
valueFrom:
configMapKeyRef:
name: nginx-cm
key: TEST_VAR
設定完後可以到 pod 裡直接輸入 env
查看環境變數有沒有被正確設定
Secret
Secret 用法跟 ConfigMap 基本差不多,不過是用來設定一些敏感資料的,常見的例如:
- 帳號密碼
- 一些 token 或是 ssh key 等等
secret.yml
# secret.yml
apiVersion: v1
kind: Secret
metadata:
name: nginx-secret
type: Opaque
data:
USERNAME: YWRtaW4gDQo=
PASSWORD: YWRtaW4gDQo=
可以看到這邊設定的內容是經過編碼的,其實就是 admin
經過 base64 轉換後的內容
## pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: nginx-secret
key: USERNAME
- name: PASSWORD
valueFrom:
secretKeyRef:
name: nginx-secret
key: PASSWORD
這樣設定之後一樣我們進到 pod 裡輸入 env
可以看到 secret 被解開後的值
結語
至此五篇拖了很長的時間才完成XD,而 k8s 初戰系列預計就到這邊了,接下來會是進階系列,其實也沒什麼明確的分水嶺,只是目前只是跟著團隊部署時在使用,沒太深入各種內容,單就以有使用到的表面的功能做點介紹跟紀錄,之後再針對一些議題去做各個資源的討論,只是不知道會拖稿多久XD