Как изменить путь монтирования пути к хосту Kubernetes?

С помощью надстройки хранилища для MicroK8s постоянным требованиям тома по умолчанию предоставляется хранилище под /var/snap/microk8s/common/default-storage в хост-системе. Как это можно изменить?

Просмотр объявления для модуля hostpath-provisioner показывает, что есть параметр среды с именем 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>

person Bjorn Thor Jonsson    schedule 29.10.2019    source источник
comment
Подскажите, пожалуйста, как вы установили hostpath? На основе документации. Вы можете использовать hostPath, чтобы создать свой собственный путь для pv.   -  person Jakub    schedule 30.10.2019
comment
В случае MicroK8s он устанавливался вместе с надстройкой хранилища с помощью команды microk8s.enable storage. Спасибо за ссылку, попробую объявление hostPath.path.   -  person Bjorn Thor Jonsson    schedule 31.10.2019
comment
Привет, @Bjorn Thor Jonsson, это сработало или у вас все еще есть эта проблема?   -  person Jakub    schedule 04.11.2019
comment
Мне удалось применить объявление постоянного тома с настраиваемым значением spec.hostPath.path и утверждением постоянного тома, ссылающимся на storageClassName объявления PV. Но когда я пытаюсь применить другой PVC, который ссылается на то же имя PV, он просто зависает в MicroK8s. Думаю, я мог бы иметь по одному PV для каждого PVC, но это кажется странным.   -  person Bjorn Thor Jonsson    schedule 04.11.2019


Ответы (1)


HostPath

Если вы хотите добавить свой собственный путь к своему persistentVolume, вы можете использовать spec.hostPath.path значение

пример ямлов

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.

Вы можете проверить свой класс хранения, используя

kubectl get storageclass

Если <your-class-name>(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

один ПВ для каждого ПВХ

На основе документации kubernetes

После привязки привязки PersistentVolumeClaim являются эксклюзивными, независимо от того, как они были связаны. Привязка PVC к PV - это взаимно-однозначное соответствие.

person Jakub    schedule 05.11.2019
comment
Спасибо за разъяснение, особенно за цитату, в которой говорится, что привязка PVC к PV является однозначным отображением. - person Bjorn Thor Jonsson; 06.11.2019