如何从挂载文件为Kubernetes MariaDB部署设置环境变量值
从挂载文件设置MariaDB环境变量的解决方案
你的需求是把挂载卷中/etc/gsm/key.pem文件的内容赋值给MARIADB_ROOT_PASSWORD环境变量,直接设置文件路径是无效的。由于Secret和ConfigMap方案不可用,可以通过修改容器启动命令的方式实现:
apiVersion: apps/v1 kind: Deployment metadata: name: mariadb-deployment namespace: readonly-ns spec: replicas: 1 # 补充原配置缺失的副本数 selector: matchLabels: app: mariadb template: metadata: labels: app: mariadb spec: volumes: - name: cert-volume emptyDir: {} serviceAccountName: readonly-sa initContainers: - name: init image: google/cloud-sdk:slim command: ["/bin/sh"] args: - -c - >- gcloud secrets versions access "latest" --secret=bq-readonly-key > /etc/gsm/key.pem volumeMounts: - name: cert-volume mountPath: /etc/gsm/ containers: - name: mariadb image: mariadb ports: - containerPort: 3306 # 通过启动命令读取文件内容注入环境变量 command: ["/bin/sh", "-c"] args: - >- export MARIADB_ROOT_PASSWORD=$(cat /etc/gsm/key.pem) && docker-entrypoint.sh mysqld volumeMounts: - name: cert-volume mountPath: /etc/gsm/
修改说明
- 补充了
spec.replicas的数值(K8s Deployment必须明确副本数量) - 移除原
env字段,改用容器启动命令读取文件内容并设置环境变量 - 通过
export MARIADB_ROOT_PASSWORD=$(cat /etc/gsm/key.pem)将文件中的密码内容注入环境变量,再执行MariaDB官方镜像的默认启动脚本docker-entrypoint.sh mysqld,保证服务正常启动
内容的提问来源于stack exchange,提问作者Krikor Garabed Kafalian
相关产品推荐
相关产品推荐

