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

ojsjcaue  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(135)

问题

错误图片

Flyway Job Error
我目前正在尝试使用flyway在postgres中执行迁移。我有一种感觉,初始化脚本是无法找到基于这个错误消息。不太确定我错过了什么,因为在使用Docker容器时,init脚本工作正常。
任何帮助将不胜感激解决这个问题。

我尝试过:

1.到目前为止,我已经尝试在作业中使用连接字符串,看看是否是连接问题。
1.然后,我尝试使用配置Map与初始化SQL脚本内,希望有脚本可见的迁移。在这方面运气不太好。我已经附上了我为这种方法找到的例子。Migrations with ConfigMap for init sql scripts
我有一些更多的研究链接,我发现,但他们不太适合或与我的问题工作,并不值得注意或过时。

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

Code/Kubernetes设置

以下是我目前的设置:
旁注:我使用kind在本地拉取我的docker镜像并创建集群,我将在最后附加我的docker compose和docker文件。

航路设置

我在Kubernetes中使用了Flyway as a Job,其结构如下:

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 compose

然后我有我的docker compose文件,我用它来构建我的图像:侧不-所有的docker图像一起工作,包括迁移之前,我开始添加Kubernetes。

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)
)

任何帮助都将不胜感激,我有一种感觉,这可能是我错过的小东西。
如果需要更多的信息,请让我知道。
请随意添加任何问题,我会尽我所能提供进一步的背景。
谢谢

pgpifvop

pgpifvop1#

我怀疑你打电话给command的方式是问题所在。必须是command: ["flyway", "-url=jdbc:postgresql://postgres-master:5432/wallet", "-user=test_user", "-password=testuser1234", "-connectRetries=60 migrate"]
另外,我认为你不需要使用command。您可以使用args代替,因为您还使用了在图像入口点中指定的命令。args: ["-url=jdbc:postgresql://postgres-master:5432/wallet", "-user=test_user", "-password=testuser1234", "-connectRetries=60 migrate"]
无论如何都应该工作

相关问题