レプリケートされたTimesTenClassicオブジェクトのデプロイについて
KubernetesクラスタでレプリケートされたTimesTenClassicオブジェクトを作成すると、データベースのアクティブ・スタンバイ・ペアを作成および構成するプロセスが開始されます。オペレータが呼び出され、TimesTenを実行するために必要なKubernetesオブジェクトがいくつか作成されます。オブジェクトが作成されてリンクされると、TimesTenコンテナはTimesTenエージェントを構成および起動するスクリプトを実行します。オペレータは、TimesTenを監視および制御するために、各ポッドで実行されているTimesTenエージェントと通信します。オペレータは1つのデータベースをアクティブ・データベースとして構成し、アクティブ・データベースをスタンバイにコピーしてから、アクティブ・スタンバイ・ペアのレプリケーション・スキームを構成します。このプロセスの詳細は、次の各項で説明します。
TimesTenオペレータによって作成されるオブジェクトについて
オペレータは、StatefulSet、サービス、シークレットなどの、TimesTenの実行に必要なKubernetesオブジェクトをいくつか作成します。さらに、これらのオブジェクトは他のオブジェクトを作成します。これらのオブジェクトはすべてKubernetesによってリンクされ、作成したTimesTenClassicオブジェクトに関連付けられます。図1-2に、作成されるオブジェクトとそのリンク方法を示します。
作成されるオブジェクトについては、次の各項で説明します。
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
コンテナ: このコンテナはTimesTenttmesg.log
ファイルの内容をstdout
にコピーし、Kubernetesがファイルをログに記録します。これにより、TimesTenインスタンスのデーモン・ログがKubernetesインフラストラクチャによって記録されます。 exporter
コンテナ。このコンテナは、TimesTenエクスポータを実行します。TimesTenエクスポータは、TimesTenメトリックをPrometheusまたはその他のスクレイプ・メカニズムにエクスポートするユーティリティです。
TimesTenコンテナおよびTimesTenエージェントについて
オブジェクトが作成されると、TimesTenコンテナはTimesTenエージェントを構成および起動するスクリプトを実行します。オペレータは、そのポッドでTimesTenを構成、管理および監視するために、各ポッドで実行されているTimesTenエージェントと通信します。エージェントは、オペレータがポッド内のtt
コンテナの問合せおよび制御に使用する、ポッド内のHTTPSエンドポイントを提供します。TimesTenエージェントに障害が発生すると、tt
コンテナは自動的に終了し、Kubernetesによって再生成されます。図1-3に、オペレータとTimesTenエージェント間の双方向通信を示します。
TimesTenエージェントはTimesTenを起動し、インスタンス管理者ユーザーとして実行されます。TimesTenを完全に制御できます。
単純なデプロイメント
TimesTenオペレータは、TimesTen Classicデータベースのアクティブ・スタンバイ・ペアの単純なデプロイメントと、自動障害検出およびリカバリ用に設計されています。たとえば、次のようになります。
-
TimesTenデータベースの新しいレプリケート・ペアをデプロイすることを決定します。
-
それらのデータベースの属性を決定します。
-
それらの属性の構成ファイルを作成します。
-
kubectl
create
コマンドを使用して、レプリケート・ペアを表すTimesTenClassicオブジェクトを作成します。 -
kubectl
get
およびkubectl
describe
コマンドを使用して、アクティブ・スタンバイ・ペアのプロビジョニングを確認します。 -
他のポッドで実行されるアプリケーションは、TimesTenの標準クライアント/サーバー・ドライバを使用してTimesTenデータベースにアクセスします。
障害後に、TimesTenデータベースの継続的な監視、レプリケーションの構成、フェイルオーバーの実行、データベースの再複製を行う必要はありません。TimesTenオペレータはこれらすべての機能を実行し、ユーザーは最小限の労力でデータベースを稼働させることができます。