TKGm v1.4 にContour, Harbor, Prometheus, Grafana をデプロイする

VMUG ADVANTAGE を利用し、Tanzu Kubernetes Grid multicloud(TKGm) v1.4をインストールした際の手順です。


環境

  • Tanzu Kubernetes Grid v1.4 on vSphere

手順

TKGm のデプロイ

VMUG ADVANTAGE にあるvSphere7 とTanzu を利用して、TKGm 環境をデプロイしていいきます。


以下のドキュメントに従って、まずはTKGm のManagement Cluster, Tanzu Kubernetes Cluster をデプロイしていきます。

govc を利用し、事前の準備を行うために以下の環境変数をセットしておきます。
$ cat tkgm-env.sh
export GOVC_USERNAME=xxxx
export GOVC_PASSWORD=xxxx
export GOVC_DATACENTER=Datacenter
export GOVC_NETWORK="VM Network"
export GOVC_DATASTORE=datastore1
export GOVC_RESOURCE_POOL=/Datacenter/host/Cluster/Resources/tkgm
export GOVC_INSECURE=1
export TEMPLATE_FOLDER=/Datacenter/vm/tkgm
export GOVC_URL=xxxx
source tkgm-env.sh

ダウンロードしておいたTKGm のノードOS として利用するOVA をインポートしていきます。
$ cat options.json
{
"DiskProvisioning": "thin"
}
govc import.ova --options=options.json -folder ${TEMPLATE_FOLDER} ../packages/ubuntu-2004-kube-v1.20.8+vmware.1-tkg.1-17589475007677388652.ova
govc import.ova --options=options.json -folder ${TEMPLATE_FOLDER} ../packages/ubuntu-2004-kube-v1.21.2+vmware.1-tkg.1-7832907791984498322.ova
govc import.ova --options=options.json -folder ${TEMPLATE_FOLDER} ../packages/ubuntu-2004-kube-v1.19.12+vmware.1-tkg.1-15841320193950299489.ova

インポートしたOVA をテンプレート化します。
govc vm.markastemplate ${TEMPLATE_FOLDER}/ubuntu-2004-kube-v1.19.12
govc vm.markastemplate ${TEMPLATE_FOLDER}/ubuntu-2004-kube-v1.20.8
govc vm.markastemplate ${TEMPLATE_FOLDER}/ubuntu-2004-kube-v1.21.2

上の手順に従って、tanzu CLI を導入していきます。
$ tar xvf tanzu-cli-bundle-linux-amd64.tar
cli/
cli/core/
cli/core/v1.4.0/
cli/core/v1.4.0/tanzu-core-linux_amd64
cli/core/plugin.yaml
cli/login/
cli/login/v1.4.0/
cli/login/v1.4.0/tanzu-login-linux_amd64
cli/login/plugin.yaml
cli/cluster/
cli/cluster/v1.4.0/
cli/cluster/v1.4.0/tanzu-cluster-linux_amd64
cli/cluster/plugin.yaml
cli/package/
cli/package/v1.4.0/
cli/package/v1.4.0/tanzu-package-linux_amd64
cli/package/plugin.yaml
cli/management-cluster/
cli/management-cluster/v1.4.0/
cli/management-cluster/v1.4.0/tanzu-management-cluster-linux_amd64
cli/management-cluster/plugin.yaml
cli/pinniped-auth/
cli/pinniped-auth/v1.4.0/
cli/pinniped-auth/v1.4.0/tanzu-pinniped-auth-linux_amd64
cli/pinniped-auth/plugin.yaml
cli/kubernetes-release/
cli/kubernetes-release/v1.4.0/
cli/kubernetes-release/v1.4.0/tanzu-kubernetes-release-linux_amd64
cli/kubernetes-release/plugin.yaml
cli/manifest.yaml
cli/ytt-linux-amd64-v0.34.0+vmware.1.gz
cli/kapp-linux-amd64-v0.37.0+vmware.1.gz
cli/imgpkg-linux-amd64-v0.10.0+vmware.1.gz
cli/kbld-linux-amd64-v0.30.0+vmware.1.gz
cli/vendir-linux-amd64-v0.21.1+vmware.1.gz
sudo install core/v1.4.0/tanzu-core-linux_amd64 /usr/local/bin/tanzu
tanzu plugin clean
cd ..
tanzu plugin install --local cli all
tanzu plugin list

