Build Clickhouse NFS Server
Preliminary
- Podman has installed, if not check link
1. create new partition
parted
#select /dev/vdb
#mklabel gpt
#mkpart primary 0 -1
#Cancel
#mkpart primary 0% 100%
#print
2. Format disk
mkfs.xfs /dev/vdb1 -f
3. mount disk to folder
mount /dev/vdb1 /data
4. mount after restart server
#vim `/etc/fstab`
/dev/vdb1 /data xfs defaults 0 0
5. init NFSv4 Server
echo -e "nfs\nnfsd" > /etc/modules-load.d/nfs4.conf
modprobe nfs && modprobe nfsd
mkdir -p $(pwd)/data/nfs/data
echo '/data *(rw,fsid=0,no_subtree_check,insecure,no_root_squash)' > $(pwd)/data/nfs/exports
podman run \
--name nfs4 \
--rm \
--privileged \
-p 12049:2049 \
-v $(pwd)/data/nfs/data:/data \
-v $(pwd)/data/nfs/exports:/etc/exports:ro \
-d docker.io/erichough/nfs-server:2.2.1
Tip
you can run an addinational daocloud image to accelerate your pulling, check Daocloud Proxy
6. [Optional] test load
install nfs on
sudo yum install -y nfs-utils
sudo apt-get install nfs-common
sudo dnf install -y nfs-utils
client is ok for normal user
mkdir -p $(pwd)/mnt/nfs
sudo mount -t nfs4 -o port=2049 -v localhost:/ $(pwd)/mnt/nfs
df -h
7.create NFS provisioner
prepare csst-ck-nfs-provisioner.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: csst-ck-nfs-provisioner
spec:
syncPolicy:
syncOptions:
- CreateNamespace=true
project: default
source:
repoURL: https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
chart: nfs-subdir-external-provisioner
targetRevision: 4.0.18
helm:
releaseName: csst-ck-nfs-provisioner
values: |
image:
repository: m.daocloud.io/registry.k8s.io/sig-storage/nfs-subdir-external-provisioner
pullPolicy: IfNotPresent
nfs:
server: <$nfs.service.ip.addr>
path: /
mountOptions:
- port=12049
- vers=4
- minorversion=0
- rsize=1048576
- wsize=1048576
- hard
- timeo=600
- retrans=2
- noresvport
volumeName: csst-ck-nfs-subdir-external-provisioner-nas
reclaimPolicy: Retain
storageClass:
create: true
defaultClass: true
name: csst-nfs-external-nas
destination:
server: https://kubernetes.default.svc
namespace: basic-components
Your NFS server will be host on <$ip>:12049
8. apply to k8s
kubectl -n argocd apply -f csst-ck-nfs-provisioner.yaml
9. sync by argocd
argocd app sync argocd/csst-ck-nfs-provisioner
Then you can use storage class csst-nfs-external-nas
to create pv
or pvc