この章では、ダイレクト・モード・アプリケーションとClient/Serverドライバを使用して、Kubernetesクラスタに存在するTimesTenデータベースにアクセスし、使用する方法について説明します。
トピック:
TimesTenClassicデプロイメントでは、ポッドの内部でダイレクト・モード・アプリケーションを実行できます。構成すると、アクティブ・スタンバイ・ペアの各ポッドは2つ以上のコンテナを実行します。1つのコンテナがTimesTenを実行し、TimesTenエージェントと他のコンテナは選択したアプリケーションを実行します。コンテナで実行されているこれらのアプリケーションは、ダイレクト・モードでTimesTenを使用できます。ダイレクト・モード・アプリケーションの詳細は、Oracle TimesTen In-Memory Databaseオペレーション・ガイドのTimesTenデータベースの管理を参照してください。
TimesTenポッドは、KubernetesのshareProcessNamespaceオプションを使用して作成されます。このオプションを使用すると、同じポッド内の他のコンテナで実行されているダイレクト・モード・アプリケーションが機能します。
ノート: ダイレクト・モードを取り囲む標準のセキュリティ問題は、Kubernetes以外の環境と同様にこの環境に適用されます。アプリケーションをTimesTenとは別のコンテナに分離することは、管理およびアップグレードを容易にするためです。これはセキュリティ障壁のためではなく、追加のセキュリティは提供しません。 |
TimesTenClassicオブジェクトの.spec.template.spec.containers
属性を指定すると、アクティブ・スタンバイ・ペアの各ポッド内に1つ以上のコンテナを作成できます。これらのコンテナは、TimesTenを実行するtt
コンテナに加えて作成されます。コンテナは、指定したコマンドをコンテナ・イメージで実行します。
次の例では、TimesTenClassicオブジェクト(太字で表示)に.spec.template.spec.containers
属性を含める方法を説明します。
apiVersion: timesten.oracle.com/v1 kind: TimesTenClassic metadata: name: directmode spec: ttspec: storageClassName: oci storageSize: 250G image: phx.ocir.io/youraccount/tt1814110:3 imagePullSecret: sekret dbConfigMap: - directmode template: spec: containers: - name: yourapp image: phx.ocir.io/youraccount/yourapplication:1 command: ["/bin/yourapp"] - name: anotherapp image: phx.ocir.io/youraccount/anotherapplication:1 command: ["/bin/anotherapp"]
これらのコンテナには、Kubernetes StatefulSetオブジェクトの.spec.template.spec.containers
属性と同様に、その他のKubernetes構成を指定できます。たとえば、resources
属性を使用して、コンテナのCPUおよびメモリー制限を設定できます。resources
属性の詳細は、ttおよびdaemonlogコンテナのリソース指定を参照してください。オペレータは、指定したコンテナに適切なマウントを自動的に追加します。これにより、コンテナがTimesTenにアクセスできます。
ダイレクト・モードでTimesTenを使用するには、tt
コンテナでのTimesTenの構成方法をアプリケーション・コンテナが認識する必要があります。アプリケーション・コンテナも同様に構成する必要があります。TimesTenコンテナおよび具体的にはtt
コンテナの詳細は、オペレータが機能する方法の理解を参照してください。
特に、次のとおりです。
TimesTenユーザー・グループの名前は、グループID (GID)が333
のoracle
です。TimesTenユーザー・グループの詳細は、Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイドのTimesTenユーザー・グループの理解を参照してください。
TimesTenは、oracle
オペレーティング・システム・ユーザーとして実行されます(UIDは333
)。このoracle
ユーザーはTimesTenグループのメンバーです。
アプリケーションを、GIDが333
のTimesTenグループのメンバーとして実行するように、アプリケーション・コンテナを構成する必要があります。このグループのメンバーのみがダイレクト・モードでTimesTenを実行できます。
ダイレクト・モード・アプリケーションは、UIDが333
のユーザーとして実行できます。ただし、これにより、TimesTenインスタンスに対するアプリケーション・インスタンス管理者権限が付与されます。または、GIDが333
のグループを作成し、プライマリ・グループまたはセカンダリ・グループがそのグループであるが、UIDが333
ではないユーザーを作成することもできます。後者の場合、このユーザーとしてアプリケーションを実行し、ダイレクト・モードでTimesTenを使用できます。その後、ADMIN
権限までのユーザー権限を付与できます。プライマリ・グループとセカンダリ・グループの詳細は、Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイドのLinux/UNIXでのインストールの作成を参照してください。TimesTen権限の詳細は、Oracle TimesTen In-Memory Database SQLリファレンスのシステム権限およびオブジェクト権限を参照してください。
ダイレクト・モード・アプリケーションでは、/tt/home/oracle/instances/instance1
に構成されているTimesTenインスタンスを使用する必要があります。TimesTen環境変数を構成するスクリプトは、/tt/home/oracle/instances/instance1/bin/ttenv.*
にあります。
TimesTenインスタンスにあるファイルは変更しないでください。また、インスタンスの$TIMESTEN_HOME
ディレクトリ・ツリーに新しいファイルは作成しないでください。
構成されたDSNが2つあります。/tt/home/oracle/instances/instance1/conf/sys.odbc.ini
ファイルにあります。1つのDSNにTimesTenClassicオブジェクトの名前があります。2つ目はtt
です。いずれか1つを使用できます。これらは同等です。
/tt/home/oracle/instances/instance1/conf/sys.odbc.ini
ファイルにエントリを追加しないでください。これらのファイルは、オペレータが上書きできます。ただし、アプリケーション・コンテナにある$HOME/.odbc.ini
ファイルに独自のDSNエントリを格納できます。
追加のTimesTenデータベースを作成しないでください。
オペレータではなく、Kubernetesが、ダイレクト・モード・コンテナのライフサイクルの監視および管理を担当します。特に、次のとおりです。
アプリケーションは、(独自のコンテナにある)TimesTenの状態に関係なく、Kubernetesによって起動されます。Kubernetesは、コンテナのライフサイクルを個別に管理します。順序付けされません。アプリケーションでは、TimesTenが使用可能になるまで待機する方法を認識している必要があります。
ダイレクト・モード・アプリケーションは、アクティブなTimesTenデータベースを含むポッド、およびスタンバイTimesTenデータベースを含むポッドで実行されます。アプリケーションでは、ttRepStateGet
組込みプロシージャを使用して、アクティブまたはスタンバイのどちらで実行しているかを判断し、スタンバイ上でそれ自体を停止する必要がある場合があります。ttRepStateGet
組込みプロシージャの詳細は、Oracle TimesTen In-Memory DatabaseリファレンスのttRepStateGetを参照してください。
Kubernetesは、TimesTenデータベースが存在する前またはメモリーにロードされて使用可能になる前に、アプリケーションを起動できます。ダイレクト・モード・アプリケーションは、ポッド内のTimesTenデータベースの状態を検証し、適切に使用する必要があります。
アプリケーションが終了すると、コンテナが終了し、Kubernetesによって別のコンテナが生成されます。これは、tt
コンテナで実行されているTimesTenには影響しません。
Kubernetesクラスタ内の別のポッドで実行されているアプリケーションは、標準のTimesTen Client/Serverドライバを使用してTimesTenデータベースを使用できます。TimesTenクライアント・インスタンスを使用してアプリケーション・コンテナを構成する必要があります。そのインスタンスに構成済の$TIMESTEN_HOME
/conf/sys.odbc.ini
ファイルを含めるか、アプリケーションで適切なClient/Server接続文字列を使用する必要があります。
たとえば、sys.odbc.ini
ファイルを構成することを選択した場合、sys.odbc.ini
のコンテンツにはTimesTenデータベースを実行しているポッドを参照するクライアントDSN定義が含まれます。
この例では、sample
DSNを作成し、default
ネームスペース内のsample
TimesTenClassicオブジェクトを参照します。
% vi $TIMESTEN_HOME/conf/sys.odbc.ini [sample] TTC_SERVER_DSN=sample TTC_SERVER1=sample-0.sample.mynamespace.svc.cluster.local TTC_SERVER2=sample-1.sample.mynamespace.svc.cluster.local
アプリケーションは、このDSNを使用してTimesTenデータベースに接続します。アクティブ・スタンバイ・ペア構成では、TimesTenによってアプリケーション接続がアクティブ・データベースに自動的にルーティングされます。(例として、sample-0
およびsample-1
が使用されています。)
Client/Serverアプリケーションは、定義済のユーザー名とパスワードを使用してデータベースに接続する必要があります。オペレータは、ADMIN
権限を持つこのようなユーザーを作成できます。その後、そのユーザーとしてデータベースに接続し、他のユーザーを作成して、CREATE
SESSION
権限をこれらのユーザーに付与できます。オペレータがADMIN
権限を持つ初期ユーザーを作成する方法の詳細は、構成メタデータおよびKubernetes機能の理解を参照してください。
この例では、接続文字列を使用して、sample
データベースにscott
ユーザーとして接続します。(必要なすべての接続属性を必要とする接続文字列を使用する場合は、sys.odbc.ini
ファイルで定義する必要はありません。)scott
ユーザーはオペレータによって作成され、sample
データベースにすでに存在しています。接続後、scott.emp
表が存在するかどうかを確認できます。(オペレータは以前にこの表も作成しています。オペレータがこの表を作成する方法の詳細は、schema.sqlファイルを参照してください。)
% ttIsqlCS -connstr "TTC_SERVER1=sample-0.sample.mynamespace.svc.cluster.local; TTC_SERVER2=sample-1.sample.mynamespace.svc.cluster.local; TTC_SERVER_DSN=sample;UID=scott;PWD=tiger"; Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "TTC_SERVER1=sample-0.sample.mynamespace.svc.cluster.local; TTC_SERVER_DSN=sample;uid=scott;pwd=********"; Connection successful: DSN=;TTC_SERVER=sample-0.sample.mynamespace.svc.cluster.local; TTC_SERVER_DSN=sample;UID=scott;DATASTORE=/tt/home/oracle/datastore/sample; DATABASECHARACTERSET=AL32UTF8;CONNECTIONCHARACTERSET=US7ASCII;PERMSIZE=200; DDLREPLICATIONLEVEL=3; (Default setting AutoCommit=1) Command> tables; SCOTT.EMP 1 table found.