【问题标题】:mount file (.sql) from minikube/host to deployment (MySQL)从 minikube/host 挂载文件 (.sql) 到部署 (MySQL)
【发布时间】:2021-12-04 20:58:09
【问题描述】:

我正在尝试使用 Hyper-V 从运行 minikube 集群的主机挂载文件并使用部署 yaml 传入 MySQL 容器,我尝试将文件添加到 minikube vm(使用 ssh),然后将其挂载到使用 PV 和 Claim 进行部署,我尝试从运行 minikube(我的计算机)的 localhost 挂载,但仍然看不到该文件。

当前配置是:我在 Hyper-V VM 上运行 minikube 文件夹名为 data ,在这个文件夹中我有我想要传输到容器 (pod) 的文件。

PV Yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: sqlvolume
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /data

claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: sqlvolume
  name: sqlvolume
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}

deployment.yaml (MySQL)

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: C:\Users\itayb\Desktop\K8S-Statefulset-NodeJs-App-With-MySql\kompose.exe convert
    kompose.version: 1.24.0 (7c629530)
  labels:
    io.kompose.service: mysql
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      annotations:
        kompose.cmd: C:\Users\itayb\Desktop\K8S-Statefulset-NodeJs-App-With-MySql\kompose.exe convert
        kompose.version: 1.24.0 (7c629530)
      creationTimestamp: null
      labels:
        io.kompose.service: mysql
    spec:
      containers:
        - env:
            - name: MYSQL_DATABASE
              value: crud
            - name: MYSQL_ROOT_PASSWORD
              value: root
          image: mysql
          name: mysql
          ports:
            - containerPort: 3306
          volumeMounts:
            - mountPath: /data
              name: sqlvolume
          # resources:
          #     requests:
          #       memory: "64Mi"
          #       cpu: "250m"
          #     limits:
          #       memory: "128Mi"
          #       cpu: "500m"
      hostname: mysql
      restartPolicy: Always
      volumes:
        - name: sqlvolume
          persistentVolumeClaim:
            claimName: sqlvolume
status: {}

我不介意如何实现,我的计算机上运行着 Hyper-V Minikube,我想将文件 mysql.sql 从主机(或从我创建的 PV)传输到 pod .

我怎样才能做到这一点?

【问题讨论】:

    标签: mysql kubernetes minikube pv


    【解决方案1】:

    您可以尝试使用 hostPath 类型的 PersistentVolume

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-volume
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/data/<file_name>"
    

    PersistentVolumeClaim

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pv-claim
    spec:
      volumeName: "pv-volume"
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    
    

    部署(更改 pvc 名称)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        kompose.cmd: C:\Users\itayb\Desktop\K8S-Statefulset-NodeJs-App-With-MySql\kompose.exe convert
        kompose.version: 1.24.0 (7c629530)
      labels:
        io.kompose.service: mysql
      name: mysql
    spec:
      replicas: 1
      selector:
        matchLabels:
          io.kompose.service: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          annotations:
            kompose.cmd: C:\Users\itayb\Desktop\K8S-Statefulset-NodeJs-App-With-MySql\kompose.exe convert
            kompose.version: 1.24.0 (7c629530)
          creationTimestamp: null
          labels:
            io.kompose.service: mysql
        spec:
          containers:
            - env:
                - name: MYSQL_DATABASE
                  value: crud
                - name: MYSQL_ROOT_PASSWORD
                  value: root
              image: mysql
              name: mysql
              ports:
                - containerPort: 3306
              volumeMounts:
                - mountPath: /data
                  name: sqlvolume
             resources:
                 requests:
                   memory: "64Mi"
                   cpu: "250m"
                 limits:
                   memory: "128Mi"
                   cpu: "500m"
          hostname: mysql
          restartPolicy: Always
          volumes:
            - name: sqlvolume
              persistentVolumeClaim:
                claimName: pv-claim
    status: {}
    

    【讨论】:

    • 我是否需要启动 minikube 集群(在 Hyper-V 中运行)并安装卷?
    • 我使用此命令将文件挂载到 minikube vm(在 Hyper-V 中运行)内的数据目录中 -----> minikube start --vm-driver=hyperv --mount -string="C:\Users\my-Win\Desktop\K8S\MySQL\:/data" 在“MySQL”中有几个文件我需要转移到 minikube 中的这个“数据”目录
    • 但是你的 yamls 和我写的一模一样。。区别在哪里?
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2022-08-21
    • 2021-08-05
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多