【问题标题】:Environment variables not available within pod/container when using "envFrom" and "configMapRef" (kustomize/kubernetes/laravel)使用“envFrom”和“configMapRef”(kustomize/kubernetes/laravel)时,pod/container 中的环境变量不可用
【发布时间】:2020-04-04 13:05:15
【问题描述】:

我将 kustomize 用作独立二进制文件(随 Homebrew 安装),并具有以下 base/kustomization.yaml 文件:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
  app: myservice
  app.kubernetes.io/name: myservice
  service: myservicename
  vendor: mycompany
  app.kubernetes.io/version: "0.1.0"
namePrefix: myservice-
namespace: mynamespace
commonAnnotations:
  supportMail: support@sagich.net
resources:
- pre-install-job.yaml
- cronjob.yaml
- service.yaml
- api.yaml
- worker.yaml
configMapGenerator:
- files:
  - env.properties
  name: configmap
secretGenerator:
- envs:
  - env.properties
  name: env-file-secret

env.properties 文件如下所示:

APP_NAME="vendor-service-whatever"
APP_ENV="production"
APP_KEY="base64:onKQb...LtU="
APP_DEBUG="false"
APP_URL="https://myamazingsite.com"
LOG_CHANNEL="stderr"
DB_CONNECTION="mysql"
DB_HOST="mariadb-slave"
DB_DATABASE="incredibledb"

在我的 pre-install-job.yaml 配置中,我声明了一个这样的容器:

containers:
    - name: "pre-install-job"
      image: "registry.myamazingdomain.com/vendor/whatever/service:latest"
      imagePullPolicy: "Always"
      args:
        - /bin/bash
        - -c
        - php artisan migrate --force -v;
      envFrom:
        - configMapRef:
            name: "configmap"

问题:环境变量在 pod/container 中不可用。我还尝试将 configmap 作为 .env 文件安装在容器中,但也没有成功。也许有人可以指出我正确的方向。

产生的错误是:

Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] 连接被拒绝 (SQL: select * from information_schema.tables where table_schema = forge 和 table_name = 迁移和 table_type = '基表')

因为使用的是默认值,而不是环境变量中定义的值。

【问题讨论】:

    标签: laravel kubernetes environment-variables configmap kustomize


    【解决方案1】:

    好的,我再次尝试在项目中将 Confirmap 挂载为 .env 文件。但是这次我也提供了一个 subPath 定义。现在它可以工作了,“php artisan migrate”命令运行成功。

      volumes:
        - name: "env-volume"
          configMap:
            name: "configmap"
      containers:
        - name: "pre-install-job"
          image: "registry.myamazingdomain.com/vendor/whatever/service:latest"
          imagePullPolicy: "Always"
          args:
            - /bin/bash
            - -c
            - php artisan migrate --force -v;
          volumeMounts:
            - name: "env-volume"
              mountPath: "/var/www/html/app/.env"
              subPath: "env.properties"
    

    subPath 定义是 configMapGenerator 的一部分:

    configMapGenerator:
      - name: configmap
        files:
          - env.properties
    

    例如:

    $ kubectl -n mynamespace get configmap blablubb-configmap-8c4m97m94g -o yaml
    
    apiVersion: v1
    data:
      env.properties: |
        APP_NAME="vendor-service-whatever"
        APP_ENV="production"
        APP_KEY="base64:onKQb...LtU="
        APP_DEBUG="false"
    

    【讨论】:

    • 我强烈建议将该 .env 文件从您的 Web 根目录中移出并移至某处的系统路径中。
    • @JeffBeagley 我不完全知道你在说什么。 .env 文件存储在 Kubernetes Configmap 中并挂载到 Laravel 项目目录://.env。文档根目录是 //public
    • 很好,从示例中很难看出 /var/www/html/app 不是文档根目录。这可能会导致某人看到此内容并将其放入 Web 应用程序的根目录中。
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    相关资源
    最近更新 更多