Document toolboxDocument toolbox

2. MinIO


1. MinIO Object Storage 란

MinIO는 AWS 의 S3와 호환 API를 제공하고, S3의 핵심 기능을 지원하는 Object Storage 입니다. 
MinIO는 Public 또는 Private, Hybrid 클라우드, 베어메탈 인프라, 오케스트레이션 된 환경 등 어디에나 배포할 수 있도록 개발되었습니다.
go 언어로 개발되어 배포 시 하나의 파일만 필요하고 빠른 속도와 좋은 매뉴얼을 제공하여 설치와 사용이 쉬운 장점이 있습니다.

Prerequisites(전제조건)

MinIO v4.0.0 이상을 사용하려면 Kubernetes Version 1.19.0 이상으로 설치 및 업그레이드 해야 합니다 .

MinIO 구조

 MinIO는 클라우드 네이티브로 설계되었으며 Kubernetes와 같은 외부 오케스트레이션 서비스에서 관리하는 경량 컨테이너로 실행할 수 있습니다.
MinIO는 대규모 멀티 데이터 센터 클라우드 스토리지 서비스용으로 설계되었습니다. 각 클러스터는 완전히 격리된 자체 클러스터를 실행하여 업그레이드, 업데이트, 보안 사고로 인한 중단으로부터 보호할 수 있는 기능을 제공합니다.
PlayceKube 환경에서는 MinIO의 Backend 환경으로 nfs-csi를 사용하여 구현했습니다.

2. MinIO 사용하기

MinIO WEB Console

WEB UI 접속

  • URL: https://console-minio.<클러스터명>.<PLAYCE_DOMAIN>

  • KeyCloak, OIDC Provider, LDAP 연동이 가능하며 메뉴얼 환경에서는 Local DB에 저장되어 있는 계정으로 로그인 하였습니다. (rootUser: playce-admin, rootPassword: *********)

신규 Buckets 생성

  • Versioning: MinIO에 업로드 된 Object를 Versioning으로 관리

  • Object Locking: Object가 삭제되는 것을 방지

  • Quota: Quota “ON”을 하면 Capacity가 활성화되고, 용량을 지정할 수 있음

AccessKey 생성

  • 3rd party에서 MinIO를 접근하거나, MinIO CLI를 통해 접근을 위해서는 AccessKey가 필요하기 때문에 생성해 줍니다.

  • Create 후 나타나는 팝업에서 Download for import 클릭 시 JSON Format 형태로 KeyFile을 다운로드 받을 수 있습니다.

Identify (User, Group, Policy) 생성하기

  • Policy 부분에는 Default Policy로 consoleAdmin, diagnostics, readonly, readwrite, writeonly가 있습니다.

  • Users 부분에는 Default User로 console이 있으며, consoleAdmin 권한을 갖습니다.

  • osc-bucket에 readonly 권한을 갖는 User를 생성하였습니다.

  • Group의 경우 Default Group는 별도로 존재하지 않으며, 필요 시 생성할 수 있습니다.

Monitoring

  • Monitoring의 Metrics 탭에서 Bucket, Object, MinIO 구성 요소에 대한 정보를 확인할 수 있습니다.

Bucket 및 Object 권한 확인

  • Bucket 선택 후 Upload 버튼으로 Object를 업로드할 수 있습니다.

  • readonly 권한의 readonly-user로 접근 시 Upload 버튼이 Disable 되어 있음을 확인할 수 있습니다.

추가 기능

  • Tiers 기능을 이용하여, Bucket 내 Object의 Lifecycle을 관리할 수 있습니다.

  • MinIO, AWS S3, Aure, Google Cloud Storage 연동이 가능합니다.

 

MinIO CLI

MinIO CLI Command 설치

