Longhorn pvc
노드장비를 storage로 사용할수 있다.
persistance volume을 kubernetes 가 설치된 노드를 pv로 사용한다.
pod가 1번 노드에서 뜨면 1번 노드에 pv를 붙여주는거 같음
복제본도 만들어주고 snapshot도 해주고 그런다.
pre-requisites
ubuntu20은 nfs-commons만 추가 설치해야한다.
apt install nfs-common -y
전체 노드에 설치를 한다.
longhorn 설치
helm repo add longhorn https://charts.longhorn.io
helm repo update
helm search repo longhorn
helm install longhorn longhorn/longhorn --namespace longhorn-system
LoadBalancer타입으로 설치하려면 다음처럼 하면된다.
helm install longhorn longhorn/longhorn --set service.ui.type=LoadBalancer -n longhorn-system --create-namespace
helm list -n longhorn-system
kcn longhorn-system
k get pod
프론트웹으로 접속해서 volume을 하나 만들어보자.

k get volumes
NAME STATE ROBUSTNESS SCHEDULED SIZE NODE AGE
test detached unknown True 21474836480 7m57s
k get crd | grep longhorn
backingimagemanagers.longhorn.io 2021-08-11T01:07:42Z
backingimages.longhorn.io 2021-08-11T01:07:42Z
engineimages.longhorn.io 2021-08-11T01:07:42Z
engines.longhorn.io 2021-08-11T01:07:42Z
instancemanagers.longhorn.io 2021-08-11T01:07:42Z
nodes.longhorn.io 2021-08-11T01:07:42Z
replicas.longhorn.io 2021-08-11T01:07:42Z
settings.longhorn.io 2021-08-11T01:07:42Z
sharemanagers.longhorn.io 2021-08-11T01:07:42Z
volumes.longhorn.io 2021-08-11T01:07:42Z
volume이라는 crd를 제공함..기타 다른것도 제공.
longhorn이라는 스토리지 클라스 제공 디폴트로 세팅되어 있다.
# k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
longhorn (default) driver.longhorn.io Delete Immediate true 33m
pv와 pvc가 자동으로 생성되는 준비가 됬다.
ingress - dashboard
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: longhorn
namespace: longhorn-system
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: longhorn.yourdoman.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: longhorn-frontend
port:
number: 80
http://longhorn.yourdoman.com으로 확인해보면 dashboard가 사용이 가능하다.
pvc 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
mypvc.yml
k apply -f mypvc.yml
longhorn dashboard에서 volume이 생긴걸 확인할수 있다.

detached 상태이다.
pod에서 사용
vi pod.yml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: '/var/www/html'
name: mypod
volumes:
- name: mypod
persistentVolumeClaim:
claimName: mypvc
k apply -f pod.yml

조금 기다리면 volume이 attached가 된걸 볼수가 있다.

볼륨 name을 눌러서 들어가보면 자세한 내용이 나온다.

backup도 할수 있고 snapshot도 할수 있다.
replica가 기본값이 3 이므로 3개의 리플리카를 만들어주고 제일먼저 같은 노드에 잇는 pv를 pod에 붙여준다.
이 값을 줄이려면


이 버튼을 이용하면된다.
1 개로 줄이면 줄어드는것을 볼수 있다.

현재 노드가 6개이므로 6개로 늘려주면 모든 노드에 데이터가 다 쌓이므로 파드가 다른 노드로 움직여도 문제가 없는듯 보인다.
메뉴중에 update data locality를 눌러보자.


best effort로 하면 pod가 있는 노드에서 pvc를 붙여주는듯 보인다.
현재 node05번에 pvc가 있다.
pod도 5번에 있는것을 확인할수 있다.

snapshot


간단히 snapshot이 됬다. 메인으로 사용되지 않는 replica에서 스냅샷이 이루어지는지는 확인하지 못햇다.

스냅샷 리스트가 보인다.
복구를 해보자.
스냅샷을 고르면 다음처럼 나온다.

revert가 회색인것을 알수있다. pod가 attached되어 있어서 생기는 문제 일단 pod를 내리고 다시 확인해보자.
kubectl delete pod mypod

detached로 바뀐 볼륨
detached된 볼륨을 선택하고 attach를 누르자.

mainterance mode로 들어가서 작업하자. mainterance 를 꼭 체크해준다.

health로 바뀐다.

이름을 클릭하고 내부로 들어가보면 snapshot이 보인다. 클릭하면 revert가 활성화 된다. 누르자.

revert가 다된후에 다시 volume을 detach한다.

detached된 볼륨

이제 pod를 다시 생성해보자.
k apply -f mypod.yml

다시 pod에 attched됫다.
스냅샷 버전으로 돌아온것을 확인할수 있다.
근데 왜 같은 volume으로 붙지? 아 pvc가 지워지지 않고 유지되고 있어서 그렇지.
recurring snapshot and backup

여기서 처리하면된다.


스냅샷과 백업 둘다 할수 있다.
기본 옵션 변경
메뉴중 setting이라는곳에 모든 기본 옵션이 들어가 있다.

helm설치시 설정해주어도 된다.
backup
리플리카가 있기는 하지만 클러스터 내부에 있으므로 외부로 백업을 하는것도 가능하다.
s3에 백업을 하자. s3권한문제와 secret key부분은 각자 알아서 처리해두고 진행
bucket을 만든다.

aws 접속정보가 있는 secret를 만들고 적용한다.
apiVersion: v1
kind: Secret
metadata:
name: backup-s3
namespace: longhorn-system
type: Opaque
data:
AWS_ACCESS_KEY_ID: AAxxx
AWS_SECRET_ACCESS_KEY: AAxxxx
k apply -f backup-s3.yml
k get secret -n longhorn-system

longhorn 세팅 페이지에서 설정을 하자.

s3://bucket-name@region/path/
save하자.
volume에 들어가서 백업 버튼을 눌러보자.

조금 기다리면 백업이 됬다고 표시된다.
s3에서 확인해보면 다음과 같이 업로드된것이 보인다.

매일 스케줄을 걸어두면 편할듯 보인다.

특정 갯수 이상은 s3에서 지워준다.
시간이 되니 자동으로 업로드해주고 백업 생성해준다.

복구
https://www.youtube.com/watch?v=h8A8mUMGE7M&t=377s
여기에서 복구를 해보면 된다.
volume size 늘리기
현재는 live상태에서는 늘어나지 않는다. 일단 volume을 detach하자.
ui에서 늘리기를 누르면 된다.
다시 attach하자.
ext4, XFS 만 늘리는걸 허용한다.
storage class에서 longhorn을 확인해보면 확장을 허용해주는 옵션이 enable되어있다.

https://longhorn.io/docs/1.2.0/volumes-and-nodes/volume-size/
https://longhorn.io/docs/1.2.0/volumes-and-nodes/expansion/
uninstall
helm uninstall longhorn -n longhorn-system
Create an Ingress with Basic Authentication
https://longhorn.io/docs/1.2.2/deploy/accessing-the-ui/longhorn-ingress/
USER=<USERNAME_HERE>; PASSWORD=<PASSWORD_HERE>; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth
USER=admin; PASSWORD=XXXXX; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth
cat auth | base64
update basic-auth.yaml
Last updated
Was this helpful?