Management Cluster のデプロイ

Management Cluster をデプロイしていきます。
$ tanzu management-cluster create --ui --bind <tanzu cliを実行したホストのIPアドレス>:8080
unable to open browser: exec: "xdg-open": executable file not found in $PATH
Identity Provider not configured. Some authentication features won't work.
Validating configuration...
web socket connection established
sending pending 2 logs to UI
Using infrastructure provider vsphere:v0.7.10
Generating cluster configuration...
Setting up bootstrapper...
...

Management cluster created!


You can now create your first workload cluster by running the following:

  tanzu cluster create [name] -f [file]


$ tanzu management-cluster get
  NAME      NAMESPACE   STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES
  schecter  tkg-system  running  1/1           1/1      v1.21.2+vmware.1  management


Details:

NAME                                                         READY  SEVERITY  REASON                           SINCE  MESSAGE
/schecter                                                    True                                              12m
├─ClusterInfrastructure - VSphereCluster/schecter            True                                              12m
├─ControlPlane - KubeadmControlPlane/schecter-control-plane  True                                              12m
│ └─Machine/schecter-control-plane-rqmnv                     True                                              12m
└─Workers
  └─MachineDeployment/schecter-md-0
    └─Machine/schecter-md-0-77c465c97f-n8577                 False  Info      WaitingForClusterInfrastructure  12m


Providers:

  NAMESPACE                          NAME                    TYPE                    PROVIDERNAME  VERSION  WATCHNAMESPACE
  capi-kubeadm-bootstrap-system      bootstrap-kubeadm       BootstrapProvider       kubeadm       v0.3.23
  capi-kubeadm-control-plane-system  control-plane-kubeadm   ControlPlaneProvider    kubeadm       v0.3.23
  capi-system                        cluster-api             CoreProvider            cluster-api   v0.3.23
  capv-system                        infrastructure-vsphere  InfrastructureProvider  vsphere       v0.7.10
tanzu management-cluster kubeconfig get --admin --export-file kubeconfig-lab-schecter
export KUBECONFIG=~/kubeconfig-lab-schecter
$ k get nodes
NAME                             STATUS   ROLES                  AGE   VERSION
schecter-control-plane-rqmnv     Ready    control-plane,master   20m   v1.21.2+vmware.1
schecter-md-0-77c465c97f-n8577   Ready    <none>                 18m   v1.21.2+vmware.1

 

