Дополнение nfs не найдено ни в одном репозитории microk8s

Дополнение nfs не найдено ни в одном репозитории microk8s

У меня есть кластер microk8s с 3 узлами, работающий в многопроходном режиме на Ubuntu 22.04. Все работает на моем старом Macbookpro середины 2012 года. (с Ubuntu 22.04 я удалил Macos)

При выполнении команды я получаю следующее сообщение:

microk8s enable nfs

Addon nfs was not found in any repository

Я установил nfs на все 3 многопроходных экземпляра.

sudo apt install -y nfs-common

DNS включен, панель управления включена. Я могу получить доступ к кластеру с моего хоста Ubuntu.

kubectl get node
NAME       STATUS   ROLES    AGE   VERSION
worker01   Ready    <none>   40m   v1.24.8-2+1dda18a15eea38
master     Ready    <none>   46m   v1.24.8-2+1dda18a15eea38
worker02   Ready    <none>   42m   v1.24.8-2+1dda18a15eea38

следующие модули запущены

kubectl get po -A
NAMESPACE     NAME                                         READY   STATUS    RESTARTS      AGE
kube-system   calico-node-hv6sd                            1/1     Running   0             84m
kube-system   calico-node-wbm9h                            1/1     Running   0             82m
kube-system   coredns-66bcf65bb8-s7xjx                     1/1     Running   0             40m
kube-system   calico-node-cwfzt                            1/1     Running   1 (60m ago)   84m
kube-system   calico-kube-controllers-655d5f4c66-d7q8q     1/1     Running   0             87m
ingress       nginx-ingress-microk8s-controller-2fgwk      1/1     Running   0             38m
kube-system   metrics-server-5f8f64cb86-p4tcn              1/1     Running   0             36m
kube-system   dashboard-metrics-scraper-6b6f796c8d-vp4j5   1/1     Running   0             35m
ingress       nginx-ingress-microk8s-controller-7vjgh      1/1     Running   0             38m
ingress       nginx-ingress-microk8s-controller-qzwsj      1/1     Running   0             38m
kube-system   kubernetes-dashboard-765646474b-s89wj        1/1     Running   0             35m

Выполнить также

microk8s enable community

Сообщение всегда одно и то же. Дополнение nfs не найдено ни в одном репозитории

ubuntu@master:~$ microk8s enable community
Infer repository core for addon community
Addon core/community is already enabled
ubuntu@master:~$ microk8s enable nfs
Addon nfs was not found in any repository

решение1

Аддон nfs довольно новый. У меня была та же проблема с microk8s 1.24.0, его не было в списке. Я обновил свои узлы до 1.26.0, затем пришлось отключить и снова включить аддон community, и он появился в списке.

решение2

Во-первых, я думаю, что нет nfsмодулей на microk8s. На моем сервере Ubuntu 22.04.1 доступные модули перечислены ниже:

$ microk8s status
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    dashboard            # (core) The Kubernetes dashboard
    dns                  # (core) CoreDNS
    ha-cluster           # (core) Configure high availability on the current node
    helm                 # (core) Helm - the package manager for Kubernetes
    helm3                # (core) Helm 3 - the package manager for Kubernetes
    ingress              # (core) Ingress controller for external access
    metrics-server       # (core) K8s Metrics Server for API access to service metrics
    rbac                 # (core) Role-Based Access Control for authorisation
  disabled:
    cert-manager         # (core) Cloud native certificate management
    community            # (core) The community addons repository
    gpu                  # (core) Automatic enablement of Nvidia CUDA
    host-access          # (core) Allow Pods connecting to Host services smoothly
    hostpath-storage     # (core) Storage class; allocates storage from host directory
    kube-ovn             # (core) An advanced network fabric for Kubernetes
    mayastor             # (core) OpenEBS MayaStor
    metallb              # (core) Loadbalancer for your Kubernetes cluster
    observability        # (core) A lightweight observability stack for logs, traces and metrics
    prometheus           # (core) Prometheus operator for monitoring and logging
    registry             # (core) Private image registry exposed on localhost:32000
    storage              # (core) Alias to hostpath-storage add-on, deprecated

Для реализации NFS необходимо настроить сервер NFS и создать драйвер хранилища в кластере.

Требования

У вас уже должен быть сервер NFS вне кластеров, вы можете использовать хосты или создать другую виртуальную машину и настроить сервер NFS с помощью следующей конфигурации:

