【问题标题】:How to change a Kubernetes hostpath-provisioner mount path?如何更改 Kubernetes hostpath-provisioner 挂载路径?
【发布时间】:2020-02-25 03:23:25
【问题描述】:

使用 MicroK8s 的存储附加组件,持久卷声明默认在主机系统上的 /var/snap/microk8s/common/default-storage 下提供存储。怎么改?

查看hostpath-provisioner pod 的声明,显示有一个名为PV_DIR 的环境设置指向/var/snap/microk8s/common/default-storage - 似乎是我想要更改的内容,但怎么做?

不确定我是在问 MicroK8s 的具体问题,还是一般来说这是否适用于 Kubernetes?

$ microk8s.kubectl describe -n kube-system pod/hostpath-provisioner-7b9cb5cdb4-q5jh9

Name:         hostpath-provisioner-7b9cb5cdb4-q5jh9
Namespace:    kube-system
Priority:     0
Node:         ...
Start Time:   ...
Labels:       k8s-app=hostpath-provisioner
              pod-template-hash=7b9cb5cdb4
Annotations:  <none>
Status:       Running
IP:           ...
IPs:
  IP:           ...
Controlled By:  ReplicaSet/hostpath-provisioner-7b9cb5cdb4
Containers:
  hostpath-provisioner:
    Container ID:   containerd://0b74a5aa06bfed0a66dbbead6306a0bc0fd7e46ec312befb3d97da32ff50968a
    Image:          cdkbot/hostpath-provisioner-amd64:1.0.0
    Image ID:       docker.io/cdkbot/hostpath-provisioner-amd64@sha256:339f78eabc68ffb1656d584e41f121cb4d2b667565428c8dde836caf5b8a0228
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      ...
    Last State:     Terminated
      Reason:       Unknown
      Exit Code:    255
      Started:      ...
      Finished:     ...
    Ready:          True
    Restart Count:  3
    Environment:
      NODE_NAME:   (v1:spec.nodeName)
      PV_DIR:     /var/snap/microk8s/common/default-storage
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from microk8s-hostpath-token-nsxbp (ro)
      /var/snap/microk8s/common/default-storage from pv-volume (rw)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  pv-volume:
    Type:          HostPath (bare host directory volume)
    Path:          /var/snap/microk8s/common/default-storage
    HostPathType:  
  microk8s-hostpath-token-nsxbp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  microk8s-hostpath-token-nsxbp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

【问题讨论】:

  • 您能告诉我您是如何安装主机路径的吗?根据文档您可以使用hostPath 为您自己的光伏路径。
  • 对于 MicroK8s,它通过命令microk8s.enable storage 与存储插件一起安装。感谢您的链接,我会尝试hostPath.path 声明。
  • 嗨@Bjorn Thor Jonsson,它有效还是您仍然有这个问题?
  • 我能够应用具有自定义 spec.hostPath.path 值的持久卷声明和引用 PV 声明的 storageClassName 的持久卷声明。但是当我尝试应用另一个引用相同 PV 名称的 PVC 时,它只是挂在 MicroK8s 中。我猜我可以为每个 PVC 设置一个 PV,但这似乎很奇怪。

标签: kubernetes microk8s


【解决方案1】:

主机路径

如果您想将自己的路径添加到您的 persistentVolume 您可以使用spec.hostPath.path

示例 yamls

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: base                 
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: base
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: base
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

温馨提示

根据安装方法,您的 Kubernetes 集群可能会使用标记为默认的现有 StorageClass 进行部署。然后,此默认 StorageClass 用于为不需要任何特定存储类的 PersistentVolumeClaims 动态配置存储。详情请见PersistentVolumeClaim documentation

您可以使用

检查您的存储类
kubectl get storageclass

如果没有&lt;your-class-name&gt;(default),则表示您需要自己创建默认存储类。

将 StorageClass 标记为默认值:

kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

在你默认storageClass之后你可以使用那些yamls来创建pv和pvc

apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume3
  labels:
    type: local
spec:
  storageClassName: ""
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data2"

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim3
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

每个 pvc 一个 pv

基于kubernetes documentation

一旦绑定,PersistentVolumeClaim 绑定是独占的,无论它们是如何绑定的。 PVC 到 PV 的绑定是一对一的映射

【讨论】:

  • 感谢您的澄清,特别是关于“PVC 到 PV 绑定是一对一映射”的引用。
猜你喜欢
  • 2017-07-24
  • 2018-12-02
  • 2017-07-21
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2020-09-15
  • 2021-02-16
  • 1970-01-01
相关资源
最近更新 更多