【问题标题】:Kubernetes persistent volume with minikubeKubernetes 持久卷与 minikube
【发布时间】:2019-08-26 17:39:08
【问题描述】:

自从在我的 minikube 单个节点上设置我的 k8s pod 以来,我一直在战斗,处于持久卷创建阶段。

即使我从kubernetes 文档中复制/粘贴示例规范,此命令也总是以错误结束:

$kubectl apply -f pv-volume.yml

错误:SchemaError(io.k8s.api.core.v1.ScaleIOVolumeSource):无效 对象没有额外的属性

$cat pv-volume.yml
kind: PersistentVolume
apiVersion: v1
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

我不明白为什么在我使用本地卷时,kubectl 要求我在规范中指定 ScaleIO

我在将 storagaClassName 指定为 standard 时遇到同样的错误

知道可能是什么问题吗?

我的版本:

$minikube version
minikube version: v1.0.0

$kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.11", GitCommit:"637c7e288581ee40ab4ca210618a89a555b6e7e9", GitTreeState:"clean", BuildDate:"2018-11-26T14:38:32Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:45:25Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}

【问题讨论】:

  • 我已停止 minikube 并重新启动它,现在出现此错误:error: SchemaError(io.k8s.api.node.v1beta1.RuntimeClassList): invalid object doesn't have additional properties
  • 我删除了 minikube 并从头开始重新安装,现在尝试时出现错误:error: SchemaError(io.k8s.api.extensions.v1beta1.ScaleStatus): invalid object doesn't have additional properties 我不明白为什么 minikube 在我指定一个时尝试创建一个scaleIOhostPath 音量。
  • 为什么需要创建 PV?因为动态配置器已经存在于 minikube 中。如果您仍然想从主机路径创建 pv,请按照以下步骤操作:kubernetes.io/blog/2018/04/13/local-persistent-volumes-beta

标签: kubernetes kubectl minikube


【解决方案1】:

在 minikube 中,动态配置器默认已经存在,您只需要使用该类创建持久卷声明。

C02W84XMHTD5:Downloads iahmad$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
C02W84XMHTD5:Downloads iahmad$ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   4d    v1.10.0
C02W84XMHTD5:Downloads iahmad$ 
C02W84XMHTD5:Downloads iahmad$ kubectl get storageclasses.storage.k8s.io 
NAME                 PROVISIONER                AGE
standard (default)   k8s.io/minikube-hostpath   4d
C02W84XMHTD5:Downloads iahmad$ 
C02W84XMHTD5:Downloads iahmad$ 

因此,为了将数据持久化到主机,您只需要一个卷声明并在您的 kubernetes 部署中使用它。

使用内置 minikube 存储类的示例 mysql 卷声明。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-volumeclaim
  annotations:
    volume.beta.kubernetes.io/storage-class: standard
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

mysql部署内部使用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - image: mysql:5.6
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql
                  key: password
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-volumeclaim

【讨论】:

  • 是的,但我认为问题出在我的整个 k8s 系统内部,正如我的回答中提到的那样
  • 是的,但问题是关于持久卷 :P ,所以实际上你不需要创建它。默认存储类应该可以工作
  • 我不明白,@Ijaz,你能告诉我我哪里错了吗?你的意思是我们应该在 k8s/minikube 上创建 PV 吗?如果是,PV 有什么用?或者你在谈论我规范中的storageClassName 属性?你能准确地告诉我我应该为那里的持久数据做些什么吗?
  • OK @Ijaz 看起来kubectl 升级是解决方案的关键,1.10 客户端版本试图与 1.14 对话 - API 版本不匹配可以解释错误消息中的怪异.它似乎与minikube 无关。
【解决方案2】:

我从一个错误到另一个错误,然后尝试创建另一个对象,例如秘密和相同的问题。

然后

  • 我依次删除了kubectl,重新安装,
  • 我停止 mikube 并重新启动它

看起来kubectl 升级是解决方案的关键,1.10 客户端版本试图与1.14 对话 - API 版本不匹配可以解释错误消息中的怪异。它似乎与minikube 无关。

现在可以正常运行了,我实际上可以毫无错误地运行我的kube 命令

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2018-12-09
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多