# Assuming you use Ubuntu VM
# Install the NFS Kernel
sudo apt-get install nfs-kernel-server

# Create a directory to be used for NFS
sudo mkdir -p /srv/nfs
sudo chown nobody:nogroup /srv/nfs
sudo chmod 0777 /srv/nfs

Затем отредактируйте /etc/exportsфайл. Убедитесь, что IP-адреса всех ваших узлов MicroK8s могут монтировать этот ресурс. Например, чтобы разрешить все IP-адреса в 10.0.0.0/24подсети:

sudo mv /etc/exports /etc/exports.bak
echo '/srv/nfs 10.0.0.0/24(rw,sync,no_subtree_check)' | sudo tee /etc/exports

Наконец, перезапустите сервер NFS:

sudo systemctl restart nfs-kernel-server

Пожалуйста, отрегулируйте в соответствии с вашей конфигурацией.

Метод установки на кластеры:

  1. Установите драйвер CSI для NFS

Мы будем использоватьвосходящий драйвер NFS CSI. Сначала мы развернем NFS-провайдера, используя официальную схему Helm.

Включите дополнение Helm3 (если оно еще не включено) и добавьте репозиторий для драйвера NFS CSI:

microk8s enable helm3
microk8s helm3 repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
microk8s helm3 repo update

Затем установите диаграмму Helm в kube-systemпространстве имен с помощью:

microk8s helm3 install csi-driver-nfs csi-driver-nfs/csi-driver-nfs \
    --namespace kube-system \
    --set kubeletDir=/var/snap/microk8s/common/var/lib/kubelet

После развертывания чарта Helm дождитесь запуска контроллера CSI и модулей узлов с помощью следующей kubectlкоманды…

microk8s kubectl wait pod --selector app.kubernetes.io/name=csi-driver-nfs --for condition=ready --namespace kube-system

… который в случае успеха выдаст результат, аналогичный следующему:

pod/csi-nfs-controller-7bd5678cbc-nc6l2 condition met
pod/csi-nfs-node-lsn6n condition met

На этом этапе вы также сможете получить список доступных драйверов CSI в вашем кластере Kubernetes...

microk8s kubectl get csidrivers

… и видим nfs.csi.k8s.io в списке:

NAME             ATTACHREQUIRED   PODINFOONMOUNT   STORAGECAPACITY   TOKENREQUESTS   REQUIRESREPUBLISH   MODES        AGE
nfs.csi.k8s.io   false            false            false             <unset>         false               Persistent   23h

  1. Создать StorageClass для NFS

Далее нам нужно будет создать класс хранилища Kubernetes, который использует nfs.csi.k8s.ioдрайвер CSI. Предполагая, что вы настроили общий ресурс NFS /srv/nfsи адрес вашего сервера NFS — 10.0.0.1, создайте следующий файл:

# sc-nfs.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
  server: 10.0.0.1
  share: /srv/nfs
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - hard
  - nfsvers=4.1

Примечание: Последняя строка YAML выше указывает на определенную версию NFS. Она должна соответствовать версии используемого сервера NFS — если вы используете существующую службу, проверьте, какую версию она использует, и внесите соответствующие изменения.

Затем примените его к своему MicroK8sкластеру с помощью:

microk8s kubectl apply -f - < sc-nfs.yaml

  1. Создать новый ПВХ

Последний шаг — создать новый PersistentVolumeClaim с использованием класса хранилища nfs-csi. Это так же просто, как указать storageClassName: nfs-csiв определении PVC, например:

# pvc-nfs.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  storageClassName: nfs-csi
  accessModes: [ReadWriteOnce]
  resources:
    requests:
      storage: 5Gi

Затем создайте ПВХ с помощью:

microk8s kubectl apply -f - < pvc-nfs.yaml

Если все настроено правильно, вы сможете проверить PVC…

microk8s kubectl describe pvc/test-pvc

… и видим, что том был успешно подготовлен:

Name:          test-pvc
Namespace:     default
StorageClass:  nfs-csi
Status:        Bound
Volume:        pvc-0d7e0c27-a6d6-4b64-9451-3209f98d6472
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: nfs.csi.k8s.io
               volume.kubernetes.io/storage-provisioner: nfs.csi.k8s.io
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      5Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       <none>
Events:        <none>

Вот и все! Теперь вы можете использовать этот PVC для запуска рабочих нагрузок с отслеживанием состояния на вашем кластере MicroK8s.

Вам просто нужно заново создать точку 3, чтобы создать новый PVC.

Связанный контент