El complemento nfs no se encontró en ningún repositorio microk8s

El complemento nfs no se encontró en ningún repositorio microk8s

Tengo un clúster microk8s con 3 nodos, ejecutándose en multipaso en Ubuntu 22.04. Todo funcionando en mi antiguo Macbookpro de mediados de 2012. (con ubuntu, 22.04 eliminé Macos)

Recibo este mensaje cuando ejecuto el comando:

microk8s enable nfs

Addon nfs was not found in any repository

Instalé nfs en las 3 instancias multipaso.

sudo apt install -y nfs-common

dns habilitado tablero habilitado Puedo acceder al clúster desde mi host 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

Los siguientes pods están funcionando.

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

Ejecutar también

microk8s enable community

El mensaje es siempre el mismo. El complemento nfs no se encontró en ningún repositorio

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

Respuesta1

El complemento nfs es bastante nuevo. Tuve el mismo problema con microk8s 1.24.0, no formaba parte de la lista. Actualicé mis nodos a 1.26.0, luego tuve que deshabilitar y volver a habilitar el complemento de la comunidad y apareció en la lista.

Respuesta2

En primer lugar, creo que no hay nfsmódulos en microk8s. En mi servidor Ubuntu 22.04.1, los módulos disponibles se enumeran a continuación:

$ 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

Para la implementación de NFS, debe tener configurado el servidor NFS y crear un controlador de almacenamiento en el clúster.

Requisitos

Ya debería tener un servidor NFS fuera de los clústeres, puede usar los hosts o generar otra VM y configurar el servidor NFS con la siguiente configuración:

# 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

Luego edite el /etc/exportsarchivo. Asegúrese de que las direcciones IP de todos sus nodos MicroK8s puedan montar este recurso compartido. Por ejemplo, para permitir todas las direcciones IP en la 10.0.0.0/24subred:

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

Finalmente, reinicie el servidor NFS:

sudo systemctl restart nfs-kernel-server

Por favor ajuste con su configuración.

Método de instalación en clústeres:

  1. Instale el controlador CSI para NFS

Usaremos elcontrolador NFS CSI ascendente. Primero, implementaremos el aprovisionador NFS utilizando el gráfico oficial de Helm.

Habilite el complemento Helm3 (si aún no está habilitado) y agregue el repositorio para el controlador 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

Luego, instale el gráfico Helm debajo del kube-systemespacio de nombres con:

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

Después de implementar el gráfico Helm, espere a que aparezcan el controlador CSI y los pods de nodos usando el siguiente kubectlcomando...

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

… que, una vez exitoso, producirá resultados similares a:

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

En este punto, también debería poder enumerar los controladores CSI disponibles en su clúster de Kubernetes...

microk8s kubectl get csidrivers

… y vea nfs.csi.k8s.io en la lista:

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

  1. Crear una StorageClass para NFS

A continuación, necesitaremos crear una clase de almacenamiento de Kubernetes que utilice el nfs.csi.k8s.iocontrolador CSI. Suponiendo que haya configurado un recurso compartido NFS /srv/nfsy que la dirección de su servidor NFS es 10.0.0.1, cree el siguiente archivo:

# 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

Nota: La última línea del YAML anterior indica una versión específica de NFS. Esto debe coincidir con la versión del servidor NFS que se está utilizando; si está utilizando un servicio existente, verifique qué versión utiliza y ajústelo en consecuencia.

Luego aplíquelo en su MicroK8sclúster con:

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

  1. Crear un nuevo PVC

El último paso es crear un nuevo PersistentVolumeClaim utilizando la clase de almacenamiento nfs-csi. Esto es tan sencillo como especificar storageClassName: nfs-csien la definición de PVC, por ejemplo:

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

Luego crea el PVC con:

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

Si todo se ha configurado correctamente, deberías poder comprobar el PVC...

microk8s kubectl describe pvc/test-pvc

… y ver que un volumen se aprovisionó correctamente:

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>

¡Eso es todo! Ahora puede usar este PVC para ejecutar cargas de trabajo con estado en su clúster MicroK8s.

Sólo necesitas recrear el punto 3 para crear un nuevo PVC.

información relacionada