root@playcekube-test-deploy:~# cd /playcecloud/addon/minio/minio-cli root@playcekube-test-deploy:/playcecloud/addon/minio/minio-cli# root@playcekube-test-deploy:/playcecloud/addon/minio/minio-cli# wget https://dl.min.io/client/mc/release/linux-amd64/mc root@playcekube-test-deploy:/playcecloud/addon/minio/minio-cli# chmod +x mc root@playcekube-test-deploy:/playcecloud/addon/minio/minio-cli# vi /root/.bashrc ... + alias mc='/playcecloud/addon/minio/minio-cli/mc' root@playcekube-test-deploy:/playcecloud/addon/minio/minio-cli# source /root/.bashrc root@playcekube-test-deploy:~# mc ────────────────────────────── NAME: mc - MinIO Client for object storage and filesystems. USAGE: mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

MinIO Cluster 등록

  • Default Cluster(tenant) 값이 들어 있으므로 지워주겠습니다.

root@playcekube-test-deploy:~# mc alias ls gcs URL : https://storage.googleapis.com AccessKey : YOUR-ACCESS-KEY-HERE SecretKey : YOUR-SECRET-KEY-HERE API : S3v2 Path : dns local URL : http://localhost:9000 AccessKey : SecretKey : API : Path : auto play URL : https://play.min.io AccessKey : Q3AM3UQ867SPQQA43P2F SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG API : S3v4 Path : auto s3 URL : https://s3.amazonaws.com AccessKey : YOUR-ACCESS-KEY-HERE SecretKey : YOUR-SECRET-KEY-HERE API : S3v4 Path : dns root@playcekube-test-deploy:~# mc alias rm gcs Removed `gcs` successfully. root@playcekube-test-deploy:~# mc alias rm local Removed `local` successfully. root@playcekube-test-deploy:~# mc alias rm play Removed `play` successfully. root@playcekube-test-deploy:~# mc alias rm s3 Removed `s3` successfully.
  • playcekube-minio 이름의 Cluster를 등록하고, 클러스터 정보 및 Bucket 정보를 확인할 수 있습니다.

root@playcekube-test-deploy:~# mc alias set playcekube-minio http://minio.k8s.test.playce.cloud [ACCESS_KEY] [SECRET_KEY] Added `playcekube-minio` successfully. root@playcekube-test-deploy:~# mc alias ls playcekube-minio URL : http://minio.k8s.test.playce.cloud AccessKey : ACCESS-KEY SecretKey : SECRET-KEY API : s3v4 Path : auto root@playcekube-test-deploy:~# mc admin info playcekube-minio ● playcekube-minio-0.playcekube-minio-svc.playcekube-dev.svc.cluster.local:9000 Uptime: 24 minutes Version: 2022-11-11T03:44:20Z Network: 2/2 OK Drives: 1/1 OK Pool: 1 ● playcekube-minio-1.playcekube-minio-svc.playcekube-dev.svc.cluster.local:9000 Uptime: 24 minutes Version: 2022-11-11T03:44:20Z Network: 2/2 OK Drives: 1/1 OK Pool: 1 Pools: 1st, Erasure sets: 1, Drives per erasure set: 2 0 B Used, 1 Bucket, 1 Object 2 drives online, 0 drives offline root@playcekube-test-deploy:~# mc ls playcekube-minio [2022-12-15 12:51:07 KST] 0B osc-bucket/

MinIO Bucket 생성하기

  • mc mb 명령으로 Bucket을 추가로 생성할 수 있으며, osc-public bucket을 추가로 생성하였습니다.

  • MinIO Bucket은 Default로 Private 권한을 갖지만 osc-public Bucket은 모두가 사용할 수 있도록 Public 권한을 부여하였습니다.

  • mc alias 명령으로 Cluster를 등록할 때, ACCESS-KEY, SECRET-KEY가 없어도 Public 권한의 Bucket은 등록하여 사용이 가능합니다.

