【发布时间】:2021-09-02 22:24:58
【问题描述】:
我目前正在研究使用 Kubernetes pod 在本地机器上部署应用程序的项目。为了避免开发服务器数据库上的流量,我正在本地开发环境中迁移该进程。为此,我使用 Liquibase 允许在 kube pod 初始化后自动应用数据库更改日志。
我的集群上已经运行了一个 mssql pod,其中包含我要更新的目标数据库。
这是我的 docker 文件,其中包含 liquibase 映像,凭据与我的 mssql pod 相同。
FROM liquibase/liquibase
ENV URL=jdbc:sqlserver://localhost:1433;database=PlayerDB
ENV USERNAME=sa
ENV PASSWORD=pl@y123
ENV CHANGELOGFILE=changelog.xml
CMD ["sh", "-c", "docker-entrypoint.sh --url=${URL} --username=${USERNAME} --password=${PASSWORD} --classpath=/liquibase/changelog --changeLogFile=${CHANGELOGFILE} update"]
这是我的变更日志文件,其中包含我想在 mssql pod 内的数据库上触发的 sql 语句
更改-map.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: player-changelog-v1
data:
changelog.sql: |-
--liquibase formatted sql
--changeset play:1
--Database: PlayerDB
CREATE TABLE test_table (test_id INT, test_column VARCHAR, PRIMARY KEY (test_id));
最后我创建了一个作业,打算通过创建新表来更新数据库
apiVersion: batch/v1
kind: Job
metadata:
name: liquibase-job-v1
spec:
template:
spec:
containers:
- name: liquibase
image: play/liquibase
env:
- name: URL
value: jdbc:sqlserver://localhost:1433;database=PlayerDB
- name: USERNAME
value: sa
- name: PASSWORD
value: pl@y123
- name: CHANGELOGFILE
value: changelog.sql
volumeMounts:
- name: config-vol
mountPath: /liquibase/changelog
restartPolicy: Never
volumes:
- name: config-vol
configMap:
name: player-changelog-v1
pod 运行,然后自行终止,但未创建表。
【问题讨论】:
-
你能说明你遇到了什么错误吗?
-
你能从 liquibase 收集日志吗?如果您使用 logLevel=DEBUG 运行它并将其传输到文件中,我们可以看到发生了什么。
-
我不断收到此错误
Starting Liquibase Liquibase Community 3.8.0 by Datical Errors: The option --url is required. The option --changeLogFile is required.尽管我在 Dokefile 和我的 pod 模板中将这两个参数作为默认值传递。
标签: docker kubernetes kubernetes-helm liquibase