K8s 掛載 .env 配置文件(透過kustomize)
K8S 掛載配置文件及環境變量configMap(cm)
在 Kubernetes 中,配置管理主要通過 ConfigMap 和 Secret 兩種資源來實現。這兩種方式的主要區別在於數據的敏感性:
- ConfigMap 用於存儲非敏感的配置數據。
- Secret 則用於存儲需要額外保護的敏感信息,雖然 Secret 在查看時會顯示為加密狀態,但實際上它只是進行了簡單的 base64 編碼,因此在安全性要求較高的環境中,可能需要採取額外的加密措施。
ConfigMap 的使用方式非常靈活,可以將其掛載到容器中作為環境變量或文件使用。當作為環境變量使用時,ConfigMap 中的鍵值對會直接映射為容器內的環境變量,使得應用程序可以輕鬆訪問這些配置。另一種常見的用法是將 ConfigMap 掛載為文件,這種方式允許將整個 ConfigMap 掛載到容器的指定路徑下,每個鍵值對都會成為該路徑下的一個文件,文件名為鍵,內容為相應的值。
特別值得一提的是,ConfigMap 還支持將單個配置項掛載為文件,這在處理特定格式的配置文件(如 .env 文件)時特別有用。通過這種方式,可以將 ConfigMap 中的某個鍵對應的值掛載為容器中的一個指定文件,從而實現更精細的配置管理。
若要查看使用原生k8s 進行掛載可以到以下進行查看
事前準備
# .env
db_host=127.0.0.1:3306
db_name=xxx_db
db_user=root
db_pass=123456
db_charset=utf8mb4
db_schema_cache=1
db_schema_cache_duration=30
# Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
#secretGenerator:
configMapGenerator:
- name: env-file
files:
- .env
generatorOptions:
disableNameSuffixHash: true # 生成的 Secret 名稱不會有後綴哈希值
透過.env檔案的方式 掛載在容器特定路徑
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
spec:
template:
spec:
containers:
- name: php
image: harbor.xxx.com/xx/php:v4
volumeMounts:
- mountPath: /app/.env
name: env-file
subPath: .env 透過
volumes:
- name: env-file
configMap:
name: env-file
掛載到容器的環境變量中
apiVersion: apps/v1
kind: Deployment
metadata:
name: php
spec:
template:
spec:
containers:
- name: php
image: harbor.xxx.com/xx/php:v4
volumeMounts:
- mountPath: /app/.env
name: env-file
subPath: .env 透過
volumes:
- name: env-file
configMap:
name: env-file