Longhorn nedir?
Rancher firması tarafından Kubernetes için geliştirilmiş dağınık blok depolama (Distributed Block Storage) sistemidir.Yani her bir veriyi bloklar halinde kubernetes cluster ında bulunan master ve worker node lar üzerindeki disklere yazar ve gerektiğinde hızlıca bu verilere erişim sağlar.Longhorn'u niçin kullanırız?
- PersistentVolume(PV) ve PersistentVolumeClain(PVC) replikalarını alarak sunucular çöktüğünde uygulamaların stabil olarak çalışmaya devam etmesini sağlar.
- İstediğimiz zaman ve aralıklarla PV ve PVClerin yedeklerini alma ve gerekirse yedekten dönme işlemlerinin yapılmasını sağlar.
- Dağıtılmış Blok Depolama sistemi sayesinde verilerin okunması ve yazılmasında yüksek performans sağlar.
Helm ile Longhorn kurulum
Sistem gereksinimlerin yüklenmesi
Longhorn topluluğunun yazmış olduğu longhornctl aracı ile control plane(master) sunucu üzerinden bütün kubernetes cluster makinelerimizde eksiklerimizi tamamlayabiliriz.longhornctl kurulum
BASH
# AMD64 platform
curl -sSfL -o longhornctl https://github.com/longhorn/cli/releases/download/v1.7.2/longhornctl-linux-amd64
chmod +x longhornctl
# Eksiklikleri kontrol edelim
./longhornctl check preflight
# Eksik olan varsa kuralım
./longhornctl install preflight
Helm repo eklenmesi
BASH
# Helm Longhorn reposunun eklenmesi
helm repo add longhorn https://charts.longhorn.io
# Helm Longhorn reposunun güncellenmesi
helm repo update
Longhorn kurulumu
- Video çektiğimde güncel sürüm v1.7.2.
BASH
# Longhorn Helm ile deploy edilmesi
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.7.2
Varsayılan storageclass olarak atamak
Kubernetes kurduğumuzda genellikle local-path storageclass ı varsayılan olarak gelir. Longhorn u da deploy ettiğimizde artık sistemimizde 2 tane varsayılan (default) storageclass ımız olur. PVC/PV tanımlarken storageclass tanımlamayı unutursak sistem otomatik olarak istemediğimiz storageclass atayabilir. Bunun için sadece longhorn storageclass ı varsayılan hale getireceğiz.
BASH
# Sistemimizdeki storageclass lar
$> kubectl get storageclasses
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 58m
longhorn (default) driver.longhorn.io Delete Immediate true 5m58s
longhorn-static driver.longhorn.io Delete Immediate true 5m50s
# local-path storageclass ını varsayılandan çıkarıyoruz.
$> kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
#Çıktısı
storageclass.storage.k8s.io/local-path patched
# Sadece Longhorn storageclass ımız varsayılan hale geldi.
$> kubectl get storageclasses
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path rancher.io/local-path Delete WaitForFirstConsumer false 60m
longhorn (default) driver.longhorn.io Delete Immediate true 7m20s
longhorn-static driver.longhorn.io Delete Immediate true 7m12s
Longhorn Dashboard için nodePort ayarlanması
BASH
# Longhorn Dashboard için nodePort ayarlanması
kubectl --namespace longhorn-system patch svc longhorn-frontend --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"},{"op":"replace","path":"/spec/ports/0/nodePort","value":31999}]'
# Çıktısı
service/longhorn-frontend patched
- http://NODE_IP:31999 üzerinden erişebilirsiniz.
Örnek Uygulama
BASH
apiVersion: v1
kind: Namespace
metadata:
name: nginx-longhorn-example
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: nginx-longhorn-example
labels:
app: nginx
spec:
ports:
- port: 80
name: web
selector:
app: nginx
type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
namespace: nginx-longhorn-example
spec:
selector:
matchLabels:
app: nginx # has to match .spec.template.metadata.labels
serviceName: "nginx"
replicas: 5 # by default is 1
template:
metadata:
labels:
app: nginx # has to match .spec.selector.matchLabels
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
livenessProbe:
exec:
command:
- ls
- /usr/share/nginx/html/lost+found
initialDelaySeconds: 5
periodSeconds: 5
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "longhorn"
resources:
requests:
storage: 1Gi
Longhorn'u sistemden kaldırma
BASH
# Helm ile Longhorn sistemden kaldırma
kubectl -n longhorn-system patch -p '{"value": "true"}' --type=merge lhs deleting-confirmation-flag
helm uninstall longhorn -n longhorn-system
# longhorn-system namespace ini silme
kubectl delete namespace longhorn-system
Yorumlar