我创建了一个简单的 python 应用程序,它从 SQL 数据库中读取并显示一个值。我为应用程序和 SQL DB 创建了单独的 docker 容器,并且应用程序按预期运行。下面是我的应用程序的 Dockerfile。我将凭据作为环境变量传递给 python 应用程序。
FROM laudio/pyodbc:1.0.4
WORKDIR /pythonappsource
ARG A_DB_SERVER_NAME=""
ARG A_DB_NAME=""
ARG A_DB_USERNAME=""
ARG A_DB_PASSWORD=""
ENV DB_SERVER_NAME=$A_DB_SERVER_NAME
ENV DB_NAME=$A_DB_NAME
ENV DB_USERNAME=$A_DB_USERNAME
ENV DB_PASSWORD=$A_DB_PASSWORD
ADD PythonApp.py .
CMD ["python", "PythonApp.py"]
我现在正在尝试将 docker 容器添加到 kubernetes pod。SQL DB pod 工作正常,没有任何问题。但是 python 应用程序的 pod 没有启动。它因以下错误而崩溃:
回溯(最后一次调用):文件“PythonApp.py”,第 3 行,在 cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=;PORT=1433;DATABASE=;UID=; PWD=') pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]登录超时已过期 (0) (SQLDriverConnect)')
我创建了一个服务来将数据库公开给 python 应用程序。下面是服务的代码。
apiVersion: v1
kind: Service
metadata:
name: db-service
spec:
ports:
- protocol: TCP
port: 1433
targetPort: 1433
下面是 python 应用程序的部署文件。
apiVersion: apps/v1
kind: Deployment
metadata:
name: pythonapp-depl
labels:
app: pythonapp-depl
spec:
replicas: 1
selector:
matchLabels:
app: pythonapp-depl
template:
metadata:
labels:
app: pythonapp-depl
spec:
containers:
- image: repository:image
name: pythonapp-depl
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-secret
key: db_username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: db_password
- name: DB_SERVER_NAME
valueFrom:
configMapKeyRef:
name: db-configmap
key: database_url
- name: DB_NAME
valueFrom:
configMapKeyRef:
name: db-configmap
key: database_name
我对 kubernetes docker 很陌生,所以我知道我错过了一些非常愚蠢的东西。任何帮助都将不胜感激。
谢谢!