我开始掌舵以进行Kubernetes的部署,并且在将Nodejs应用程序与postgres DB连接时陷入困境。我正在使用头盔进行向K8的部署。
下面是我要申请的YAML文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "service-chart.fullname" . }}-deployment
spec:
replicas: 2
selector:
matchLabels:
app: {{ template "service-chart.fullname" . }}-converstionrate
template:
metadata:
labels:
app: {{ template "service-chart.fullname" . }}-converstionrate
spec:
containers:
- name: {{ template "service-chart.fullname" . }}-converstionrate
image: <application_image>
env:
- name: DB_URL
value: postgres://{{ template "postgres.fullname" . }}.default.svc.cluster.local:5432/{{ .Values.DbName }}
---
kind: Service
apiVersion: v1
metadata:
name: {{ template "service-chart.fullname" . }}-service
spec:
type: NodePort
selector:
app: {{ template "service-chart.fullname" . }}-converstionrate
ports:
- port: 8080
targetPort: 3000
下面是我使用postgres依赖项的需求文件
dependencies:
- name: postgresql
version: "8.1.2"
repository: "https://kubernetes-charts.storage.googleapis.com/"
下面是我尝试连接到数据库的应用程序代码:-
if (config.use_env_variable) {
// sequelize = new Sequelize(process.env[config.use_env_variable], config);
sequelize = new Sequelize(
process.env.POSTGRES_HOST,
process.env.POSTGRES_USER,
process.env.POSTGRES_PASSWORD,
pocess.env.POSTGRES_DIALECT
);
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
}
我无法理解的是,如何连接到数据库,而上述是我无法做到的??任何人都可以在这里帮助我吗?
我是掌舵的新手,因此无法弄清楚。我研究了很多博客,但是有些不清楚如何完成。由于数据库正在一个POD中运行,而节点应用程序在另一个POD中运行,那么如何将其连接在一起?如何设置要使用的Yaml中DB的env变量?
FYI ---我现在正在使用minikube进行部署。
应用程序代码可用:-在https://github.com/Vishesh30/Node-express-Postgress-helm
谢谢,Vishesh。
正如@David Maze提到的,您需要将变量名从DB_URL
固定为POSTGRES_HOST
,但我还能看到其他一些内容。
我试图为您重现场景,并且为我提供了以下作品:
您需要从YAML文件中修复服务dns:
postgres://{{ template "postgres.fullname" . }}.default.svc.cluster.local:5432/{{ .Values.DbName }}
to
postgres://{{ template "postgresql.fullname" . }}-postgresql.default.svc.cluster.local:5432/{{ .Values.DbName }}
[之后,您需要将数据库的主机名,数据库用户名和密码传递给您的应用程序,您可以按照Helm documentaion中的说明,将其覆盖PostgreSQL默认变量(因为它是应用程序的子图),然后注入您使用环境变量进行容器。
有很多变量,请参见此处。
将此值添加到您values.yaml
中以覆盖PostgreSQL默认值:
postgresql:
postgresqlUsername: dbuser
postgresqlPassword: secret # just for example
您可以创建一个秘密文件来存储密码:
service-chart / templates / secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: dbconnection
type: Opaque
stringData:
POSTGRES_PASSWORD: {{ .Values.postgresql.postgresqlPassword }
如果您不想将密码保留在文件中,也许可以在部署之前尝试一些自动化过程>重写您的文件。您可以阅读有关机密here.]的更多信息>
现在在
deployment.yaml
中添加变量,将从POSTGRES_USERNAME
文件中获取values.yaml
,并将值添加到POSTGRES_PASSWORD
:
env: - name: POSTGRES_HOST value: postgres://{{ template "postgresql.fullname" . }}-postgresql.default.svc.cluster.local:5432/{{ .Values.DbName }} - name: POSTGRES_USERNAME value: {{ .Values.postgresql.postgresqlUsername }} - name: POSTGRES_PASSWORD valueFrom: secretKeyRef: name: dbconnection key: POSTGRES_PASSWORD
部署后,您可以检查容器的环境变量。
我真的希望它能对您有所帮助!