gpt4 book ai didi

postgresql - Kubernetes - 使用 flyway 作业在 postgres 数据库上执行迁移 - 连接问题

转载 作者:行者123 更新时间:2023-12-05 02:39:23 25 4
gpt4 key购买 nike

问题

错误照片

Flyway Job Error

我目前正在尝试使用 flyway 在 postgres 中执行迁移。根据此错误消息,我感觉无法找到初始化脚本。不太确定我缺少什么,因为在使用 docker 容器时初始化脚本有效。

如能解决此问题,我们将不胜感激。

我尝试过的:

  1. 到目前为止,我已经尝试使用作业中的连接字符串来查看是否是连接问题。
  2. 然后我尝试使用配置映射和内部的 init sql 脚本,希望脚本对迁移可见。这种方法并没有太多运气。我附上了我为这种方法找到的例子。 Migrations with ConfigMap for init sql scripts

我找到了更多的研究链接,但它们不太适合或无法解决我的问题,也没有那么值得注意或已过时。

  1. Database migrations in Kubernetes with flyway video
  2. Continuous Database configuration with flyway

代码/Kubernetes 设置

以下是我目前的设置:

旁注:我正在使用 kind 在本地拉取我的 docker 镜像并创建我的集群,我将在最后附上我的 docker compose 和 docker 文件。

飞行路线设置

我将 Flyway 作为 Kubernetes 中的一项工作,结构如下:

Flyway作业文件

apiVersion: batch/v1
kind: Job
metadata:
name: flyway-migration-job
spec:
template:
spec:
containers:
- name: flyway
image: flyway/flyway:6.3.1
command: ["flyway -url=jdbc:postgresql://postgres-master:5432/wallet -user=test_user -password=testuser1234 -connectRetries=60 migrate"]
restartPolicy: Never
backoffLimit: 1

Postgres 设置

Postgres 部署文件:

这项工作使用的是我创建部署的 postgres:

apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-master
labels:
app: postgres-master
spec:
replicas: 1
selector:
matchLabels:
app: postgres-master
template:
metadata:
labels:
app: postgres-master
spec:
containers:
- name: postgres-master
image: postgres:12
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: wallet
- name: POSTGRES_USER
value: test_user
- name: POSTGRES_PASSWORD
value: testuser1234

Postgres 服务文件

然后我使用这个 Postgres 服务公开了 Postgres pod:

apiVersion: v1
kind: Service
metadata:
name: postgres-master
labels:
app: postgres-master
spec:
type: NodePort
ports:
- protocol: TCP
port: 5432
targetPort: 5432
selector:
app: postgres-master

节点设置

我还有一个连接到数据库 pod 的节点部署,我已经确认我已经能够使用主机名 postgres-master(pod 名称)、上述登录详细信息和端口 5432 连接到数据库。

节点部署文件

为了完整起见,我附上了节点部署文件,但它确实有效。

apiVersion: apps/v1
kind: Deployment
metadata:
name: node-deployment
labels:
app: node-deployment
spec:
replicas: 3
selector:
matchLabels:
app: node-deployment
template:
metadata:
labels:
app: node-deployment
spec:
containers:
- name: node
image: wallet-api-20_web:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
env:
- name: PG_HOST
value: "postgres-master.default"

Docker 设置

Docker 组合

然后我有我的 docker compose 文件,我用它来构建我的图像:顺便提一下 - 在我开始添加 Kubernetes 之前,所有 docker 镜像都协同工作,包括迁移。

version: '3.5'
services:
web:
build:
dockerfile: ./Dockerfile
container_name: wallet-api-web
depends_on:
- flyway
ports:
- "8080:8080"
postgres-db:
build:
dockerfile: ./utils/db.Dockerfile
container_name: postgres-db
environment:
POSTGRES_PASSWORD: testuser1234
POSTGRES_USER: test_user
POSTGRES_DB: wallet
image: postgres:12
ports:
- "5432:5432"
restart: always

flyway:
command: -url=jdbc:postgresql://db:5432/wallet -user=test_user -password=testuser1234 -connectRetries=60 migrate
container_name: flyway-migrations
depends_on:
- db
image: flyway/flyway:6.3.1
volumes:
- ${PWD}/migrations/sql:/flyway/sql

Postgres Dockerfile

这是我的 postgres dockerfile:

FROM postgres:13

ENV POSTGRES_DB wallet

节点dockerfile

FROM node:15
ENV NODE_ENV=production

WORKDIR /app

# Copying the package json first enables caching.
COPY ["package.json", "package-lock.json*", "./"]

RUN npm install --production

COPY . .

RUN npm run build

ENTRYPOINT npm run start

Flyway 迁移脚本

这是我拥有的唯一迁移脚本,在迁移到 Kubernetes 之前它可以正常工作。

CREATE TABLE transaction_events (
transaction_version int,
transaction_type VARCHAR(200),
coins int,
transaction_id VARCHAR(500),
wallet_id VARCHAR(500)
)

任何帮助将不胜感激,我觉得这可能是我所缺少的一些小东西。

如果需要更多信息,请告诉我。

如有任何问题,请随意添加,我会尽力提供更多背景信息。

谢谢。

最佳答案

我怀疑您调用 command 的方式是问题所在。它需要是 命令:["flyway", "-url=jdbc:postgresql://postgres-master:5432/wallet", "-user=test_user", "-password=testuser1234", "-connectRetries =60 迁移"]

此外,我认为您不需要使用命令。您可以改用 args,因为您还使用了图像入口点中指定的命令。args: ["-url=jdbc:postgresql://postgres-master:5432/wallet", "-user=test_user", "-password=testuser1234", "-connectRetries=60 migrate"]

无论如何都应该可以工作

关于postgresql - Kubernetes - 使用 flyway 作业在 postgres 数据库上执行迁移 - 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69152963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com