Management Cluster 内には以下の様なリソースが立ち上がります。
$ k get all -A
NAMESPACE                           NAME                                                                 READY   STATUS    RESTARTS   AGE
capi-kubeadm-bootstrap-system       pod/capi-kubeadm-bootstrap-controller-manager-6494884869-hxg5c       2/2     Running   0          14m
capi-kubeadm-control-plane-system   pod/capi-kubeadm-control-plane-controller-manager-857d687b9d-q9jdp   2/2     Running   0          14m
capi-system                         pod/capi-controller-manager-778bd4dfb9-gsmxg                         2/2     Running   0          14m
capi-webhook-system                 pod/capi-controller-manager-9995bdc94-lh5w2                          2/2     Running   0          14m
capi-webhook-system                 pod/capi-kubeadm-bootstrap-controller-manager-68845b65f8-qph6n       2/2     Running   0          14m
capi-webhook-system                 pod/capi-kubeadm-control-plane-controller-manager-9847c6747-4n2zp    2/2     Running   0          14m
capi-webhook-system                 pod/capv-controller-manager-55bf67fbd5-zlnlc                         2/2     Running   0          14m
capv-system                         pod/capv-controller-manager-587fbf697f-r828x                         2/2     Running   0          14m
cert-manager                        pod/cert-manager-77f6fb8fd5-28nfw                                    1/1     Running   0          20m
cert-manager                        pod/cert-manager-cainjector-6bd4cff7bb-2tc4z                         1/1     Running   0          20m
cert-manager                        pod/cert-manager-webhook-fbfcb9d6c-fvzdc                             1/1     Running   0          20m
kube-system                         pod/antrea-agent-d74wn                                               2/2     Running   0          10m
kube-system                         pod/antrea-agent-vr62n                                               2/2     Running   0          11m
kube-system                         pod/antrea-controller-55b45848bc-lxvd2                               1/1     Running   0          10m
kube-system                         pod/coredns-8dcb5c56b-n67kj                                          1/1     Running   0          20m
kube-system                         pod/coredns-8dcb5c56b-n8x7q                                          1/1     Running   0          20m
kube-system                         pod/etcd-schecter-control-plane-rqmnv                                1/1     Running   0          20m
kube-system                         pod/kube-apiserver-schecter-control-plane-rqmnv                      1/1     Running   0          20m
kube-system                         pod/kube-controller-manager-schecter-control-plane-rqmnv             1/1     Running   0          20m
kube-system                         pod/kube-proxy-4cltq                                                 1/1     Running   0          18m
kube-system                         pod/kube-proxy-s9kn4                                                 1/1     Running   0          20m
kube-system                         pod/kube-scheduler-schecter-control-plane-rqmnv                      1/1     Running   0          20m
kube-system                         pod/kube-vip-schecter-control-plane-rqmnv                            1/1     Running   0          20m
kube-system                         pod/metrics-server-66fc955cc4-shtck                                  1/1     Running   0          11m
kube-system                         pod/vsphere-cloud-controller-manager-p25b5                           1/1     Running   0          9m57s
kube-system                         pod/vsphere-csi-controller-7b4b6bd88c-hxkcg                          6/6     Running   0          11m
kube-system                         pod/vsphere-csi-node-9bd5v                                           3/3     Running   0          11m
kube-system                         pod/vsphere-csi-node-hg8cl                                           3/3     Running   0          11m
tkg-system                          pod/kapp-controller-6499b8866-7fnq9                                  1/1     Running   0          16m
tkg-system                          pod/tanzu-addons-controller-manager-7bf8967c56-7ktnd                 1/1     Running   0          12m
tkg-system                          pod/tanzu-capabilities-controller-manager-6ff97656b8-bv4c7           1/1     Running   0          18m
tkr-system                          pod/tkr-controller-manager-6bc455b5d4-vszr2                          1/1     Running   0          18m

NAMESPACE                           NAME                                                                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
capi-kubeadm-bootstrap-system       service/capi-kubeadm-bootstrap-controller-manager-metrics-service       ClusterIP   100.69.7.20      <none>        8443/TCP                 14m
capi-kubeadm-control-plane-system   service/capi-kubeadm-control-plane-controller-manager-metrics-service   ClusterIP   100.65.139.84    <none>        8443/TCP                 14m
capi-system                         service/capi-controller-manager-metrics-service                         ClusterIP   100.66.87.246    <none>        8443/TCP                 14m
capi-webhook-system                 service/capi-kubeadm-bootstrap-webhook-service                          ClusterIP   100.66.128.62    <none>        443/TCP                  14m
capi-webhook-system                 service/capi-kubeadm-control-plane-webhook-service                      ClusterIP   100.67.44.51     <none>        443/TCP                  14m
capi-webhook-system                 service/capi-webhook-service                                            ClusterIP   100.69.197.139   <none>        443/TCP                  14m
capi-webhook-system                 service/capv-webhook-service                                            ClusterIP   100.66.99.168    <none>        443/TCP                  14m
capv-system                         service/capv-controller-manager-metrics-service                         ClusterIP   100.69.28.159    <none>        8443/TCP                 14m
cert-manager                        service/cert-manager                                                    ClusterIP   100.68.31.34     <none>        9402/TCP                 20m
cert-manager                        service/cert-manager-webhook                                            ClusterIP   100.69.119.222   <none>        443/TCP                  20m
default                             service/kubernetes                                                      ClusterIP   100.64.0.1       <none>        443/TCP                  20m
kube-system                         service/antrea                                                          ClusterIP   100.66.159.222   <none>        443/TCP                  16m
kube-system                         service/cloud-controller-manager                                        NodePort    100.71.76.170    <none>        443:30299/TCP            17m
kube-system                         service/kube-dns                                                        ClusterIP   100.64.0.10      <none>        53/UDP,53/TCP,9153/TCP   20m
kube-system                         service/metrics-server                                                  ClusterIP   100.71.1.239     <none>        443/TCP                  11m
kube-system                         service/vsphere-csi-controller                                          ClusterIP   100.71.235.60    <none>        2112/TCP,2113/TCP        11m
tkg-system                          service/packaging-api                                                   ClusterIP   100.70.191.40    <none>        443/TCP                  19m