root@playcekube-test-deploy:~# mc mb playcekube-minio/osc-public Bucket created successfully `playcekube-minio/osc-public`. root@playcekube-test-deploy:~# mc ls playcekube-minio [2022-12-15 12:51:07 KST] 0B osc-bucket/ [2022-12-15 13:16:47 KST] 0B osc-public/ root@playcekube-test-deploy:~# mc policy set public playcekube-minio/osc-public mc: Please use 'mc anonymous' root@playcekube-test-deploy:~# mc anonymous set public playcekube-minio/osc-public Access permission for `playcekube-minio/osc-public` is set to `public` root@playcekube-test-deploy:~# mc alias set playcekube-minio-public http://minio.k8s.test.playce.cloud Enter Access Key: { Enter } Enter Secret Key: { Enter } Added `playcekube-minio-public` successfully. root@playcekube-test-deploy:~# mc ls playcekube-minio-public mc: <ERROR> Unable to list folder. Access Denied. root@playcekube-test-deploy:~# mc alias ls playcekube-minio URL : http://minio.k8s.test.playce.cloud AccessKey : vOhgMqnDf5D1bCi8 SecretKey : Oi0UVsp7ck2rEJXNtZeBV9RWcW8rhXUe API : s3v4 Path : auto playcekube-minio-public URL : http://minio.k8s.test.playce.cloud AccessKey : SecretKey : API : Path : auto root@playcekube-test-deploy:~# mc ls playcekube-minio-public mc: <ERROR> Unable to list folder. Access Denied. root@playcekube-test-deploy:~# mc ls playcekube-minio-public/osc-public

Bucket에 Object 업로드 & 다운로드하기

  • mc cp 명령어로 데이터를 업로드 다운로드 할 수 있으며, Directory 단의 업로드나 다운로드가 필요할 경우 --recursive(-r) 옵션을 추가해서 사용할 수 있습니다.

* Private Bucket Object Upload root@playcekube-test-deploy:~# mc cp testfile-cli-private playcekube-minio/osc-bucket 0 B / ? ━┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉ root@playcekube-test-deploy:~# mc ls playcekube-minio/osc-bucket [2022-12-15 12:55:19 KST] 0B STANDARD TestFile-admin.txt [2022-12-15 13:28:30 KST] 0B STANDARD testfile-cli-private ** Private Bucket Object Download root@playcekube-test-deploy:~/osc# mc cp playcekube-minio/osc-bucket/testfile-cli-private . 0 B / ? ━┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉ root@playcekube-test-deploy:~/osc# ls testfile-cli-private * Public Bucket Object Upload root@playcekube-test-deploy:~# mc cp testfile-cli-public playcekube-minio-public/osc-public 0 B / ? ━┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉ root@playcekube-test-deploy:~# mc ls playcekube-minio-public/osc-public [2022-12-15 13:29:51 KST] 0B STANDARD testfile-cli-public ** Private Bucket Object Download root@playcekube-test-deploy:~/osc# mc cp playcekube-minio-public/osc-public/testfile-cli-public . 0 B / ? ━┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉ root@playcekube-test-deploy:~/osc# ls testfile-cli-private testfile-cli-public

Identify (User, Group, Policy) 생성하기

  • playcekube-minio Cluster에 readonly-user-cli User 추가하였고, 권한은 readonly 권한을 부여하였습니다.

  • readonly-user-cli 계정으로 Cluster 재 등록 후 readonly 권한이 부여 된 내용을 확인할 수 있습니다.
    Product 환경에서 read 권한만 필요한 사용자에게 readonly 권한의 계정을 부여하여 사용할 수 있습니다.

