Tanzu

Tanzu SQL for K8s Postgres の概要とインストール作業

はじめまして。VMware の伊藤です。Tanzu 製品のプラットフォームアーキテクトとして働いており、開発と運用双方の経験があります。この記事ではオンプレミスでもパブリッククラウド上でも利用できるマネージドデータベースである Tanzu SQL の Postgres Kubernetes 版の概要とインストール方法を紹介します。

ご存知のかたも多いと思いますが、Amazon RDS に代表されるパブリッククラウドのマネージドデータベースの利用者は増加傾向にあります。なぜ「無料で使える OSS のデータベースにわざわざお金を払って利用するのか」と思われるかもしれません。実際、ウェブで紹介されている「Postgres のインストール方法」「MySQL のインストール方法」などといった記事を読むと Linux 操作になれているかたであれば、簡単にインストールできます。

ただ、実際に OSS のデータベース運用するとなると「作って、使う」というだけでなく、冗長化やバックアップおよびセキュリティ対策のためのバージョンアップなど、その構築/管理運用作業は非常に煩雑となります。そしてデータベースのデータを失うというインパクトは非常に大きいため、扱いもデリケートに実施する必要があります。このようなデータベースの管理作業は多くの会社にとってコアビジネスに直結していないため、管理負荷を下げるためにお金を払って利用が簡単なマネージドデータベースを使うという方向にシフトしているのです。

Tanzu SQL もパブリッククラウドのマネージドデータベースと同様で、データベースの管理を楽にするソリューションです。ただ、Tanzu SQL が他の多くのマネージドデータベースと異なるのはオンプレミス環境やパブリッククラウドなど、「どこでもマネージドデータベースの管理基盤を構築できる」という点です。Tanzu SQL には運用形態によりいくつかのバリエーションがあり、仮想マシンや TAS という PaaS で使うものもあります。この記事で紹介するのは Kubernetes (以下 K8s)で使う「Tanzu SQL for Kubernetes」という製品です。

この Tanzu SQL for K8s は K8s のオペレーターという K8s 標準の機能を使って、データベース操作を半自動化しています。そのため、構築や破棄はもちろん、冗長化構成を組むことやパフォーマンス変更を簡単にできます。また、K8s 基盤上にあるため、K8s のエコシステムの恩恵(たとえば内部ロードバランサーの利用など)を得ることもできます。

以下に参考情報として VMware の TKG 上に構築した場合の Tanzu SQL for K8s の立ち位置と、連携しやすい公式ツールの概要図を記載します。これらのツールもしくは他の類似ツールを使うことで、手元にあるマネージドデータベースの基盤自体も K8s 的に運用/監視したりすることもできます。

 

この記事では上記の(1)にあたる Tanzu SQL for K8s の Postgres 版のバージョン 1.2.0 の環境構築方法を以下のステップで紹介します。

  1. K8sの用意
  2. Helmで cert-manager をインストール
  3. Helm で Tanzu SQL の Chart を準備
  4. Helm で Tanzu SQL のインストール

図の(2)にあたる実際の利用方法などは別の記事で紹介します。

 

Kubernetesの準備

Tanzu SQL for K8s は K8s 基盤上で動くマネージドデータベースなので、K8s のセットアップが必須です。汎用的な K8s 上に構築可能ですが、逆に言うと一部機能が省かれた特殊な K8s では利用できない可能性があるので注意してください。たとえば弊社製品だと vSphere with Tanzu の特殊な K8s である vSphere Pod では利用できません。

また、データベースのストレージの動的な拡張をするためには、その機能である「Allow Volume Expansion」をサポートするストレージが必要となります。この機能がない場合はデータベースの作り直しが必要になります。多くのパブリッククラウドの K8s 向けストレージや、弊社の TKG や vSphere with Tanzu のストレージはこの機能をサポートしています。

他にはデータベースを K8s 外に公開するのであれば、サービスのロードバランサーなどをサポートしている必要があります。これはアプリと同じなので特に言及はしません。

簡単にまとめると、Tanzu SQL for K8s のストレージの要件としては、以下があげられます。

  • Storage Class にデフォルトがある
  • その Storage Class の Volume Binding Mode は「Wait For First Consumer」である
  • その Storage Class は Allow Volume Expansion をサポートする (必須ではないが望ましい)