NAMESPACE     NAME                                              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
kube-system   daemonset.apps/antrea-agent                       2         2         2       2            2           kubernetes.io/os=linux            16m
kube-system   daemonset.apps/kube-proxy                         2         2         2       2            2           kubernetes.io/os=linux            20m
kube-system   daemonset.apps/vsphere-cloud-controller-manager   1         1         1       1            1           node-role.kubernetes.io/master=   16m
kube-system   daemonset.apps/vsphere-csi-node                   2         2         2       2            2           <none>                            11m

NAMESPACE                           NAME                                                            READY   UP-TO-DATE   AVAILABLE   AGE
capi-kubeadm-bootstrap-system       deployment.apps/capi-kubeadm-bootstrap-controller-manager       1/1     1            1           14m
capi-kubeadm-control-plane-system   deployment.apps/capi-kubeadm-control-plane-controller-manager   1/1     1            1           14m
capi-system                         deployment.apps/capi-controller-manager                         1/1     1            1           14m
capi-webhook-system                 deployment.apps/capi-controller-manager                         1/1     1            1           14m
capi-webhook-system                 deployment.apps/capi-kubeadm-bootstrap-controller-manager       1/1     1            1           14m
capi-webhook-system                 deployment.apps/capi-kubeadm-control-plane-controller-manager   1/1     1            1           14m
capi-webhook-system                 deployment.apps/capv-controller-manager                         1/1     1            1           14m
capv-system                         deployment.apps/capv-controller-manager                         1/1     1            1           14m
cert-manager                        deployment.apps/cert-manager                                    1/1     1            1           20m
cert-manager                        deployment.apps/cert-manager-cainjector                         1/1     1            1           20m
cert-manager                        deployment.apps/cert-manager-webhook                            1/1     1            1           20m
kube-system                         deployment.apps/antrea-controller                               1/1     1            1           16m
kube-system                         deployment.apps/coredns                                         2/2     2            2           20m
kube-system                         deployment.apps/metrics-server                                  1/1     1            1           11m
kube-system                         deployment.apps/vsphere-csi-controller                          1/1     1            1           11m
tkg-system                          deployment.apps/kapp-controller                                 1/1     1            1           16m
tkg-system                          deployment.apps/tanzu-addons-controller-manager                 1/1     1            1           12m
tkg-system                          deployment.apps/tanzu-capabilities-controller-manager           1/1     1            1           18m
tkr-system                          deployment.apps/tkr-controller-manager                          1/1     1            1           18m

