Kubernetes Harborの導入

目次に戻る

概要

公式サイトはこちらです。

Kubernetesクラスター上にHelm対応のHarborを構築します。HarborはHelmコマンド使用してインストールします。Kubernetesクラスターの構築についてはこちらを参照して下さい。

手順

手順はこちらを参考にさせて頂きました。

Helmレポジトリの追加

Helmレポジトリを追加します。

root@k8s-01:~# helm repo add harbor https://helm.goharbor.io

"harbor" has been added to your repositories

root@k8s-01:~# helm repo list

NAME    URL
harbor  https://helm.goharbor.io

root@k8s-01:~# helm repo update

...Successfully got an update from the "harbor" chart repository
Update Complete. ⎈Happy Helming!⎈

HarborのChart取得と設定値の編集

HarborのChartを取得します。–untarは.tgzを展開した状態でカレントディレクトリ(今回は/root)にダウンロードします。

root@k8s-01:~# helm pull harbor/harbor --untar

各ノードのIPアドレスを確認します。

root@k8s-01:~# kubectl get node -o wide

NAME     STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
k8s-01   Ready    control-plane,master   13d   v1.22.2   192.168.68.11           Ubuntu 20.04.3 LTS   5.4.0-89-generic   containerd://1.5.2
k8s-02   Ready                     13d   v1.22.2   192.168.68.12           Ubuntu 20.04.3 LTS   5.4.0-89-generic   containerd://1.5.2
k8s-03   Ready                     13d   v1.22.2   192.168.68.13           Ubuntu 20.04.3 LTS   5.4.0-89-generic   containerd://1.5.2

下記の設定値を環境に合わせて変更します。今回は簡易的にnodePortを使用して外部に公開しますが、Loadblancerが望ましいですね。尚、commonName, externalURLでMasterノードのIPアドレスを設定していますが、これはHarbor(nginx)自体の設定であり、nodePortは関係ありません。nodePortはどのノードに接続しても問題ない為です。HarborにはSSLでアクセスする為、そのcommonNameを指定しているだけです。

root@k8s-01:~# vim /root/harbor/values.yaml

expose:
  type: nodePort
  tls:
    auto:
      commonName: "192.168.68.11"
externalURL: https://192.168.68.11:30003
persistence:
  enabled: false

Namespaceの追加

Harbor用のNamespaceを追加します。

root@k8s-01:~# kubectl create namespace harbor-system

namespace/harbor created

root@k8s-01:~# kubectl get namespace

NAME               STATUS   AGE
calico-apiserver   Active   32h
calico-system      Active   32h
default            Active   32h
harbor-system      Active   31h
kube-node-lease    Active   32h
kube-public        Active   32h
kube-system        Active   32h
metallb-system     Active   5h40m
tigera-operator    Active   32h

Harborのインストール

Harborをインストールします。

root@k8s-01:~# helm install harbor -n harbor-system -f /root/harbor/values.yaml harbor/harbor

Harborの状態確認

下記の通り、多くのオブジェクトが作成されます。環境にもよりますが、リソースが少ない環境では、全てがRunningになるまで10分ほどかかるかもしれません。

root@k8s-01:~# kubectl get all -n harbor-system

pod/harbor-chartmuseum-8cb94889b-ccctz      1/1     Running   0             31h
pod/harbor-core-687b977854-nfb4g            1/1     Running   0             31h
pod/harbor-database-0                       1/1     Running   0             31h
pod/harbor-jobservice-648cb9b764-t7fzb      1/1     Running   0             31h
pod/harbor-nginx-597c4987c8-4ppft           1/1     Running   0             31h
pod/harbor-notary-server-b78c46799-28mcn    1/1     Running   1 (31h ago)   31h
pod/harbor-notary-signer-6fc5b88fd6-z4rlw   1/1     Running   2 (31h ago)   31h
pod/harbor-portal-7dcf769575-t9zgr          1/1     Running   0             31h
pod/harbor-redis-0                          1/1     Running   0             31h
pod/harbor-registry-5d56d8d4d9-2f76f        2/2     Running   0             31h
pod/harbor-trivy-0                          1/1     Running   0             31h

NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                     AGE
service/harbor                 NodePort    10.109.133.80            80:30002/TCP,443:30003/TCP,4443:30004/TCP   31h
service/harbor-chartmuseum     ClusterIP   10.103.79.118            80/TCP                                      31h
service/harbor-core            ClusterIP   10.105.55.144            80/TCP                                      31h
service/harbor-database        ClusterIP   10.111.57.215            5432/TCP                                    31h
service/harbor-jobservice      ClusterIP   10.107.99.54             80/TCP                                      31h
service/harbor-notary-server   ClusterIP   10.103.168.131           4443/TCP                                    31h
service/harbor-notary-signer   ClusterIP   10.101.70.251            7899/TCP                                    31h
service/harbor-portal          ClusterIP   10.106.117.130           80/TCP                                      31h
service/harbor-redis           ClusterIP   10.107.158.78            6379/TCP                                    31h
service/harbor-registry        ClusterIP   10.107.193.95            5000/TCP,8080/TCP                           31h
service/harbor-trivy           ClusterIP   10.98.178.100            8080/TCP                                    31h

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/harbor-chartmuseum     1/1     1            1           31h
deployment.apps/harbor-core            1/1     1            1           31h
deployment.apps/harbor-jobservice      1/1     1            1           31h
deployment.apps/harbor-nginx           1/1     1            1           31h
deployment.apps/harbor-notary-server   1/1     1            1           31h
deployment.apps/harbor-notary-signer   1/1     1            1           31h
deployment.apps/harbor-portal          1/1     1            1           31h
deployment.apps/harbor-registry        1/1     1            1           31h

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/harbor-chartmuseum-8cb94889b      1         1         1       31h
replicaset.apps/harbor-core-687b977854            1         1         1       31h
replicaset.apps/harbor-jobservice-648cb9b764      1         1         1       31h
replicaset.apps/harbor-nginx-597c4987c8           1         1         1       31h
replicaset.apps/harbor-notary-server-b78c46799    1         1         1       31h
replicaset.apps/harbor-notary-signer-6fc5b88fd6   1         1         1       31h
replicaset.apps/harbor-portal-7dcf769575          1         1         1       31h
replicaset.apps/harbor-registry-5d56d8d4d9        1         1         1       31h

NAME                               READY   AGE
statefulset.apps/harbor-database   1/1     31h
statefulset.apps/harbor-redis      1/1     31h
statefulset.apps/harbor-trivy      1/1     31h

Harborにアクセス確認

ブラウザから”https://192.168.68.11:30003″を指定してHarborのダッシュボードにアクセスできます。

Helm Chartのアップロード

Harborのダッシュボード内でHelm Chartをアップロードできますが、元のHelm Chartは.tgzでダウンロードしておく必要があります。helm pullを–untarをつけずに実行することで.tgzでダウンロードできます。

root@k8s-01:~# helm pull harbor/harbor

目次に戻る

Kubernetes Harborの導入

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る