Docker 실행 중에 k8s의 ENV 변수를 Python 앱에 제공하는 방법
Oct 14 2020
빌드 프로세스 중에 앱에 삽입되므로 지금은 env 변수를 하드 코딩하는 도커 파일이 있습니다. 이제 응용 프로그램이 k8s 포드에서 실행될 때 런타임 중에 이러한 항목을 삽입하고 싶습니다. 나는 노력 이 있지만 작동하지 않습니다. 아래는 내 도커 파일입니다. 진지한 파이썬을 처음 사용하고 그것을 고치는 방법을 모르겠습니다.
FROM python:3.7-slim AS build
WORKDIR /app
COPY . .
RUN python3 setup.py bdist_wheel
#ENV USE_DB="True" \
# DB_USERNAME= \
# DB_HOST= \
# DB_PASSWORD= \
# DB_DB=sth
RUN pip3 install dist/app_search*.whl && \
semanticsearch-preprocess
FROM python:3.7-slim
WORKDIR /opt/srv
COPY --from=build /app/dist/app_search*.whl /opt/srv/
COPY --from=build /tmp/projects* /opt/srv/
# set environment variables to /opt/srv
ENV DICT_FILE="/opt/srv/projects.dict" \
MODEL_FILE="/opt/srv/projects.model.cpickle" \
INDEX_FILE="/opt/srv/projects.index" \
EXTERNAL_INDEX_FILE="/opt/srv/projects.mm.metadata.cpickle"
RUN pip3 install waitress && \
pip3 install app_search*.whl
EXPOSE 5000
ENTRYPOINT [ "waitress-serve" ]
CMD [ "--call", "app_search.app:main" ]
답변
avadhut007 Oct 14 2020 at 17:10
먼저 클러스터에서 k8s configmap 또는 k8s 비밀 (민감한 데이터에 더 적합)을 만듭니다. 그런 다음 k8s 배포 yaml에서 이러한 값을 포드의 환경 변수로 읽습니다.
공식 문서 : https://kubernetes.io/docs/concepts/configuration/secret/
예 : 비밀 yaml 만들기
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: "abc-user"
password: "pwd-here"
배포 yaml
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: redis
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
restartPolicy: Never
Matt Oct 15 2020 at 11:09
pod spec field :를 사용하여 env 변수를 k8s pod에 전달할 수 있습니다 env.
k8s 문서에서 다음 예제를보십시오.
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/node-hello:1.0
env:
- name: DEMO_GREETING
value: "Hello from the environment"
- name: DEMO_FAREWELL
value: "Such a sweet sorrow"
자세한 내용은 k8s 문서를 참조하십시오.
- k8s API 사양 참조
- 환경 변수 정의
- 비밀을 환경 변수로 사용