NAMESPACE                           NAME                                                                       DESIRED   CURRENT   READY   AGE
capi-kubeadm-bootstrap-system       replicaset.apps/capi-kubeadm-bootstrap-controller-manager-6494884869       1         1         1       14m
capi-kubeadm-control-plane-system   replicaset.apps/capi-kubeadm-control-plane-controller-manager-857d687b9d   1         1         1       14m
capi-system                         replicaset.apps/capi-controller-manager-778bd4dfb9                         1         1         1       14m
capi-webhook-system                 replicaset.apps/capi-controller-manager-9995bdc94                          1         1         1       14m
capi-webhook-system                 replicaset.apps/capi-kubeadm-bootstrap-controller-manager-68845b65f8       1         1         1       14m
capi-webhook-system                 replicaset.apps/capi-kubeadm-control-plane-controller-manager-9847c6747    1         1         1       14m
capi-webhook-system                 replicaset.apps/capv-controller-manager-55bf67fbd5                         1         1         1       14m
capv-system                         replicaset.apps/capv-controller-manager-587fbf697f                         1         1         1       14m
cert-manager                        replicaset.apps/cert-manager-77f6fb8fd5                                    1         1         1       20m
cert-manager                        replicaset.apps/cert-manager-cainjector-6bd4cff7bb                         1         1         1       20m
cert-manager                        replicaset.apps/cert-manager-webhook-fbfcb9d6c                             1         1         1       20m
kube-system                         replicaset.apps/antrea-controller-55b45848bc                               1         1         1       10m
kube-system                         replicaset.apps/antrea-controller-86f8988c5f                               0         0         0       16m
kube-system                         replicaset.apps/coredns-8dcb5c56b                                          2         2         2       20m
kube-system                         replicaset.apps/metrics-server-66fc955cc4                                  1         1         1       11m
kube-system                         replicaset.apps/vsphere-csi-controller-7b4b6bd88c                          1         1         1       11m
tkg-system                          replicaset.apps/kapp-controller-6499b8866                                  1         1         1       16m
tkg-system                          replicaset.apps/tanzu-addons-controller-manager-7bf8967c56                 1         1         1       12m
tkg-system                          replicaset.apps/tanzu-capabilities-controller-manager-6ff97656b8           1         1         1       18m
tkr-system                          replicaset.apps/tkr-controller-manager-6bc455b5d4                          1         1         1       18m

Tanzu Kubernetes Cluster のデプロイ

ディレクトリ~/.tanzu/tkg/clusterconfigs にTanzu Kubernetes Cluster(以下TKC) 用の定義ファイルを作成し、TKC デプロイ時はそれを引数として指定しています。
 
事前に以下のコマンドで利用出来るkubernetes-release を確認します。
$ tanzu kubernetes-release get
  NAME                       VERSION                  COMPATIBLE  ACTIVE  UPDATES AVAILABLE
  v1.19.12---vmware.1-tkg.1  v1.19.12+vmware.1-tkg.1  True        True    True
  v1.20.8---vmware.1-tkg.2   v1.20.8+vmware.1-tkg.2   True        True    True
  v1.21.2---vmware.1-tkg.1   v1.21.2+vmware.1-tkg.1   True        True    False

作成したら以下のコマンドでTKC を作成していきます。
$ tanzu cluster create fender --tkr v1.21.2---vmware.1-tkg.1 --file fender.yaml -v 6
compatibility file (/home/itot/.config/tanzu/tkg/compatibility/tkg-compatibility.yaml) already exists, skipping download
BOM files inside /home/itot/.config/tanzu/tkg/bom already exists, skipping download
Using namespace from config:
Validating configuration...

...(SNIP)...

Successfully reconciled package: vsphere-csi

Workload cluster 'fender' created


TKC にアクセスします。
$ tanzu cluster list
  NAME    NAMESPACE  STATUS   CONTROLPLANE  WORKERS  KUBERNETES        ROLES   PLAN
  fender  default    running  1/1           1/1      v1.21.2+vmware.1  <none>  dev
tanzu cluster kubeconfig get fender --export-file kubeconfig-lab-fender --admin
export KUBECONFIG=~/kubeconfig-lab-fender
$ k get nodes
NAME                           STATUS   ROLES                  AGE   VERSION
fender-control-plane-gxlkq     Ready    control-plane,master   21d   v1.21.2+vmware.1
fender-md-0-5ff55d5d58-sd7sh   Ready    <none>                 21d   v1.21.2+vmware.1

無事にデプロイ出来ましたので、続いてContour をデプロイしていきます。

Contour のデプロイ

こちらの「User-Managed Packages」、「Implementing Ingress Control with Contour」に従ってデプロイしていきます。この環境では事前に、metalLB をインストールし、type: LoadBalancer リソースを払い出せる様にしています。
Contour をインストールする前に、先ずはcert-manager をインストールします。
k create ns user-managed-packages
$ tanzu package available list cert-manager.tanzu.vmware.com -A
/ Retrieving package versions for cert-manager.tanzu.vmware.com...
  NAME                           VERSION               RELEASED-AT           NAMESPACE
  cert-manager.tanzu.vmware.com  1.1.0+vmware.1-tkg.2  2020-11-24T18:00:00Z  tanzu-package-repo-global
