IK.AM

@making's tech note


Tanzu Build ServiceをEKS上でインストール及びアップデートするメモ

🗃 {Dev/Infrastructure/CloudNativeBuildpacks/kpack/TanzuBuildService}
🏷 Cloud Native Buildpacks 🏷 Tanzu Build Service 🏷 kpack 🏷 EKS 
🗓 Updated at 2022-06-01T12:06:40+09:00  🗓 Created at 2022-05-31T12:42:12+09:00 {✒️️ Edit  ⏰ History  🗑 Delete}

目次

EKS Clusterの作成

ekscliでクラスタを作成します。

$ eksctl version
0.99.0
eksctl create cluster --name tbs-dev --region ap-northeast-1

EULAの承諾

未実施の場合は、以下のEULAを承諾してください。

Tanzu CLIのインストール

https://network.pivotal.io/products/tanzu-application-platform/#/releases/1095326/file_groups/8255

tar xvf tanzu-framework-*-amd64.tar
install cli/core/v0.11.4/tanzu-core-*_amd64 /usr/local/bin/tanzu
$ tanzu version
version: v0.11.4
buildDate: 2022-04-16
sha: cc9fde8d

プラグインのインストール

tanzu plugin install --local cli all

Cluster Essentials for VMware Tanzuのインストール

TBSのインストールに必要なKapp ControllerとSecretgen Controllerをデプロイするために Cluster Essentials for VMware Tanzuをインストールします。

TANZUNET_USERNAME=...
TANZUNET_PASSWORD=...

mkdir tanzu-cluster-essentials
tar xzvf tanzu-cluster-essentials-*-amd64-1.1.0.tgz -C tanzu-cluster-essentials

export INSTALL_BUNDLE=registry.tanzu.vmware.com/tanzu-cluster-essentials/cluster-essentials-bundle:1.1.0
export INSTALL_REGISTRY_HOSTNAME=registry.tanzu.vmware.com
export INSTALL_REGISTRY_USERNAME=${TANZUNET_USERNAME}
export INSTALL_REGISTRY_PASSWORD=${TANZUNET_PASSWORD}
cd tanzu-cluster-essentials
./install.sh --yes
cd ..

Cluster Essentialsインストール後のPod一覧は次の通り。

$ kubectl get pod -A
NAMESPACE              NAME                                  READY   STATUS    RESTARTS   AGE
kapp-controller        kapp-controller-dcdb47b74-s8s6c       1/1     Running   0          99s
kube-system            aws-node-65kcx                        1/1     Running   0          18m
kube-system            aws-node-rqpmj                        1/1     Running   0          18m
kube-system            coredns-5b6d4bd6f7-5jmzn              1/1     Running   0          27m
kube-system            coredns-5b6d4bd6f7-rqgc5              1/1     Running   0          27m
kube-system            kube-proxy-67j4v                      1/1     Running   0          18m
kube-system            kube-proxy-sxm7p                      1/1     Running   0          18m
secretgen-controller   secretgen-controller-8b588c4d-s2vrq   1/1     Running   0          73s

TBS 1.4のインストール

TBSをインストールするためのnamespaceを作成します。

kubectl create ns tbs-install

TBSのイメージをpullするためのSecretの登録、及び各namespaceへ公開を行います。

tanzu secret registry add tbs-install-registry \
  --username ${INSTALL_REGISTRY_USERNAME} \
  --password ${INSTALL_REGISTRY_PASSWORD} \
  --server ${INSTALL_REGISTRY_HOSTNAME} \
  --export-to-all-namespaces --yes --namespace tbs-install

TBSのPackage Repositoryを登録します。今回は1.4.3を使用します。

tanzu package repository add tbs-repository \
    --url registry.tanzu.vmware.com/build-service/package-repo:1.4.3 \
    --namespace tbs-install

利用可能なPackage一覧を確認します。

$ tanzu package available list --namespace tbs-install
- Retrieving available packages... 
  NAME                           DISPLAY-NAME         SHORT-DESCRIPTION                                                                                                   LATEST-VERSION  
  buildservice.tanzu.vmware.com  Tanzu Build Service  Tanzu Build Service enables the building and automation of containerized software workflows securely and at scale.  1.4.3

TBSをインストールするためのvaluesを用意します。デフォルトのコンテナレジストリとしてここではGitHub Container Registryを使用します。

