打破資料界限: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的特色持續提供服務。


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





14會員
40Content count
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
本文闡述了Kubernetes內部網路通訊的基本概念,從容器到服務的溝通流程,並討論了Kubernetes使用的各種技術。重要的是,管理Kubernetes叢集時理解這些基本概念是極其重要的。
在Kubernetes cluster上建立Jenkins,並且使用動態方式建立Jenkins Agent。透過K8S解決傳統的Jenkins一對多架構的問題,最終建立基本Pipeline在Jenkins Web UI上,簡單驗證Jenkins engine正常運行。
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
當您在K8S Cluster中使用Harbor作為容器鏡像的儲存庫時,隨著應用服務鏡像的增加,如何透過內建機制將一臺Harbor的內容同步到另一個Harbor就變得愈來愈重要。本文將介紹如何透過內建機制同步Harbor的內容以及支援Harbor同步到其他相容的Image Registry的方式。
本篇將分享關於nginx ingress controller的基本操作,包括預先準備、流程、實際操作、將domain name 映射到Ingress LB IP、部署Demo App 驗證以及結論。
本文將演示在安裝完 Kubernetes Cluster 後的基本元件安裝,包括 Calico/Calicoctl、Metric Server 和 Dashboard UI 的安裝方法以及相關問題與解決方式。
本文闡述了Kubernetes內部網路通訊的基本概念,從容器到服務的溝通流程,並討論了Kubernetes使用的各種技術。重要的是,管理Kubernetes叢集時理解這些基本概念是極其重要的。
在Kubernetes cluster上建立Jenkins,並且使用動態方式建立Jenkins Agent。透過K8S解決傳統的Jenkins一對多架構的問題,最終建立基本Pipeline在Jenkins Web UI上,簡單驗證Jenkins engine正常運行。
本篇說明如何利用Kubernetes特色,將PostgreSQL DB以HA的架構來提供服務,並說明相關的實作流程與說明。
當您在K8S Cluster中使用Harbor作為容器鏡像的儲存庫時,隨著應用服務鏡像的增加,如何透過內建機制將一臺Harbor的內容同步到另一個Harbor就變得愈來愈重要。本文將介紹如何透過內建機制同步Harbor的內容以及支援Harbor同步到其他相容的Image Registry的方式。
本篇將分享關於nginx ingress controller的基本操作,包括預先準備、流程、實際操作、將domain name 映射到Ingress LB IP、部署Demo App 驗證以及結論。
本文將演示在安裝完 Kubernetes Cluster 後的基本元件安裝,包括 Calico/Calicoctl、Metric Server 和 Dashboard UI 的安裝方法以及相關問題與解決方式。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
隨著大數據和AI蓬勃發展,量化投資在金融市場蔚為風潮,到底量化投資和傳統的主觀投資有什麼差別?使用量化投資能不能如虎添翼?績效超越一般投資人?!
Thumbnail
閱讀這本書就好似穿上隱形斗篷親臨諮商室現場,聽著前來諮商的伴侶們訴說各自的委屈與困擾,以及兩個人之間存在多少歧見與誤會,透過專業的諮商引導與剖析,慢慢地讓盤根錯節的問題得以釐清,進而讓兩人的關係迎向曙光。 《越愛越痛?我們的關係出了什麼錯?》這本書的作者石瀝新諮商心理師的專長為伴侶諮商,可想而
Thumbnail
上禮拜參加一場主題是「成為職場的頂尖高績效者」的活動。想在離職後繼續學習成為一位能設定自我目標的高績效自由工作者。 當晚有個討論環節是與會夥伴分享「如何學習」。從大家的分享中,我突然驚覺自己的盲點。調整自己對學習的定義,也許可以有更多的生產力!
Thumbnail
在Web2中,每個人幾乎都擁有多個社交軟體,Meta (facebook), Instagram, X (twitter)等等。每次使用新的軟體就要重辦帳號、加好友、發新的文,原因就在於我們所有的資料都是掌控在那些科技公司手上,拿不出來也帶不走,但如果在去中心化呢? 是否會有所不同?
Thumbnail
「半導體女王」蘇姿丰帶領超微(AMD)翻轉衰敗,進軍AI領域,與輝達展開正面對決。她的明確方向和高CP值的產品推出,讓超微股價暴漲24倍,市值突破1000億美元。作為科技界的女性領袖,她以智慧和創新精神贏得尊重,並成為「年薪最高女CEO」。
Thumbnail
囤房稅制度的不足使政府推出新改革,但面對掛人頭購房和租金上漲等挑戰,困住了改革的腳步。為何房價難以下跌?原因是臺灣資金流動性高,投資者愛投入房市,加上供需失衡和金融政策的影響。囤房稅新制能否扭轉局面,成為房市的救星?讓我們拭目以待!
Thumbnail
這部戲從一開始就可以猜到可能會是美好的結局,但也因為如此在觀看個過程裡我才能夠用各個角度去看去解讀最後也才能了解到,不要把自己不願意改變的責任都放在別人的身上,因為 - “能否改變的決定是在自己的身上”
Thumbnail
出身土木專業,為什麼轉換跑道? 一矢中的的攻心求職法,做什麼像什麼的原則信條, 造就毛氏管理學的切身經驗,就讓毛治國親口告訴你!
Thumbnail
想到醫院,你會想到什麼畫面呢?冷冰冰的病房、沈悶的氛圍和令人難受的病痛……停!換個畫面吧。跟著加拿大CHU Sainte-Justine醫院的創新思維,讓我們一起想像注入歡樂和活力的未來醫院!
Thumbnail
<p>現代讀者對影像的刺激感已經麻木了,而傳統或新媒體,也都習慣把「圖片當成配角」,只是種輔助工具。但始終熱愛攝影工作的他,希望以不同的方法,讓更多人看見新聞攝影的價值。</p>
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
隨著大數據和AI蓬勃發展,量化投資在金融市場蔚為風潮,到底量化投資和傳統的主觀投資有什麼差別?使用量化投資能不能如虎添翼?績效超越一般投資人?!
Thumbnail
閱讀這本書就好似穿上隱形斗篷親臨諮商室現場,聽著前來諮商的伴侶們訴說各自的委屈與困擾,以及兩個人之間存在多少歧見與誤會,透過專業的諮商引導與剖析,慢慢地讓盤根錯節的問題得以釐清,進而讓兩人的關係迎向曙光。 《越愛越痛?我們的關係出了什麼錯?》這本書的作者石瀝新諮商心理師的專長為伴侶諮商,可想而
Thumbnail
上禮拜參加一場主題是「成為職場的頂尖高績效者」的活動。想在離職後繼續學習成為一位能設定自我目標的高績效自由工作者。 當晚有個討論環節是與會夥伴分享「如何學習」。從大家的分享中,我突然驚覺自己的盲點。調整自己對學習的定義,也許可以有更多的生產力!
Thumbnail
在Web2中,每個人幾乎都擁有多個社交軟體,Meta (facebook), Instagram, X (twitter)等等。每次使用新的軟體就要重辦帳號、加好友、發新的文,原因就在於我們所有的資料都是掌控在那些科技公司手上,拿不出來也帶不走,但如果在去中心化呢? 是否會有所不同?
Thumbnail
「半導體女王」蘇姿丰帶領超微(AMD)翻轉衰敗,進軍AI領域,與輝達展開正面對決。她的明確方向和高CP值的產品推出,讓超微股價暴漲24倍,市值突破1000億美元。作為科技界的女性領袖,她以智慧和創新精神贏得尊重,並成為「年薪最高女CEO」。
Thumbnail
囤房稅制度的不足使政府推出新改革,但面對掛人頭購房和租金上漲等挑戰,困住了改革的腳步。為何房價難以下跌?原因是臺灣資金流動性高,投資者愛投入房市,加上供需失衡和金融政策的影響。囤房稅新制能否扭轉局面,成為房市的救星?讓我們拭目以待!
Thumbnail
這部戲從一開始就可以猜到可能會是美好的結局,但也因為如此在觀看個過程裡我才能夠用各個角度去看去解讀最後也才能了解到,不要把自己不願意改變的責任都放在別人的身上,因為 - “能否改變的決定是在自己的身上”
Thumbnail
出身土木專業,為什麼轉換跑道? 一矢中的的攻心求職法,做什麼像什麼的原則信條, 造就毛氏管理學的切身經驗,就讓毛治國親口告訴你!
Thumbnail
想到醫院,你會想到什麼畫面呢?冷冰冰的病房、沈悶的氛圍和令人難受的病痛……停!換個畫面吧。跟著加拿大CHU Sainte-Justine醫院的創新思維,讓我們一起想像注入歡樂和活力的未來醫院!
Thumbnail
<p>現代讀者對影像的刺激感已經麻木了,而傳統或新媒體,也都習慣把「圖片當成配角」,只是種輔助工具。但始終熱愛攝影工作的他,希望以不同的方法,讓更多人看見新聞攝影的價值。</p>