ここでは TKG 1.3.1 のワークロードクラスターのストレージ設定を、Tanzu SQL 用に設定するサンプルを紹介します。TKG にはインストール時に設定したストレージクラスが用意されています。私が用意した環境では少し紛らわしいのですが、default という名前の Storage Class がデフォルトで利用されるようになっています。このストレージクラスを上記要件を満たすように変更していきます。

この項目の作業は以下の公式ドキュメントの冒頭の「Prerequisites」に詳細があります。

Deploying a Postgres Instance

 

変更前に現状を確認します。

「kubectl get sc」でデフォルトのストレージクラスの設定を見ると「Volume Binding Mode」の変更が必要なことがわかります。そして、「kubectl get sc default -o yaml」で Storage Class の設定を kubectl コマンドで YAML フォーマットで出力しています。ちなみに、パイプ以後にある「kubectl neat」は YAML フォーマット出力から余計な行を省くための kubectl 拡張機能で、出力結果をファイルにそのまま書くのが簡単になります。なくても手で余計な行を削除すれば見た目を調整可能ですが、kubectl neat は便利な機能なので興味があるひとは調べてみてください。

 

現状を確認したので変更作業を開始します。YAMLの「VolumeBindingMode」を「Immediate」から「WaitForFirstConsumer」に変えるのですが、これは Immutable (変更できない)属性なので、kubectl edit などで変更することができません。そのため、さきほど出力したYAMLをviなどで更新(VolumeBindingModeを Immediate から WaitForFirstConsumer に変更)したあとで、既存のストレージクラスを削除して、再作成します。

以上でストレージの準備ができました。

K8s の基盤自体の設定作業は以上で終了となります。OSS の k8s などを利用しているのであれば、ロードバランサーなどの設定作業を継続してください。また、Helm コマンドがインストールされていない場合も用意しておいてください。Helm はバージョン3以上が必要です。

 

Helm で cert-manager のインストール

K8s で証明書系を扱う際によく利用されるツールに cert-manager というものがあります。Tanzu SQL for K8s もこれを利用するので、事前にインストールします。

ここからの作業は全て以下の公式ドキュメントに詳細があります。

Installing a Tanzu Postgres Operator

 

インストールする cert-manager のバージョンは 1.X であり、この記事の執筆時点の最新版の 1.5.3 を利用しています。上記の公式ドキュメントに cert-manager の Git Hub へのリンクがありますので、そこで最新の安定版リリースのバージョンを確認し、以下のコマンドサンプルのバージョンと置き換えてください。

やっている作業としては、上から順に以下となります。

  1. namespace の作成
  2. helm に cert-manager のリポジトリを追加
  3. helm のリポジトリをアップデート
  4. helm で cert-manager をバージョン指定してインストール

インストールにエラーが発生しなかったら、稼働状況を念のためにチェックします。

問題なさそうです。

 

Helm で Tanzu SQL for Kubernetes の Chart を準備

Tanzu SQL for K8s で使う Helm Chart やコンテナイメージは認証が必要な弊社のリポジトリにあります。ライセンスを購入されていないものの、機能を試してみたい場合は弊社営業にお問い合わせください。

以下ではコンテナレジストリの認証情報を変数に格納した上で、helm コマンドで Chart を準備します。

作業としては以下の流れで実施しています。

  1. 変数の準備
  2. helm registry login コマンドを使うために「HELM_EXPERIMENTAL_OCI」を有効化
  3. helm でコンテナレジストリにログイン
  4. Helm Chart を取得
  5. 取得した Chart をローカルにファイルで展開

以上で Chart の準備は終了です。

 

Helm で Tanzu SQL for Kubernetes をインストール

Chart の準備ができたので、あとは Chart を使ってインストールするだけです。

Helm でコンテナレジストリの認証情報を登録したのですが、K8s 自体でもコンテナレジストリの認証情報の登録が必要です。

以上でインストール作業は完了です。

最後にインストールが成功しているか確認します。

特に問題なさそうです。

 

以上で Tanzu SQL for Kubernetes のインストール方法の紹介をおわります。実際のデータベースの利用方法の紹介は別の記事で扱います。ご拝読ありがとうございました。