![在任何儲存庫 microk8s 中都找不到外掛 nfs](https://rvso.com/image/1072876/%E5%9C%A8%E4%BB%BB%E4%BD%95%E5%84%B2%E5%AD%98%E5%BA%AB%20microk8s%20%E4%B8%AD%E9%83%BD%E6%89%BE%E4%B8%8D%E5%88%B0%E5%A4%96%E6%8E%9B%20nfs.png)
我有一個包含 3 個節點的 microk8s 集群,在 Ubuntu 22.04 上以多通道運行。所有這些都在我 2012 年中期的舊 Macbookpro 上運行。 (對於 ubuntu,22.04 我刪除了 Macos)
當我執行命令時,我收到此訊息:
microk8s enable nfs
Addon nfs was not found in any repository
我在所有 3 個多通道實例上安裝了 nfs。
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
以下 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 位址都能夠掛載此共用。例如,要允許10.0.0.0/24
子網路中的所有 IP 位址:
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
請根據您的配置進行調整。
集群上的安裝方法:
- 安裝 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 控制器和節點 Pod 出現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
- 為 NFS 建立儲存類
接下來,我們需要建立一個使用nfs.csi.k8s.io
CSI 驅動程式的 Kubernetes 儲存類別。假設您已經配置了 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
- 建立一個新的 PVC
最後一步是使用 nfs-csi 儲存類別建立新的 PersistentVolumeClaim。這就像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
然後使用以下命令建立 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 叢集上執行有狀態工作負載。
您只需重新建立點 3 即可建立新的 PVC。