K8s 掛載 .env 配置文件(透過kustomize)

K8s 掛載 .env 配置文件(透過kustomize)

K8S 掛載配置文件及環境變量configMap(cm)

在 Kubernetes 中,配置管理主要通過 ConfigMap 和 Secret 兩種資源來實現。這兩種方式的主要區別在於數據的敏感性:

  • ConfigMap 用於存儲非敏感的配置數據。
  • Secret 則用於存儲需要額外保護的敏感信息,雖然 Secret 在查看時會顯示為加密狀態,但實際上它只是進行了簡單的 base64 編碼,因此在安全性要求較高的環境中,可能需要採取額外的加密措施。

ConfigMap 的使用方式非常靈活,可以將其掛載到容器中作為環境變量或文件使用。當作為環境變量使用時,ConfigMap 中的鍵值對會直接映射為容器內的環境變量,使得應用程序可以輕鬆訪問這些配置。另一種常見的用法是將 ConfigMap 掛載為文件,這種方式允許將整個 ConfigMap 掛載到容器的指定路徑下,每個鍵值對都會成為該路徑下的一個文件,文件名為鍵,內容為相應的值。

特別值得一提的是,ConfigMap 還支持將單個配置項掛載為文件,這在處理特定格式的配置文件(如 .env 文件)時特別有用。通過這種方式,可以將 ConfigMap 中的某個鍵對應的值掛載為容器中的一個指定文件,從而實現更精細的配置管理。

若要查看使用原生k8s 進行掛載可以到以下進行查看

Kubernetes配置管理-ConfigMap
ConfigMap 定義: 以鍵值對的形式儲存非敏感的設定資訊。 它將應用程式的配置與容器映像分離,使組態管理更加靈活。


事前準備

# .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