1个Pod在Minikube上具有未绑定的立即PersistentVolumeClaims

时间:2020-09-19 15:38:57

标签: mysql kubernetes minikube

我正在尝试将kubernetes与spring boot应用程序一起使用并使用mysql。但是我在minikube仪表板上发现了这个错误:

apiVersion: v1
kind: Service
metadata:
  name: mysql  # DNS name
  labels:
    app: mysql
    tier: database
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:       # mysql Pod Should contain same labels
    app: mysql
    tier: database
  clusterIP: None  # We Use DNS, Thus ClusterIP is not relevant
---
# Define a 'Persistent Volume Claim'(PVC) for Mysql Storage, dynamically provisioned by cluster
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim # name of PVC essential for identifying the storage data
  labels:
    app: mysql
    tier: database
spec:
  accessModes:
    - ReadWriteOnce   #This specifies the mode of the claim that we are trying to create.
  resources:
    requests:
      storage: 1Gi    #This will tell kubernetes about the amount of space we are trying to claim.
---
# Configure 'Deployment' of mysql server
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
    tier: database
spec:
  selector: # mysql Pod Should contain same labels
    matchLabels:
      app: mysql
      tier: database
  strategy:
    type: Recreate
  template:
    metadata:
      labels: # Must match 'Service' and 'Deployment' selectors
        app: mysql
        tier: database
    spec:
      containers:
        - image: mysql:latest # image from docker-hub
          args:
            - "--ignore-db-dir=lost+found" # Workaround for https://github.com/docker-library/mysql/issues/186
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD # Setting Root Password of mysql From a 'Secret'
              valueFrom:
                secretKeyRef:
                  name: db-admin # Name of the 'Secret'
                  key: password   # 'key' inside the Secret which contains required 'value'
            - name: MYSQL_USER # Setting USER username on mysql From a 'Secret'
              valueFrom:
                secretKeyRef:
                  name: db-user
                  key: username
            - name: MYSQL_PASSWORD # Setting USER Password on mysql From a 'Secret'
              valueFrom:
                secretKeyRef:
                  name: db-user
                  key: password
            - name: MYSQL_DATABASE # Setting Database Name from a 'ConfigMap'
              valueFrom:
                configMapKeyRef:
                  name: db-config
                  key: name
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:        # Mounting volume obtained from Persistent Volume Claim
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql #This is the path in the container on which the mounting will take place.
      volumes:
        - name: mysql-persistent-storage # Obtaining 'volume' from PVC
          persistentVolumeClaim:
            claimName: mysql-pv-claim

将为Boath用户和admin创建一个秘密文件,以及一个configMap文件,还将spring boot映像映射到mysql服务。 Mysql部署文件为:

    {
group: [],
lists: {
customer: {
lists: {
 "13067": {
                                id: "13067",
                                featured: { enable: false },
                                
                            },
                        },                    
                    },
                        
                },
}

我是kubernetes的新手,我找不到解决方案。

3 个答案:

答案 0 :(得分:2)

您需要创建一个PV来满足PVC。如果您使用下面的PV,它应该可以工作。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

请注意以下几点

  1. 不建议在生产中使用hostPath
  2. PV和PVC的
  3. capacity需要匹配
  4. PV和PVC的
  5. accessModes需要匹配

答案 1 :(得分:1)

要使用PersistentVolumeClaim,您需要某种基础存储系统。当您使用其存储类创建PVC时,云提供商会提供动态的卷供应。 Minikube并非开箱即用。

您可以遵循Configure a Pod to Use a PersistentVolume for Storage来了解如何为Minikube设置PersistentVolume,以便您的应用程序可以使用PersistentVolumeClaim

答案 2 :(得分:1)

1。运行storage-provisioner以查看|-----------------------------|----------|--------------| | ADDON NAME | PROFILE | STATUS | |-----------------------------|----------|--------------| | dashboard | minikube | disabled | | default-storageclass | minikube | enabled ✅ | | efk | minikube | disabled | | freshpod | minikube | disabled | | gvisor | minikube | disabled | | helm-tiller | minikube | disabled | | ingress | minikube | enabled ✅ | | ingress-dns | minikube | disabled | | istio | minikube | disabled | | istio-provisioner | minikube | disabled | | logviewer | minikube | disabled | | metrics-server | minikube | disabled | | nvidia-driver-installer | minikube | disabled | | nvidia-gpu-device-plugin | minikube | disabled | | registry | minikube | disabled | | registry-aliases | minikube | disabled | | registry-creds | minikube | disabled | | storage-provisioner | minikube | enabled ✅ | | storage-provisioner-gluster | minikube | disabled | |-----------------------------|----------|--------------| 是否启用:

minikube addons enable storage-provisioner
  1. 如果不是,请使用.my-flex-item { background-color: #1d1d1d; border: 2px solid #1d1d1d; height: 100px; } .img-holder { position: relative; display: inline-block; } .img-holder p { position: absolute; display: inline-block; text-align: left !important; font-size: 0.7em !important; width: 100%; } .img-holder:hover > p { background-color: rgba(60,60,60,0.7); text-align: center !important; } .img-holder span { margin-top:40px; color: white !important; left: 30px; } 启用它。

请参见Persistent Volumes