<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      云原生 | 從零開始,Minio 高性能分布式對象存儲快速入手指南

      [ 點擊 ?? 關注「 全棧工程師修煉指南」公眾號 ]

      希望各位看友多多支持【關注、點贊、評論、收藏、投幣】,助力每一個夢想。

      WeiyiGeek Blog's - 花開堪折直須折,莫待無花空折枝 】
      作者主頁: 【 https://weiyigeek.top
      博客地址: 【 https://blog.weiyigeek.top 】
      作者答疑學習交流群:歡迎各位志同道合的朋友一起學習交流【點擊 ?? 加入交流群】, 或者關注公眾號回復【學習交流群】。


      首發地址(完整的圖片顯示): https://mp.weixin.qq.com/s/m7yC4S0uzJpaLuxpNCvBxw


      0x00 Minio 快速入門

      什么是對象存儲?

      描述: 對象存儲(Object Storage)是一種存儲數據的計算機體系結構,它以對象的形式存儲和管理數據。與傳統的文件系統和塊存儲不同,對象存儲將數據作為對象存儲在分布式的存儲集群中,每個對象都有一個唯一的標識符(通常是一個URL),并且可以通過這個標識符來訪問和檢索數據。

      對象存儲特點

      1. 彈性擴展:對象存儲可以輕松地擴展存儲容量,無需中斷服務或重新配置硬件。通過添加更多的存儲節點,可以實現無限的存儲能力。

      2. 高可靠性:對象存儲采用分布式存儲架構,數據在多個存儲節點上進行冗余備份,以保證數據的可靠性和持久性。

      3. 高性能:對象存儲可以提供高并發的數據讀寫操作,通過并行處理和負載均衡技術,實現快速的數據訪問。

      4. 數據管理:對象存儲可以對數據進行元數據管理,可以為每個對象添加自定義的元數據信息,方便對數據進行分類、搜索和管理。

      5. 訪問控制:對象存儲可以實現靈活的訪問控制策略,可以根據需要設置不同的權限和訪問策略,確保數據的安全性和隱私性。

      溫馨提示: 當下我們有多種存儲設計方案可以進行選擇,例如

      • 無中心的存儲設計,如 GlusterFS 產品。
      • 有中心的存儲設計,如 Hadoop 產品。
      • 基于數據庫的存儲設計,如 GridFS 和 HBase 產品。
      • 繞過元數據的存儲設計,如 FastDFS 產品。
      • 基于對象存儲設計,如 Mino 產品。

      總結: 對象存儲廣泛用于云存儲、大數據分析、備份和恢復、多媒體內容存儲等場景,它提供了高度可靠、高性能、可擴展和經濟高效的數據存儲解決方案。

      本文作者: WeiyiGeek (全棧工程師修煉指南)
      作者博客:blog.weiyigeek.top


      為什么需要對象存儲?

      描述:在互聯網越來越普及的當下,各種 APP 如雨后春筍。用戶通過 APP 可以進行遠程辦公、查看新聞咨詢、理財、社交、教育等等。在上面這些場景中,避免不了需要查看圖片、音頻、視頻。那么問題來了?這些圖片、視頻、音頻是怎樣的存儲的呢?

      傳統開發中,我們可以使用 tomcat 類似的服務器進行映射目錄實現資源訪問(在 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 &quot;%r&quot; %s %b" />          
          <!-- 增加的靜態資源映射配置 -->
        <Context path="/static" docBase="/usr/local/app/html/" reloadable="true" crossContext="true"></Context>
      </Host>
      

      也可以使用 nginx 對靜態資源進行代理。例如:

      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 用戶量的增加,服務器需要存儲海量的圖片、音頻和視頻。此時,再使用上面方式就顯得不足了。當然,如果資金充足,可以購買成熟對象存儲服務產品,例如:阿里云對象存儲 OSS(Object Storage Service)。如果不想購買存儲服務產品,則可以自己搭建對象存儲服務,MinIO 就是你當下最好的選擇。


      什么是 MinIO 對象存儲?

      描述: Minio 是由 GlusterFS 創始人之一的 Anand Babu Periasamy 發布新的開源項目, MinIO 是一種對象存儲解決方案,它是一個基于 Go 語言 (跨平臺運行)的開源的對象存儲系統,專門設計用于云原生和容器化環境,或者部署在任何地方而構建 公共云或私有云、裸機基礎架構、編排環境和邊緣基礎架構。

      Minio 提供與亞馬遜云科技 S3 兼容的 API,并支持所有核心 S3 功能, 所以也可以看做是S3的開源版本;它允許用戶通過簡單的 API 接口進行數據的存儲和檢索,同時提供高度可擴展性和強大的數據保護機制。

      MinIo主要是在微服務系統中使用,非常適合于存儲大容量非結構化的數據,例如 圖片、視頻、日志文件、備份數據和容器/虛擬機 鏡像等,而一個對象文件可以是任意大小,從幾 kb 到最大 5T 不等,并且其安裝配置簡單,單行命令可以運行起來; 也可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。

      溫馨提示: MinIO 是在雙許可證, GNU Affero 通用公共許可證 v3.0 和 MinIO 商業許可證下發布。

      相關概念:

      存儲桶(Bucket)是對象的載體,可理解為存放對象的 “容器”,且該 “容器” 無容量上限,對象以扁平化結構存放在存儲桶中,無文件夾和目錄的概念,用戶可選擇將對象存放到單個或多個存儲桶中不能單獨存在。

      對象(Object)是對象存儲的基本單元,可理解為任何格式類型的數據,例如圖片、文檔和音視頻文件等。存儲桶(Bucket)是對象的載體,每個存儲桶可容納任意數量的對象。

      # 每個對象都由對象鍵(ObjectKey)、對象值(Value)、和對象元數據(Metadata)組成。
      * 對象鍵(ObjectKey):對象鍵是對象在存儲桶中的唯一標識,可以通俗的理解為文件路徑。
      * 對象值(Value):即上傳的對象本身,可以通俗的理解為文件內容(Object Content)。
      * 對象元數據(Metadata):是一組鍵值對,可以通俗的理解為文件的屬性,例如:文件的修改時間、存儲類型等,您可以在上傳對象后對其進行查詢。
      

      MinIO 對象存儲有何特點 ?

      描述:MinIO 對象存儲特點如下所示:

      1. 高可用性:MinIO 支持分布式部署,可以在多個節點上實現數據冗余和負載均衡,從而提供高可用性和容錯能力。

      2. 高性能:MinIO 的設計目標是提供快速的數據訪問速度。它采用了高度優化的底層存儲引擎,并且支持并行讀寫操作,以滿足大規模數據訪問的需求。

      3. 可擴展性:MinIO 可以根據實際需求進行水平擴展,用戶可以根據數據量的增長來增加節點數量,從而實現存儲容量和性能的擴展。

      4. 數據保護:MinIO 提供了多種數據保護機制,包括數據加密、數據完整性校驗和故障恢復等。用戶可以根據需要選擇適當的保護機制來保障數據的安全性和可靠性。

      5. 兼容性:MinIO 兼容 Amazon S3 云存儲服務(AWS Signature v2 和 v4) API,這意味著用戶可以直接使用現有的 S3 工具和應用程序與 MinIO 進行集成,而無需進行修改。

      總之,MinIO 是一個功能強大且易于使用的對象存儲系統,適用于各種規模的數據存儲和訪問需求, 它的開源性質使得用戶可以自由地定制和擴展系統,滿足特定的業務需求。


      0x01 Minio 安裝配置

      描述: 下述部署操作都是基于單節點Minio且由于處于演示的目錄,只采用了一塊網絡存儲卷,若要在中大型的生產環境中,請準備至少4塊存儲硬盤

      Docker 方式部署

      描述: 此處假如你已經安裝了docker容器運行相關環境,若沒有請參考作者公眾號《全棧工程師修煉指南》中的Docker入門學習系列文章,關注回復《docker學習》。

      首先,創建持久化的目錄,打開Shell執行mkdir -vp /app/minio/{data,config}即可。

      溫馨提示: Minio 持久化數據存儲不建議使用網絡文件系統卷,有可能導致MinIO無法提供一致性保證,若非要使用NFS網絡連接存儲的部署,請使用NFSv4以獲得最佳效果。

      $ mount -l
      # 掛載 NFS 時關鍵參數 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 方式, 首先創建 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
      
      # 參數&環境變量淺析
      --address :指定 minio 監控地址
      --console-address :指定 minio console 監控地址
      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 管理頁面認證失效時間
      
      # 啟動與創建容器 
      docker-compose up -d
      

      補充說明:minio-server 可用的環境變量參考[ https://www.minio.org.cn/docs/minio/linux/reference/minio-server/minio-server.html ]

      溫馨提示: MinIO 可使用糾刪碼(erasure code)和校驗和(check sum)來保護數據免受硬件故障和無聲數據損壞, 即便您丟失一半數量(N/2)的硬盤,您仍然可以恢復數據,但是你可能需要準備4塊以上的硬盤,分別掛載到minio server服務器中。

      # 糾刪碼限制 (多塊硬盤 / 服務)
      最大驅動器數量	Unlimited
      最小驅動器數量	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 語言開發,所以我們可以快速在 Linux 或者 Windows 平臺上安裝 minio 服務端。

      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.通過系統systemd守護進程啟動。

      # 配置文件
      mkdir -vp /etc/minio/
      tee /etc/minio/minio.conf <<'EOF'
      # 數據存放目錄
      MINIO_VOLUMES="/usr/local/minio/data"
      # 端口號設置
      MINIO_OPTS="--console-address :9001 --address :9000"
      # 用戶名
      MINIO_ROOT_USER="minioadmin"
      # 密碼
      MINIO_ROOT_PASSWORD="blog.weiyigeek.top"
      # minio 配置服務固定地址,ip可以更換為自己的ip,不使用下面的設置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 服務
      systemctl daemon-reload && systemctl start minio
      

      Kubernetes 部署

      描述: 此處假如你已經安裝了 Kubernetes 集群運行環境以及helm工具,若沒有請參考作者公眾號《全棧工程師修煉指南》中的k8s 入門學習系列文章。

      我們知道 Minio 是高性能的并且是對Kubernetes友好的對象存儲,所以說在K8S集群中使用Minio可謂是如魚得水。

      Kubectl 方式

      Step 1.此處,我使用 kubectl 工具資源清單方式部署 minio (推薦)。

      # 創建資源清單存儲目錄,便于后期恢復。
      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 相關資源部署情況.

      $ 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.創建 ingress 訪問入口,若未安裝的Ingress的同學請參考《從零開始:新手快速在國產操作系統中搭建高可用K8S(V1.28)集群落地實踐》,此處為了通過 minio.weiyigeek.top 域名訪問minio存儲的文件,以及管理minio而設置。

      # 使用for關鍵字為多個名稱空間,創建 tls 類型的 secret 以供 ingress 控制器設置 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
      
      
      # 查看創建的 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 類型介紹:

      1. Exact(默認):使用 pathType: Exact 可以精確匹配 Ingress 路徑。例如,如果 Ingress 定義了 /foo 的路徑,則只有完全匹配 /foo 的請求才會被路由到該 Ingress。

      2. Prefix:使用 pathType: Prefix 可以前綴匹配 Ingress 路徑。例如,如果 Ingress 定義了 /foo 的路徑,則所有以 /foo 開頭的請求都會被路由到該 Ingress。

      3. ImplementationSpecific:使用 pathType: ImplementationSpecific 可以根據不同的 Ingress 控制器進行不同的路徑匹配方式,具體的實現方式由不同的控制器決定。


      Step 4.設置企業內部DNS服務器,以及 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
      

      weiyigeek.top-kube-coredns解析修改圖

      溫馨提示: 若需要在企業中快速搭建內部DNS服務器,請參考《Ops實踐 | 國產化KylinOS系統中快速部署企業內部高性能DNS服務器、時間同步服務器 (精選)


      Step 5.通過瀏覽器訪問 ingress-nginx 控制器入口 [ https://minio.weiyigeek.top/admin/ ],即可登錄 minio console 控制臺, 其默認賬號密碼為minioadmin:minioadmin

      weiyigeek.top-Minio-初次部署登錄圖


      Step 6.成功登陸 Minio Console 后點擊【Monitoring】查看 minio 存儲服務器相關資源信息,至此Minio Server 在 K8S 中安裝完畢。

      weiyigeek.top-Minio-S3存儲監控狀態圖


      Helm 方式

      描述:Helm 是一種工具,用于將應用程序自動部署到 Kubernetes 集群。 Helm圖 是一組定義部署細節的 YAML 文件、模板和其他文件。

      • 方法1.使用 helm 工具快速部署 單節點 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
      
      # 根據需求進行更改 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 安裝參數 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 服務清單
      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 副本數
      kubectl get deployment minio-operator -n minio-operator -o yaml > operator.yaml
      yq -i -e '.spec.replicas |= 1' operator.yaml
      
      
      # 創建 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 租戶即(存儲桶服務端)。


      主機防火墻規則配置

      描述: 在安裝好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 后,我們可通過設置的 console 端口 或者代理轉發端口進行訪問,此處由于作者是在K8S集群中安裝 Minio 服務端,然后使用 ingress-nginx 入口控制器進行代理訪問 Minio Console 管理端(配置看最上方),此處仍然通過瀏覽器訪問 https://minio.weiyigeek.top/admin/ 使用默認賬號密碼登錄。

      溫馨提示: minio 安裝缺省認證密碼為 'minioadmin:minioadmin', 如果想要改變此值請自行設置 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' 環境變量即可。

      env:
      - name: MINIO_ROOT_USER
        value: admin
      - name: MINIO_ROOT_PASSWORD
        value: blog.weiyigeek.top
      

      根據需要創建一個 Access Key ,此處為 Minio 隨機生成 Access 與 Secret Key的我們不用去管他。

      weiyigeek.top-創建一個業務使用的認證key圖

      然后創建一個 Bucket (桶) ,此處我創建了一個 test 的桶,權限可讀、可寫。

      weiyigeek.top-創建一個名為test的桶圖

      我們可以直接通過后臺上傳文件到 test 桶中,在實踐環境中我們通常是通過API接口進行相關資源的上傳。

      weiyigeek.top-通過browser上傳文件圖

      此處,我們分享上傳的文件并設置分享時間,然后將此連接發送給需要的人即可,可以看到此處共享的連接是https://minio.weiyigeek.top 而非 127.0.0.1,這是由于我們在部署時設置了 MINIO_SERVER_URL 變量。

      weiyigeek.top-分享文件圖

      至此,Minio 安裝與簡單使用實踐完畢!


      0x03 MinIO Client (mc 命令) 入門指南

      描述: MinIO Client (mc)是Minio提供訪問和操作服務端的客戶端工具。它可以使用 ls,cat,cp,mirror,diff,find 等UNIX命令提供了一種替代方案, 它支持文件系統和兼容Amazon S3的云存儲服務(AWS Signature v2和v4)。

      參考地址: https://min.io/docs/minio/linux/reference/minio-mc.html

      安裝 mc 工具

      描述: 我們可根據運行平臺選擇使用多種方式來安裝mc,此處作者推薦使用 docker 或者 二進制文件(GNU/Linux)來安裝,當然你也可以選擇其他方式,請自行官網此處不再累述。

      # 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      在配置文件中設置、刪除和列出別名
      ls         列出存儲桶和對象
      mb         創建一個存儲桶
      rb         刪除一個存儲桶
      cp         復制對象
      mirror     將對象同步到遠程站點
      cat        顯示對象內容
      head       顯示對象的前 “n” 行
      pipe       將 STDIN 流傳輸到對象
      share      生成臨時訪問對象的 URL
      find       搜索對象
      sql        對對象運行 sql 查詢
      stat       顯示對象元數據
      mv         移動對象
      tree       使用樹形狀的格式顯示存儲桶和對象
      du         遞歸統計磁盤使用情況
      retention  為對象設置持有
      legalhold  管理對象的合法持有
      diff       列出兩個存儲桶之間對象名稱、大小和日期的差異
      rm         刪除對象
      version    管理存儲桶版本控制
      ilm        管理存儲桶生命周期
      encrypt    管理存儲桶加密配置
      event      管理對象通知
      watch      監聽對象通知事件
      undo       撤消 PUT/DELETE 操作
      policy     管理對存儲桶和對象的匿名訪問
      tag        管理存儲桶和對象的標簽
      replicate  配置服務器端存儲桶復制
      admin      管理 MinIO 服務器
      update     將 mc 更新到最新版本
      ping       存活檢測
      od         測量單流上傳和下載
      batch      管理批處理作業
      

      config - 管理mc配置文件

      語法參數:

      # 語法
      mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE]
      
      # 參數
      ALIAS 別名就是給你的云存儲服務起了一個短點的外號。
      YOUR-S3-ENDPOINT 云存儲的主機和端口,如:http://127.0.0.1:9000
      YOUR-ACCESS-KEY 云存儲服務的 Access Key
      YOUR-SECRET-KEY 云存儲服務的 Secret Key
      API-SIGNATURE API簽名是可選參數,默認情況下它被設置為 "S3v4"
      

      示例演示:

      • 示例1.添加刪除云存儲服務配置
      # 方式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.查看云存儲服務配置
      # 查看本地的云存儲服務器或者配置文件
      $ 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"
        # },
      

      weiyigeek.top-mc命令鏈接配置文件圖

      • 示例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 - 創建/刪除一個存儲桶或一個文件夾

      示例演示:

      • 示例1.在minio存儲服務器中創建、刪除一個新的桶bucket。
      # minio/test 是在 minio 下創建一個叫做 test 的 bucket
      $ mc mb minio/test
      # 遞歸創建存儲桶
      $ mc mb minio/test
      # 在區域 “zh-west” 的 MinIO 存儲服務上創建一個新存儲桶 test。
      mc mb --region=zh-west minio/test
      
      # 刪除沒有文件的bucket
      $ mc rb minio/test
      # 刪除有文件的bucket
      $ mc rb minio/test --force
      

      ls - 查看存儲桶中存儲的文件有文件夾

      示例演示:

      # 查看創建的桶以及文件
      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 參數啟用 JSON 格式的輸出
      mc --json ls minio
      

      cat|head、rm、mv - 顯示、刪除、移動文件或目錄

      示例演示:

      # 使用 mc cat 命令查看本地文件系統文件的內容(通常不會如此使用)。
      mc cat ./students.csv
      # 查看本地 MinIO 服務中 files 存儲桶中的 students.csv 文件內容。
      mc cat local/files/students.csv
      
      # 將多個文件連接為一個文件
      mc cat part.* > students.txt
      
      # 查看本地文件或者Mino 存儲桶前 3 行內容
      mc head -n 3 ./students.csv
      mc head -n 3 local/files/students.csv
      
      # 將對象列表從本地文件系統移動到 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 云存儲服務查詢
      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.創建和管理 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 格式導出用戶策略
      mc admin user svcacct	管理服務帳戶
      

      cp - 文件拷貝與上傳

      示例演示:

      # 上傳文件 blog.weiyigeek.top.png 文件到 minio/test 桶的根目錄中。
      mc cp blog.weiyigeek.top.png minio/test
      
      # 以遞歸方式將本地文件夾復制到本地 MinIO 服務的 images/test 存儲桶
      mc cp --recursive wallpaper /minio/images/test
      
      # 遞歸復制多個本地文件夾到本地 MinIO 存儲服務。
      mc cp --recursive backup/2022/ backup/2023/ play/archive/
      
      # 以遞歸方式將文件夾從 MinIO 云存儲復制到 Amazon S3 云存儲。
      mc cp --recursive play/archive/2023/ s3/mybucket/
      

      mirror - 同步對象
      描述: 使用 mc mirror 命令將對象同步到遠程站點。

      示例演示:

      # 遞歸地將本地文件夾同步到本地別名為 local 的 MinIO 服務的 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) - 設置存儲桶的訪問策略

      示例演示:

      # 1.設置公共訪問權限
      mc anonymous set public data/tdsms
      
      # 2.列舉存儲桶訪問的權限
      mc anonymous list data/tdsms
      

      alias - 創建設置別名

      示例演示:

      # 創建對應于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 實踐應用指南

      使用 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


      首發地址: https://mp.weixin.qq.com/s/m7yC4S0uzJpaLuxpNCvBxw

      原文地址: https://blog.weiyigeek.top/2020/3-22-644.html

      本文至此完畢,更多技術文章,盡情期待下一章節!


      專欄書寫不易,如果您覺得這個專欄還不錯的,請給這篇專欄 【點個贊、投個幣、收個藏、關個注,轉個發,留個言】(人間六大情),這將對我的肯定,謝謝!。

      點擊 ?? 關注「 全棧工程師修煉指南」公眾號
      微信溝通交流: weiyigeeker (點擊添加)
      交流溝通群:629184198 或 關注公眾號回復【學習交流群】

      溫馨提示: 由于作者水平有限,本章錯漏缺點在所難免,希望讀者批評指正,并請在文章末尾留下您寶貴的經驗知識,聯系郵箱地址 master@weiyigeek.top 或者關注公眾號 WeiyiGeek 聯系我。

      posted @ 2023-10-13 15:00  全棧工程師修煉指南  閱讀(1717)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品无码一区二区三区电影| 国产视频一区二区三区麻豆| 久久夜色精品国产亚洲a| 国产乱女乱子视频在线播放| 汤原县| 久久国产精品色av免费看| 中文字幕日韩国产精品| 在线看av一区二区三区| 国产一区二区不卡在线| 国产精品爽爽久久久久久竹菊| 一本大道久久东京热AV| 黄网站色视频免费观看| 无码人妻少妇色欲av一区二区| 久章草在线毛片视频播放| 日日噜噜噜夜夜爽爽狠狠视频| 亚洲精品国产综合久久一线| 国产高清国产精品国产专区| 在线看免费无码的av天堂| 怡红院一区二区三区在线| 三级4级全黄60分钟| 在线视频观看| 国内精品自线在拍| 亚洲av乱码一区二区| 国产高清在线男人的天堂| 亚洲人成色77777在线观看| 92国产精品午夜福利| 日韩中文字幕国产精品| 好吊妞视频这里有精品| 国产不卡一区二区在线视频| 精品国产一区av天美传媒| 国产欧美日韩精品a在线观看| 一级女性全黄久久生活片| 国产超高清麻豆精品传媒麻豆精品| 天堂在/线中文在线资源 官网| 日韩人妻无码一区二区三区俄罗斯| 亚洲国产精品成人无码区| 少妇人妻偷人精品免费视频 | 日产国产精品亚洲系列| 成人精品自拍视频免费看| 中文字幕人妻精品在线| 精品人妻午夜一区二区三区四区|