在將 image 直接轉成線上可用的環境時,我們有注意到 docker run 原本的方式是會從 docker in docker 帶入 .env 檔。為了安全考量以及提高可調整性,我們會將它轉為 configmap。
過往 run 的 code
docker run \
-p 8080:80 \
-v ./secrets:/secrets \
--entrypoint bash \
--env-file .env \
--gpus all \
-it --rm image:{version}-release
這邊的 .env 用幾個不重要的給大家做參考
USE_SUBPROCESS=1
MAX_MESSAGE=1
轉換方式是直接將 .env 改成 configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: project-config
data:
USE_SUBPROCESS: "1"
MAX_MESSAGE: "1"
然後執行
kubectl apply -f configmap.yaml
如果我們是 job yaml 就會長這樣
apiVersion: batch/v1
kind: Job
metadata:
name: project-job
spec:
backoffLimit: 4
ttlSecondsAfterFinished: 3600
template:
spec:
containers:
- name: project-extraction
envFrom:
- configMapRef:
name: project-config
但因為我們是用 cloudfunction 觸發,所以會改成
job = client.V1Job(
api_version="batch/v1",
kind="Job",
metadata=client.V1ObjectMeta(name=job_name),
spec=client.V1JobSpec(
template=client.V1PodTemplateSpec(
spec=client.V1PodSpec(
containers=[
client.V1Container(
name=container_name,
env_from=[
client.V1EnvFromSource(
config_map_ref=client.V1ConfigMapEnvSource(
name="project-config"
)
)
]
)
]
)