$ tanzu package install cert-manager --package-name cert-manager.tanzu.vmware.com --version 1.1.0+vmware.1-tkg.2 --namespace user-managed-packages
/ Installing package 'cert-manager.tanzu.vmware.com'
| Getting namespace 'user-managed-packages'
| Getting package metadata for 'cert-manager.tanzu.vmware.com'
| Creating service account 'cert-manager-user-managed-packages-sa'
| Creating cluster admin role 'cert-manager-user-managed-packages-cluster-role'
| Creating cluster role binding 'cert-manager-user-managed-packages-cluster-rolebinding'
- Creating package resource
\ Package install status: Reconciling

 Added installed package 'cert-manager' in namespace 'user-managed-packages'

Contour のcontour-data-values.yamlこちらを参考に作成します。contour-data-values.yaml が作成出来たら、Contour をデプロイします。
$ tanzu package available list contour.tanzu.vmware.com
/ Retrieving package versions for contour.tanzu.vmware.com...
  NAME                      VERSION                RELEASED-AT
  contour.tanzu.vmware.com  1.17.1+vmware.1-tkg.1  2021-07-23T18:00:00Z
$ tanzu package install contour --package-name contour.tanzu.vmware.com --version 1.17.1+vmware.1-tkg.1 --values-file contour-data-values.yaml --namespace user-managed-packages
/ Installing package 'contour.tanzu.vmware.com'
| Getting namespace 'user-managed-packages'
| Getting package metadata for 'contour.tanzu.vmware.com'
| Creating service account 'contour-user-managed-packages-sa'
| Creating cluster admin role 'contour-user-managed-packages-cluster-role'
| Creating cluster role binding 'contour-user-managed-packages-cluster-rolebinding'
| Creating secret 'contour-user-managed-packages-values'
- Creating package resource
/ Package install status: Reconciling

 Added installed package 'contour' in namespace 'user-managed-packages'
$ tanzu package installed list -A
- Retrieving installed packages...
  NAME            PACKAGE-NAME                     PACKAGE-VERSION        STATUS               NAMESPACE
  antrea          antrea.tanzu.vmware.com                                 Reconcile succeeded  tkg-system
  metrics-server  metrics-server.tanzu.vmware.com                         Reconcile succeeded  tkg-system
  vsphere-cpi     vsphere-cpi.tanzu.vmware.com                            Reconcile succeeded  tkg-system
  vsphere-csi     vsphere-csi.tanzu.vmware.com                            Reconcile succeeded  tkg-system
  cert-manager    cert-manager.tanzu.vmware.com    1.1.0+vmware.1-tkg.2   Reconcile succeeded  user-managed-packages
  contour         contour.tanzu.vmware.com         1.17.1+vmware.1-tkg.1  Reconcile succeeded  user-managed-packages

続いて、Let's Encrypt を利用し、Contour で利用する証明書を取得します。

Let's Encrypt で証明書の取得

以下のコマンドで証明書を発行します。
この環境ではGoogle DNS を使っています。Namespace tanzu-system-ingressenvoy サービスにアサインされていたEXTERNAL-IP*.<MYDOMAIN> のAレコードとして登録しています。
$ certbot --server https://acme-v02.api.letsencrypt.org/directory \
-d "*.<MYDOMAIN>" --manual --preferred-challenges dns-01 certonly \
--work-dir ./<cluster-name>/wd \
--config-dir ./<cluster-name>/cfg \
--logs-dir ./<cluster-name>/logs

案内に従ってステップを進めていくと、DNS TXT レコード とそれに対応する Values が表示されるので、その組合せをGoogle DNS に登録します。
名前解決出来るまでしばらく時間が掛かりますが、以下のコマンドで登録したDNS TXT レコードの Values 値が返ってくればOKです。
nslookup -q=txt _acme-challenge.<MYDOMAIN>

クエリが通ったら、プロンプトでEnter を入力し、処理を終えます。
Congratulations! Your certificate and chain have been saved at: と出力されていれば、無事処理が終わっています。

Harbor のデプロイ

