レプリケートされたTimesTenClassicオブジェクトのデプロイについて

KubernetesクラスタでレプリケートされたTimesTenClassicオブジェクトを作成すると、データベースのアクティブ・スタンバイ・ペアを作成および構成するプロセスが開始されます。オペレータが呼び出され、TimesTenを実行するために必要なKubernetesオブジェクトがいくつか作成されます。オブジェクトが作成されてリンクされると、TimesTenコンテナはTimesTenエージェントを構成および起動するスクリプトを実行します。オペレータは、TimesTenを監視および制御するために、各ポッドで実行されているTimesTenエージェントと通信します。オペレータは1つのデータベースをアクティブ・データベースとして構成し、アクティブ・データベースをスタンバイにコピーしてから、アクティブ・スタンバイ・ペアのレプリケーション・スキームを構成します。このプロセスの詳細は、次の各項で説明します。

TimesTenオペレータによって作成されるオブジェクトについて

オペレータは、StatefulSet、サービス、シークレットなどの、TimesTenの実行に必要なKubernetesオブジェクトをいくつか作成します。さらに、これらのオブジェクトは他のオブジェクトを作成します。これらのオブジェクトはすべてKubernetesによってリンクされ、作成したTimesTenClassicオブジェクトに関連付けられます。図1-2に、作成されるオブジェクトとそのリンク方法を示します。

図1-2 TimesTenClassicオブジェクトの作成

図1-2の説明が続きます。
「図1-2 TimesTenClassicオブジェクトの作成」の説明

作成されるオブジェクトについては、次の各項で説明します。

StatefulSet

オペレータは、TimesTenを実行する2つのポッドで構成されるStatefulSetを作成します。各ポッドには、TimesTenコンテナにマウントされた1つ以上のPersistentVolumes (永続記憶域)があります。これは、TimesTenデータベースが格納される場所です。PersistentVolumesがマウントされたコンテナで実行されているアプリケーションは、コンテナの存続期間を超えて存続するファイルを作成できます。(デフォルトでは、コンテナが作成および変更するすべてのファイルは、コンテナが終了すると自動的に消滅します。コンテナは短期的なものです。)

StatefulSetの1つの属性は、プロビジョニングできるreplicasの数です。各TimesTenClassicオブジェクトには、2つのreplicasを含むStatefulSetが関連付けられています。あるポッドに障害が発生した場合、Kubernetesは新しいポッドを自動的に作成して置換し、適切なPersistentVolumeを自動的にマウントします。

たとえば、sampleというTimesTenClassicオブジェクトの場合、オペレータはsampleというStatefulSetを同じKubernetesネームスペースに作成します。次に、StatefulSetは、sample-0およびsample-1という2つのポッドをネームスペースに作成します。

サービス

Kubernetesサービスは、クラスタ内のアプリケーションに公開する必要のあるネットワーク・アドレスとポートのセットを定義します。

TimesTenClassicオブジェクトを作成すると、オペレータによって自動的にheadlessサービスが作成されます。このサービスはStatefulSetに自動的に関連付けられます。これにより、KubernetesはStatefulSetのポッドに対してKubernetesクラスタのDNSにエントリを定義し、それらのDNSエントリを最新の状態に保ちます。

headlessサービスは、アクティブ・データベースのDNS名/アドレス・エントリがスタンバイ・データベースのDNS名/アドレス・エントリとは異なるように使用されます。これにより、受信クライアント接続をアクティブなデータベースにルーティングできます。headlessサービスの詳細は、次を参照してください。

https://kubernetes.io/docs/concepts/services-networking/service/#headless-services/

sampleというTimesTenClassicオブジェクトの場合、sampleというheadlessサービスも同じKubernetesネームスペースに作成されます。これにより、sample-0.sample.namespace.svc.cluster.localおよびsample-1.sample.namespace.svc.cluster.localのクラスタのDNSにエントリが作成されます。

シークレット

TimesTenオペレータは、SSL証明書をTimesTenコンテナにインジェクトするためのシークレットを作成します。これにより、TimesTenオペレータとTimesTenエージェントの間の通信が保護されます。

ポッド

StatefulSetは2つのポッドを作成します。各ポッドには3つのコンテナがあります:

  • ttコンテナ。このTimesTenコンテナは、常にポッドに存在します。TimesTenエージェントを実行し、TimesTenを実行します。

  • daemonlogコンテナ: このコンテナはTimesTen ttmesg.logファイルの内容をstdoutにコピーし、Kubernetesがファイルをログに記録します。これにより、TimesTenインスタンスのデーモン・ログがKubernetesインフラストラクチャによって記録されます。

  • exporterコンテナ。このコンテナは、TimesTenエクスポータを実行します。TimesTenエクスポータは、TimesTenメトリックをPrometheusまたはその他のスクレイプ・メカニズムにエクスポートするユーティリティです。

イベント

オペレータは、重要な変更が発生するたびにKubernetesイベントを作成します。

TimesTenコンテナおよびTimesTenエージェントについて

オブジェクトが作成されると、TimesTenコンテナはTimesTenエージェントを構成および起動するスクリプトを実行します。オペレータは、そのポッドでTimesTenを構成、管理および監視するために、各ポッドで実行されているTimesTenエージェントと通信します。エージェントは、オペレータがポッド内のttコンテナの問合せおよび制御に使用する、ポッド内のHTTPSエンドポイントを提供します。TimesTenエージェントに障害が発生すると、ttコンテナは自動的に終了し、Kubernetesによって再生成されます。図1-3に、オペレータとTimesTenエージェント間の双方向通信を示します。

図1-3 オペレータおよびTimesTenエージェント

図1-3の説明が続きます。
「図1-3 オペレータおよびTimesTenエージェント」の説明

TimesTenエージェントはTimesTenを起動し、インスタンス管理者ユーザーとして実行されます。TimesTenを完全に制御できます。

単純なデプロイメント

TimesTenオペレータは、TimesTen Classicデータベースのアクティブ・スタンバイ・ペアの単純なデプロイメントと、自動障害検出およびリカバリ用に設計されています。たとえば、次のようになります。

  • TimesTenデータベースの新しいレプリケート・ペアをデプロイすることを決定します。

  • それらのデータベースの属性を決定します。

  • それらの属性の構成ファイルを作成します。

  • kubectl createコマンドを使用して、レプリケート・ペアを表すTimesTenClassicオブジェクトを作成します。

  • kubectl getおよびkubectl describeコマンドを使用して、アクティブ・スタンバイ・ペアのプロビジョニングを確認します。

  • 他のポッドで実行されるアプリケーションは、TimesTenの標準クライアント/サーバー・ドライバを使用してTimesTenデータベースにアクセスします。

障害後に、TimesTenデータベースの継続的な監視、レプリケーションの構成、フェイルオーバーの実行、データベースの再複製を行う必要はありません。TimesTenオペレータはこれらすべての機能を実行し、ユーザーは最小限の労力でデータベースを稼働させることができます。