[ 點擊 ?? 關(guān)注「 全棧工程師修煉指南」公眾號 ]
希望各位看友多多支持【關(guān)注、點贊、評論、收藏、投幣】,助力每一個夢想。
【WeiyiGeek Blog's - 花開堪折直須折,莫待無花空折枝?】
作者主頁: 【?https://weiyigeek.top 】
博客地址: 【?https://blog.weiyigeek.top?】
作者答疑學(xué)習(xí)交流群:歡迎各位志同道合的朋友一起學(xué)習(xí)交流【點擊 ?? 加入交流群】, 或者關(guān)注公眾號回復(fù)【學(xué)習(xí)交流群】。
-
0x00 Minio 快速入門
- 什么是對象存儲?
- 為什么需要對象存儲?
- 什么是 MinIO 對象存儲?
- MinIO 對象存儲有何特點 ?
-
0x01 Minio 安裝配置
- Docker 方式部署
-
Binary 方式部署
- Windows
- Linux
-
Kubernetes 部署
- Kubectl 方式
- Helm 方式
- 主機防火墻規(guī)則配置
- 0x02 Minio Console 簡單使用
-
0x03 MinIO Client (mc 命令) 入門指南
- 安裝 mc 工具
- 使用 mc 命令
- 0x0n Minio 實踐應(yīng)用指南
首發(fā)地址(完整的圖片顯示): https://mp.weixin.qq.com/s/m7yC4S0uzJpaLuxpNCvBxw
0x00 Minio 快速入門
什么是對象存儲?
描述: 對象存儲(Object Storage)是一種存儲數(shù)據(jù)的計算機體系結(jié)構(gòu),它以對象的形式存儲和管理數(shù)據(jù)。與傳統(tǒng)的文件系統(tǒng)和塊存儲不同,對象存儲將數(shù)據(jù)作為對象存儲在分布式的存儲集群中,每個對象都有一個唯一的標(biāo)識符(通常是一個URL),并且可以通過這個標(biāo)識符來訪問和檢索數(shù)據(jù)。
對象存儲特點:
-
彈性擴展:對象存儲可以輕松地擴展存儲容量,無需中斷服務(wù)或重新配置硬件。通過添加更多的存儲節(jié)點,可以實現(xiàn)無限的存儲能力。
-
高可靠性:對象存儲采用分布式存儲架構(gòu),數(shù)據(jù)在多個存儲節(jié)點上進行冗余備份,以保證數(shù)據(jù)的可靠性和持久性。
-
高性能:對象存儲可以提供高并發(fā)的數(shù)據(jù)讀寫操作,通過并行處理和負載均衡技術(shù),實現(xiàn)快速的數(shù)據(jù)訪問。
-
數(shù)據(jù)管理:對象存儲可以對數(shù)據(jù)進行元數(shù)據(jù)管理,可以為每個對象添加自定義的元數(shù)據(jù)信息,方便對數(shù)據(jù)進行分類、搜索和管理。
-
訪問控制:對象存儲可以實現(xiàn)靈活的訪問控制策略,可以根據(jù)需要設(shè)置不同的權(quán)限和訪問策略,確保數(shù)據(jù)的安全性和隱私性。
溫馨提示: 當(dāng)下我們有多種存儲設(shè)計方案可以進行選擇,例如
- 無中心的存儲設(shè)計,如 GlusterFS 產(chǎn)品。
- 有中心的存儲設(shè)計,如 Hadoop 產(chǎn)品。
- 基于數(shù)據(jù)庫的存儲設(shè)計,如 GridFS 和 HBase 產(chǎn)品。
- 繞過元數(shù)據(jù)的存儲設(shè)計,如 FastDFS 產(chǎn)品。
- 基于對象存儲設(shè)計,如 Mino 產(chǎn)品。
總結(jié): 對象存儲廣泛用于云存儲、大數(shù)據(jù)分析、備份和恢復(fù)、多媒體內(nèi)容存儲等場景,它提供了高度可靠、高性能、可擴展和經(jīng)濟高效的數(shù)據(jù)存儲解決方案。
本文作者: WeiyiGeek (全棧工程師修煉指南)
作者博客:blog.weiyigeek.top
為什么需要對象存儲?
描述:在互聯(lián)網(wǎng)越來越普及的當(dāng)下,各種 APP 如雨后春筍。用戶通過 APP 可以進行遠程辦公、查看新聞咨詢、理財、社交、教育等等。在上面這些場景中,避免不了需要查看圖片、音頻、視頻。那么問題來了?這些圖片、視頻、音頻是怎樣的存儲的呢?
傳統(tǒng)開發(fā)中,我們可以使用 tomcat 類似的服務(wù)器進行映射目錄實現(xiàn)資源訪問(在 server.xml 文件中進行配置)。例如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
<!-- 增加的靜態(tài)資源映射配置 -->
<Context path="/static" docBase="/usr/local/app/html/" reloadable="true" crossContext="true"></Context>
</Host>
也可以使用 nginx 對靜態(tài)資源進行代理。例如:
server {
listen 8080;
server_name localhost;
# charset koi8-r;
# access_log logs/host.access.log main;
location / {
root html; # 代理 html 目錄
index index.html index.htm;
}
}
隨著 APP 用戶量的增加,服務(wù)器需要存儲海量的圖片、音頻和視頻。此時,再使用上面方式就顯得不足了。當(dāng)然,如果資金充足,可以購買成熟對象存儲服務(wù)產(chǎn)品,例如:阿里云對象存儲 OSS(Object Storage Service)
。如果不想購買存儲服務(wù)產(chǎn)品,則可以自己搭建對象存儲服務(wù),MinIO 就是你當(dāng)下最好的選擇。
什么是 MinIO 對象存儲?
描述: Minio 是由 GlusterFS 創(chuàng)始人之一的 Anand Babu Periasamy
發(fā)布新的開源項目, MinIO 是一種對象存儲解決方案,它是一個基于 Go 語言 (跨平臺運行
)的開源的對象存儲系統(tǒng),專門設(shè)計用于云原生和容器化環(huán)境,或者部署在任何地方而構(gòu)建 公共云或私有云、裸機基礎(chǔ)架構(gòu)、編排環(huán)境和邊緣基礎(chǔ)架構(gòu)。
Minio 提供與亞馬遜云科技 S3 兼容的 API,并支持所有核心 S3 功能, 所以也可以看做是S3的開源版本;它允許用戶通過簡單的 API 接口進行數(shù)據(jù)的存儲和檢索,同時提供高度可擴展性和強大的數(shù)據(jù)保護機制。
MinIo主要是在微服務(wù)系統(tǒng)中使用,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),例如 圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機
鏡像等,而一個對象文件可以是任意大小,從幾 kb 到最大 5T 不等,并且其安裝配置簡單,單行命令可以運行起來; 也可以很簡單的和其他應(yīng)用的結(jié)合,類似 NodeJS, Redis 或者 MySQL。
溫馨提示: MinIO 是在雙許可證, GNU Affero 通用公共許可證 v3.0 和 MinIO 商業(yè)許可證下發(fā)布。
相關(guān)概念:
存儲桶(Bucket)是對象的載體,可理解為存放對象的 “容器”,且該 “容器” 無容量上限,對象以扁平化結(jié)構(gòu)存放在存儲桶中,無文件夾和目錄的概念,用戶可選擇將對象存放到單個或多個存儲桶中不能單獨存在。
對象(Object)是對象存儲的基本單元,可理解為任何格式類型的數(shù)據(jù),例如圖片、文檔和音視頻文件等。存儲桶(Bucket)是對象的載體,每個存儲桶可容納任意數(shù)量的對象。
# 每個對象都由對象鍵(ObjectKey)、對象值(Value)、和對象元數(shù)據(jù)(Metadata)組成。
* 對象鍵(ObjectKey):對象鍵是對象在存儲桶中的唯一標(biāo)識,可以通俗的理解為文件路徑。
* 對象值(Value):即上傳的對象本身,可以通俗的理解為文件內(nèi)容(Object Content)。
* 對象元數(shù)據(jù)(Metadata):是一組鍵值對,可以通俗的理解為文件的屬性,例如:文件的修改時間、存儲類型等,您可以在上傳對象后對其進行查詢。
MinIO 對象存儲有何特點 ?
描述:MinIO 對象存儲特點如下所示:
-
高可用性:MinIO 支持分布式部署,可以在多個節(jié)點上實現(xiàn)數(shù)據(jù)冗余和負載均衡,從而提供高可用性和容錯能力。
-
高性能:MinIO 的設(shè)計目標(biāo)是提供快速的數(shù)據(jù)訪問速度。它采用了高度優(yōu)化的底層存儲引擎,并且支持并行讀寫操作,以滿足大規(guī)模數(shù)據(jù)訪問的需求。
-
可擴展性:MinIO 可以根據(jù)實際需求進行水平擴展,用戶可以根據(jù)數(shù)據(jù)量的增長來增加節(jié)點數(shù)量,從而實現(xiàn)存儲容量和性能的擴展。
-
數(shù)據(jù)保護:MinIO 提供了多種數(shù)據(jù)保護機制,包括數(shù)據(jù)加密、數(shù)據(jù)完整性校驗和故障恢復(fù)等。用戶可以根據(jù)需要選擇適當(dāng)?shù)谋Wo機制來保障數(shù)據(jù)的安全性和可靠性。
-
兼容性:MinIO 兼容 Amazon S3 云存儲服務(wù)(AWS Signature v2 和 v4) API,這意味著用戶可以直接使用現(xiàn)有的 S3 工具和應(yīng)用程序與 MinIO 進行集成,而無需進行修改。
總之,MinIO 是一個功能強大且易于使用的對象存儲系統(tǒng),適用于各種規(guī)模的數(shù)據(jù)存儲和訪問需求, 它的開源性質(zhì)使得用戶可以自由地定制和擴展系統(tǒng),滿足特定的業(yè)務(wù)需求。
0x01 Minio 安裝配置
描述: 下述部署操作都是基于單節(jié)點Minio且由于處于演示的目錄,只采用了一塊網(wǎng)絡(luò)存儲卷,若要在中大型的生產(chǎn)環(huán)境中,請準備至少4塊存儲硬盤
Docker 方式部署
描述: 此處假如你已經(jīng)安裝了docker容器運行相關(guān)環(huán)境,若沒有請參考作者公眾號《全棧工程師修煉指南》中的Docker入門學(xué)習(xí)系列文章,關(guān)注回復(fù)《docker學(xué)習(xí)》。
首先,創(chuàng)建持久化的目錄,打開Shell執(zhí)行mkdir -vp /app/minio/{data,config}
即可。
溫馨提示: Minio 持久化數(shù)據(jù)存儲不建議使用網(wǎng)絡(luò)文件系統(tǒng)卷,有可能導(dǎo)致MinIO無法提供一致性保證,若非要使用NFS網(wǎng)絡(luò)連接存儲的部署,請使用NFSv4以獲得最佳效果。
$ mount -l
# 掛載 NFS 時關(guān)鍵參數(shù) vers=4
192.168.1.94:/volume1/storage/ on /app type nfs (rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.94,mountvers=4,mountport=892,mountproto=udp,local_lock=all,addr=192.168.1.94)
方式1.通過 Docker 一條命令搞定
docker run -d -p 9000:9000 -p 9001:9001 --name minio-server \
-e "MINIO_ROOT_USER=minioadmin" -e "MINIO_ROOT_PASSWORD=weiyigeek.top" \
-v /app/minio/data:/data -v /app/minio/config:/config \
--restart=always \
quay.io/minio/minio:RELEASE.2023-10-07T15-07-38Z server /data --config-dir=/config --console-address ":9001" --address ":9090"
方式2.通過 Docker-compose 方式, 首先創(chuàng)建 docker-compose.yml 文件
tee docker-compose.yml <<'EOF'
version: '3'
services:
minio:
container_name: minio
image: quay.io/minio/minio:RELEASE.2023-10-07T15-07-38Z
restart: always
command: server /data --config-dir=/config --console-address ":9001" --address ":9090"
ports:
- 9000:9000
- 9001:9001
volumes:
- /app/minio/data:/data
- /app/minio/config:/root/.minio
environment:
- MINIO_ROOT_USER: admin
- MINIO_ROOT_PASSWORD: weiyigeek.top
- MINIO_SERVER_URL: https://minio.weiyigeek.top
- MINIO_BROWSER_REDIRECT_URL: https://minio.weiyigeek.top/admin/
- MINIO_BROWSER_SESSION_DURATION: 30m
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
EOF
# 參數(shù)&環(huán)境變量淺析
--address :指定 minio 監(jiān)控地址
--console-address :指定 minio console 監(jiān)控地址
MINIO_ROOT_USER:Minio Console 管理賬號
MINIO_ROOT_PASSWORD : Minio Console 管理密碼
MINIO_SERVER_URL : 存儲桶資源訪問路徑
MINIO_BROWSER_REDIRECT_URL :Minio Console 管理域名地址
MINIO_BROWSER_SESSION_DURATION :Minio Console 管理頁面認證失效時間
# 啟動與創(chuàng)建容器
docker-compose up -d
補充說明:minio-server 可用的環(huán)境變量參考[ https://www.minio.org.cn/docs/minio/linux/reference/minio-server/minio-server.html ]
溫馨提示: MinIO 可使用糾刪碼(erasure code)和校驗和(check sum)來保護數(shù)據(jù)免受硬件故障和無聲數(shù)據(jù)損壞, 即便您丟失一半數(shù)量(N/2)的硬盤,您仍然可以恢復(fù)數(shù)據(jù),但是你可能需要準備4塊以上的硬盤,分別掛載到minio server
服務(wù)器中。
# 糾刪碼限制 (多塊硬盤 / 服務(wù))
最大驅(qū)動器數(shù)量 Unlimited
最小驅(qū)動器數(shù)量 Unlimited
讀仲裁 N / 2
寫仲裁 N / 2+1
# 示例演示
$ mkfs.xfs /dev/sdb -L DISK1
$ mkfs.xfs /dev/sdc -L DISK2
$ mkfs.xfs /dev/sdd -L DISK3
$ mkfs.xfs /dev/sde -L DISK4
$ nano /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
LABEL=DISK1 /mnt/disk1 xfs defaults,noatime 0 2
LABEL=DISK2 /mnt/disk2 xfs defaults,noatime 0 2
LABEL=DISK3 /mnt/disk3 xfs defaults,noatime 0 2
LABEL=DISK4 /mnt/disk4 xfs defaults,noatime 0 2
docker run -p 9000:9000 -p 9001:9001 --name minio \
-v /mnt/disk1:/disk1 \
-v /mnt/disk2:/disk2 \
-v /mnt/disk3:/disk3 \
-v /mnt/disk4:/disk4 \
minio/minio server /disk1 /disk2 /disk3 /disk4 --console-address ":9001" --address ":9090"
Binary 方式部署
描述: 由于 minio 基于 go 語言開發(fā),所以我們可以快速在 Linux 或者 Windows 平臺上安裝 minio 服務(wù)端。
Windows
powershell(new-object System.Net.WebClient).DownloadFile('https://dl.min.io/server/minio/release/windows-amd64/minio.exe','D:\minio.exe')
minio.exe server D:\
Linux
方式1.使用shell終端直接臨時啟動。
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data /data --console-address ":9001"
方式2.通過系統(tǒng)systemd守護進程啟動。
# 配置文件
mkdir -vp /etc/minio/
tee /etc/minio/minio.conf <<'EOF'
# 數(shù)據(jù)存放目錄
MINIO_VOLUMES="/usr/local/minio/data"
# 端口號設(shè)置
MINIO_OPTS="--console-address :9001 --address :9000"
# 用戶名
MINIO_ROOT_USER="minioadmin"
# 密碼
MINIO_ROOT_PASSWORD="blog.weiyigeek.top"
# minio 配置服務(wù)固定地址,ip可以更換為自己的ip,不使用下面的設(shè)置minio的圖片總是默認127.0.0.1。
MINIO_SERVER_URL=http://minio.weiyigeek.top
EOF
# minio systemd 文件
tee /usr/lib/systemd/system/minio.service <<'EOF'
[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/usr/local
User=root
Group=root
ProtectProc=invisible
EnvironmentFile=-/etc/mini/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
# MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
# This may improve systemctl setups where other services use `After=minio.server`
# Uncomment the line to enable the functionality
# Type=notify
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Specifies the maximum number of threads this process can create
TasksMax=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
EOF
# 重新加載 systemd 并啟動 minio 服務(wù)
systemctl daemon-reload && systemctl start minio
Kubernetes 部署
描述: 此處假如你已經(jīng)安裝了 Kubernetes 集群運行環(huán)境以及helm工具,若沒有請參考作者公眾號《全棧工程師修煉指南》中的k8s 入門學(xué)習(xí)系列文章。
我們知道 Minio 是高性能的并且是對Kubernetes友好的對象存儲,所以說在K8S集群中使用Minio可謂是如魚得水。
Kubectl 方式
Step 1.此處,我使用 kubectl 工具資源清單方式部署 minio (推薦)。
# 創(chuàng)建資源清單存儲目錄,便于后期恢復(fù)。
mkdir -vp /storage/app/monitoring/minio/minio-prometheus/data
tee /storage/app/monitoring/minio/minio-prometheus-deployment.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: minio-prometheus
namespace: monitoring
labels:
app: minio-prometheus
spec:
replicas: 1
selector:
matchLabels:
app: minio-prometheus
template:
metadata:
labels:
app: minio-prometheus
spec:
imagePullSecrets:
- name: harbor-cloud
nodeSelector:
node: app
containers:
- image: quay.io/minio/minio:RELEASE.2023-10-07T15-07-38Z
name: mimir
command:
- /bin/bash
- -c
args:
- minio server /minio/data --console-address :9090 --address :9000
env:
- name: MINIO_BROWSER_REDIRECT_URL
value: https://minio.weiyigeek.top/admin/
- name: MINIO_BROWSER_SESSION_DURATION
value: 30m
- name: MINIO_SERVER_URL
value: https://minio.weiyigeek.top
ports:
- containerPort: 9000
protocol: TCP
name: http
- containerPort: 9090
protocol: TCP
name: console
volumeMounts:
- name: data
mountPath: "/minio/data"
resources:
requests:
cpu: 2
memory: 1Gi
limits:
cpu: 6
memory: 4Gi
volumes:
- name: data
hostPath:
type: DirectoryOrCreate
path: /storage/app/monitoring/minio/minio-prometheus/data
---
apiVersion: v1
kind: Service
metadata:
name: minio-prometheus
namespace: monitoring
labels:
app: minio-prometheus
spec:
selector:
app: minio-prometheus
type: ClusterIP
ports:
- name: http
port: 9000
targetPort: http
- name: console
port: 9090
targetPort: console
EOF
# 部署 minio 資源清單
kubectl apply -f /storage/app/monitoring/minio/minio-prometheus-deployment.yaml
# deployment.apps/minio-prometheus created
# service/minio-prometheus created
Step 2.驗證 minio server 相關(guān)資源部署情況.
$ kubectl get deployments.apps,svc,pod -n monitoring -l app=minio-prometheus
# NAME READY UP-TO-DATE AVAILABLE AGE
# deployment.apps/minio-prometheus 1/1 1 1 6s
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# service/minio-prometheus ClusterIP 10.96.172.22 <none> 9000/TCP,9090/TCP 18m
# NAME READY STATUS RESTARTS AGE
# pod/minio-prometheus-5f4b49bf65-pbvlb 1/1 Running 0 6s
Step 3.創(chuàng)建 ingress 訪問入口,若未安裝的Ingress的同學(xué)請參考《從零開始:新手快速在國產(chǎn)操作系統(tǒng)中搭建高可用K8S(V1.28)集群落地實踐》,此處為了通過 minio.weiyigeek.top 域名訪問minio存儲的文件,以及管理minio而設(shè)置。
# 使用for關(guān)鍵字為多個名稱空間,創(chuàng)建 tls 類型的 secret 以供 ingress 控制器設(shè)置 tls 使用
for i in "ingress-nginx" "logging" "monitoring";do
echo $i
kubectl create secret tls ssl-weiyigeek-top --key=2023.weiyigeek.top.key --cert=2023.weiyigeek.top.pem --namespace $i
echo .
done
# 根域名
kubectl create ingress minio-prometheus-bucket-weiyigeek --class=nginx --rule="minio.weiyigeek.top/*=minio-prometheus:9000,tls=ssl-weiyigeek-top" --namespace monitoring
ingress.networking.k8s.io/minio-prometheus-bucket-weiyigeek created
# 根域名/子目錄 來訪問 minio 的管理后臺
echo '
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio-prometheus-weiyigeek
namespace: monitoring
annotations:
nginn.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- host: minio.weiyigeek.top
http:
paths:
- backend:
service:
name: minio-prometheus
port:
number: 9090
path: /admin(/|$)(.*)
pathType: ImplementationSpecific
tls:
- hosts:
- minio.weiyigeek.top
secretName: ssl-weiyigeek-cn
' | kubectl apply -f -
# ingress.networking.k8s.io/minio-prometheus-weiyigeek created
# 查看創(chuàng)建的 ingress
kubectl get ingress -n monitoring minio-prometheus-weiyigeek
NAME CLASS HOSTS ADDRESS PORTS AGE
minio-prometheus-weiyigeek nginx minio.weiyigeek.top 80, 443 22s
知識擴展: Ingress-Nginx 是一個常用的 Ingress 控制器,它支持多種 pathType 類型來定義 Ingress 路徑。以下是幾種常見的 pathType 類型介紹:
-
Exact(默認):使用
pathType: Exact
可以精確匹配 Ingress 路徑。例如,如果 Ingress 定義了/foo
的路徑,則只有完全匹配/foo
的請求才會被路由到該 Ingress。 -
Prefix:使用
pathType: Prefix
可以前綴匹配 Ingress 路徑。例如,如果 Ingress 定義了/foo
的路徑,則所有以/foo
開頭的請求都會被路由到該 Ingress。 -
ImplementationSpecific:使用
pathType: ImplementationSpecific
可以根據(jù)不同的 Ingress 控制器進行不同的路徑匹配方式,具體的實現(xiàn)方式由不同的控制器決定。
Step 4.設(shè)置企業(yè)內(nèi)部DNS服務(wù)器,以及 Kubernetes集群中 kube-coredns 添加 hosts 插件。
# Post "https://minio.weiyigeek.top/": dial tcp 10.96.0.10: nslookup no record
kubernetes cluster.src in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
hosts {
10.10.10.5 minio.weiyigeek.top
10.10.10.4 minio.weiyigeek.top
fallthrough in-addr.arpa ip6.arpa
}
# 重啟集群 coredns pod
kubectl delete pod -n kube-system coredns-6554b8b87f-bmzgl
kubectl delete pod -n kube-system coredns-6554b8b87f-42c6m
溫馨提示: 若需要在企業(yè)中快速搭建內(nèi)部DNS服務(wù)器,請參考《Ops實踐 | 國產(chǎn)化KylinOS系統(tǒng)中快速部署企業(yè)內(nèi)部高性能DNS服務(wù)器、時間同步服務(wù)器 (精選)》
Step 5.通過瀏覽器訪問 ingress-nginx 控制器入口 [ https://minio.weiyigeek.top/admin/ ],即可登錄 minio console 控制臺, 其默認賬號密碼為minioadmin:minioadmin
Step 6.成功登陸 Minio Console 后點擊【Monitoring】查看 minio 存儲服務(wù)器相關(guān)資源信息,至此Minio Server 在 K8S 中安裝完畢。
Helm 方式
描述:Helm 是一種工具,用于將應(yīng)用程序自動部署到 Kubernetes 集群。 Helm圖 是一組定義部署細節(jié)的 YAML 文件、模板和其他文件。
- 方法1.使用 helm 工具快速部署 單節(jié)點 minio ,并且 minio 鏡像版本過低 (不推薦)。
# 添加 minio 的 helm 源
$ helm repo add minio https://helm.min.io/
# 查詢版本
helm search repo minio/minio -l
# 下載指定版本并解壓
$ helm pull minio/minio --untar --version 8.0.10
$ cd minio
# 根據(jù)需求進行更改 values.yaml
$ vim values.yaml
resources:
requests:
memory: 512Mi
# 使用 helm 部署
$ helm install minio \
--namespace minio --create-namespace \
--set accessKey=minio,secretKey=blog.weiyigeek.top \
--set mode=distributed \
--set replicas=4 \
--set service.type=NodePort \
--set persistence.enabled=true \
--set persistence.storageClass=nfs-storage \
--set persistence.size=500Gi \
-f values.yaml minio/minio
方法2.使用 Minio 官方推薦的 Deploy Operator With Helm 方式將 MinIO Kubernetes operator 安裝到 Kubernetes 集群中。。
# 提前下載鏡像
crictl pull quay.io/minio/operator:v5.0.9
# 下載 helm 資源清單
curl -O https://raw.githubusercontent.com/minio/operator/master/helm-releases/operator-5.0.9.tgz
tar -zxf operator-5.0.9.tgz
# 自定義修改 minio-operator 的 helm 安裝參數(shù) values.yaml 文件
vim ./operator/values.yaml
# 通過 helm 安裝 minio-operator
helm install minio-operator ./mimir-distributed/ --namespace monitoring --debug --set global.clusterDomain=cluster.sec,mimir.structuredConfig.limits.compactor_blocks_retention_period=14d,minio.persistence.size=256Gi
# install.go:200: [debug] Original chart version: ""
# install.go:217: [debug] CHART PATH: /root/k8s/soft/grafana/mimir/mimir-distributed
# 修改 Service 服務(wù)清單
kubectl get service console -n monitoring -o yaml > service.yaml
yq e -i '.spec.type="NodePort"' service.yaml
yq e -i '.spec.ports[0].nodePort = PORT_NUMBER' service.yaml
# 修改 minio-operator 副本數(shù)
kubectl get deployment minio-operator -n minio-operator -o yaml > operator.yaml
yq -i -e '.spec.replicas |= 1' operator.yaml
# 創(chuàng)建 JSON Web 令牌 (JWT) 令牌
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: console-sa-secret
namespace: monitoring
annotations:
kubernetes.io/service-account.name: console-sa
type: kubernetes.io/service-account-token
EOF
kubectl apply -f service.yaml
kubectl apply -f operator.yaml
kubectl apply -f console-secret.yaml
# 查看部署情況
helm -n monitoring ls
# NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
# minio-operator monitoring 1 2023-10-08 11:27:37.000764118 +0800 CST deployed operator-5.0.9 v5.0.9
helm -n monitoring status minio-operator
# NAME: minio-operator
# LAST DEPLOYED: Sun Oct 8 11:27:37 2023
# NAMESPACE: monitoring
# STATUS: deployed
# REVISION: 1
# TEST SUITE: None
# 獲取操作員控制臺使用 JWT 進行身份驗證和登錄
kubectl -n monitoring get secret console-sa-secret -o jsonpath="{.data.token}" | base64 --decode
此后,你便可以通過使用 操作員控制臺 或 Helm 部署 MinIO 租戶即(存儲桶服務(wù)端)。
主機防火墻規(guī)則配置
描述: 在安裝好Minio后可能由于防火墻限制的原因,我們不能正常的訪問 Minio 此時可以通過以下命令將所有傳入流量啟用到范圍從9000到9010的端口。
# ufw 命令
ufw allow 9000:9010/tcp
# firewall-cmd 命令
firewall-cmd --zone=public --add-port=9000-9010/tcp --permanent
firewall-cmd --reload
# iptables 命令
iptables -A INPUT -p tcp --dport 9000:9010 -j ACCEPT
service iptables restart
0x02 Minio Console 簡單使用
描述: 在安裝部署完 Minio Server 后,我們可通過設(shè)置的 console 端口 或者代理轉(zhuǎn)發(fā)端口進行訪問,此處由于作者是在K8S集群中安裝 Minio 服務(wù)端,然后使用 ingress-nginx 入口控制器進行代理訪問 Minio Console 管理端(配置看最上方
),此處仍然通過瀏覽器訪問 https://minio.weiyigeek.top/admin/
使用默認賬號密碼登錄。
溫馨提示: minio 安裝缺省認證密碼為 'minioadmin:minioadmin
', 如果想要改變此值請自行設(shè)置 'MINIO_ROOT_USER
' and 'MINIO_ROOT_PASSWORD
' 環(huán)境變量即可。
env:
- name: MINIO_ROOT_USER
value: admin
- name: MINIO_ROOT_PASSWORD
value: blog.weiyigeek.top
根據(jù)需要創(chuàng)建一個 Access Key ,此處為 Minio 隨機生成 Access 與 Secret Key的我們不用去管他。
然后創(chuàng)建一個 Bucket (桶) ,此處我創(chuàng)建了一個 test 的桶,權(quán)限可讀、可寫。
我們可以直接通過后臺上傳文件到 test 桶中,在實踐環(huán)境中我們通常是通過API接口進行相關(guān)資源的上傳。
此處,我們分享上傳的文件并設(shè)置分享時間,然后將此連接發(fā)送給需要的人即可,可以看到此處共享的連接是https://minio.weiyigeek.top 而非 127.0.0.1,這是由于我們在部署時設(shè)置了 MINIO_SERVER_URL 變量。
至此,Minio 安裝與簡單使用實踐完畢!
0x03 MinIO Client (mc 命令) 入門指南
描述: MinIO Client (mc)是Minio提供訪問和操作服務(wù)端的客戶端工具。它可以使用 ls,cat,cp,mirror,diff,find
等UNIX命令提供了一種替代方案, 它支持文件系統(tǒng)和兼容Amazon S3
的云存儲服務(wù)(AWS Signature v2和v4)。
參考地址: https://min.io/docs/minio/linux/reference/minio-mc.html
安裝 mc 工具
描述: 我們可根據(jù)運行平臺選擇使用多種方式來安裝mc,此處作者推薦使用 docker
或者 二進制文件(GNU/Linux)
來安裝,當(dāng)然你也可以選擇其他方式,請自行官網(wǎng)此處不再累述。
# Docker 方式
$ docker pull minio/mc
$ docker run minio/mc ls play
# Binary 方式
curl https://dl.min.io/client/mc/release/linux-amd64/mc \
--create-dirs \
-o /usr/local/bin
chmod +x /usr/local/bin/mc
# 補充: Windows 平臺下獲取安裝
powershell(new-object System.Net.WebClient).DownloadFile('http://dl.minio.org.cn/client/mc/release/windows-amd64/mc.exe','D:\mc.exe')
使用 mc 命令
描述: MinIO (mc)客戶端快速入門指南常用的子命令快速接介紹。
在命令行直接輸入 mc 命令,查看 mc 命令的語法和幫助。命令如下:
alias 在配置文件中設(shè)置、刪除和列出別名
ls 列出存儲桶和對象
mb 創(chuàng)建一個存儲桶
rb 刪除一個存儲桶
cp 復(fù)制對象
mirror 將對象同步到遠程站點
cat 顯示對象內(nèi)容
head 顯示對象的前 “n” 行
pipe 將 STDIN 流傳輸?shù)綄ο?share 生成臨時訪問對象的 URL
find 搜索對象
sql 對對象運行 sql 查詢
stat 顯示對象元數(shù)據(jù)
mv 移動對象
tree 使用樹形狀的格式顯示存儲桶和對象
du 遞歸統(tǒng)計磁盤使用情況
retention 為對象設(shè)置持有
legalhold 管理對象的合法持有
diff 列出兩個存儲桶之間對象名稱、大小和日期的差異
rm 刪除對象
version 管理存儲桶版本控制
ilm 管理存儲桶生命周期
encrypt 管理存儲桶加密配置
event 管理對象通知
watch 監(jiān)聽對象通知事件
undo 撤消 PUT/DELETE 操作
policy 管理對存儲桶和對象的匿名訪問
tag 管理存儲桶和對象的標(biāo)簽
replicate 配置服務(wù)器端存儲桶復(fù)制
admin 管理 MinIO 服務(wù)器
update 將 mc 更新到最新版本
ping 存活檢測
od 測量單流上傳和下載
batch 管理批處理作業(yè)
config - 管理mc配置文件
語法參數(shù):
# 語法
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE]
# 參數(shù)
ALIAS 別名就是給你的云存儲服務(wù)起了一個短點的外號。
YOUR-S3-ENDPOINT 云存儲的主機和端口,如:http://127.0.0.1:9000
YOUR-ACCESS-KEY 云存儲服務(wù)的 Access Key
YOUR-SECRET-KEY 云存儲服務(wù)的 Secret Key
API-SIGNATURE API簽名是可選參數(shù),默認情況下它被設(shè)置為 "S3v4"
示例演示:
- 示例1.添加刪除云存儲服務(wù)配置
# 方式1.minio 是 minio server 給的名字,url 是 endpoint,minioadmin 是用戶名,密碼。
$ mc config host add minio http://127.0.0.1:9000 minioadmin minioadmin
# 方式2.使用 Access、SECRET Key 進行驗證。
mc config host add minio http://minio.monitoring.svc.cluster.sec:9000 dBb7Qdq***tDCwLOwoiX X39nBC7bU***bzUPb3NQnrqaK --api s3v4
# Added `minio` successfully.
# 刪除名為 minio的 HOST 配置
mc config host remove minio
# Removed `minio` successfully.
- 示例2.查看云存儲服務(wù)配置
# 查看本地的云存儲服務(wù)器或者配置文件
$ mc config host list
$ grep -A 5 "minio" ~/.mc/config.json
# "minio": {
# "url": "http://minio.monitoring.svc.cluster.sec:9000",
# "accessKey": "dBb7Qd***wLOwoiX",
# "secretKey": "X39nBC7b****Pb3NQnrqaK",
# "api": "s3v4",
# "path": "auto"
# },
- 示例3.獲取 Minio Server 指定鍵值。
mc admin config get minio-prometheus/ compression
# compression enable=off allow_encryption=off extensions=.txt,.log,.csv,.json,.tar,.xml,.bin mime_types=text/*,application/json,application/xml,binary/octet-stream
mb、rb - 創(chuàng)建/刪除一個存儲桶或一個文件夾
示例演示:
- 示例1.在minio存儲服務(wù)器中創(chuàng)建、刪除一個新的桶bucket。
# minio/test 是在 minio 下創(chuàng)建一個叫做 test 的 bucket
$ mc mb minio/test
# 遞歸創(chuàng)建存儲桶
$ mc mb minio/test
# 在區(qū)域 “zh-west” 的 MinIO 存儲服務(wù)上創(chuàng)建一個新存儲桶 test。
mc mb --region=zh-west minio/test
# 刪除沒有文件的bucket
$ mc rb minio/test
# 刪除有文件的bucket
$ mc rb minio/test --force
ls - 查看存儲桶中存儲的文件有文件夾
示例演示:
# 查看創(chuàng)建的桶以及文件
mc ls minio/
# [2023-10-09 11:45:58 CST] 0B test/
mc ls minio/test
# [2023-10-09 12:05:06 CST] 13KiB STANDARD OIP-C.jfif
# 遞歸查看桶中目錄中所有文件
mc ls --recursive minio/images
# 使用 --json 參數(shù)啟用 JSON 格式的輸出
mc --json ls minio
cat|head、rm、mv - 顯示、刪除、移動文件或目錄
示例演示:
# 使用 mc cat 命令查看本地文件系統(tǒng)文件的內(nèi)容(通常不會如此使用)。
mc cat ./students.csv
# 查看本地 MinIO 服務(wù)中 files 存儲桶中的 students.csv 文件內(nèi)容。
mc cat local/files/students.csv
# 將多個文件連接為一個文件
mc cat part.* > students.txt
# 查看本地文件或者Mino 存儲桶前 3 行內(nèi)容
mc head -n 3 ./students.csv
mc head -n 3 local/files/students.csv
# 將對象列表從本地文件系統(tǒng)移動到 Amazon S3 云存儲。
mc mv Music/*.ogg s3/jukebox/
# 將多個本地文件夾遞歸移動到 MinIO 云存儲。
mc mv --recursive backup/2022/ backup/2023/ play/archive/
# 刪除文件
$ mc rm minio/test/OIP-C.jfif
# 刪除目錄
$ mc rm minio/test/dir --recursive --force
admin - 控制臺配置與查詢
示例演示:
- 示例1.指定 minio 云存儲服務(wù)查詢
mc admin info minio/
# ● minio.monitoring.svc.cluster.sec:9000
# Uptime: 2 hours
# Version: 2023-10-07T15:07:38Z
# Network: 1/1 OK
# Drives: 1/1 OK
# Pool: 1
# Pools:
# 1st, Erasure sets: 1, Drives per erasure set: 1
# 13 KiB Used, 1 Bucket, 1 Object
# 1 drive online, 0 drives offline
- 示例2.創(chuàng)建和管理 MinIO 用戶, 在 mc admin user 命令提供了8中子命令對 MinIO 的用戶信息進行管理,分別如下:
mc admin user add 添加一個新用戶
mc admin user disable 禁用用戶
mc admin user enable 啟用用戶
mc admin user remove 刪除用戶
mc admin user list 列出所有用戶
mc admin user info 顯示某一個用戶信息
mc admin user policy 以 JSON 格式導(dǎo)出用戶策略
mc admin user svcacct 管理服務(wù)帳戶
cp - 文件拷貝與上傳
示例演示:
# 上傳文件 blog.weiyigeek.top.png 文件到 minio/test 桶的根目錄中。
mc cp blog.weiyigeek.top.png minio/test
# 以遞歸方式將本地文件夾復(fù)制到本地 MinIO 服務(wù)的 images/test 存儲桶
mc cp --recursive wallpaper /minio/images/test
# 遞歸復(fù)制多個本地文件夾到本地 MinIO 存儲服務(wù)。
mc cp --recursive backup/2022/ backup/2023/ play/archive/
# 以遞歸方式將文件夾從 MinIO 云存儲復(fù)制到 Amazon S3 云存儲。
mc cp --recursive play/archive/2023/ s3/mybucket/
mirror - 同步對象
描述: 使用 mc mirror 命令將對象同步到遠程站點。
示例演示:
# 遞歸地將本地文件夾同步到本地別名為 local 的 MinIO 服務(wù)的 images/wallpaper 存儲桶中。
mc mirror wallpaper local/images/wallpaper
# 將 MinIO 的 photos/2022 存儲桶同步到 Amazon S3 云存儲的 backup-photos 存儲桶
mc mirror play/photos/2022 s3/backup-photos
policy(anonymous) - 設(shè)置存儲桶的訪問策略
示例演示:
# 1.設(shè)置公共訪問權(quán)限
mc anonymous set public data/tdsms
# 2.列舉存儲桶訪問的權(quán)限
mc anonymous list data/tdsms
alias - 創(chuàng)建設(shè)置別名
示例演示:
# 創(chuàng)建對應(yīng)于MinIO部署的新別名, 指定MinIO Server API塊中的任何主機名或IP地址,例如 http://localhost:9000.
mc alias set minio-prometheus http://minio-prometheus.monitoring.svc.cluster.sec:9000 minioadmin minioadmin
0x0n Minio 實踐應(yīng)用指南
使用 S3 (Minio) 進行 Gitlab Runner 緩存配置 : https://docs.gitlab.com/runner/install/kubernetes.html#using-cache-with-configuration-template
"Minio 入門到進階指南" : https://www.hxstrive.com/subject/minio/581.htm
首發(fā)地址: https://mp.weixin.qq.com/s/m7yC4S0uzJpaLuxpNCvBxw
原文地址: https://blog.weiyigeek.top/2020/3-22-644.html
本文至此完畢,更多技術(shù)文章,盡情期待下一章節(jié)!
專欄書寫不易,如果您覺得這個專欄還不錯的,請給這篇專欄?【點個贊、投個幣、收個藏、關(guān)個注,轉(zhuǎn)個發(fā),留個言】(人間六大情),這將對我的肯定,謝謝!。
點擊 ?? 關(guān)注「 全棧工程師修煉指南」公眾號
微信溝通交流: weiyigeeker (點擊添加)
交流溝通群:629184198 或 關(guān)注公眾號回復(fù)【學(xué)習(xí)交流群】文章來源:http://www.zghlxwxcb.cn/news/detail-710667.html
溫馨提示: 由于作者水平有限,本章錯漏缺點在所難免,希望讀者批評指正,并請在文章末尾留下您寶貴的經(jīng)驗知識,聯(lián)系郵箱地址 master@weiyigeek.top 或者關(guān)注公眾號 WeiyiGeek 聯(lián)系我。文章來源地址http://www.zghlxwxcb.cn/news/detail-710667.html
到了這里,關(guān)于云原生 | 從零開始,Minio 高性能分布式對象存儲快速入手指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!