K8S 安裝 Harbor 透過Helm 3 進行安裝
本文將會從進行以下步驟
- 掛載tls憑證到k8s 以供後續Harbor 使用,以及創建harbor Namespace
- 創建 K8S StorageClass
- 設定 helm harbor value.yaml
- 安裝 / 移除
掛載tls憑證到k8s 以供後續Harbor 使用
為了方便管理會先創建一個 harbor Namespace(NS),而後續安裝都會在這個NS上面。
kubectl create ns harbor
將自行簽名的 secret tls 綁定到k8s中,要記得 tls 的命名 證書為 tls.crt , 密鑰tls.key 。
kubectl create secret tls {tls名稱} \
--cert=/path/tls.crt \ # 證書位置
--key=/path/tls.key \ # 證書位置
--namespace harbor
kubectl get secret -n harbor # 查詢可以列出該ns 有哪些secret
kubectl describe secret {tls名稱} -n harbor # 可查看secret 詳細訊息
創建 K8S StorageClass(SC)
接下來要創建給Harbor 用的 儲存空間管理 會創建一個SC 由該桶分配給下面要使用的PVC。
而該操作需要安裝CSI
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.8.0
# 確認是否安裝成功
helm search repo -l csi-driver-nfs
helm uninstall csi-driver-nfs -n kube-system # 移除該CSI
安裝完CSI之後 需要創建SC 供K8S使用, 要注意所使用的NFS版本 若無NFS 可參考這篇 ,
# StorageClass ReclaimPolicy 解釋
`reclaimPolicy` 定義了當與 PersistentVolume (PV) 關聯的 PersistentVolumeClaim (PVC) 被刪除時,Kubernetes 應該如何處理這個 PV。
## 可用的 ReclaimPolicy 選項:
1. **Delete**(刪除):
- 當 PVC 被刪除時,PV 也會被自動刪除。
- 這包括刪除底層存儲資源(如雲端存儲卷)。
- 適用於不需要保留數據的場景。
2. **Retain**(保留):
- 當 PVC 被刪除時,PV 仍然存在,但狀態變為 "Released"。
- PV 中的數據被保留,但 PV 不能被其他 PVC 重新使用。
- 管理員需要手動處理 PV(清理數據或刪除 PV)。
- 適用於需要手動管理數據的場景。
3. **Recycle**(回收):
- 已被棄用,不推薦使用。
- 基本清理(rm -rf /thevolume/*)後允許 PV 被重新使用。
# stroage.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-client
provisioner: nfs.csi.k8s.io
parameters:
server: 192.0.0.0 # nfs ip
share: "/nfs-only/k8s" # nfs路徑
reclaimPolicy: Delete # 上面有較詳細的說明
volumeBindingMode: Immediate
allowVolumeExpansion: true # 啟用卷擴展
mountOptions:
- hard
- nfsvers=3 # 注意這邊要填入相對應的nfs版本 , 該範例使用version 3
kubectl apply -f storage.yaml
設定 helm harbor value.yaml
到了該步驟要先預設
- harbor訪問域名
- 是否需要tls , 若需要 是要使用k8s自動簽名還是 使用自身已簽名好?
# harbor value.yaml
# 預設訪問域名 harbor.xxx.com
expose:
type: ingress
tls:
enabled: true
certSource: secret
auto:
commonName: "harbor.xxx.com"
secret:
secretName: "{secretName}"
ingress:
hosts:
core: harbor.xxx.com
controller: default
kubeVersionOverride: ""
className: "nginx"
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/proxy-body-size: "0"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "0"
labels: {}
tls:
- hosts:
- harbor.xxx.com
secretName: {secretName}
externalURL: http://harbor.xxx.com
persistence:
enabled: true
resourcePolicy: "keep"
persistentVolumeClaim:
registry:
existingClaim: ""
storageClass: "nfs-client"
subPath: "harbor/registry"
accessMode: ReadWriteOnce
size: 50Gi
annotations: {}
jobservice:
jobLog:
existingClaim: ""
storageClass: "nfs-client"
subPath: "harbor/joblog"
accessMode: ReadWriteOnce
size: 5Gi
annotations: {}
database:
existingClaim: ""
storageClass: "nfs-client"
subPath: "harbor/database"
accessMode: ReadWriteOnce
size: 5Gi
annotations: {}
redis:
existingClaim: ""
storageClass: "nfs-client"
subPath: "harbor/redis"
accessMode: ReadWriteOnce
size: 5Gi
annotations: {}
trivy:
existingClaim: ""
storageClass: "nfs-client"
subPath: "harbor/trivy"
accessMode: ReadWriteOnce
size: 5Gi
annotations: {}
依序填寫完 創建完之後 開始進行安裝,若發現裝完成後有要更改的 可以透過 helm upgrade 進行重新安裝, 安裝後 會出現如下圖。
helm install harbor -f values.yaml --namespace harbor .
# 重新安裝
helm upgrade --install harbor harbor/harbor -f values.yaml -n harbor
之後就可以透過設定的網址訪問
# harbor 預設登入
帳號 admin
密碼 Harbor12345