ダイレクト・モード・アプリケーションの使用について
TimesTenClassicデプロイメントおよびTimesTenScaleoutデプロイメントでは、ポッドの内部でダイレクト・モード・アプリケーションを実行できます。ダイレクト・モード・アプリケーションの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースの管理を参照してください。
TimesTenポッドは、KubernetesのshareProcessNamespaceオプションを使用して作成されます。このオプションを使用すると、同じポッド内の他のコンテナで実行されているダイレクト・モード・アプリケーションが正しく機能します。
ノート:
ダイレクト・モードを取り囲む標準のセキュリティ問題は、Kubernetes以外の環境と同様にこの環境に適用されます。アプリケーションをTimesTenとは別のコンテナに分離することは、管理およびアップグレードを容易にするためです。これはセキュリティ障壁のためではなく、追加のセキュリティは提供しません。
TimesTenClassicオブジェクトの.spec.template.spec.containers
属性またはTimesTenScaleoutオブジェクトの.spec.dataTemplate.spec.containers
を使用して、tt
コンテナを実行する各TimesTenポッド内に1つ以上のコンテナを作成します。このようなコンテナは、TimesTenを実行するtt
コンテナに加えて作成されます。
次の例では、TimesTenClassicオブジェクト定義に.spec.template.spec.containers
属性を含める方法を説明します。TimesTenScaleoutオブジェクトの場合、template
を1つ以上のdataTemplate
に置き換えます。
apiVersion: timesten.oracle.com/v2 kind: TimesTenClassic metadata: name: directmode spec: ttspec: storageClassName: oci-bv storageSize: 250Gi image: container-registry.oracle.com/timesten/timesten:22.1.1.27.0 imagePullSecret: sekret dbConfigMap: - directmode template: spec: containers: - name: yourapp image: phx.ocir.io/youraccount/yourapplication:2 command: ["/bin/yourapp"] - name: anotherapp image: phx.ocir.io/youraccount/anotherapplication:2 command: ["/bin/anotherapp"]
これらのコンテナには、その他のKubernetes構成を指定できます。
オペレータは、コンテナに適切なマウントを自動的に追加します。これにより、コンテナはTimesTenにアクセスできます。
ダイレクト・モードでTimesTenを使用するには、tt
コンテナでのTimesTenの構成方法をアプリケーション・コンテナが認識する必要があります。アプリケーション・コンテナも同様に構成する必要があります。
具体的には、次のとおりです。
-
TimesTenユーザー・グループの名前を把握しておく必要があります。
container-registry.oracle.com/timesten
にあるコンテナ・イメージを使用している場合、TimesTenユーザー・グループの名前はtimesten
です。TimesTenコンテナ・イメージを作成し、timesten
のデフォルトを変更した場合は、コンテナ・イメージを作成したときに使用した名前を使用してください。 -
TimesTenを実行するLinuxオペレーティング・システム・ユーザーの名前を把握しておく必要があります。デフォルトは
timesten
です。前の箇条書きで説明したように、このデフォルトを変更した場合は、コンテナ・イメージを作成したときに使用した名前を使用してください。 -
アプリケーションをTimesTenユーザー・グループのメンバーとして実行するように、アプリケーション・コンテナを構成する必要があります。このグループのメンバーのみがダイレクト・モードでTimesTenを実行できます。
-
ダイレクト・モード・アプリケーションは、TimesTenを実行するTimesTenユーザーと同じUIDのユーザーとして実行できます(
3429
はデフォルトです)。ただし、これにより、TimesTenインスタンスに対するアプリケーション・インスタンス管理者権限が付与されます。または、TimesTenユーザー・グループのGIDと同じGIDを持つグループを作成し、プライマリ・グループまたはセカンダリ・グループがそのグループであるが、UIDがTimesTenを実行しているTimesTenユーザーのUIDではないユーザーを作成できます。この場合、アプリケーションをこのユーザーとして実行し、ダイレクト・モードでTimesTenを使用することもできます。その後、このユーザーにADMIN
権限までの権限を付与できます。プライマリ・グループとセカンダリ・グループの詳細は、『Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイド』のLinux/UNIXでのインストールの作成を参照してください。TimesTen権限の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』のシステム権限およびオブジェクト権限を参照してください。 -
ダイレクト・モード・アプリケーションでは、
/tt/home/timesten/instances/instance1
に構成されているTimesTenインスタンスを使用する必要があります。TimesTen環境変数を構成するスクリプトは、/tt/home/timesten/instances/instance1/bin/ttenv.*
にあります。 -
TimesTenインスタンスにあるファイルは変更しないでください。また、インスタンスの
$TIMESTEN_HOME
ディレクトリ・ツリーに新しいファイルは作成しないでください。 -
/tt/home/timesten/instances/instance1/conf/sys.odbc.ini
ファイルにエントリを追加しないでください。これらのファイルは、オペレータが上書きできます。ただし、アプリケーション・コンテナにある$HOME/.odbc.ini
ファイルに独自のDSNエントリを格納できます。 -
追加のTimesTenデータベースを作成しないでください。
オペレータではなく、Kubernetesが、ダイレクト・モード・コンテナのライフサイクルの監視および管理を担当します。具体的には、次のとおりです。
-
アプリケーションは、(独自のコンテナにある)TimesTenの状態に関係なく、Kubernetesによって起動されます。Kubernetesは、コンテナのライフサイクルを個別に管理します。順序付けされません。アプリケーションでは、TimesTenが使用可能になるまで待機する方法を認識している必要があります。
-
レプリケートされたTimesTenClassicオブジェクトの場合、ダイレクト・モード・アプリケーションは、アクティブTimesTenデータベースを含むポッド、およびスタンバイTimesTenデータベースを含むポッドで実行されます。アプリケーションでは、
ttRepStateGet
組込みプロシージャを使用して、アクティブまたはスタンバイのどちらで実行しているかを判断し、スタンバイ上でそれ自体を停止する必要がある場合があります。ttRepStateGet
組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttRepStateGetを参照してください。 -
Kubernetesは、TimesTenデータベースが存在する前またはメモリーにロードされて使用可能になる前に、アプリケーションを起動できます。ダイレクト・モード・アプリケーションは、ポッド内のTimesTenデータベースの状態を検証し、適切に使用する必要があります。
-
アプリケーションが終了すると、コンテナが終了し、Kubernetesによって別のコンテナが生成されます。これは、
tt
コンテナで実行されているTimesTenには影響しません。