Table of Contents |
---|
...
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가 있습니다.
...
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 설치
Code Block | ||
---|---|---|
| ||
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) 값이 들어 있으므로 지워주겠습니다.
...
Code Block | ||
---|---|---|
| ||
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은 등록하여 사용이 가능합니다.
Code Block | ||
---|---|---|
| ||
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) 옵션을 추가해서 사용할 수 있습니다.
Code Block | ||
---|---|---|
| ||
* 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 권한의 계정을 부여하여 사용할 수 있습니다.
...
Code Block | ||
---|---|---|
| ||
* 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://github.com/minio/minio
4. MinIO 릴리즈 노트
https://github.com/minio/minio/releases
...