如何在Kubernetes中为MySQL数据使用PersistentVolume

如何在Kubernetes中为MySQL数据使用PersistentVolume,mysql,kubernetes,Mysql,Kubernetes,我正在Minikube上开发数据库环境。 我想通过Kubernetes的PersistentVolume函数来持久化MySQL数据。 但是,如果hostPath指定了/var/lib/MySQL(MySQL数据目录),则在启动MySQL服务器时会发生错误,并且不会启动 kubernetes-config.yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs001-pv labels:

我正在Minikube上开发数据库环境。 我想通过Kubernetes的PersistentVolume函数来持久化MySQL数据。 但是,如果hostPath指定了/var/lib/MySQL(MySQL数据目录),则在启动MySQL服务器时会发生错误,并且不会启动

kubernetes-config.yaml

  apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: nfs001-pv
    labels:
      app: nfs001-pv
  spec:
    capacity:
      storage: 1Gi
    accessModes:
      - ReadWriteMany
    persistentVolumeReclaimPolicy: Retain
    mountOptions:
      - hard
    nfs:
      path: /share/mydata
      server: 192.168.99.1
  ---
  apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: nfs-claim
  spec:
    accessModes:
      - ReadWriteMany
    resources:
      requests:
        storage: 1Gi
    storageClassName: ""
    selector:
      matchLabels:
        app: nfs001-pv
  ---
  apiVersion: apps/v1beta2
  kind: Deployment
  metadata:
    name: sk-app
    labels:
      app: sk-app
  spec:
    replicas: 1
    selector:
      matchLabels:
        app: sk-app
    template:
      metadata:
        labels:
          app: sk-app
      spec:
        containers:
        - name: sk-app
          image: mysql:5.7
          imagePullPolicy: IfNotPresent
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: password
          ports:
          - containerPort: 3306
          volumeMounts:
          - mountPath: /var/lib/mysql
            name: mydata
        volumes:
          - name: mydata
            persistentVolumeClaim:
              claimName: nfs-claim
  ---
  apiVersion: v1
  kind: Service
  metadata:
    name: sk-app
    labels:
      app: sk-app
  spec:
    type: NodePort
    ports:
    - port: 3306
      nodePort: 30001
    selector:
      app: sk-app
我如何启动它

--附言--

当我尝试“kubectl日志”时,我收到以下错误消息

chown:更改“/var/lib/mysql/”的所有权:不允许操作

当我尝试“kubectl描述xxx”时,我得到了以下结果

kubectl描述pv:

Name:            nfs001-pv
Labels:          app=nfs001-pv
Annotations:     pv.kubernetes.io/bound-by-controller=yes
StorageClass:    
Status:          Bound
Claim:           default/nfs-claim
Reclaim Policy:  Retain
Access Modes:    RWX
Capacity:        1Gi
Message:         
Source:
  Type:      NFS (an NFS mount that lasts the lifetime of a pod)
  Server:    192.168.99.1
  Path:      /share/mydata
  ReadOnly:  false
Events:        <none>
名称:nfs001 pv
标签:app=nfs001 pv
注释:pv.kubernetes.io/boundbycontroller=yes
StorageClass:
状态:绑定
声明:默认/nfs声明
回收策略:保留
访问模式:RWX
容量:1Gi
信息:
资料来源:
类型:NFS(在pod的生命周期内持续的NFS装载)
服务器:192.168.99.1
路径:/share/mydata
只读:false
活动:
kubectl描述pvc:

Name:          nfs-claim
Namespace:     default
StorageClass:  
Status:        Bound
Volume:        nfs001-pv
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed=yes
               pv.kubernetes.io/bound-by-controller=yes
Capacity:      1Gi
Access Modes:  RWX
Events:        <none>
名称:nfs声明
名称空间:默认值
StorageClass:
状态:绑定
数量:nfs001 pv
标签:
注释:pv.kubernetes.io/bind completed=yes
pv.kubernetes.io/控制器绑定=是
容量:1Gi
访问模式:RWX
活动:
kubectl描述部署:

Name:                   sk-app
Namespace:              default
CreationTimestamp:      Tue, 25 Sep 2018 14:22:34 +0900
Labels:                 app=sk-app
Annotations:            deployment.kubernetes.io/revision=1
Selector:               app=sk-app
Replicas:               1 desired | 1 updated | 1 total | 0 available | 1 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=sk-app
  Containers:
   sk-app:
    Image:  mysql:5.7
    Port:   3306/TCP
    Environment:
      MYSQL_ROOT_PASSWORD:  password
    Mounts:
      /var/lib/mysql from mydata (rw)
  Volumes:
   mydata:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  nfs-claim
    ReadOnly:   false
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      False   MinimumReplicasUnavailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  <none>
NewReplicaSet:   sk-app-d58dddfb (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  23s   deployment-controller  Scaled up replica set sk-app-d58dddfb to 1
Name:sk应用程序
名称空间:默认值
CreationTimestamp:2018年9月25日星期二14:22:34+0900
标签:app=sk app
注释:deployment.kubernetes.io/revision=1
选择器:app=sk-app
副本:1个需要的副本| 1个更新的副本| 1个总数| 0个可用副本| 1个不可用副本
策略类型:RollingUpdate
最小就绪秒:0
滚动更新策略:最多25%不可用,最多25%喘振
Pod模板:
标签:app=sk app
容器:
sk应用程序:
图片:mysql:5.7
端口:3306/TCP
环境:
MYSQL\u ROOT\u密码:PASSWORD
挂载:
/来自mydata(rw)的var/lib/mysql
卷数:
我的数据:
类型:PersistentVolumeClaim(对同一命名空间中PersistentVolumeClaim的引用)
索赔名称:nfs索赔
只读:false
条件:
类型状态原因
----           ------  ------
可用的错误最小值ReplicaSunAvailable
正在进行的真实复制
旧复制集:
新复制集:sk-app-d58dddfb(创建了1/1个复制副本)
活动:
从消息中键入原因年龄
----    ------             ----  ----                   -------
正常扩展ReplicaSet 23s部署控制器将副本集sk-app-d58dddfb扩展到1

卷看起来不错,所以看起来您的nfs卷的根目录上有一个权限问题,该卷在容器上装载为
/var/lib/mysql

你可以:

1) 使用nfs装载命令装载该nfs卷并运行:

chmod 777 .  # This gives rwx to anybody so need to be mindful.
2) 在部署中运行initContainer,如下所示:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: sk-app
  labels:
    app: sk-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sk-app
  template:
    metadata:
      labels:
        app: sk-app
    spec:
      initContainers:
      - name: init-mysql
        image: busybox
        command: ['sh', '-c', 'chmod 777 /var/lib/mysql']
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mydata
      containers:
      - name: sk-app
        image: mysql:5.7
        imagePullPolicy: IfNotPresent
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: mydata
      volumes:
        - name: mydata
          persistentVolumeClaim:
            claimName: nfs-claim
            accessModes:
              - ReadWriteMany

您能否指定错误消息是什么?您能否发布
kubectl descripe pvc
kubectl descripe deployment
kubectl descripe pv
?@Maruf Tuhin-感谢您的评论。我在问题上添加了错误消息。请检查。@Rico-谢谢您的评论。我在我的问题上添加了结果。请检查一下。谢谢你的回答。我尝试了你的建议,但是kubernetes返回了CrashLoopBackOff
chown:更改“/var/lib/mysql/”的所有权:不允许操作
。尝试将
accessMode
设置添加到
ReadWriteMany
。否则,您必须更改源nfs文件系统的权限