0

在某些情况下,我正在尝试在 kubernetes 上构建一个登台/测试系统,首先在集群上部署一个 mariadb,其中包含一些模式和数据。我有一个来自 prod 的 trunkated / clensed db dump 来帮助我解决这个问题。让我们调用该文件:dbdump.sql,它位于路径 /home/rjosh/database/script/ 的本地框中。经过大量研究,这里是我的 yaml 文件的样子:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: m3ma-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 30Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: m3ma-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
---
apiVersion: v1
kind: Service
metadata:
  name: m3ma
spec:
  ports:
  - port: 3306
  selector:
    app: m3ma
  clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: m3ma
spec:
  selector:
    matchLabels:
      app: m3ma
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: m3ma
    spec:
      containers:
      - image: mariadb:10.2
        name: m3ma
        env:
          # Use secret in real usage
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
          name: m3ma
        volumeMounts:
        - name: m3ma-persistent-storage
          mountPath: /var/lib/mysql/
        - name: m3ma-host-path
          mountPath: /docker-entrypoint-initdb.d/
      volumes:
      - name: m3ma-persistent-storage
        persistentVolumeClaim:
          claimName: m3ma-pv-claim
      - name: m3ma-host-path
        hostPath:
          path: /home/smaikap/database/script/
          type: Directory

MariaDB 实例即将启动,但未包含 /home/rjosh/database/script/dbdump.sql 中存在的架构和数据。

基本上,安装不工作。如果我连接到 pod 并检查 /docker-entrypoint-initdb.d/ 什么都没有。我该怎么做?

更多细节。目前,我正在 minikube 上对其进行测试。但是,很快它就必须在 GKE 集群上运行。查看文档,hostPath 不是 GKE 的选择。那么,这样做的正确方法是什么?

4

1 回答 1

1

您确定您的主目录对 Kubernetes 可见吗?Minikube 通常会创建一个小虚拟机来运行东西,其中不会包含您的主目录。更常用的处理方法是自己制作一个非常小的新 Docker 映像,例如:

FROM mariadb:10.2
COPY dbdump.sql /docker-entrypoint-initdb.d/

然后将其推送到某个地方的注册表,然后改用该图像。

于 2019-10-10T02:54:12.033 回答