어떤 저장소 microk8s에서도 애드온 nfs를 찾을 수 없습니다.

어떤 저장소 microk8s에서도 애드온 nfs를 찾을 수 없습니다.

Ubuntu 22.04에서 멀티패스로 실행되는 3개의 노드가 있는 microk8s 클러스터가 있습니다. 모두 2012년 중반 내 오래된 Macbookpro에서 실행됩니다. (우분투에서는 22.04에서 Macos를 제거했습니다)

명령을 실행할 때 다음 메시지가 나타납니다.

microk8s enable nfs

Addon nfs was not found in any repository

3개의 멀티패스 인스턴스 모두에 nfs를 설치했습니다.

sudo apt install -y nfs-common

dns 활성화 dashbord 활성화 내 호스트 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

다음 Pod가 실행 중입니다.

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으로 업데이트한 다음 커뮤니티 애드온을 비활성화했다가 다시 활성화해야 했고 목록에 표시되었습니다.

답변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 서버가 이미 있어야 합니다. 호스트를 사용하거나 다른 VM을 생성하고 아래 구성으로 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. 모든 MicroK8s 노드의 IP 주소가 이 공유를 마운트할 수 있는지 확인하세요. 예를 들어 서브넷의 모든 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. NFS용 CSI 드라이버 설치

우리는업스트림 NFS CSI 드라이버. 먼저 공식 Helm 차트를 사용하여 NFS 프로비저너를 배포합니다.

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

이 시점에서 Kubernetes 클러스터에서 사용 가능한 CSI 드라이버를 나열할 수도 있어야 합니다.

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. NFS용 StorageClass 생성

다음으로 CSI 드라이버를 사용하는 Kubernetes 스토리지 클래스를 생성해야 합니다 nfs.csi.k8s.io. NFS 공유를 구성했고 /srv/nfsNFS 서버의 주소가 다음과 같다고 가정하고 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. 새 PVC 만들기

마지막 단계는 nfs-csi 스토리지 클래스를 사용하여 새로운 PertantVolumeClaim을 생성하는 것입니다. 이는 storageClassName: nfs-csiPVC 정의에 지정하는 것만큼 간단합니다 . 예를 들면 다음과 같습니다.

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

그런 다음 다음을 사용하여 PVC를 만듭니다.

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 클러스터에서 상태 저장 워크로드를 실행할 수 있습니다.

새 PVC를 생성하려면 포인트 3을 다시 생성하기만 하면 됩니다.

관련 정보