$ wget -P /usr/bin https://dl.min.io/client/mc/release/linux-amd64/mc
$ chmod +x /usr/bin/mc
# 기본 버전 확인
$ mc --version
mc version RELEASE.2022-02-02T02-03-24Z
2. 기본 커맨드
Minio가 의도한 대로 작동하는지 확인 → http://[MinIO IP]:9000/
자격 증명을 입력
Access Key (액세스 키) : minio
Secret Key (비밀 키) : melovethanos
2.1. access key와 secret key를 MinIO client 등록
mc 모든 구성 정보를 ~/.mc/config.json파일에 저장
는 단순히 클라우드 스토리지 서비스의 짧은 이름
S3 엔드포인트, 액세스 및 비밀 키는 클라우드 스토리지 제공업체에서 제공
# set access key / secret key
# 형식 : mc aliasset my-storage http://192.168.0.30:9001 ROOT_ACCESS_KEY_CHANGE_ME SECRET_ACCESS_KEY_CHANGE_ME
$ mc aliasset hippo http://[MinIO IP]:9000 minio melovethanos
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
Added `hippo` successfully.
2.2. MinIO client로 bucket 생성
## bucket 생성$ mc mb hippo/mctest
Bucket created successfully `hippo/mctest`.
2.3. MinIO client로 bucket 리스트 확인
## bucket 리스트 확인
$ mc ls hippo
[2022-02-03 01:22:49 KST] 0B hello/
[2022-02-04 02:55:46 KST] 0B mctest/
[2022-02-04 02:00:24 KST] 0B thanos/
2.4. MinIO client로 bucket에 파일 및 디렉토리 업로드
# upload# 형식 : mc cp SOURCE ALIAS/PATH# 파일 복사$ mc cp ./Prometheus_Restart.sh hippo/hello/Prometheus_Restart.sh
..._Restart.sh: 115 B / 115 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 12.78 KiB/s 0s
# 성공적으로 파일 upload 확인$ mc ls hippo/hello
[2022-02-04 03:04:44 KST] 115B STANDARD Prometheus_Restart.sh
# 디렉토리 복사$ mc cp --recursive ./test hippo/hello/
..._Restart.sh: 578 B / 578 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 58.30 KiB/s 0s
# 성공적으로 디렉토리 upload 확인$ mc ls hippo/hello/test
[2022-02-04 03:13:27 KST] 348B STANDARD Prometheus_Log_Clear.sh
[2022-02-04 03:13:27 KST] 115B STANDARD Prometheus_Log_View.sh
[2022-02-04 03:13:27 KST] 115B STANDARD Prometheus_Restart.sh
2.5. MinIO client로 bucket에 파일 및 디렉토리 삭제
# 디렉토리 내 리스트 확인$ mc ls hippo/hello/test
[2022-02-04 03:13:27 KST] 348B STANDARD Prometheus_Log_Clear.sh
[2022-02-04 03:13:27 KST] 115B STANDARD Prometheus_Log_View.sh
[2022-02-04 03:13:27 KST] 115B STANDARD Prometheus_Restart.sh
# 형식 : mc rm ALIAS/PATH# 파일 삭제$ mc rm hippo/hello/test/Prometheus_Restart.sh
Removing `hippo/hello/test/Prometheus_Restart.sh`.
# 성공적으로 파일 삭제 확인$ mc ls hippo/hello/test
[2022-02-04 03:13:27 KST] 348B STANDARD Prometheus_Log_Clear.sh
[2022-02-04 03:13:27 KST] 115B STANDARD Prometheus_Log_View.sh
# 형식 : mc rm --recursive --force ALIAS/PATH# 디렉토리 삭제$ mc rm --recursive --force hippo/hello/test
Removing `hippo/test/Prometheus_Log_Clear.sh`.
Removing `hippo/test/Prometheus_Log_View.sh`.
# 성공적으로 디렉토리 삭제 확인 -> hippo/hello/test 디렉토리 없음을 확인$ mc ls hippo/hello
[2022-02-04 03:04:44 KST] 115B STANDARD Prometheus_Restart.sh
2.6. minio client로 bucket에 파일 다운로드 → 업로드와 위치만 변경
# download# 형식 : mc cp my-storage/test.zip ~/test.zip#위 cp 예제에서 source/target을 위치를 바꿈.$ mc cp hippo/hello/Prometheus_Restart.sh /Prometheus_Restart.sh
..._Restart.sh: 115 B / 115 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 14.64 KiB/s 0s
# / 디렉토리 아래에 Prometheus_Restart.sh 파일 존재 확인$ ls /Prometheus_Restart.sh
Prometheus_Restart.sh
3. 공유 파일 → 특정 파일을 특정일만 공유
공유기간을 설정후 카피 버튼을 클릭해서 복사후 공유
파일을 공유하기 위해 카피 버튼 클릭
Copy Link를 통해 접근 URL을 획득
4. 일반 웹서버처럼 공유 → 공유 기간을 무한정으로 설정
4.1. 버킷 자체를 public으로 설정
# 형식 : mc policy setpublic my-storage/test_bucket
$ mc policy setpublic hippo/hello
Access permission for `hippo/hello` issetto `public`
4.2. 버킷의 policy를 확인
$ mc policy get hippo/hello
Access permission for `hippo/hello` is `public`
4.3. 다운로드 테스트 → minio에서의 웹사이트 주소에는 minio client의 alias인 hippo는 제외
# minio 서버에 bucket 디렉토리가 바로 뒤로 붙음$wgethttp://[MinIOIP]:9000/hello/Prometheus_Restart.sh--2022-02-0403:33:43--http://[MinIOIP]:9000/hello/Prometheus_Restart.shConnectingto [MinIOIP]:9000...connected.HTTPrequestsent,awaitingresponse...200OKLength:115 [application/x-sh]
Saving to:‘Prometheus_Restart.sh’100%[===============================================>]115--.-K/sin0s2022-02-04 03:33:43(7.72MB/s)-‘Prometheus_Restart.sh’saved [115/115]
# MinIO생성
$ kubectl apply -f minio_install.yml
namespace/minio created
persistentvolume/minio-local-persistent-volume created
persistentvolumeclaim/minio-local-persistent-volume-claim created
deployment.apps/minio-deployment created
service/minio-service-headless created
service/minio-loadbalancer-service created
# 생성 확인 → 내용이 많아 생략함
$ kubectl get -n minio all -o wide
# PV 생성 확인
$ kubectl get -n minio persistentvolume
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
minio-local-persistent-volume 6900G RWX Retain Bound minio/minio-local-persistent-volume-claim minio-local-storage 92s
# PVC 생성 확인
$ kubectl get -n minio persistentvolumeclaims
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
minio-local-persistent-volume-claim Bound minio-local-persistent-volume 6900G RWX minio-local-storage 117s
4. MinIO 서비스의 Service IP를 통해 생성 확인 → Access Denied로 접근 불가
minio에 curl로 접근하면 Access Denied됨으로 다른 방법으로 접근
# clusterIP 서비스를 통해 접근 가능
$ curl 20.10.118.211:9000
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message>Access Denied.</Message><Resource>/</Resource><RequestId>16E0270B55D8E06A</RequestId><HostId>c2659a6e-1046-4fd9-8793-e756fbc033a2</HostId></Error>
# LoadBalancer 할당 IP 서비스를 통해 접근 가능
$ curl [LoadBalancer IP]:9000
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><Message>Access Denied.</Message><Resource>/</Resource><RequestId>16E026EBFCC13E44</RequestId><HostId>c2659a6e-1046-4fd9-8793-e756fbc033a2</HostId></Error>
5. MinIO 서비스에 Python으로 접근하여 확인
curl로 접근할 수 없기에 MinIO Client로 접근
# minio 테스트에 사용할 파이썬3과 minio 패키지 설치
$ yum install -y python3
$ pip3 install minio
# minio 접속 가능 테스트
$ vi minio_api.py
#!/bin/python3from minio import Minio
if __name__ == '__main__':
minioIP = "20.10.180.199:9000"# serviceIP
minioAccessKey = "minio"
minioSecretKey = "melovethanos"
client = Minio(minioIP, minioAccessKey, minioSecretKey, secure=False)
print(client)
# minio 접속 가능 테스트 실행 -> Minio Object 출력 시 이상 없음
$ python3 minio_api.py
<minio.api.Minio object at 0x7f2740e873c8>
3. minio logrotate를 실행할 /etc/crontab 설정 및 logroate 적용
# logrotate 디버그
$ /usr/sbin/logrotate -d /etc/logrotate.d/minio
Allocating hash table forstate file, size 15360 B
Handling 1 logs
rotating pattern: /var/log/minio/*.log weekly (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/minio/minio.log
log does not need rotating (log has been already rotated)not running postrotate script, since no logs were rotated
# logrotate 적용
$ /usr/sbin/logrotate -f /etc/logrotate.d/minio
# 압축 파일 생성 확인
$ ls /var/log/minio/
minio.log minio.log.1.gz
# /etc/crontab 적용# 매주 일요일 자정 logrotate 실행
$ vi /etc/crontab
0000 * * 7 /usr/sbin/logrotate -f /etc/logrotate.d/minio
# log 확인
$ cat /var/lib/logrotate/logrotate.status | grep minio
"/var/log/minio/minio.log"2022-2-6-0:9:7
MinIO가 /usr/local/bin 아래에서 실행 될 수 있도록 /usr/local/bin으로 이동 후 MinIO을 다운 받음
$ cd /usr/local/bin
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
2. minio.conf 설정
/etc 밑에 minio 폴더를 만든 다음, minio,.conf을 생성
$ mkdir /etc/minio
$ vi /etc/minio/minio.conf
/etc/minio/minio.conf 파일 내용
$ vi /etc/minio/minio.conf
MINIO_VOLUMES="/data"# minio 의 파일들을 관리할 위치 (volumes)
MINIO_OPTS="--address :9000"# minio 서비스에 대한 연결 포트
MINIO_ROOT_USER=root # root
MINIO_ROOT_PASSWORD=root # root의 비밀번호
MINIO_ACCESS_KEY= "minioadmin"# minio 접속 아이디
MINIO_SECRET_KEY= "minioadmin"# minio 접속 비밀번호
3. Centos Systemd에 MinIO 서비스 등록
/usr/lib/systemd/system/ 디렉토리에 minio.service 설정
$ vi /usr/lib/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
EnvironmentFile=/etc/minio/minio.conf
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS$MINIO_VOLUMES# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
# Built for ${project.name}-${project.version} (${project.name})