使用MicroK8的存储附加组件时,默认情况下,持久卷声明是在主机系统上的/var/snap/microk8s/common/default-storage
下指定给定存储的。怎么改变呢?
查看hostpath-provisioner
容器的声明,表明存在一个称为PV_DIR
的环境设置,指向/var/snap/microk8s/common/default-storage
-似乎是我想要更改的内容,但是该怎么做呢?
不知道我是在问MicroK8的特定问题还是一般情况下适用于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>
最佳答案
主机路径
如果要将自己的路径添加到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
谨在此提醒
Depending on the installation method, your Kubernetes cluster may be deployed with an existing StorageClass that is marked as default. This default StorageClass is then used to dynamically provision storage for PersistentVolumeClaims that do not require any specific storage class. See PersistentVolumeClaim documentation for details.
您可以使用以下方法检查您的存储类
kubectl get storageclass
如果没有
<your-class-name>(default)
,则意味着您需要创建自己的默认存储类。将StorageClass标记为默认值:
kubectl patch storageclass <your-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
完成defualt 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
Once bound, PersistentVolumeClaim binds are exclusive, regardless of how they were bound. A PVC to PV binding is a one-to-one mapping.
关于kubernetes - 如何更改Kubernetes主机路径配置器的安装路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58615019/