2. MinIO
- 1 1. MinIO Object Storage 란
- 1.1 Prerequisites(전제조건)
- 1.2 MinIO 구조
- 2 2. MinIO 사용하기
- 2.1 MinIO WEB Console
- 2.1.1 WEB UI 접속
- 2.1.2 신규 Buckets 생성
- 2.1.3 AccessKey 생성
- 2.1.4 Identify (User, Group, Policy) 생성하기
- 2.1.5 Monitoring
- 2.1.6 Bucket 및 Object 권한 확인
- 2.1.7 추가 기능
- 2.2 MinIO CLI
- 2.2.1 MinIO CLI Command 설치
- 2.2.2 MinIO Cluster 등록
- 2.2.3 MinIO Bucket 생성하기
- 2.2.4 Bucket에 Object 업로드 & 다운로드하기
- 2.2.5 Identify (User, Group, Policy) 생성하기
- 2.1 MinIO WEB Console
- 3 3. MinIO 기술자료
- 4 4. 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