首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL脚本没有运行Kubernetes,但只使用Docker运行良好

SQL脚本没有运行Kubernetes,但只使用Docker运行良好
EN

Stack Overflow用户
提问于 2019-11-21 04:40:28
回答 3查看 317关注 0票数 0

有一个相当简单的test.sql

代码语言:javascript
复制
SELECT 'CREATE DATABASE test_dev'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'test_dev')\gexec

\c test_dev

CREATE TABLE IF NOT EXISTS test_table (
  username varchar(255)
);

INSERT INTO test_table(username)
VALUES ('test name');

按照我的预期做下面的事情:

Dockerfile.dev

代码语言:javascript
复制
FROM postgres:11-alpine
EXPOSE 5432
COPY ./db/*.sql /docker-entrypoint-initdb.d/
代码语言:javascript
复制
docker build -t testproj/postgres -f db/Dockerfile.dev .
代码语言:javascript
复制
docker run -p 5432:5432 testproj/postgres

这将创建数据库,切换到数据库,创建表,并插入值。

现在我试着用库伯内特斯和Skaffold做同样的事情,但是似乎什么都没有发生:没有错误消息,但postgres没有任何变化。

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: init-script
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 500Mi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-storage
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: postgres
  template:
    metadata:
      labels:
        component: postgres
    spec:
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-storage
        - name: init-script
          persistentVolumeClaim:
            claimName: init-script
      containers:
        - name: postgres
          image: postgres
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
              subPath: postgres
            - name: init-script
              mountPath: /docker-entrypoint-initdb.d
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: postgres
  ports:
    - port: 5432
      targetPort: 5432

我在这里做错了什么?

基本上试着遵循这里的答案,但没有被筛选出来。听起来我需要将.sql移动到一个持久的卷。

https://stackoverflow.com/a/53069399/3123109

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-06 00:01:07

coderanger指出了一个让我走向正确方向的明显错误:我指的不是修改过的图像。

因此,我更新如下:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: postgres
  template:
    metadata:
      labels:
        component: postgres
    spec:
      containers:
        - name: postgres
          image: testproject/postgres
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
              subPath: postgres
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-storage
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-cluster-ip-service
spec:
  type: ClusterIP
  selector:
    component: postgres
  ports:
    - port: 5432
      targetPort: 5432

然后,它开始相应地加载数据。

票数 0
EN

Stack Overflow用户

发布于 2019-11-21 04:45:35

您不希望在入口点文件夹上挂载卷。您基本上是用一个空文件夹掩盖图像中的脚本。另外,您也没有使用您修改过的图像,所以它一开始就不会有您的脚本。

票数 2
EN

Stack Overflow用户

发布于 2019-11-21 10:49:19

我不能百分之百肯定你的形象会在库伯内特斯身上发挥作用。

我建议使用像PostgreSQL图这样的测试工具,而且阅读使用Kubernetes部署PostgreSQL也可能有帮助。

如果您想在Kubernetes中使用您自己的映像,您需要将图像推送到您的私人Docker注册中心或存储库。从私人注册表中提取图像在这里解释了这一点。

至于test.sql,您可以将其存储到ConfigMap

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-sql
data:
  test.sql: |
    SELECT 'CREATE DATABASE test_dev'
    WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'test_dev')\gexec
    \c test_dev
    CREATE TABLE IF NOT EXISTS test_table (
      username varchar(255)
    );
    INSERT INTO test_table(username)
    VALUES ('test name');

之后,您可以将其挂载为init.sql或在创建pod之后执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58967417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档