打破資料界限:Harbor x Minio的完美組合

更新於 發佈於 閱讀時間約 21 分鐘

先前跟大家演示過如何做部署Harbor registry,當時資料主要是存放在Harbor本機內部,但實務上通常會將資料另外存放到外部的物件儲存節點,根據我的習慣,一般我會使用Minio這個專案來與Harbor進行整合。

raw-image

本篇將從Minio的功能開始,一路到如何進行相關的整合,最後再說明這樣做的好處。

依照慣例,本篇重點如下:

  1. Minio是什麼?
  2. Harbor x Minio
  3. 部署測試
  4. 結論

1.Minio是什麼?

Minio 是一個開源的物件存儲服務,旨在提供簡單且高效的分散式儲存解決方案。它允許使用者建立自己的私有雲端存儲,並且支援對象儲存(Object Storage)的應用。Minio的特點包括易於部署、擴展性強、兼容S3 API(Amazon S3雲端儲存服務),以及具有高度可靠性和可用性。用户可以在各種應用中使用Minio,例如構建可擴展的數據湖、備份和還原、以及多媒體應用的存儲。

raw-image

目前Minio採用雙重授權模式,分別為GNU Affero通用公共授權條款第3.0版和MinIO商業授權。通過MinIO SUBNET註冊的部署使用商業授權,並包括24/7的MinIO支持。

優點如下:

  • Simple: 簡單性是超級規模數據基礎設施的基石 — 在技術和運營方面都是如此。沒有其他物件存儲可以讓您在更短的時間內實現從下載到生產的過程。
  • High Performance: MinIO是全球速度最快的物件存儲,其公布的GET/PUT結果超過每秒325 GiB和每秒165 GiB,分別在32個NVMe驅動器節點和100GbE網路上實現。
  • Kubrenetes-Native: 整合本地Kubernetes ,MinIO支援所有主要的Kubernetes發行版,包括公共雲、私有雲和邊緣雲。
  • AI Ready: MinIO專為人工智慧而建,並且與每個主要的AI/ML技術無縫運作。從預測模型到GenAI,MinIO提供性能和可擴展性,為AI企業提供強大支持。

2. Harbor x Minio

※ 部署Minio

#------------------------------
# S2-1. download minio & mc
#------------------------------
[minio]# mkdir /minio ; cd /minio
[minio]# wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20231209181751.0.0-1.x86_64.rpm -O minio.rpm
[minio]# dnf install minio.rpm

[minio]# wget https://dl.min.io/client/mc/release/linux-amd64/mc
[minio]# chmod +x mc
[minio]# sudo mv mc /usr/local/bin/mc