続いてHarbor をデプロイしていきます。この手順ではBitnami が提供しているHelm Chart を利用してデプロイしています。こちらにある手順に従って、事前にBitnami のHelm Chart を追加しておきます。
Harbor をデプロイするNamespace を作成します。
k create ns harbor
Harbor が利用するTLS のSecret を作成していきます。--cert--key で指定しているファイルは上の手順で作成したfullchain.pemprivkey.pem になります。
$ k -n harbor create secret tls harbor-tls-secret \
--cert=./<cluster-name>/cfg/live/<MYDOMAIN>/fullchain.pem \
--key=./<cluster-name>/cfg/live/<MYDOMAIN>/privkey.pem

Helm のリポジトリをアップデートしておきます。
helm repo update
$ helm search repo bitnami |grep harbor
bitnami/harbor                              	10.2.11      	2.3.2        	Harbor is an an open source trusted cloud nativ...

Harbor をインストールする際のvalues.yaml を作成します。この環境ではIngress として、Contour を利用しているので、ingress.annotations.kubernetes.io/ingress.class にContour を指定しています。
$ cat values.yaml
harborAdminPassword: xxxxx
volumePermissions.enabled: true

service:
  type: ClusterIP
  tls:
    enabled: true
    existingSecret: harbor-tls-secret
    notaryExistingSecret: harbor-tls-secret

externalURL: registry.<MYDOMAIN>

ingress:
  enabled: true
  hosts:
    core: registry.<MYDOMAIN>
    notary: notary.<MYDOMAIN>
  annotations:
    ingress.kubernetes.io/force-ssl-redirect: "true"     # force https, even if http is requested
    kubernetes.io/ingress.class: contour                 # using Contour for ingress
    kubernetes.io/tls-acme: "true"                       # using ACME certificates for TLS

portal:
  tls:
    existingSecret: harbor-tls-secret

persistence:
  persistentVolumeClaim:
    registry:
      size: 50Gi
    trivy:
      size: 20Gi

helm でHarbor をデプロイします。
helm upgrade --install harbor bitnami/harbor -f values.yml --namespace harbor

無事にHarbor が立ち上がっている様です。
$ k -n harbor get pods
NAME                                    READY   STATUS    RESTARTS   AGE
harbor-chartmuseum-dfbf4f979-h95c8      1/1     Running   0          20d
harbor-core-7944648dc7-dxlrv            1/1     Running   1          20d
harbor-jobservice-5859d4cf5-jx2mv       1/1     Running   0          20d
harbor-notary-server-77b5754c68-ggnqw   1/1     Running   0          20d
harbor-notary-signer-867c7c587c-fthwg   1/1     Running   0          20d
harbor-portal-85554b6646-q2w42          1/1     Running   0          20d
harbor-postgresql-0                     1/1     Running   0          20d
harbor-redis-master-0                   1/1     Running   0          20d
harbor-registry-558d64dd67-qgwvx        2/2     Running   0          20d
harbor-trivy-0                          1/1     Running   0          20d
無事にインストール出来たことが確認出来ました。次にPrometheus とGrafana をデプロイしていきます。

Prometheus/Grafana のデプロイ

こちら「Implementing Monitoring with Prometheus and Grafana」を参考にデプロイしていきます。

