Harbor 是一個開源的企業級 Docker Registry 管理工具,提供了鏡像的存儲、簽名、掃描、復制等功能。在 Kubernetes 集群中部署 Harbor 可以幫助我們更好地管理容器鏡像,提高鏡像的安全性和可用性。本文將詳細介紹如何在 Kubernetes 集群中部署 Harbor。
在開始部署之前,確保你已經具備以下條件:
Helm 是 Kubernetes 的包管理工具,可以幫助我們快速部署和管理 Kubernetes 應用。如果你還沒有安裝 Helm,可以按照以下步驟進行安裝。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
如果安裝成功,你應該會看到類似以下的輸出:
version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.16.9"}
Harbor 的 Helm Chart 可以通過 Helm 倉庫進行安裝。首先,我們需要添加 Harbor 的 Helm 倉庫。
helm repo add harbor https://helm.goharbor.io
helm repo update
在部署 Harbor 之前,我們需要創建一個配置文件來定制 Harbor 的部署參數。你可以使用 values.yaml
文件來覆蓋默認的配置。
values.yaml
文件expose:
type: ingress
tls:
enabled: true
secretName: "harbor-tls"
ingress:
hosts:
core: harbor.example.com
notary: notary.example.com
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
persistence:
enabled: true
resourcePolicy: "keep"
persistentVolumeClaim:
registry:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 5Gi
chartmuseum:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 5Gi
jobservice:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 1Gi
database:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 1Gi
redis:
storageClass: "standard"
accessMode: ReadWriteOnce
size: 1Gi
externalURL: https://harbor.example.com
harborAdminPassword: "Harbor12345"
database:
password: "dbpassword"
redis:
password: "redispassword"
chartmuseum:
enabled: true
clair:
enabled: true
notary:
enabled: true
ingress
并啟用 TLS。使用 Helm 部署 Harbor 非常簡單,只需運行以下命令:
helm install harbor harbor/harbor -f values.yaml -n harbor --create-namespace
harbor
,如果命名空間不存在,--create-namespace
會自動創建。部署完成后,你可以通過以下命令查看部署狀態:
kubectl get pods -n harbor
如果一切順利,你應該會看到類似以下的輸出:
NAME READY STATUS RESTARTS AGE
harbor-harbor-chartmuseum-0 1/1 Running 0 5m
harbor-harbor-clair-0 1/1 Running 0 5m
harbor-harbor-core-0 1/1 Running 0 5m
harbor-harbor-database-0 1/1 Running 0 5m
harbor-harbor-jobservice-0 1/1 Running 0 5m
harbor-harbor-notary-server-0 1/1 Running 0 5m
harbor-harbor-notary-signer-0 1/1 Running 0 5m
harbor-harbor-portal-0 1/1 Running 0 5m
harbor-harbor-redis-0 1/1 Running 0 5m
harbor-harbor-registry-0 1/1 Running 0 5m
部署完成后,你可以通過配置的域名(例如 https://harbor.example.com
)訪問 Harbor 的 Web 界面。使用 harborAdminPassword
中配置的密碼登錄。
打開瀏覽器,訪問 https://harbor.example.com
,使用以下憑據登錄:
登錄后,你可以創建一個新的項目來管理你的 Docker 鏡像。點擊 “Projects” -> “New Project”,填寫項目名稱并保存。
你可以使用 Docker CLI 將鏡像推送到 Harbor。首先,登錄到 Harbor:
docker login harbor.example.com
然后,標記并推送鏡像:
docker tag my-image:latest harbor.example.com/my-project/my-image:latest
docker push harbor.example.com/my-project/my-image:latest
如果你使用的是 Kubernetes Ingress 控制器(如 Nginx Ingress Controller),你需要確保 Ingress 資源已經正確配置。
kubectl get ingress -n harbor
你應該會看到類似以下的輸出:
NAME CLASS HOSTS ADDRESS PORTS AGE
harbor-ingress <none> harbor.example.com 80, 443 10m
確保 harbor.example.com
的 DNS 記錄指向你的 Kubernetes 集群的 Ingress 控制器 IP 地址。
為了確保數據的安全性,建議定期備份 Harbor 的數據。你可以通過以下步驟進行備份和恢復。
kubectl exec -n harbor harbor-harbor-database-0 -- pg_dump -U postgres registry > registry.sql
kubectl exec -i -n harbor harbor-harbor-database-0 -- psql -U postgres registry < registry.sql
通過以上步驟,你已經成功在 Kubernetes 集群中部署了 Harbor。Harbor 提供了強大的鏡像管理功能,可以幫助你更好地管理容器鏡像,提高鏡像的安全性和可用性。希望本文對你有所幫助,祝你在 Kubernetes 的世界中玩得愉快!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。