일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 피카푸글램핑
- KVM
- kub-ai
- api-key
- macos 터널링
- 쿠버네티스보안
- 티스토리챌린지
- kubernetes
- GPU
- AI
- 입문나이프
- POD
- 피카푸캠핑도봉산
- 글램핑
- kubernetes-ai
- 오블완
- k8sgpt
- karpor
- 쿠버네티스
- k8s
- virt-manager
- kube-ai
- mac터널링
- 캠핑
- 파드
- 쿠버네티스기초
- 도봉산글램핑
- IT
- 피카푸클램핑도봉산
- 입문용칼
- Today
- Total
마구잡
Kubernetes OpenEBS LVM 사용하기 본문
OpenEBS란?
OpenEBS는 쿠버네티스 환경에서 상태 저장 애플리케이션을 위한 오픈소스 스토리지 솔루션이다. 컨테이너에 스토리지를 직접 연결하는 ‘컨테이너 부착 스토리지(Container Attached Storage, CAS)’ 패턴을 채택하여, 각 애플리케이션이 독립적인 스토리지 리소스를 가질 수 있도록 한다. 이 접근 방식은 스토리지 관리의 유연성과 확장성을 높이며, 데이터의 복제 및 복구 기능을 제공한다.
OpenEBS는 다양한 스토리지 엔진을 지원하여 사용자의 요구에 맞는 스토리지 솔루션을 선택할 수 있게 한다. 주요 엔진으로는 Jiva, cStor, Mayastor 등이 있으며, 각각의 엔진은 성능, 복제, 스냅샷 등 다양한 기능을 제공한다. 또한, OpenEBS는 쿠버네티스와 긴밀하게 통합되어 동적 프로비저닝, 스냅샷, 백업 등 다양한 스토리지 기능을 지원한다.
기술적으로, OpenEBS는 사용자 공간에서 실행되며, 쿠버네티스의 네이티브 리소스와 연동된다. 이는 커널 모듈에 의존하지 않으므로 다양한 환경에서 높은 이식성을 제공한다. 또한, OpenEBS는 iSCSI, NVMe-oF 등 다양한 스토리지 프로토콜을 지원하여 다양한 스토리지 요구 사항을 충족시킨다.
( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다.
이는 정확한 정보가 아닐 수 있음을 알려드립니다. )
공식 사이트
( 광고 클릭은 큰 힘이 됩니다! )
OpenEBS - Kubernetes Storage Simplified.
OpenEBS makes it easy to attach Dynamic Local PV or Replicated Volumes to any Kubernetes application by abstracting all of the complex commands involved in creating robust multi-zone storage in a simple one-line command.
openebs.io
사전 준비
LVM형태의 OpenEBS StroageClass를 사용하고싶다면 엑스트라 디스크가 필요하다.
작성자는 20기가짜리 디스크를 node-1,node-2 vm에 추가하여 진행하였다.
loop디바이스 또는 덤프 파일을 이용해서도 진행이 가능하다.
OS ubuntu22.04 환경
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
vdb 253:16 0 20G 0 disk
1. lvm2 Install
apt install lvm2
2. pvcreate, vgcreate
디스크를 추가한 모든 노드에서 진행
pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.
pvdisplay
--- Physical volume ---
PV Name /dev/vdb
VG Name vg_vdb
PV Size 20.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 5119
Allocated PE 0
PV UUID hS8Mq5-8MyZ-I95k-KpyD-dij7-Cx0S-qJ3G0B
vgcreate vg_vdb /dev/vdb
Volume group "vg_vdb" successfully created
vgdisplay
--- Volume group ---
VG Name vg_vdb
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 0 / 0
Free PE / Size 5119 / <20.00 GiB
VG UUID lLPpSZ-Ox0H-Hvv6-R7Dr-vSTk-kEbJ-QSw2lX
OpenEBS Install
이번 글에서는 HostPath 방식이 아닌 LVM 방식의 StorageClass를 사용해서 PV/PVC를 배포하는 방식을 채택한다.
특별한 이유가 있다기 보단 클러스터에 사용하고 있는 Path를 사용하지 않고 장치를 추가시키게 되면 독립성이 증가하고, 볼륨생성을 더 가시적으로 보기 편해서 해당 방식을 채택해서 진행했다.
기본적인 설치는 공식 Docs Quick Guide를 따라해서 진행한다.
1. helm repo add
helm repo add openebs https://openebs.github.io/openebs
helm repo update
레포 리스트 확인
helm repo list
NAME URL
openebs https://openebs.github.io/openebs
2. helm install
helm install openebs --namespace openebs openebs/openebs --create-namespace
기본 helm으로 설치하게 되면 openebs 네임스페이스에 OpenEBS의 Local PV Hostpath, Local PV LVM, Local PV ZFS, Replicated Storage 구성 요소를 설치한다. Replicated Storage를 설치하지 않으려면 접은글의 명령어를 사용한다.
helm install openebs --namespace openebs openebs/openebs --set engines.replicated.mayastor.enabled=false --create-namespace
배포 상태 확인
kubectl get po -n openebs
NAME READY STATUS RESTARTS AGE
openebs-agent-core-7f97c46864-c66mc 2/2 Running 0 23m
openebs-agent-ha-node-8hbvp 1/1 Running 0 23m
openebs-agent-ha-node-fvxdv 1/1 Running 0 23m
openebs-agent-ha-node-m6m8d 1/1 Running 0 23m
openebs-agent-ha-node-x5l8r 1/1 Running 0 23m
openebs-api-rest-745bc49fb7-k4lnh 1/1 Running 0 23m
openebs-csi-controller-6c878fb7bc-82j4z 6/6 Running 0 23m
openebs-csi-node-b8nvv 2/2 Running 0 23m
openebs-csi-node-bfnd6 2/2 Running 0 23m
openebs-csi-node-zt74d 2/2 Running 0 23m
openebs-csi-node-zw5dc 2/2 Running 0 23m
openebs-etcd-0 1/1 Running 0 23m
openebs-etcd-1 1/1 Running 0 23m
openebs-etcd-2 1/1 Running 0 23m
openebs-localpv-provisioner-65db9df479-4h856 1/1 Running 0 23m
openebs-loki-0 1/1 Running 0 23m
openebs-lvm-localpv-controller-84844f9c47-f67jw 5/5 Running 0 23m
openebs-lvm-localpv-node-4nv75 2/2 Running 0 23m
openebs-lvm-localpv-node-578jj 2/2 Running 0 23m
openebs-lvm-localpv-node-f7d4n 2/2 Running 0 23m
openebs-lvm-localpv-node-xqhn8 2/2 Running 0 23m
openebs-nats-0 3/3 Running 0 23m
openebs-nats-1 3/3 Running 0 23m
openebs-nats-2 3/3 Running 0 23m
openebs-obs-callhome-6ddffb4b7f-zzz2x 2/2 Running 0 23m
openebs-operator-diskpool-5f6795874d-6hr6h 1/1 Running 0 23m
openebs-promtail-bjncz 1/1 Running 0 23m
openebs-promtail-nlhjl 1/1 Running 0 23m
openebs-promtail-txrqt 1/1 Running 0 23m
openebs-promtail-zjtb8 1/1 Running 0 23m
openebs-zfs-localpv-controller-779bbf897-z6w4s 5/5 Running 0 23m
openebs-zfs-localpv-node-5hm8b 2/2 Running 0 23m
openebs-zfs-localpv-node-cjmgh 2/2 Running 0 23m
openebs-zfs-localpv-node-jsptq 2/2 Running 0 23m
openebs-zfs-localpv-node-wch9f 2/2 Running 0 23m
3. LVM StorageClass 생성
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-lvmpv-vdb
allowVolumeExpansion: true
parameters:
blockDevices: "/dev/vdb" <- 사용할 장치
fsType: "ext4" <- 원하는 파일시스템 타입
storage: "lvm" <- 원하는 스토리지 타입
volgroup: "vg_vdb" <- 생성한 볼륨 그룹 명
provisioner: local.csi.openebs.io
allowedTopologies:
- matchLabelExpressions:
- key: kubernetes.io/hostname
values:
- ubuntu-m1 <- 볼륨 그룹을 생성한 노드
- ubuntu-w1 <- 볼륨 그룹을 생성한 노드
위에는 명시적으로 전부 작성했지만 필터링 형식처럼 작성 또한 가능하다.
/dev/vd* 같은 형식으로 vd로 시작하는 모든 장치를 사용할 수 있다.
위와 같은 필터링 방식은 공식 Docs에 나와있다.
kubectl apply -f openebs-lvm-sc.yaml
kubectl get sc -n openebs
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
mayastor-etcd-localpv openebs.io/local Delete WaitForFirstConsumer false 7h1m
mayastor-loki-localpv openebs.io/local Delete WaitForFirstConsumer false 7h1m
nfs-csi (default) nfs.csi.k8s.io Delete Immediate false 7d11h
openebs-hostpath openebs.io/local Delete WaitForFirstConsumer false 7h1m
openebs-lvmpv-vdb local.csi.openebs.io Delete Immediate true 15s
openebs-single-replica io.openebs.csi-mayastor Delete Immediate true 7h1m
4. pvc 배포시 동적 할당 확인
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lvm-pvc
spec:
storageClassName: openebs-lvmpv-vdb
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
kubectl apply -f lvm-pvc.yaml
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
data-openebs-etcd-0 Bound pvc-9ebfa4c0-4f3e-4467-b34a-58c40e90cd30 2Gi RWO mayastor-etcd-localpv <unset> 4d2h
data-openebs-etcd-1 Bound pvc-6620c88f-edeb-4e24-a92a-7d8bf3b34716 2Gi RWO mayastor-etcd-localpv <unset> 4d2h
data-openebs-etcd-2 Bound pvc-b7e6cd7f-2ac7-4eff-96ce-d30c867b8eb6 2Gi RWO mayastor-etcd-localpv <unset> 4d2h
lvm-pvc Bound pvc-19003639-a8fb-4ffe-970b-ad2695b18530 1Gi RWO openebs-lvmpv-vdb <unset> 4s
storage-openebs-loki-0 Bound pvc-857585af-f6ff-425c-87ae-7303172f95b8 10Gi RWO mayastor-loki-localpv <unset> 4d2h
LVM 배포 확인
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop /snap/bare/5
loop1 7:1 0 273.6M 1 loop /snap/firefox/5187
loop2 7:2 0 74.2M 1 loop /snap/core22/1621
loop3 7:3 0 73.9M 1 loop /snap/core22/1663
loop4 7:4 0 497M 1 loop /snap/gnome-42-2204/141
loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop6 7:6 0 12.2M 1 loop /snap/snap-store/1216
loop7 7:7 0 12.3M 1 loop /snap/snap-store/959
loop8 7:8 0 40.4M 1 loop /snap/snapd/20671
loop9 7:9 0 452K 1 loop /snap/snapd-desktop-integration/83
loop10 7:10 0 568K 1 loop /snap/snapd-desktop-integration/253
loop11 7:11 0 273.6M 1 loop /snap/firefox/5239
loop12 7:12 0 38.8M 1 loop /snap/snapd/21759
loop13 7:13 0 505.1M 1 loop /snap/gnome-42-2204/176
vda 253:0 0 100G 0 disk
├─vda1 253:1 0 1M 0 part
├─vda2 253:2 0 513M 0 part /boot/efi
└─vda3 253:3 0 99.5G 0 part /var/lib/kubelet/pods/5ffde88c-b09e-421c-a32a-f85d1a780067/volume-subpaths/chroot-zfs/openebs-zfs-plugin/3
/var/snap/firefox/common/host-hunspell
/
vdb 253:16 0 20G 0 disk
└─vg_vdb-pvc--19003639--a8fb--4ffe--970b--ad2695b18530 252:0 0 1G 0 lvm
발생 가능성 있는 에러
가끔 ETCD 파드가 RUNNING이지만 0/1 상태일때가 있다.
이때 로그를 확인하고 엔드포인트로 통신문제가 보여지면 dns lookup의 문제일 수 있으니 core-dns 재시작을 해보자
잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.
'Kubernetes' 카테고리의 다른 글
kubernetes AI - K8sGPT 활용 (with: Ollama-AI, Google Gemini) (0) | 2025.02.24 |
---|---|
Kubernetes Migrating a Calico cluster to Cilium (0) | 2025.01.06 |
kubernetes kubelet 인증서 갱신 시점 (1) | 2024.10.29 |
Kubernetes Nvidia Gpu Component의 상관관계 (1) | 2024.10.24 |
하버 프라이빗 레포 이미지 가져오기 - Harbor Private Repository Image Pull (0) | 2024.10.22 |