K8S 安裝 Harbor 透過Helm 3 進行安裝

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

到了該步驟要先預設

  1. harbor訪問域名
  2. 是否需要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


helm uninstall harbor -n harbor

helm 移除harbor指令