先ずは、Prometheus からデプロイしていきます。
image_url=$(kubectl -n tanzu-package-repo-global get packages prometheus.tanzu.vmware.com.2.27.0+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
imgpkg pull -b $image_url -o /tmp/prometheus-package-2.27.0+vmware.1-tkg.1
cp /tmp/prometheus-package-2.27.0+vmware.1-tkg.1/config/values.yaml prometheus-data-values.yml
prometheus-data-values.ymlingress リソース設定を以下の様に修正しました。またtls.crttls.key に関しては、Let's Encrypt での証明書とキーを利用しています。tls.crtfullchain.pem の1つ目の証明書を、tls.keyprivkey.pem を指定しています。
...

ingress:
  enabled: true
  virtual_host_fqdn: "prometheus.<MYDOMAIN>"
  prometheus_prefix: "/"
  alertmanager_prefix: "/alertmanager/"
  prometheusServicePort: 80
  alertmanagerServicePort: 80
  #! [Optional] The certificate for the ingress if you want to use your own TLS certificate.
  #! We will issue the certificate by cert-manager when it's empty.
  tlsCertificate:
    tls.crt: |
     -----BEGIN CERTIFICATE-----
     ...
     -----END CERTIFICATE-----
    tls.key: |
     -----BEGIN PRIVATE KEY-----
     ...
     -----END PRIVATE KEY-----
...
Prometheus をデプロイします。
$ tanzu package install prometheus --package-name prometheus.tanzu.vmware.com --version 2.27.0+vmware.1-tkg.1 --values-file prometheus-data-values.yml --namespace user-managed-packages
- Installing package 'prometheus.tanzu.vmware.com'
| Getting namespace 'user-managed-packages'
| Getting package metadata for 'prometheus.tanzu.vmware.com'
| Creating service account 'prometheus-user-managed-packages-sa'
| Creating cluster admin role 'prometheus-user-managed-packages-cluster-role'
| Creating cluster role binding 'prometheus-user-managed-packages-cluster-rolebinding'
| Creating secret 'prometheus-user-managed-packages-values'
- Creating package resource
/ Package install status: Reconciling


 Added installed package 'prometheus' in namespace 'user-managed-packages'

続いて、同じ様にGrafanaをデプロイしていきます。
image_url=$(kubectl -n tanzu-package-repo-global get packages grafana.tanzu.vmware.com.7.5.7+vmware.1-tkg.1 -o jsonpath='{.spec.template.spec.fetch[0].imgpkgBundle.image}')
imgpkg pull -b $image_url -o /tmp/grafana-package-7.5.7+vmware.1-tkg.1
cp /tmp/grafana-package-PACKAGE-VERSION/config/values.yaml grafana-data-values.yaml
admin ユーザー用のパスワードをbase64 でエンコードします。出力された値をgrafana-data-values.yml に記載していきます。
echo -n '<ADMIN_PASSWORD>' | base64
namespace を変更し、admin ユーザーのパスワードを変更し、ingress の設定を行い、以下の様なgrafana-data-values.yml を作成しています。 ingress リソース設定のtls.crttls.key に関しては、Let's Encrypt での証明書とキーを利用しています。tls.crtfullchain.pem の1つ目の証明書を、tls.keyprivkey.pem を指定しています。
...
...
namespace: tanzu-system-dashboards
...

  secret:
    type: "Opaque"
    admin_user: "YWRtaW4="
    admin_password: "<BASE64_ENCODING_ADMIN_PASSWORD>"

...
ingress:
  enabled: true
  virtual_host_fqdn: "grafana.<MYDOMAIN>"
  prefix: "/"
  servicePort: 80
  #! [Optional] The certificate for the ingress if you want to use your own TLS certificate.
  #! We will issue the certificate by cert-manager when it's empty.
  tlsCertificate:
    tls.crt: |
     -----BEGIN CERTIFICATE-----
     ...
     -----END CERTIFICATE-----
    tls.key: |
     -----BEGIN PRIVATE KEY-----
     ...
     -----END PRIVATE KEY-----
...
Grafana をデプロイします。
$ tanzu package install grafana --package-name grafana.tanzu.vmware.com --version 7.5.7+vmware.1-tkg.1 --values-file grafana-data-values.yml --namespace user-managed-packages
- Installing package 'grafana.tanzu.vmware.com'
| Getting namespace 'user-managed-packages'
| Getting package metadata for 'grafana.tanzu.vmware.com'
| Creating service account 'grafana-user-managed-packages-sa'
| Creating cluster admin role 'grafana-user-managed-packages-cluster-role'
| Creating cluster role binding 'grafana-user-managed-packages-cluster-rolebinding'
| Creating secret 'grafana-user-managed-packages-values'
- Creating package resource
/ Package install status: Reconciling

 Added installed package 'grafana' in namespace 'user-managed-packages'
無事にインストールが完了しました。Grafana にアクセスすると以下のDashboard が作成されており、こちらでTKC 上のリソースの監視が可能になります。


このブログの人気の投稿