I think lots of users are going to use the CSI driver with a seaweedfs cluster also running in k8s. The natural way to connect the driver to that cluster would be using DNS instead of hard coded IPs, so I set `SEAWEEDFS_FILER` to something like `seaweedfs-filer.seaweed-namespace.svc:8888`, which the driver kept timing out trying to connect. I realized the driver was running using `hostNetwork: true`, which means the in-cluster DNS resolution doesn't happen, so the .svc hostnames are just unresolved. This changes the default YAML for the next person coming along to use the in-cluster DNS resolution first, and then the host's DNS resolution, so that if the filer happens to be running the cluster, it can be connected from the driver running on the host. An alternative would be to not use `hostNetworking` for the driver daemonset, but I am presuming that's there for a reason. |
||
|---|---|---|
| cmd/seaweedfs-csi-driver | ||
| deploy/kubernetes | ||
| pkg/driver | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
Container Storage Interface (CSI) for SeaweedFs
Container storage interface is an industry standard that will enable storage vendors to develop a plugin once and have it work across a number of container orchestration systems.
SeaweedFS is a simple and highly scalable distributed file system, to store and serve billions of files fast!
Deployment (Kubernetes)
Prerequisites:
- Already have a working Kubernetes cluster (includes
kubectl) - Already have a working SeaweedFS cluster
Utilize exiting SeaweedFS storage for your Kubernetes cluster (bare metal)
-
Git clone this repository and add your SeaweedFS master IP to
deploy/kubernetes/seaweedfs-csi.yaml(2 places) -
Apply the container storage interface for SeaweedFS for your cluster
$ kubectl apply -f deploy/kubernetes/seaweedfs-csi.yaml
- Ensure all the containers are ready and running
$ kubectl get po -n kube-system
- Testing: Create a persistant volume claim for 5GiB with name
seaweedfs-csi-pvcwith storage classseaweedfs-storage. The value, 5Gib does not have any significance as for SeaweedFS the whole filesystem is mounted into the container.
$ kubectl apply -f deploy/kubernetes/sample-seaweedfs-pvc.yaml
- Verify if the persistant volume claim exists and wait until its the STATUS is
Bound
$ kubectl get pvc
- After its in
Boundstate, create a sample workload mounting that volume
$ kubectl apply -f deploy/kubernetes/sample-busybox-pod.yaml
- Verify the storage mount of the busybox pod
$ kubectl exec my-csi-app -- df -h
- Clean up
$ kubectl delete -f deploy/kubernetes/sample-busybox-pod.yaml
$ kubectl delete -f deploy/kubernetes/sample-seaweedfs-pvc.yaml
$ kubectl delete -f deploy/kubernetes/seaweedfs-csi.yaml
License
Code of conduct
Participation in this project is governed by Kubernetes/CNCF code of conduct