Bu kılavuzda Kubernetes (k8s) kümesinde dinamik nfs sağlamanın nasıl kurulacağını öğreneceğiz.Ağ Dosya Sistemi (NFS), dağıtılmış dosya paylaşımına yönelik bir ağ protokolüdür. Bilgisayarların ağ üzerinden dosyalara erişmesini veya bunları paylaşmasını sağlayan bir protokoldür. Birden fazla kullanıcının ve heterojen istemci cihazlarının merkezi disk kapasitesinden veri alabildiği özel bir dosya depolama alanına sahip olmak kolay bir çözümdür.
Kubernetes’te dinamik NFS depolama provizyonu, isteğe bağlı olarak Kubernetes uygulamalarınız için NFS (Ağ Dosya Sistemi) birimlerini otomatik olarak sağlamanıza ve yönetmenize olanak tanır. Kalıcı birimlerin (PV’ler) ve kalıcı birim taleplerinin (PVC’ler) manuel müdahale veya önceden provizyonlanmış depolama gerektirmeden oluşturulmasına olanak tanır.
NFS sağlayıcısı, dinamik olarak PV’ler oluşturmaktan ve bunları PVC’lere bağlamaktan sorumludur. Her PVC için dizinler veya birimler oluşturmak üzere NFS sunucusuyla etkileşime girer.
NFS sunucusunu kurma
Ubuntu 22.04 sunucusuna bir NFS sunucusu kuracağız ancak Debian tabanlı başka bir sisteminiz varsa bu kılavuz işe yarayacaktır.
First install the NFS server:
1
2
| sudo apt update
sudo apt install nfs-kernel-server -y
|
Create the following folder and share it using nfs,
1
2
3
| sudo mkdir /mnt/k8s-dynamic-store
sudo chown -R nobody:nogroup /mnt/k8s-dynamic-store
sudo chmod 2770 /mnt/k8s-dynamic-store
|
Add the following entries in /etc/exports file
1
2
| $ sudo vim /etc/exports
/mnt/k8s-dynamic-store 10.20.1.0/24(rw,sync,no_subtree_check)
|
Save and close the file.
Note: Don’t forget to change network in exports file that suits to your deployment.
To make above changes into the effect, run
1
2
3
| sudo exportfs -a
sudo systemctl restart nfs-kernel-server
sudo systemctl status nfs-kernel-server
|
On each of the worker nodes, install nfs-common
package using following apt command.
1
| sudo apt install nfs-common -y
|
Kubernetes NFS Subdir External Provisioner Kurulumu
NFS subdir external provisioner, Kalıcı Birim Talepleri aracılığıyla Kubernetes Kalıcı Birimlerin dinamik provizyonunu desteklemek için mevcut ve önceden yapılandırılmış NFS sunucunuzu kullanan otomatik bir provizyonlayıcıdır. Kalıcı birimlerin temel hazırlığı ${namespace}-${pvcName}-${pvName} olarak sağlanır.
Bu nedenle, NFS alt dizini harici provizyonlayıcıyı kurmak için öncelikle aşağıdaki komut setini kullanarak Helm ‘i kurun,
1
2
3
| curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
|
Zaten bir NFS Sunucunuz olması gerekir.
Aşağıdaki komutu çalıştırarak helm deposunu etkinleştirin:
1
| helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
|
Aşağıdaki helm komutunu kullanarak hazırlayıcıyı dağıtın
1
2
3
4
5
| helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--create-namespace \
-n nfs-provisioning \
--set nfs.server=10.20.1.4 \
--set nfs.path=/mnt/k8s-dynamic-store
|
Yukarıdaki komut, nfs-provisioning adı verilen bir ad alanı oluşturacak ve nfs provizyonlayıcı bölmesini/dağıtımını, depolama sınıfını (nfs-client) adıyla yükleyecek ve gerekli rbac’ı oluşturacaktır.
Beklendiği gibi çalıştığını doğrulayabilirsiniz:
1
2
| kubectl get all -n nfs-provisioning
kubectl get sc -n nfs-provisioning
|
Bu benim çıktım:
1
2
3
4
5
6
7
8
9
10
| ➜ kubectl get all -n nfs-provisioning
NAME READY STATUS RESTARTS AGE
pod/nfs-subdir-external-provisioner-6b8fbdc787-bws5h 1/1 Running 0 102s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nfs-subdir-external-provisioner 1/1 1 1 44m
NAME DESIRED CURRENT READY AGE
replicaset.apps/nfs-subdir-external-provisioner-6b8fbdc787 1 1 1 103s
|
Ve bu
1
2
3
4
| ➜ kubectl get sc -n nfs-provisioning
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 4d3h
nfs-client cluster.local/nfs-subdir-external-provisioner Delete Immediate true 45m
|
Kalıcı Birim Talepleri Oluşturun (PVC’ler)
Kurulumumuzu test etmek için bir kapsül için depolama talep edecek bir PVC oluşturacağız. PVC, StorageClass’tan (nfs-client) belirli bir miktarda depolama talep edecektir.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $ vim test-pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim
namespace: nfs-provisioning
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Mi
|
Kaydet ve kapat.
Yukarıda oluşturulan yml dosyasını kullanarak pvc oluşturmak için aşağıdaki kubectl komutunu çalıştırın,
1
| kubectl create -f test-pvc.yml
|
PVC ve PV’nin oluşturulup oluşturulmadığını doğrulayın,
1
| kubectl get pv,pvc -n nfs-provisioning
|
Bu
1
2
3
4
5
6
7
| ➜ kubectl get pv,pvc -n nfs-provisioning
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-d4e1d20d-ac8a-4f66-8fec-ca9537ac4ed3 5Mi RWX Delete Bound nfs-provisioning/test-claim nfs-client 55s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/test-claim Bound pvc-d4e1d20d-ac8a-4f66-8fec-ca9537ac4ed3 5Mi RWX nfs-client 55s
|
Yukarıdaki çıktı pv ve pvc’nin başarıyla oluşturulduğunu göstermektedir.
Dinamik NFS Hazırlamayı Test Edin ve Doğrulayın
Dinamik nfs sağlamayı test etmek ve doğrulamak için aşağıdaki yml dosyasını kullanarak bir test bölmesini başlatın,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| $ vim test-pod.yml
kind: Pod
apiVersion: v1
metadata:
name: test-pod
namespace: nfs-provisioning
spec:
containers:
- name: test-pod
image: busybox:latest
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && sleep 600"
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: test-claim
|
Aşağıdaki kubectl komutunu kullanarak bölmeyi dağıtın,
1
| kubectl create -f test-pod.yml
|
Test bölmesinin durumunu doğrulayın,
1
2
3
4
| ➜ kubectl get pods -n nfs-provisioning
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 113s
|
Pod’u alın
1
| kubectl get pods -n nfs-provisioning
|
Pod’da oturum açın ve nfs biriminin takılı olup olmadığını doğrulayın.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| ➜ kubectl exec -it test-pod -n nfs-provisioning -- /bin/sh
/ # df -h
Filesystem Size Used Available Use% Mounted on
overlay 29.3G 3.3G 24.7G 12% /
tmpfs 64.0M 0 64.0M 0% /dev
10.20.1.4:/mnt/k8s-dynamic-store/nfs-provisioning-test-claim-pvc-d4e1d20d-ac8a-4f66-8fec-ca9537ac4ed3
19.5G 2.0G 16.6G 11% /mnt
/dev/sda1 29.3G 3.3G 24.7G 12% /etc/hosts
/dev/sda1 29.3G 3.3G 24.7G 12% /dev/termination-log
/dev/sda1 29.3G 3.3G 24.7G 12% /etc/hostname
/dev/sda1 29.3G 3.3G 24.7G 12% /etc/resolv.conf
shm 64.0M 0 64.0M 0% /dev/shm
tmpfs 3.8G 12.0K 3.8G 0% /var/run/secrets/kubernetes.io/serviceaccount
tmpfs 1.9G 0 1.9G 0% /proc/acpi
tmpfs 64.0M 0 64.0M 0% /proc/kcore
tmpfs 64.0M 0 64.0M 0% /proc/keys
tmpfs 64.0M 0 64.0M 0% /proc/timer_list
tmpfs 1.9G 0 1.9G 0% /sys/firmware
/ # cd /mnt/ && ls
SUCCESS
/mnt #
|
Harika, pod’dan alınan yukarıdaki çıktı, dinamik NFS biriminin takılı ve erişilebilir olduğunu doğruluyor.
Son olarak pod ve PVC’yi silip pv’nin otomatik olarak silinip silinmediğini kontrol edelim.
1
2
| kubectl delete -f test-pod.yml
kubectl delete -f test-pvc.yml
|
Daha sonra onaylayın
1
2
| ➜ kubectl get pv,pvc -n nfs-provisioning
No resources found
|
Birden Çok Hazırlayıcı Yükleme
Birden çok nfs sunucusuna erişim sağlamak ve/veya tek bir nfs sunucusundan birden çok dışa aktarıma sahip olmak için kümenize birden çok NFS sağlayıcısı yüklemek mümkündür. Her provizörün farklı bir StorageClass.provisionerName’e ve farklı bir StorageClass.name’e sahip olması gerekir. Örneğin:
1
2
3
4
5
| helm install -n nfs-provisioner second-nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=x.x.x.x \
--set nfs.path=/second/exported/path \
--set storageClass.name=second-nfs-client \
--set storageClass.provisionerName=k8s-sigs.io/second-nfs-subdir-external
|
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.
Görüntüleme: 144