Tanzu Application Platform

開発チームが使う Namespace の払い出し作業を楽にしよう – Tanzu Application Platform 1.4 から提供する Namespace Provisioner 機能とは

この記事では、VMware Tanzu Application Platform (以降TAP)1.4 から提供している Namespace Provisioner 機能について紹介します。

TAP が目指しているのは、開発者の皆様にとっての面倒な作業を減らし、プラットフォームチームにとっての運用周りの手間を減らすことにあります。
手間を減らす機能としてはこれまでに Service Bindings などの機能を紹介していますが、今回は TAP 1.4 から提供している Namespace Provisioner 機能について紹介します。
(ちなみに、そもそも TAP をインストールできず TAP の Namespace Provisioner 機能も含め試せない場合は、こちらのブログを参考に TAP をインストールしてみてください。)

Namespace Provisioner は、プラットフォームチームがアプリの Workload が意図通りに機能するために必要なリソースと適切な権限を備えた Namespace を安全かつ自動化された方法でプロビジョニングするための機能です。TAP 1.4 からデフォルトで利用できるようになっており、この機能を使うことで Kubernetes (K8s) に詳しくないプラットフォームエンジニアでも共有 K8s クラスター内の複数の開発者用 Namespace の払い出しを簡単に実現できます。

まず、TAP 1.4 前のバージョンではどのような手順で開発者用 Namespace を払い出しているかをみてみましょう。
今回は demo という名前の Namespace に Java アプリの Workload をデプロイするとします。

参考ドキュメントは下記となります。
https://docs.vmware.com/en/VMware-Tanzu-Application-Platform/1.3/tap/GUID-set-up-namespaces.html

下記の Step1 ~ Step3 の作業はプラットフォームチーム側の作業になります。

Step1. demo という名前の Namespace を作成します。

Step2. この namespace 上で Workload を作成時にコンテナイメージを <Container Repository> から pullしたり、pushできるように Secret を作成します。
(今回は Azure ACR サーバーにアクセスすることを例にしています)

Step3. demo Namespace 上に RBAC の設定を行います。

下記のように rbac.yaml を作成し、kubectl apply コマンドで実行します。

Step4. 開発者は上記の Step3 まで経て出来上がった Namespace をもらって、自分で開発したアプリコードを demo Namespace 上にデプロイします。 以下は Java アプリをデプロイする例となります。
(ここは開発者の作業範囲になります)

また、デプロイ済みのアプリの状態は下記のコマンドで確認できます。

いかがでしょうか?
開発者が利用する 1 個の Namespace を払い出すたびにプラットフォームチームは Step1 ~ Step3 の面倒なことを繰り返しながら実行する必要があります。
特に Step3 のような長い Yaml ファイルを Namespace を払い出すたびに使う必要があります。

 

では、TAP 1.4 でこの作業がどのように楽になるかをみてみましょう。

Step1. demo namespace を作成します。

Step2. Secret を作成
(こちらの Step は最初の一回のみ実行する必要があります )

Step3. 払い出す Namespace にラベルを設定します。

これで作成済みの demo Namespace を開発者に渡すことができます。
二回目以降は Step2 も省くことができるので、
「Step1. namespace を作成」、「Step2. 払い出す Namespace にラベルを設定する」だけで新しい Namespace を簡単に払い出すことができます。

具体例でみる Namespace Provisioner 機能

さて、上の説明だけではイメージがつかないと思うので、実際の TAP 1.4 を使い Namespace の払い出しと払い出された Namespace 上にアプリの Workload をデプロイしてみたいと思います。

(下記の Step1 と Step2 はプラットフォームチーム側の作業になります)

Step1. dev01 という名前の Namespace を作成します。

Step2. dev01 Namespace にラベルを設定します。
(今回は、二回目以降の Namespace 払い出しの作業になるため 「Secret 作成」の作業は省きます)

ここからは開発者の作業になります。

しばらく経つと TAP GUI から tanzu-java-web-app という workload が dev01 Namespace 上にデプロイされているのを確認できます。

該当 workload の URL を確認し、アプリにアクセスしてみます。

いかがでしょうか?
Namespace の払い出し作業がかなりシンプルになってるのを確認できると思います。

Namespace Provisioner 機能の仕組み

では、Namespace Provisioner 機能の仕組みについて少し説明します。
実際、apps.tanzu.vmware.com/tap-ns=”” というラベルを新しく作成した Namespace に設定すると裏でなにが起きているかをみてみましょう。

上記のように一覧のリソースが自動的に作成されているのを確認できます。

Namespace Provisioner のアーキテクチャについてもみてみましょう。

Namespace Provisioner のアーキテクチャ図:
Namespace Provisioner は、tap-namespace-provisioning という Namespace にインストールされる Carvelアプリケーションで構成されています。

Provisioner アプリケーションは ytt を使用してリソースのセットを複数の Namespace にインストールするようにテンプレート化しています。

tap-namespace-provisioning の Namespace にある desired-namespaces という ConfigMap は
どの Namespace にリソースを配置するかを示す宣言的な方法を提供します。

先程、ラベルを設定した dev01 の Namespace も確認できます。

最後に kapp CLI を使って Namespace Provisioner によって作成されたリソースを確認します。

まとめ

ここまで TAP 1.4 で提供している Namespace Provisioner 機能について紹介しました。
この機能を利用することで、プラットフォームチームは必要なリソースと適切な権限を備えた Namespace をかなりシンプルに払い出すことができ、開発者はその Namespace を使ってアプリの Workload を K8s へデプロイできます。

VMware ブログでは、引き続き TAP の新機能を続々と紹介させていただきます。