root@playcekube-test-deploy:~/osc# mc admin user add playcekube-minio readonly-user-cli 12345678 Added user `readonly-user-cli` successfully. root@playcekube-test-deploy:~/osc# mc admin user list playcekube-minio enabled console consoleAdmin enabled readonly-user readonly enabled readonly-user-cli root@playcekube-test-deploy:~/osc# mc admin user info playcekube-minio readonly-user-cli AccessKey: readonly-user-cli Status: enabled PolicyName: MemberOf: root@playcekube-test-deploy:~/osc# mc admin policy list playcekube-minio consoleAdmin diagnostics readonly readwrite writeonly root@playcekube-test-deploy:~/osc# mc admin policy set playcekube-minio readonly user=readonly-user-cli Policy `readonly` is set on user `readonly-user-cli` root@playcekube-test-deploy:~/osc# mc admin user info playcekube-minio readonly-user-cli AccessKey: readonly-user-cli Status: enabled PolicyName: readonly MemberOf: root@playcekube-test-deploy:~# mc alias set playcekube-minio-readonly http://minio.k8s.test.playce.cloud readonly-user-cli 12345678 Added `playcekube-minio-readonly` successfully. root@playcekube-test-deploy:~# mc alias ls playcekube-minio URL : http://minio.k8s.test.playce.cloud AccessKey : vOhgMqnDf5D1bCi8 SecretKey : Oi0UVsp7ck2rEJXNtZeBV9RWcW8rhXUe API : s3v4 Path : auto playcekube-minio-public URL : http://minio.k8s.test.playce.cloud AccessKey : SecretKey : API : Path : auto playcekube-minio-readonly URL : http://minio.k8s.test.playce.cloud AccessKey : readonly-user-cli SecretKey : 12345678 API : s3v4 Path : auto root@playcekube-test-deploy:~# ls testfile-readonly testfile-readonly root@playcekube-test-deploy:~# mc ls playcekube-minio-readonly [2022-12-15 12:51:07 KST] 0B osc-bucket/ [2022-12-15 13:16:47 KST] 0B osc-public/ root@playcekube-test-deploy:~# mc cp testfile-readonly playcekube-minio-readonly/osc-bucket mc: <ERROR> Failed to copy `/root/testfile-readonly`. Insufficient permissions to access this file `http://minio.k8s.test.playce.cloud/osc-bucket/testfile-readonly`
  • Policy 생성의 경우 .json 파일을 이용해서 등록할 수 있습니다.

  • Policy의 기존 Resource(arn:aws:s3:::*) 정책 에서 osc-public Bucket 권한만 부여하였고, readonly-user-cli 계정의 Policy를 변경하였습니다.

* Policy 생성 root@playcekube-test-deploy:~/osc# mc admin user add playcekube-minio readonly-user-cli 12345678 Added user `readonly-user-cli` successfully. root@playcekube-test-deploy:~/osc# cat minio-custom-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::osc-public" ] } ] } root@playcekube-test-deploy:~/osc# mc admin policy add playcekube-minio public-policy minio-custom-policy.json Added policy `public-policy` successfully. root@playcekube-test-deploy:~/osc# mc admin policy list playcekube-minio consoleAdmin diagnostics public-policy readonly readwrite writeonly root@playcekube-test-deploy:~/osc# mc admin policy info playcekube-minio public-policy { "PolicyName": "public-policy", "Policy": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::osc-public" ] } ] }, "CreateDate": "2022-12-15T05:00:38.328Z", "UpdateDate": "2022-12-15T05:00:38.328Z"" } * Policy 적용 root@playcekube-test-deploy:~/osc# mc ls playcekube-minio-readonly [2022-12-15 12:51:07 KST] 0B osc-bucket/ [2022-12-15 13:16:47 KST] 0B osc-public/ root@playcekube-test-deploy:~/osc# mc admin user info playcekube-minio-readonly readonly-user-cli AccessKey: readonly-user-cli Status: enabled PolicyName: readonly MemberOf: root@playcekube-test-deploy:~/osc# mc admin policy set playcekube-minio public-policy user=readonly-user-cli Policy `public-policy` is set on user `readonly-user-cli` root@playcekube-test-deploy:~/osc# mc admin user info playcekube-minio readonly-user-cli AccessKey: readonly-user-cli Status: enabled PolicyName: public-policy MemberOf: root@playcekube-test-deploy:~/osc# mc ls playcekube-minio-readonly [2022-12-15 13:16:47 KST] 0B osc-public/

3. MinIO 기술자료

  • MinIO에서는 WEBUI에서 MinIO Document 페이지로 넘어갈 수 있도록 기능을 제공하고 있습니다.

https://min.io/docs/minio/linux/index.html?ref=con

https://github.com/minio/minio

 

4. MinIO 릴리즈 노트

https://github.com/minio/minio/releases