[minio]# groupadd -r minio-user
[minio]# useradd -M -r -g minio-user minio-user
[minio]# chown minio-user:minio-user /minio/data
#------------------------------
# S2-2. Create systemd service
# (預設系統會先檢查/etc/systemd後才檢查/usr/lib/systemd)
#------------------------------
[minio]# vim /usr/lib/systemd/system/minio.service
[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=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
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

# Built for ${project.name}-${project.version} (${project.name})
#------------------------------
# S2-3. 建立環境變數
#------------------------------
[minio]# mkdir -p /minio/data
[minio]# vim /etc/default/minio
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin123
MINIO_VOLUMES="/minio/data"
#------------------------------
# S2-4. 啟用服務
#------------------------------
[minio]# sudo systemctl start minio.service
[minio]# sudo systemctl status minio.service
[minio]# sudo systemctl enable --now minio.service
[minio]# journalctl -f -u minio.service
#------------------------------
# S2-5. 進入console
#------------------------------
https://minio.test.example.poc:9000
raw-image

※ 部署Harbor

建議資源需求:

raw-image
#-----------------------------------------
# S2-6. Add Docker repo
#-----------------------------------------
[harbor]# yum install yum-utils
[harbor]# yum config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[harbor]# yum clean all ; yum repolist
#-----------------------------------------
# S2-7. docker install
#-----------------------------------------
[harbor]# yum remove podman buildah
[harbor]# yum install containerd.io docker-ce docker-ce-cli docker-ce-rootless-extras
[harbor]# systemctl enable --now docker
raw-image
#-----------------------------------------
# S2-8. docker-compose
#-----------------------------------------
[harbor]# curl -SL https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
[harbor]# mv docker-compose /usr/local/bin/
[harbor]# chmod +x docker-compose
[harbor]# docker-compose version
Docker Compose version v2.20.0
#-----------------------------------------
# S2-9. sign-certificate
#-----------------------------------------
[harbor]# openssl genrsa -out ca.key 4096
[harbor]# openssl req -x509 -new -nodes -sha512 -days 3650 -key ca.key -out ca.crt
Common Name (eg, your name or your server's hostname) []:harbor.test.example.poc

[harbor]# openssl genrsa -out harbor.test.example.poc.key 4096
[harbor]# openssl req -sha512 -new -key harbor.test.example.poc.key -out harbor.test.example.poc.csr
Common Name (eg, your name or your server's hostname) []:harbor.test.example.poc

[harbor]# vim v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=habor.test.example.poc
DNS.2=harbor.test.example.poc
DNS.3=harbor.test.example.poc

[harbor]# openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.test.example.poc.csr \
-out harbor.test.example.poc.crt

※ copy certificates to docker and harbor
[harbor]# mkdir -p /data/cert/
[harbor]# cp -rp harbor.test.example.poc.crt harbor.test.example.poc.key /data/cert/

[harbor]# ls -al /data/cert/
harbor.test.example.poc.crt
harbor.test.example.poc.key

※ convert crt to cert for docker login
[harbor]# cd /root/docker/certs/
[harbor]# openssl x509 -inform PEM -in harbor.test.example.poc.crt -out harbor.test.example.poc.cert

※ copy to docker certificate folder
[harbor]# cpcp
[harbor]# cp harbor.test.example.poc.cert /etc/docker/certs.d/harbor.test.example.poc
[harbor]# cpcp harbor.test.example.poc.key /etc/docker/certs.d/harbor.test.example.poc
[harbor]# cp ca.crt /etc/docker/certs.d/harbor.test.example.poc

[harbor]# systemctl restart docker
#-----------------------------------------
# S2-10. harbor.yml (online installer) + minio backend
#-----------------------------------------
[harbor]# wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
[harbor]# tar zxvf harbor-offline-installer-v2.10.0.tgz
[harbor]# cp harbor.yml.tmpl harbor.yml
[harbor]# vim harbor.yml
hostname: harbor1.test.example.poc #指定要部署harbor的位置
external_url: https://harbor1.test.example.poc
http: #Production環境不要用
port: 80
https:
port: 443
certificate: /etc/docker/certs.d/harbor1.test.example.poc/harbor1.test.example.poc.cert #SSL certificate
private_key: /etc/docker/certs.d/harbor1.test.example.poc/harbor1.test.example.poc.key #SSL key
harbor_admin_password: Harbor12345

storage_service:
s3:
accesskey: minioadmin
secretkey: minioadmin123
region: us-east-1
regionendpoint: http://minio.test.example.poc:9000
bucket: harbor
secure: false
v4auth: true
#-----------------------------------------
# S2-11. install (online installer)
#-----------------------------------------
[harbor]#./install.sh --with-trivy
=> 確認都為`healthy`狀態
[root@harbor]# docker-compose ps
raw-image
#-----------------------------------------
# S2-12. UI & docker login
#-----------------------------------------
[harbor]# docker login harbor1.test.example.poc
Username: admin
Password: Harbor12345
raw-image
raw-image
raw-image

3.部署測試

#-------------------------------------------------
# S3-1. 確認節點CA憑證
# Podman檢查CA的路徑與docker不同 (/etc/containers/certs.d/)
#-------------------------------------------------
[worker01]# mkdir -p /etc/containers/certs.d/harbor1.test.example.poc/
[harbor]# scp -rp ca.crt root@worker01:/etc/containers/certs.d/harbor1.test.example.poc/
[worker01]# podman pull harbor.test.example.poc/nginx-test/nginx:1.14.2
#-------------------------------------------------
# S3-2. 下載deployment.yaml & 部署
#-------------------------------------------------
[master]# wget https://k8s.io/examples/application/deployment.yaml
[master]# vim deployment.yaml (修改image url)
[master]# kubectl create -f deployment.yaml
[master]# kubectl get all -n nginx-test
raw-image

4.結論

選擇Minio作為Harbor的後端儲存有以下優點:

  • 高效能:Minio具備強大的效能與可擴展性,使用Harbor在儲存與查找鏡像時可以有極大的幫助。
  • 相容性:因為Minio提供相容於Amazon S3的API,所以所有支援S3 API的許多平台都可以使用Minio來做後端儲存,可以延伸出許多更進階的做法。
  • 容易部署:容易部署、容易整合
  • 可擴展性:具備很強的橫向擴展能力,可以根據需求輕鬆擴展儲存容量與性能,可以適應Harbor在不同規模和負載下的變化。
  • 活躍社群:活躍的社群表示有廣泛的開發者和用戶社群可以持續提供技術支援與改進。

將後端儲存與Image registry拆開有許多好處,透過架構上的拆分,我們可以讓Harbor以容器化的方式在K8S內運行,資料存在外部也可以避免任何意外造成資料遺失,而Image registry本身還有利用K8S的特色持續提供服務。


今天就先到這邊,我們下期再見~~





留言
avatar-img
留言分享你的想法!
avatar-img
超健忘閒人的沙龍
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
支援Go所有的類型儲存,且可以用原生SQL敘述與跨資料庫查詢。 映射關係 table->struct record->object field->attribute 安裝 go get github.com/astaxie/beego/orm​ go get github.com
Thumbnail
Harbor是企業級的私有Docker Repository,提供管理使用者介面、角色存取控制等企業級特性。 安裝 更新apt sudo apt-get update 安裝https的支援工具 sudo apt-get install apt-transport-https ca-ce
Thumbnail
Harbor是企業級的私有Docker Repository,提供管理使用者介面、角色存取控制等企業級特性。 安裝 更新apt sudo apt-get update 安裝https的支援工具 sudo apt-get install apt-transport-https ca-ce
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
Thumbnail
學習如何使用Python連接MongoDB進行憑證監控,包括建立MongoDB docker-compose、連接MongoDB、讀取yaml並寫入MongoDB、傳入env以及domain寫入MongoDB、讀取MongoDB、修改MongoDB、刪除MongoDB。
Thumbnail
本文主要在討論以 Docs as Code 方法來撰寫技術文件,此做法能否滿足企業內部對知識管理的需求。
Thumbnail
本文主要在討論以 Docs as Code 方法來撰寫技術文件,此做法能否滿足企業內部對知識管理的需求。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
詳細解說如何在 Mac 上透過 Docker 安裝 MongoDB 社群版。包括 MongoDB Compass 的安裝與配置,以及 MongoDB Shell 的使用方法,為開發者提供 MongoDB 學習資源。
Thumbnail
當您在K8S Cluster中使用Harbor作為容器鏡像的儲存庫時,隨著應用服務鏡像的增加,如何透過內建機制將一臺Harbor的內容同步到另一個Harbor就變得愈來愈重要。本文將介紹如何透過內建機制同步Harbor的內容以及支援Harbor同步到其他相容的Image Registry的方式。
Thumbnail
當您在K8S Cluster中使用Harbor作為容器鏡像的儲存庫時,隨著應用服務鏡像的增加,如何透過內建機制將一臺Harbor的內容同步到另一個Harbor就變得愈來愈重要。本文將介紹如何透過內建機制同步Harbor的內容以及支援Harbor同步到其他相容的Image Registry的方式。
Thumbnail
前言 該如何自架 docker registry 呢? docker registry 可以幫助我們做什麼事情呢? docker registry 是可以將我們打包好的 docker image,放置到 docker registry 上面,在我們開始要佈署服務時,從 docker registr
Thumbnail
前言 該如何自架 docker registry 呢? docker registry 可以幫助我們做什麼事情呢? docker registry 是可以將我們打包好的 docker image,放置到 docker registry 上面,在我們開始要佈署服務時,從 docker registr
Thumbnail
隨著生活和工作複雜度的提高,我們面臨著在多個平台和網站上收集資訊的挑戰。因此,掌握整理資訊的技巧,以更有序的方式進行管理和追蹤,是值得思考的議題。本篇文章,我們將分享 Save to Notion,讓你輕鬆將網頁內容分門別類地儲存進 Notion 頁面,有助於你建立一個高效且有組織性的資訊管理系統。
Thumbnail
隨著生活和工作複雜度的提高,我們面臨著在多個平台和網站上收集資訊的挑戰。因此,掌握整理資訊的技巧,以更有序的方式進行管理和追蹤,是值得思考的議題。本篇文章,我們將分享 Save to Notion,讓你輕鬆將網頁內容分門別類地儲存進 Notion 頁面,有助於你建立一個高效且有組織性的資訊管理系統。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News