首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在k8s 1.13中挂载本地PersistentVolume

无法在k8s 1.13中挂载本地PersistentVolume
EN

Stack Overflow用户
提问于 2018-12-12 09:43:17
回答 1查看 2.8K关注 0票数 0

我正尝试在裸机kubernetes集群(v1.13)上部署一个具有持久卷声明的有状态集,但pod在尝试挂载卷时超时。

我定义了一个local-storage存储类:

代码语言:javascript
复制
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

我定义了一个PV:

代码语言:javascript
复制
kind: PersistentVolume
apiVersion: v1
metadata:
  name: cassandradev1
  labels:
    app: cassandra
    environment: dev
spec:
  storageClassName: local-storage
  capacity:
    storage: 1Ti
  accessModes:
    - ReadWriteOnce
  local:
    path: "/data1/cassandradev1"
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - my-node1

我有一个有状态的集合,它发出一个声明(截断):

代码语言:javascript
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cassandra-set
spec:
  ...
  volumeClaimTemplates:
  - metadata:
      name: cassandra-data
    spec:
      selector:
        matchLabels:
          app: "cassandra"
          environment: "dev"
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "local-storage"
      resources:
        requests:
          storage: 1Ti

当我尝试应用有状态集时,Pod被调度但超时:

代码语言:javascript
复制
Normal   Scheduled    2m13s  default-scheduler            Successfully assigned default/cassandra-set-0 to my-node1
Warning  FailedMount  13s    kubelet, my-node1  Unable to mount volumes for pod "cassandra-set-0 (dd252f77-fda3-11e8-96d3-1866dab905dc)": timeout expired waiting for volumes to attach or mount for pod "default"/"cassandra-set-0". list of unmounted volumes=[cassandra-data]. list of unattached volumes=[cassandra-data default-token-t2dg8]

如果我查看控制器的日志,我会看到一条错误消息,没有匹配的卷插件:

代码语言:javascript
复制
kubectl logs pod/kube-controller-manager -n kube-system
W1212 00:51:24.218114       1 plugins.go:845] FindExpandablePluginBySpec(cassandradev1) -> err:no volume plugin matched

你知道下一步该往哪里看吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-12 11:37:48

首先PV定义不正确,本地存储类中没有hostPath。以下是您应该如何定义本地存储PV:

代码语言:javascript
复制
kind: PersistentVolume
apiVersion: v1
metadata:
  name: cassandradev1
  labels:
    app: cassandra
    environment: dev
spec:
  storageClassName: local-storage
  capacity:
    storage: 1Ti
  accessModes:
    - ReadWriteOnce
  local:
    path: "/data1/cassandradev1"
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - my-node1

还要记住,与hostPath不同的是,/data1/cassandradev1应该存在于my-node1上,local-storage不会自动创建路径,当你部署statefulset而路径不在那里时,它会给出与挂载相关的错误。

这应该可以解决您的问题。希望这能有所帮助。

编辑:因此,我通过以下yaml文件使用本地存储设置了cassandra状态集。我省略了一些配置映射,因此它不会按原样工作。你能试着检查一下有什么不同吗:

代码语言:javascript
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  generation: 1
  labels:
    state: cassandra
  name: cassandra
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cassandra
  serviceName: cassandra
  template:
    metadata:
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
      creationTimestamp: null
      labels:
        app: cassandra
    spec:
      containers:
      - args:
        - chmod -R 777 /logs/; /on_start.sh
        command:
        - /bin/sh
        - -c
        image: <image>
        imagePullPolicy: Always
        name: cassandra
        ports:
        - containerPort: 9042
          protocol: TCP
        resources: {}
        volumeMounts:
        - mountPath: /data
          name: data
        imagePullSecrets:
      - name: gcr-imagepull-json-key
  volumeClaimTemplates:
  - metadata:
      creationTimestamp: null
      name: data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: local-storage

PV.yaml

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  labels:
    type: local
  name: cassandra-data-vol-0
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: data-cassandra-0
    namespace: default
  local:
    path: /data/cassandra-0
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ip-10-0-1-91.ec2.internal
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage

在创建PV之前,请确保/data/cassandra-0已存在。如果你遇到任何问题,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53734914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档