2. Do more
meaningful
things
DevOps를 달성하기 위해 서비스간 독립성을
유지하기 위한 아키텍쳐 모델이 Microservice
Microservice 를 구현하기 위한 인프라 제공
기술은 Container
Container 내에 어플리케이션들을 배치시키는
일을 자동화 해주는 Docker
9. Docker Volume 플러그인(Trident, formerly nDVP) 특징
9
Persistent volume을 생성하거나 복제
다중 Backend 구성을 지원
동시에 ONTAP, SolidFire, and/or E-Series iSCSI
and NAS 사용
사용자 별 애플리케이션에 맞는
스토리지의 볼륨 정의
ONTAP: Snapshot policy, space reserve, target
aggregate, clone
여러 호스트에서 액세스 할 수 있는 Docker
volume
nDVP
Docker
Engine
Trident API
Containers Container A Container B Container C
Docker
Plug-in
Instances
nDVP
JSON/HTTP JSON/HTTP JSON/HTTP
NA
S
or
SA
N
I
/O
S
A
N
I
/
O
ZAPI SFAPI E-Series API
nDVP
S
A
N
I
/
O
10. Kubernetes (aka ‘k8s’)
컨테이너 오케스트레이션 툴
Google이 만든 오픈 소스 Container 관리 시스템
수 많은 호스트에서 운영중인 컨테이너 관리
수평 확장
스토리지 오케스트레이션
셀프 힐링
Service 조회와 로드 밸런싱
Container 사용자의 60% ↑
OpenShift, Apprenda PaaS
Hyperscaler : AWS EKS, Azure AKS, Google GKE …
Feature rich, established, and growing
10
11. Kubernetes Persistent Volumes
Kubernetes Volume 지원
iSCSI
NFS
Cinder
AWS EBS,GCE PD, Azure disk, …
외장 스토리지의 사용
볼륨은 단일 호스트의 수명을 초과하여 유지 될 수 있음
컨테이너에서 대규모 워크로드를 안정적으로 실행 할 수 있다는 점
백업 / 복원, 지역간 복제, 테스트 / Dev (복제) 및 기타 문제 해결
Static vs Dynamic 프로비저닝
11
12. Kubernetes Volume 요소
12
Persistent Volume (PV) Persistent Volume Claim (PVC)
관리자가 Kubernetes에 제공한
데이터 저장소
백엔더 스토리지로 구성
NFS, iSCSI, Cinder, AWS EBS, Azure
스토리지 볼륨에
대한 연결 정보를
포함
데이터 저장 장치를 요청하기 위해
사용자가 생성
사용자의 선택을 돕기 위한 Label과
access mode, 요구 용량등이 표기 됨
Kubernetes는
PVC에서 요구되는
요구 사항을 충족
시키기 위해 PV를
할당
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0003
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
storageClassName: bronze
nfs:
path: /tmp
server: 172.17.0.2
kind:
PersistentVolumeClaim
apiVersion: v1
metadata:
name: thepub
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName:
bronze
13. K8s Static Provisioning
13
Kubernetes
Users &
Developers
Ops Team / IT Admins
PV
5 GB
RWO
iSCSI
POD
PVC
5 GB
RWO
K8S PV
Controller
PersistentVolumeClaim PersistentVolume
Storage
POD
PVC
8 GB
RWO PV
10 GB
RWO
NFS
14. Trident: Kubernetes 와 NetApp 스토리지 연동
NetApp의 오픈 소스 Dynamic storage provisioner
지원:
NetApp ONTAP
NetApp SolidFire
E-Series
자동화 된 볼륨 생성과 맵핑
호환성:
OpenShift Origin & Enterprise
Kubernetes
Available on GitHub:
https://github.com/NetApp/trident
14
15. Kubernetes Dynamic Provisioning
With NetApp Trident Integration
15
Kubernetes
PV
8 GB
RWO
iSCSI
POD
PVC
8 GB
RWO
GOLD
K8S PV
Controller
PersistentVolumeClaim StorageClass
Gold
IOPS:
3000/6000/10000
Silver
IOPS:
2000/4000/8000
Bronze
IOPS:
1000/2000/4000
NetApp
SolidFire
NetApp
Provisioner
(Trident)
Users &
Developers
Ops Team / IT Admins
Users &
Developers
Ops Team / IT Admins
※ StorageClass : Storage provisioner 지정, 카탈로그 정의
16. Trident can do,
Kubernetes Dynamic provisioning 을 지원
Admin의 개입없이 User가 Volume 배포
Storage 카탈로깅
QoS
Thin / Thick
Snapshot
PVC 복제 - Rapid Data Cloning
RWM(ReadWriteMany) access mode 지원
검증된 Data protection 기술 활용
16
Trident 적용 추이
17. NetApp Open Source Contribution
17
NetApp은 다양한 오픈 소스 커뮤니티에서 스토리지 프로젝트를 리딩
KubernetesDockerOpenStack
Diablo부터 커뮤니티 멤버로 활동
Charter Gold Member
Elected board representation
Manila, Cinder 프로젝트 Leader
Ecosystem Technology Partner
(2016년)
Docker Certification Program (2017년)
First Certified Docker Volume Plugin
First Snapshot & Clone 기능 제공
CNCF Gold Member
First 외장 Dynamic provisioner 개발
First Clone 기능 제공
CSI(Container Storage Interface) 지원
예정
19. NFS 가용성 테스트 목적
Persistent Volumes for Container services
- dynamic provisioning
- multi backend
Shared Volumes for Container services
- access data both container and host server
High Availability for trident services
20. 테스트 케이스
trident plug-in 주요 기능 검증
- dynamic provisioning 확인
- shared volume 확인
- access mode 확인
trident 서비스 가용성 검증
- trident pod의 take-over
h/w 장애 유발
- node shutdown
- storage down
- network down
21. Tr i d e n t p l u g - i n 주 요 기 능 검 증
# cat test_pod.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs-test
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 300Gi
storageClassName: basic
---
apiVersion: v1
kind: ReplicationController
metadata:
name: nfs-busybox
spec:
replicas: 2
selector:
name: nfs-busybox
template:
metadata:
labels:
name: nfs-busybox
spec:
containers:
- image: busybox
imagePullPolicy: IfNotPresent
name: busybox
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
# name must match the volume name below
- name: nfs-volume
mountPath: "/mnt"
volumes:
- name: nfs-volume
persistentVolumeClaim:
claimName: nfs-test
---
22. Tr i d e n t p l u g - i n 주 요 기 능 검 증
pod 상태
pv 상태
23. Tr i d e n t p l u g - i n 주 요 기 능 검 증
mount 상태(pod 내부에서 확인)
24. Tr i d e n t p l u g - i n 주 요 기 능 검 증
Container
nfs-busybox
Volume
Persistent
VolumeClaim
PersistentVolume
Disk
Replication
Controller
k8s
bind
request
Container
nfs-busybox
request
StorageClass
trident
trident
etcd
dynamicprosivioning
25. pod 상태
pod 를 다른 node로 take-over
정상 생성 확인
26. Storage
control
B/B
L2 Switch
node#01 node#02
Switch
장애 case
cpu fault
memory fault
disk fault
mgmt 네트워크 장애
nfs 네트워크 장애
한쪽 Controller 장애 시
전체 NAS 스토리지 전체 장애 시
disk fault
controller 장애
kubelet service 장애
docker service 장애
trident service 장애
네트워크 장애
disk 부하 발생
cpu 부하 발생
node shutdown
network down
storage down