Journey for provisioning 20k over rbd volumes to kubernetes with openstack
1. Journey for Provisioning 20k Over
Rbd Volumes to Kubernetes
With Openstack #2
플랫폼 랩스 스토리지 플랫폼
유장선 · 하 현 · 성준영
2. Contents
1 _ NAVER Rbd 사용 현황
사용 현황
2 _ Kubernetes Plugin
Requirements
Public Rbd Plugin
Flexvolume Plugin
3 _ NAVER RBD Plugin
Multi Tenancy 지원
Multi Map
장애 대응
Storage Watcher
Volume QoS
Filesystem Trim
모니터링
8. Requirements
§ Keystone support for multi tenancy /
authentication support
§ Cinder support for volume dynamic
provisioning / managing
§ QoS support to ensure performance for
public cluster
§ Easy to manage, customize, deploy
9. Public Rbd Plugin
Kubernetes In-tree Provisioner / Ceph CSI Plugin
§ Ceph standalone
§ Version dependency
§ Multi tenancy not supported
§ Customization / Upgrade
issue
https://kubernetes.io/ko/docs/concepts/storage/volumes/#rbd
https://github.com/ceph/ceph-csi
10. Flexvolume Plugin
§ Deprecated, But,,
§ In-tree 플러그인에 존재하지 않는 스토리지 혹은 추가 스펙이 필요한 경우, 사용자가 개발
하여 Kubernetes 클러스터에 추가 가능
§ Worker 노드의 Kubelet 이 사용자가 작성한 Binary 를 실행시키고, Response JSON 을
통해 동작하는 방식
§ Driver Only 구성 / With Provisioner (PVC/PV 프로비저닝) 구성으로 구현 가능
§ 여러 벤더들이 구현하여 오픈 소스로 제공 (https://github.com/search?q=flexvolume)
VOLUME
11. Flexvolume Plugin
§ Fully Customizable § Simple Architecture
Attach
§ Check if volume is multi mapped
§ Check volume status
§ RBD map option
...
MountDevice
§ Mount option…
Mount
Unmount, UmountDevice
Expandfs
Simple Driver
Binary
Plugin Directory
Kubelet
Node1
Node2 Node3
…
12. 3 _ NAVER Rbd Plugin
Multi Tenancy 지원 · Multi Map · 장애 대응 · Storage Watcher · Filesystem Trim · Volume QoS · 모니터링
13. Multi Tenancy 지원
Kubernetes
Blog Namespace Band Namespace
Cafe Namespace
Blog Project
Cafe Project
Band Project
성준영
유장선
하 현
USERS OPENSTACK
TENANTS
14. Multi Tenancy 지원
Create RBD Volume to proper tenant
For user who can access with right permission
§ Cronjob
§ Openstack ceph role can
manage specific tenant’s
volume
§ Cronjob assign ‘ceph’ role for
newly created tenant
§ Provisioner
§ Namespace have ‘tenant id’
annotation
§ Provisioner provision create
volume in user’s tenant
dynamically
15. Multi Map
Multi map can occur filesystem corruption
§ 두 Pod 에서 동시에 Read / Write 시
Filesystem Corruption 발생 가능
§ Filesystem Repair 가 필요하며 (xfs_repair)
Log zeroing 시 데이터 손실 가능성 존재
§ Ceph version: luminous
§ Ceph Driver 에서 볼륨을 Attach 하기 전 해
당 볼륨이 사용중인지 확인할 수 있는 방안?
16. Multi Map
RBD Watcher & Lock
$ rbd status ${pool}/${image id}
§ Map 된 볼륨에 대한 Watcher 정보를 추적할 수 있음
§ Watching Client 가 있음 == 볼륨이 이미 Map 되어 있음
$ rbd lock add ${pool}/${image id} ${lock id}
$ rbd lock ls ${pool}/${image id}
§ 임의로 Lock 을 추가할 수 있음
§ 호스트명을 Lock ID 로 사용
17. Multi Map
RBD Watcher & Lock
Attach
§ Check watcher (for readwrite volume)
§ Check lock (for readwrite volume)
§ Map
§ Add lock for rbd image
MountDevice
Mount
Unmount, UmountDevice
Expandfs
§ Watcher 와 Lock 이 이미 존재한다면 신규 Attach 를
차단, 에러 리턴
§ 비 정상적 상태인 경우 알람 발생
19. 장애 대응
Node1
Kubernetes Cluster
Pod 1
VOL1
Ceph Cluster
/dev/rbd0
Node2 Node3
kubelet kubelet kubelet
Pod 1
§ Node1 의 Kubelet 이 내려감
§ 정책 따라 Pod1 은 Node2 로 스케줄링됨
§ 볼륨은?
!! Orphaned Volume
20. 장애 대응
Node1
Kubernetes Cluster
Pod 1
VOL1
Ceph Cluster
/dev/rbd0
Node2 Node3
kubelet kubelet kubelet
Pod 1
§ Node1 의 장애를 감지
§ 일정 시간 장애 지속 시 OSD Blacklist 호출
§ Node1 의 볼륨은 Garbage Device가 되며, 신규 Node2 에 마운트 가능
!! Black Listed
/dev/rbd0
Garbage device 는 추후 Cleanup 필요
21. Storage Watcher 소개
Node1
Pod 1
VOL1
Ceph Cluster
/dev/rbd0
kubelet
§ 노드 / 볼륨 이상 상태 모니터링, Volume trim, QoS 제어 등
부가적인 요소들을 관리 하는 Sidecar 컨테이너
§ Daemonset 으로 Driver 와 함께 Pod 으로 동작
- Detector
- Collector
- Limiter
- TrimExecutor
Storage Watcher
VOL2
Orphaned Volume
22. Filesystem Trim
Filesystem trim is required to use
available capacity More efficiently
Node1 Ceph Cluster
/dev/rbd0
Storage Watcher
Pod 1
23. Filesystem Trim
Node1 Ceph Cluster
/dev/rbd0
Storage Watcher
Pod 1
$ fstrim v ${mountpoint}
§ Storage Watcher Trimexecutor 가 제한된 양만큼 Filesystem Trim 을 수행
§ Trim 수행은 IO 를 일으키며, Storage Watcher 는 Daemonset 으로 모든 Node 에서 동작
하기 때문에, Trim 수행 시간을 적절히 분산하는것이 중요함 (Hostname hash)
24. Volume QoS
§ 볼륨 (PV) 별 iops / bps 제한은 아직도 Kubernetes 에서 많은 논의가 일어나고 있음
§ https://github.com/kubernetes/enhancements/pull/1907
§ 전사 공용 시스템인 Ceph 클러스터에는 QoS 가 필수
25. Volume QoS
Linux Control Groups
https://selfish-developer.com/entry/Cgroup-Control-Group
§ 프로세스들의 자원의 사용(CPU, 메모리, 디스크 입출력,
네트워크 등)을 제한하고 격리시키는 리눅스 커널 기능
§ 프로세스별 Device 의 IOPS / Throughput 제한 가능
26. Volume QoS
Node1
Storage Watcher
Pod 1
/dev/rbd0
1. 현재 Node 에 떠있는 Pod 리스트 수집
2. Pod 에 대응되는 Container 리스트 수집
3. Container config 파일 (config.v2.json) 으로부터 사용중인
마운트 포인트 / 디바이스 수집
4. 디바이스의 major / minor 넘버 수집
5. 컨테이너 프로세스에 대한 iops / throughput 제한 설정
Limiter
27. 모니터링
+ Storage Watcher Collector
§ Node exporter 는 Device 성능, 사용량 지표를 제공함
§ Storage Watcher 는 Device 를 어떤 Pod 에서, 어떤 Namespace 에서 사용중인지에 대
한 메타데이터 매트릭을 제공함
§ 두 매트릭을 Join 하여 최종 사용자에게 제공