ダイレクト・モード・アプリケーションの使用について

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には影響しません。