GITHUB_USERNAME=...
GITHUB_API_TOKEN=...

cat <<EOF > tbs-values.yml
kp_default_repository: ghcr.io/${GITHUB_USERNAME}/build-service
kp_default_repository_username: ${GITHUB_USERNAME}
kp_default_repository_password: ${GITHUB_API_TOKEN}
tanzunet_username: ${TANZUNET_USERNAME}
tanzunet_password: ${TANZUNET_PASSWORD}
enable_automatic_dependency_updates: true
pull_from_kp_default_repo: false
descriptor_name: lite
EOF

ℹ️ pull_from_kp_default_repofalseにすることでTBS関連のイメージをTanzu Netのregistryからpullできる。
pull_from_kp_default_repotrueの場合は、kp_default_repositoryに指定したregistryからpullするので、事前にimgpkgコマンドでrelocationしておく必要がある。
今回はrelocation手間を省くため、Tanzu Netのregistryを使用する。
なお、TBSが使用するBuilderはkp_default_repositoryに指定したregistryへpushされる。

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

tanzu package install tbs -p buildservice.tanzu.vmware.com -v 1.4.3 -n tbs-install -f tbs-values.yml --poll-timeout 30m

待ちます。

/ Installing package 'buildservice.tanzu.vmware.com' 
/ Getting package metadata for 'buildservice.tanzu.vmware.com' 
| Creating service account 'tbs-tbs-install-sa' 
| Creating cluster admin role 'tbs-tbs-install-cluster-role' 
| Creating cluster role binding 'tbs-tbs-install-cluster-rolebinding' 
| Creating secret 'tbs-tbs-install-values' 
| Creating package resource 
/ Waiting for 'PackageInstall' reconciliation for 'tbs' 
/ 'PackageInstall' resource install status: Reconciling 

 Added installed package 'tbs'

進捗は次のコマンドで確認できます。

kubectl get app tbs -n tbs-install -ojsonpath='{.status.deploy.stdout}'

ループしておくと便利です。

while true;do kubectl get app tbs -n tbs-install -ojsonpath='{.status.deploy.stdout}';sleep 2;done

build-pod-image-fetcherのInitializeに時間がかかるはずです。

インストール済みパッケージ一覧を確認します。

$ tanzu package installed list -n tbs-install
  NAME  PACKAGE-NAME                   PACKAGE-VERSION  STATUS                                                                               
  tbs   buildservice.tanzu.vmware.com  1.4.3            Reconcile succeeded  

Pod一覧は次の通り。

$ kubectl get pod -A
NAMESPACE                NAME                                             READY   STATUS     RESTARTS   AGE
build-service            build-pod-image-fetcher-9pq9h                    5/5     Running    0          5m
build-service            build-pod-image-fetcher-vgfxc                    5/5     Running    0          5m
build-service            dependency-updater-controller-6697768bf4-v7thk   1/1     Running    0          5m
build-service            secret-syncer-controller-598855f75-5qghn         1/1     Running    0          5m
build-service            smart-warmer-image-fetcher-7trwj                 0/2     Init:0/1   0          28s
build-service            smart-warmer-image-fetcher-ftb8n                 0/2     Init:0/1   0          28s
build-service            warmer-controller-6577547bcb-25qm8               1/1     Running    0          5m
cert-injection-webhook   cert-injection-webhook-76b8fc4f8d-dp92b          1/1     Running    0          5m
kapp-controller          kapp-controller-dcdb47b74-s8s6c                  1/1     Running    0          12m
kpack                    kpack-controller-87659bdb5-vz4pp                 1/1     Running    0          5m
kpack                    kpack-webhook-6c94559979-86ftd                   1/1     Running    0          5m
kube-system              aws-node-65kcx                                   1/1     Running    0          29m
kube-system              aws-node-rqpmj                                   1/1     Running    0          29m
kube-system              coredns-5b6d4bd6f7-5jmzn                         1/1     Running    0          38m
kube-system              coredns-5b6d4bd6f7-rqgc5                         1/1     Running    0          38m
kube-system              kube-proxy-67j4v                                 1/1     Running    0          29m
kube-system              kube-proxy-sxm7p                                 1/1     Running    0          29m
secretgen-controller     secretgen-controller-8b588c4d-s2vrq              1/1     Running    0          11m
stacks-operator-system   controller-manager-7597794dc-hl6nx               1/1     Running    0          5m

