![Дополнение nfs не найдено ни в одном репозитории microk8s](https://rvso.com/image/1072876/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20nfs%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%D0%BE%20%D0%BD%D0%B8%20%D0%B2%20%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC%20%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20microk8s.png)
У меня есть кластер 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
Пожалуйста, отрегулируйте в соответствии с вашей конфигурацией.
Метод установки на кластеры:
- Установите драйвер 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
- Создать 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
- Создать новый ПВХ
Последний шаг — создать новый 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.