Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »


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.k8s.test.playce.cloud

  • 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

  • No labels