ClusterBuilderが作成されていることを確認します。

$ kp clusterbuilder list
NAME       READY    STACK                          IMAGE
base       true     io.buildpacks.stacks.bionic    ghcr.io/making/build-service:clusterbuilder-base@sha256:93b3db8b0d04b799856b7b36eca684fa490260b6fec03718af7d6da369032d82
default    true     io.buildpacks.stacks.bionic    ghcr.io/making/build-service:clusterbuilder-default@sha256:93b3db8b0d04b799856b7b36eca684fa490260b6fec03718af7d6da369032d82

各namespaceがClusterBuilderがpushされているkp-default-repositoryからイメージをpullできるようにSecretを公開します。

cat <<EOF > kp-default-repository-secret-export.yaml
apiVersion: secretgen.carvel.dev/v1alpha1
kind: SecretExport
metadata:
  name: kp-default-repository-secret
  namespace: build-service
spec:
  toNamespace: "*"
EOF
kubectl apply -f kp-default-repository-secret-export.yaml

イメージの作成

ここは開発者観点での作業です。 自分がイメージをpushしたいregistryへのSecretを登録します。ここでは同じくGitHub Container Registryを使用します。

kubectl create ns demo
REGISTRY_PASSWORD=${GITHUB_API_TOKEN} kp secret create ghcr --registry ghcr.io --registry-user ${GITHUB_USERNAME} -n demo

Secretを確認します。

$ kp secret list -n demo            
NAME                   TARGET
default-token-tkqpx    
ghcr                   ghcr.io

サンプルアプリのイメージを作成します。

kp image save hello-servlet -n demo --tag ghcr.io/${GITHUB_USERNAME}/hello-servlet --git https://github.com/making/hello-servlet --git-revision master --wait

完了したらdockerで起動して動作確認します。

docker run --rm -p 8080:8080 --pull always ghcr.io/${GITHUB_USERNAME}/hello-servlet 

TBS 1.5へアップデート

TBS 1.4 -> 1.5へアップデートします。1.5のリリースノートは次の通り。特に大きな変更はありません。

https://docs.vmware.com/en/Tanzu-Build-Service/1.5/vmware-tanzu-build-service/GUID-release-notes.html

TBSのPackage Repositoryを1.5.1に変更します。

tanzu package repository update tbs-repository \
    --url registry.tanzu.vmware.com/build-service/package-repo:1.5.1 \
    --namespace tbs-install

利用可能なパッケージ一覧を確認します。

$ tanzu package available list --namespace tbs-install
  NAME                           DISPLAY-NAME         SHORT-DESCRIPTION                                                                                                   LATEST-VERSION  
  buildservice.tanzu.vmware.com  Tanzu Build Service  Tanzu Build Service enables the building and automation of containerized software workflows securely and at scale.  1.5.1  

インストール済みパッケージ一覧を確認すると、既に1.4.3が存在しないとエラーが出ています。

$ tanzu package installed list -n tbs-install
  NAME  PACKAGE-NAME                   PACKAGE-VERSION  STATUS                                                                               
  tbs   buildservice.tanzu.vmware.com  1.4.3            Reconcile failed: Expected to find at least one version, but did not (details: a... ```

1.5.1にアップデートします。

tanzu package installed update tbs -v 1.5.1 -n tbs-install

進捗は次のコマンドで確認できます。

kubectl get app tbs -n tbs-install -ojsonpath='{.status.deploy.stdout}'

ループしておくと便利です。

while true;do kubectl get app tbs -n tbs-install -ojsonpath='{.status.deploy.stdout}';sleep 2;done

build-pod-image-fetcherのInitializeに時間がかかるはずです。

インストール済みパッケージ一覧を確認すると1.5.1にバージョンアップされていることがわかります。

$ tanzu package installed list -n tbs-install
  NAME  PACKAGE-NAME                   PACKAGE-VERSION  STATUS               
  tbs   buildservice.tanzu.vmware.com  1.5.1            Reconcile succeeded  

TBSのバージョンは次のConfigMapからも取得できます。

$ kubectl get cm -n build-service build-service-version -ojsonpath='{.data.version}'
1.5.1