方法1: リクエストと制限に特定のデータ項目を使用する
このアプローチでは、TimesTenオペレータにより、tt
コンテナの適切なmemory
リクエストおよび制限が自動的に決定されます。これは、TimesTenClassicまたはTimesTenScaleoutオブジェクトのデフォルト動作(.spec.ttspec.automaticMemoryRequests
をデフォルトでtrue
に設定)です。
残りのTimesTenコンテナの場合、TimesTenオペレータは、TimesTenClassicおよびTimesTenScaleoutオブジェクト定義の.spec.ttspec
セクションにある特定のデータ項目を使用して、メモリー・リクエストと制限、および各TimesTenコンテナのCPUリクエストと制限を決定します。TimesTenオペレータは、データ項目にデフォルト値を使用するか、指定された値を使用します。例外は、tt
コンテナのCPUリクエストおよび制限です。デフォルトがないため、CPUリクエストおよび制限を定義する場合は、TimesTenClassicおよびTimesTenScaleoutオブジェクトの.spec.ttspec.databaseCPURequest
データ項目に値を手動で指定する必要があります。次に、TimesTenオペレータは、メモリーおよびCPUリクエストと制限に関するこのすべての情報をKubernetesに提供します。
これらのデータ項目(デフォルトを含む)の詳細は、TimesTenClassicSpecSpecおよびTimesTenScaleoutSpecSpecを参照してください。
TimesTenデータベースを保持するtt
コンテナに対するmemory
リクエストの値は必ず正確である必要があります。
tt
コンテナに対するmemory
リクエストは次のことに基づいています。
-
そのデータベース用の共有メモリー: これは、そのデータベースのサイズによって異なります。
-
追加メモリー: これは、そのデータベースの他に必要になるメモリーです。これには、TimesTenデーモン、サブデーモン、エージェント、クライアント/サーバー用に使用されるメモリーが含まれます。
TimesTenオペレータでは、これらの特定のメモリー要件についての、.spec.ttspec.databaseMemorySize
および.spec.ttspec.additionalMemoryRequest
データ項目が用意されています。.spec.ttspec.databaseMemorySize
はデータベースのサイズを指定するために使用し、.spec.ttspec.additionalMemoryRequest
は追加メモリー用に使用します。
TimesTenオペレータによって.spec.ttspec.additionalMemoryRequest
の値が.spec.ttspec.databaseMemorySize
の値に追加されます。この合計が、Kubernetesへのmemory
リクエストおよびmemory
制限です。
TimesTenClassicまたはTimesTenScaleoutオブジェクト用の.spec.ttspec.databaseMemorySize
データ項目を明示的に指定する必要はありません。指定しなかった場合は、TimesTenオペレータによってその適切な値の決定が試みられます。
TimesTenには、データベースの共有メモリー要件を決定するためのttShmSize
ユーティリティが用意されています(そのsys.odbc.ini
エントリが前提)。ttShmSize
の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttShmSizeを参照してください。
sys.odbc.ini
ファイルは、TimesTenオペレータのdb.ini
メタデータ・ファイルと同じです。db.ini
ファイルは、次のいくつかの方法で提供できます:
-
.spec.ttspec.dbConfigMap
で参照されているConfigMapに埋め込みます。 -
.spec.ttspec.dbSecret
で参照されているシークレットに埋め込みます。 -
初期化コンテナを使用します。
メタデータ・ファイルの提供に使用できる機能の詳細は、「/ttconfigディレクトリの移入」を参照してください。
db.ini
メタデータ・ファイルはConfigMapまたはシークレットで提供することをお薦めします。TimesTenオペレータによってTimesTenClassicまたはTimesTenScaleoutオブジェクト内のConfigMapおよびシークレットが確認されます(それが存在する場合)。ConfigMapまたはシークレット内にdb.ini
が見つかった場合は、TimesTenオペレータによって、TimesTenのttShmSize
ユーティリティが使用されて、データベース定義に基づいて、リクエストする適切な共有メモリー量が決定されます。この値は、その後、.spec.ttspec.databaseMemorySize
値に使用されます。この方法では、TimesTenオペレータによってデータベースのサイズが設定されます。
kind: ConfigMap
metadata:
name: resource9
data:
adminUser: |
adminuser/adminuserpwd
schema.sql: |
create user sampleuser identified by sampleuserpwd;
grant admin to sampleuser;
create table sampleuser.a (b number not null primary key, c number, d timestamp);
insert into sampleuser.a values(-1, -1, sysdate);
db.ini: |
Permsize=32768
TempSize=4096
LogBufMB=1024
Connections=2048
DatabaseCharacterSet=AL32UTF8
---
apiVersion: timesten.oracle.com/v2
kind: TimesTenClassic
metadata:
name: recommendedoption
spec:
ttspec:
dbConfigMap:
- option1
storageClassName: standard
storageSize: 200Gi
image: container-registry.oracle.com/timesten/timesten:22.1.1.27.0
imagePullSecret: sekret
prometheus:
insecure: true
この場合は、TimesTenオペレータによって、提供したdb.ini
ファイルに対してttShmSize
が実行され、.spec.ttspec.databaseMemorySize
の値が自動的に決定されます。次に、TimesTenオペレータによってこの値が.spec.ttspec.additionalMemoryRequest
の値に追加されます。この合計が、Kubernetesへのmemory
リクエストおよびmemory
制限です。
初期化コンテナまたはその他のメカニズムを使用することでdb.ini
ファイルを提供した場合は、TimesTenオペレータによって.spec.ttspec.databaseMemorySize
の値を決定することはできません。ポッドがプロビジョニングされ初期化コンテナが実行されるころには、ポッドはすでに作成されており、そのメモリー要件が定義されています。このような場合は、YAMLの一部として.spec.ttspec.databaseMemorySize
を手動で指定する必要があります。
Kubernetesの外部のTimesTenインスタンスでttShmSize
ユーティリティを使用して、.spec.ttspec.databaseMemorySize
の適切な値を特定することをお薦めします。データベースを作成する必要はありません。
この例では、Kubernetesの外部でTimesTenインスタンスを作成し、sys.odbc.ini
ファイル内でdatabase1
という名前でDSNを作成してあると仮定します。PermSize
、TempSize
、LogBufMB
およびConnections
接続属性に対して指定されている値に基づいて、ttShmSize
ユーティリティを使用します。
ttShmSize -connstr "DSN=database1;PermSize=32768;TempSize=4096;LogBufMB=1024;Connections=2048"
The required shared memory size is 39991547720 bytes.
この値は.spec.ttspec.databaseMemorySize
データ項目で指定します。
.spec.ttspec.databaseMemorySize
の計算値を使用する例を見てみましょう。apiVersion: timesten.oracle.com/v2
kind: TimesTenClassic
metadata:
name: init1
spec:
ttspec:
databaseMemorySize: 41Gi
storageClassName: standard
storageSize: 200Gi
image: container-registry.oracle.com/timesten/timesten:22.1.1.27.0
imagePullSecret: sekret
prometheus:
insecure: true
template:
spec:
initContainers:
- name: init1a
command:
- sh
- "-c"
- |
/bin/bash <<'EOF'
echo adminuser/adminuserpwd > /ttconfig/adminUser
echo PermSize=32768 > /ttconfig/db.ini
echo TempSize=4096 > /ttconfig/db.ini
echo LogBufMB=1024 > /ttconfig/db.ini
echo Connections=2048 > /ttconfig/db.ini
echo DatabaseCharacterSet=AL32UTF8 >> /ttconfig/db.ini
ls -l /ttconfig
EOF
volumeMounts:
- name: tt-config
mountPath: /ttconfig
volumes:
- name: tt-config
emptyDir: {}
この場合は、TimesTenオペレータによって、.spec.ttspec.databaseMemorySize
に指定した値が使用されて、TimesTenデータベースを保持する共有メモリー・セグメントのサイズが決められます。次に、TimesTenオペレータによってこの値が.spec.ttspec.additionalMemoryRequest
の値に追加されます。この合計が、Kubernetesへのmemory
リクエストおよびmemory
制限です。
ノート:
TimesTen Scaleoutでは、sys.odbc.ini
ファイル(および対応するdb.ini
ファイル)により、データベース全体ではなく、データベースの単一要素のサイズが定義されます。TimesTenScaleoutオブジェクトをプロビジョニングするときは、TimesTenオペレータによって、TimesTenClassicオブジェクトの場合と同じ方法で、指定したデータが使用されます。