Hybrid Cloud : 다양한 환경의 조합으로 Application이 실행되는 Cloud 환경, 예시는 아래와 같다.
따라서, MinIO는 위와 같은 Hybrid Cloud를 위한 Object Storage라는 것을 알 수 있다. 그렇다면 각각 환경에 대해서 우수한 호환성을 가지고 있다는 것을 알 수 있다.
First Party vs Third Party : 하드웨어 생산자와 소프트웨어 개발자의 관계를 나타내는 용어
MinIO는 높은 성능의 S3-Compatible API를 제공하기 위해 디자인 된 Kubernetes-native Object Storage이다.
MinIO Operator : First Party K8S Extension이다. -> K8S Clusters에 MinIO Tenants를 배포하기 위한 Custom Resource Definition을 MINIO에서 만들었다.
해당 Custom Resource Definition을 MINIO에서 만들었기에 아래와 같이 kubectl command line을 사용할 수 있다.
$ kubectl minio
# 해당 Command는 MinIO Tenants를 배포, 관리하는데 사용된다.
RAID : Redundant Array of Independent/Inexpensive Disk
Erasure Sets
특징 : Data Redundancy, Data Availability -> 이러한 특징들이, MinIO가 Cluster의 다양한 node들의 loss가 있음에도 불구하고 그 즉시 object를 자동적으로 복구한다. Erasure Coding은 Object Level에서 healing을 제공하며, 이는 근접한 다른 RAID, Replication 기술보다 Overhead가 적다.
원리 : Object를 아래와 같이 2개로 나눈다.
1. Data Blocks -> 저장할 데이터 파트
2. Parity Blocks -> 손상된 Data를 복구하기 위해 사용된다.
이러한 Object들을 어떻게 저장하나?
Parity Setting 표
MinIO는 2개의 Parity Level을 지원한다.
Standard(Default) : Erasure Set에 있는 Volumes에 따라 달라진다.
이전 저번은, EC가 1/2로 잡힌다.
Reduces
Custom으로 Parity를 세팅 가능하다.
환경 변수를 세팅하면 가능하다.
출처 : https://docs.min.io/minio/k8s/core-concepts/core-concepts.html, 2022/04/25
CRD(Custom Resource Definitions) : K8S가 지원하는 API로, 커스텀 Resource를 사용자가 선언할 수 있게 제공하는 기능이다.
DNS Subdomain Names : K8S에서 사용되는 Resource의 이름은 DNS Subdomain에 사용되어야 하기 때문에 RFC 1122에 정의된 방식을 따라야 한다.
출처 : https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names
Kubernetes TLS Certificate API
--cluster-signing-key-file
--cluster-signing-cert-file
세팅하는 방법은 아래와 같다.
kube-controller-manager가 세팅을 만족하는지 아래 커맨드로 확인해보자.
$ kubectl get pod kube-controller-manager-$CLUSTERNAME-control-plane -n kube-system -o yaml
containers:
- command:
- kube-controller-manager
- --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
- --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
- --bind-address=127.0.0.1
- --client-ca-file=/etc/kubernetes/pki/ca.crt
- --cluster-name=kubernetes
- --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
- --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
# 설치
$ kubectl krew update
$ kubectl krew install minio
# 버전 체크
$ kubectl minio version
# Initialize
$ kubectl minio init
출처 : https://docs.min.io/minio/k8s/deployment/deploy-minio-operator.html