如何更改Kubernetes主机路径供应器装载路径?

如何更改Kubernetes主机路径供应器装载路径?,kubernetes,microk8s,Kubernetes,Microk8s,对于MicroK8s的存储附加组件,持久卷声明默认为主机系统上/var/snap/MicroK8s/common/default storage下的给定存储。如何改变这一点 查看主机路径供应器pod的声明,会发现有一个名为PV_DIR的环境设置指向/var/snap/microk8s/common/default storage——这似乎是我想要更改的,但如何才能做到呢 不确定我问的是MicroK8s的具体问题,还是Kubernetes的问题 $ microk8s.kubectl describ

对于MicroK8s的存储附加组件,持久卷声明默认为主机系统上
/var/snap/MicroK8s/common/default storage
下的给定存储。如何改变这一点

查看
主机路径供应器
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>
$microk8s.kubectl description-n kube系统pod/hostpath-provisioner-7b9cb5cdb4-q5jh9
名称:hostpath-provisioner-7b9cb5cdb4-q5jh9
名称空间:kube系统
优先级:0
节点:。。。
开始时间:。。。
标签:k8s app=主机路径供应器
pod模板哈希=7b9cb5cdb4
注释:
状态:正在运行
IP:。。。
IPs:
IP:。。。
控制人:ReplicaSet/hostpath-provisioner-7b9cb5cdb4
容器:
主机路径供应器:
容器ID:containerd://0b74a5aa06bfed0a66dbbead6306a0bc0fd7e46ec312befb3d97da32ff50968a
图片:cdkbot/hostpath-provisioner-amd64:1.0.0
映像ID:docker.io/cdkbot/hostpath-provisioner-amd64@sha256:339F78EABC68FFB1656D584E41F1121CB4D2B667565428C8DDE836CAF5B8A0228
端口:
主机端口:
状态:正在运行
开始:。。。
最后状态:终止
原因:未知
退出代码:255
开始:。。。
完成:。。。
准备好了吗
重新启动计数:3
环境:
节点名称:(v1:spec.nodeName)
PV_DIR:/var/snap/microk8s/通用/默认存储
挂载:
/来自microk8s主机路径令牌nsxbp(ro)的var/run/secrets/kubernetes.io/serviceCount
/var/snap/microk8s/来自pv卷(rw)的公共/默认存储
条件:
类型状态
初始化为True
准备好了吗
集装箱准备好了吗
播客预定为真
卷数:
光伏容量:
类型:主机路径(裸主机目录卷)
路径:/var/snap/microk8s/common/default存储
主机路径类型:
microk8s主机路径令牌nsxbp:
类型:Secret(由Secret填充的卷)
SecretName:microk8s主机路径令牌nsxbp
可选:false
QoS等级:最佳努力
节点选择器:
容差:node.kubernetes.io/未就绪:不执行300秒
node.kubernetes.io/不可访问:不执行300秒
活动:
HostPath 如果要将自己的路径添加到persistentVolume,可以使用value

示例YAML

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: base                 
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
善意提醒

根据安装方法的不同,Kubernetes群集可能与标记为默认的现有StorageClass一起部署。然后,使用此默认StorageClass为不需要任何特定存储类的PersistentVolumeClaims动态调配存储。有关详细信息,请参阅

您可以使用检查storageclass

kubectl get storageclass
如果没有
(默认)
,则意味着您需要创建自己的默认存储类

将StorageClass标记为默认值:

kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
每个pvc一个pv 基于

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


你能告诉我你是如何安装hostpath的吗?基于您可以用来为pv创建自己路径的文档。对于MicroK8s,它是通过命令
MicroK8s与存储插件一起安装的。启用存储
。感谢您提供的链接,我将尝试
hostPath.path
声明。您好@Bjorn Thor Jonsson,它起作用了吗?还是您仍然存在此问题?我能够使用自定义spec.hostPath.path值和引用PV声明的storageClassName的持久卷声明应用持久卷声明。但当我尝试应用另一个引用相同PV名称的PVC时,它只是挂在MicroK8s中。我猜每个PVC可以有一个PV,但这似乎很奇怪。感谢您的澄清,特别是引用“PVC到PV绑定是一对一映射”。
kubectl get storageclass
kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
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