プライマリ・コンテンツに移動
Oracle® TimesTen In-Memory Database Kubernetesオペレータ・ユーザーズ・ガイド
リリース18.1
F33742-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

4 TimesTenデータベースのデプロイ

この章では、TimesTenデータベースのアクティブ・スタンバイ・ペアをデプロイするプロセスについて説明します。環境でTimesTenClassicオブジェクトを作成するプロセスについて説明します。また、TimesTenデータベースのアクティブ・スタンバイ・ペアのプロビジョニングを監視する方法を示す例も提供します。この章では最後に、データベースに接続してデータベースで操作を実行する方法を示す例を説明します。

トピック:

デプロイメント・プロセスの理解

TimesTenオペレータは、Kubernetes APIを拡張してTimesTenClassicオブジェクト・タイプを提供します。このタイプによって、TimesTenデータベースをKubernetesクラスタに正常にデプロイするために必要な定義が提供されます。これらの定義を特定の環境用にカスタマイズします。具体的には、YAMLファイルを作成し、その中にTimesTenClassicオブジェクトに必要なTimesTenClassic定義を指定します。これらの定義のフィールドに値を割り当てることにより、デプロイメント環境をカスタマイズおよび定義します。たとえば、storageClassNameフィールドにoci値を指定すると、使用する記憶域クラスの名前がオペレータに通知されます。オブジェクトの定義およびYAMLファイルで定義するフィールドについては、第11章「TimesTenClassicオブジェクト・タイプ」を参照してください。

YAMLファイルの例は、ConfigMapとシークレット、初期化コンテナおよびその他の構成オプションについて説明したときに以前に紹介しました。(ConfigMapおよびシークレットの詳細は、ConfigMapおよびシークレットの使用を参照してください。また、その他の構成オプションについては、初期化コンテナの使用およびその他の構成オプションを参照してください。)ただし、TimesTenClassicオブジェクトの定義および作成では、TimesTenClassicオブジェクトの定義方法を詳細に説明しています。

YAMLファイルで構成を指定した後、Linux開発ホストからkubectl createコマンドを使用して、対応するTimesTenClassicオブジェクトをクラスタに作成します。このコマンドを発行した後、TimesTenデータベースのアクティブ・スタンバイ・ペアをデプロイするプロセスが開始されます。このプロセスを表示するには、kubectl getコマンドとkubectl describeコマンドを発行します(kubectl get podskubectl describe timestenclassicなど)。データベースがデプロイされたら、アクティブ・データベースに接続して問合せを発行し、他の操作を実行してデータベースが正常に機能していることを確認できます。

TimesTenClassicオブジェクトの定義および作成

環境を定義するには、環境用にカスタマイズされた属性を使用してTimesTenClassicオブジェクトを作成する必要があります。フィールドには、イメージ・プル・シークレットの名前、TimesTenイメージの名前、およびTimesTenデータベースを正常にデプロイするために必要なその他の定義が含まれます。TimesTenClassicタイプのオブジェクトの定義の詳細は、TimesTenClassicオブジェクト・タイプを参照してください。

TimesTenClassicオブジェクトを定義および作成するには、次のステップを実行します。

  1. 空のYAMLファイルを作成します。任意の名前を選択できますが、TimesTenClassicオブジェクトに使用した名前と同じ名前を使用することもできます。(この例では、sampleです。)YAMLファイルには、TimesTenClassicオブジェクトの定義が格納されています。このYAMLファイルで指定する必要があるフィールド、およびオプションのフィールドの詳細は、TimesTenClassicSpecSpecを参照してください。

    この例では、次のものを置き換えます。(置き換えることができる値は太字で表示されています。)

    • name: sampleを、TimesTenClassicオブジェクトの名前に置き換えます。

    • storageClassName: ociを、TimesTenを保持するためのPersistentVolumesの割当てに使用される記憶域クラスの名前に置き換えます。

    • storageSize: 250Gを、各ポッドがTimesTenを保持するために要求する必要がある記憶域の量に置き換えます。(この例は、本番環境を想定しているため、250Gの記憶域を使用します。デモ用の場合は、50Gの記憶域を使用できます。詳細は、表11-3「TimesTenClassicSpecSpec」storageSizeエントリとlogStorageSizeエントリを参照してください)。

    • image: phx.ocir.io/youraccount/tt1814110:3は、イメージ・レジストリの場所(phx.ocir.io/youraccount)とTimesTenが含まれているイメージ(tt1814110:3)に置き換えます。

    • imagePullSecret: sekretを、KubernetesがTimesTenイメージをフェッチするために使用するイメージ・プル・シークレットに置き換えます。

    • dbConfigMap: この例では、db.iniadminUserおよびschema.sqlメタデータ・ファイルに1つのConfigMap (sampleという名前)を使用します。このConfigMapはProjectedVolumeに組み込まれます。このボリュームはTimesTenコンテナに/ttconfigとしてマウントされます。ConfigMapの詳細は、ConfigMapおよびシークレットの使用および1つのConfigMapを使用する例を参照してください。

    % vi sample.yaml
    
    apiVersion: timesten.oracle.com/v1
    kind: TimesTenClassic
    metadata:
      name: sample
    spec:
      ttspec:
        storageClassName: oci
        storageSize: 250G
        image: phx.ocir.io/youraccount/tt1814110:3
        imagePullSecret: sekret
        dbConfigMap:
        - sample
    
  2. kubectl createコマンドを使用して、YAMLファイル(この例ではsample.yaml)のコンテンツからTimesTenClassicオブジェクトを作成します。これにより、KubernetesクラスタにあるTimesTenデータベースのアクティブ・スタンバイ・ペアをデプロイするプロセスが開始されます。

    % kubectl create -f sample.yaml
    timestenclassic.timesten.oracle.com/sample created
    

KubernetesクラスタにTimesTenClassicオブジェクトを正常に作成しました。TimesTenデータベースをデプロイするプロセスが開始されますが、まだ完了していません。

アクティブ・スタンバイ・ペアのデプロイメントの進捗状況の監視

様々なkubectlコマンドを使用して、アクティブ・スタンバイ・ペアのデプロイメントの進行状況を監視できます。デプロイメントが完了して成功したら、データベースに接続して操作を実行し、正常に動作していることを確認できます。

TimesTenClassicの状態の監視

kubectl getコマンドとkubectl describeコマンドを使用して、プロビジョニング時にアクティブ・スタンバイ・ペアの進捗状況を監視します。


ノート:

kubectl get timestenclassicコマンドとkubectl describe timestenclassicの場合、かわりにkubectl get ttckubectl describe ttcをそれぞれ指定できます。timestenclassicttcは、これらのコマンドで使用される場合同義であり、同じ結果を返します。この章の最初のkubectl getおよび最初のkubectl describeの例では、timestenclassicを使用しています。このマニュアルの残りの例では、簡略化のためにttcを使用しています。

  1. kubectl getコマンドを使用して、STATEフィールドを確認します。値がInitializingであることを確認します。アクティブ・スタンバイ・ペアのプロビジョニングが開始しましたが、まだ完了していません。

    % kubectl get timestenclassic sample
    NAME     STATE          ACTIVE   AGE
    sample   Initializing   None     11s
    
  2. kubectl describeコマンドを使用して、初期プロビジョニングを詳細に表示します。

    % kubectl describe timestenclassic sample
    Name:         sample
    Namespace:    mynamespace
    Labels:       <none>
    Annotations:  <none>
    API Version:  timesten.oracle.com/v1
    Kind:         TimesTenClassic
    Metadata:
      Creation Timestamp:  2020-05-31T15:35:12Z
      Generation:          1
      Resource Version:    20231755
      Self Link: 
    /apis/timesten.oracle.com/v1/namespaces/mynamespace/timestenclassics/sample
      UID:                 517a8646-a354-11ea-a9fb-0a580aed5e4a
    Spec:
      Ttspec:
        Db Config Map:
          sample
        Image:               phx.ocir.io/youraccount/tt1814110:3
        Image Pull Policy:   Always
        Image Pull Secret:   sekret
        Storage Class Name:  oci
        Storage Size:        250G
    Status:
      Active Pods:       None
      High Level State:  Initializing
      Last Event:        3
      Pod Status:
        Cache Status:
          Cache Agent:        Down
          Cache UID Pwd Set:  false
          N Cache Groups:     0
        Db Status:
          Db:            Unknown
          Db Id:         0
          Db Updatable:  Unknown
        Initialized:     true
        Pod Status:
          Agent:                Down
          Last Time Reachable:  0
          Pod IP:
          Pod Phase:            Pending
        Replication Status:
          Last Time Rep State Changed:  0
          Rep Agent:                    Down
          Rep Peer P State:             Unknown
          Rep Scheme:                   Unknown
          Rep State:                    Unknown
        Times Ten Status:
          Daemon:          Down
          Instance:        Unknown
          Release:         Unknown
        Admin User File:   false
        Cache User File:   false
        Cg File:           false
        High Level State:  Down
        Intended State:    Active
        Name:              sample-0
        Schema File:       false
        Cache Status:
          Cache Agent:        Down
          Cache UID Pwd Set:  false
          N Cache Groups:     0
        Db Status:
          Db:            Unknown
          Db Id:         0
          Db Updatable:  Unknown
        Initialized:     true
        Pod Status:
          Agent:                Down
          Last Time Reachable:  0
          Pod IP:
          Pod Phase:            Pending
        Replication Status:
          Last Time Rep State Changed:  0
          Rep Agent:                    Down
          Rep Peer P State:             Unknown
          Rep Scheme:                   Unknown
          Rep State:                    Unknown
        Times Ten Status:
          Daemon:            Down
          Instance:          Unknown
          Release:           Unknown
        Admin User File:     false
        Cache User File:     false
        Cg File:             false
        High Level State:    Unknown
        Intended State:      Standby
        Name:                sample-1
        Schema File:         false
      Rep Create Statement:  create active standby pair "sample" on 
     "sample-0.sample.mynamespace.svc.cluster.local", "sample" on 
     "sample-1.sample.mynamespace.svc.cluster.local" NO RETURN store "sample" on 
     "sample-0.sample.mynamespace.svc.cluster.local" PORT 4444 FAILTHRESHOLD 0 
     store "sample" on "sample-1.sample.mynamespace.svc.cluster.local" PORT 4444 
     FAILTHRESHOLD  0
      Rep Port:              4444
      Status Version:        1.0
    Events:
      Type  Reason  Age   From       Message
      ----  ------  ----  ----       -------
      -     Create  50s   ttclassic  Secret tt517a8646-a354-11ea-a9fb-0a580aed5e4a
     created
      -     Create  50s   ttclassic  Service sample created
      -     Create  50s   ttclassic  StatefulSet sample created
    
  3. kubectl getコマンドを再度使用して、STATEフィールドの値が変更されているかどうかを確認します。この例では、この値はNormalで、データベースのアクティブ・スタンバイ・ペアがプロビジョニングされ、プロセスが完了したことを示しています。

    % kubectl get ttc sample
    NAME     STATE    ACTIVE     AGE
    sample   Normal   sample-0   3m5s
    
  4. kubectl describeコマンドを再度使用して、アクティブ・スタンバイ・ペアのプロビジョニングを詳細に表示します。

    ノート: この例では、now Normal行が独立した行に表示されています。実際の出力では、この行は独立した行として表示されるのではなく、前のStateChangeの行の最後に表示されます。

    % kubectl describe ttc sample
    Name:         sample
    Namespace:    mynamespace
    Labels:       <none>
    Annotations:  <none>
    API Version:  timesten.oracle.com/v1
    Kind:         TimesTenClassic
    Metadata:
      Creation Timestamp:  2020-05-31T15:35:12Z
      Generation:          1
      Resource Version:    20232668
      Self Link:
    /apis/timesten.oracle.com/v1/namespaces/mynamespace/timestenclassics/sample 
      UID:                 517a8646-a354-11ea-a9fb-0a580aed5e4a
    Spec:
      Ttspec:
        Db Config Map:
          sample
        Image:               phx.ocir.io/youraccount/tt1814110:3
        Image Pull Policy:   Always
        Image Pull Secret:   sekret
        Storage Class Name:  oci
        Storage Size:        250G
    Status:
      Active Pods:       sample-0
      High Level State:  Normal
      Last Event:        35
      Pod Status:
        Cache Status:
          Cache Agent:        Not Running
          Cache UID Pwd Set:  true
          N Cache Groups:     0
        Db Status:
          Db:            Loaded
          Db Id:         26
          Db Updatable:  Yes
        Initialized:     true
        Pod Status:
          Agent:                Up
          Last Time Reachable:  1590939597
          Pod IP:               192.0.2.1
          Pod Phase:            Running
        Replication Status:
          Last Time Rep State Changed:  0
          Rep Agent:                    Running
          Rep Peer P State:             start
          Rep Scheme:                   Exists
          Rep State:                    ACTIVE
        Times Ten Status:
          Daemon:          Up
          Instance:        Exists
          Release:         18.1.4.11.0
        Admin User File:   true
        Cache User File:   false
        Cg File:           false
        High Level State:  Healthy
        Intended State:    Active
        Name:              sample-0
        Schema File:       true
        Cache Status:
          Cache Agent:        Not Running
          Cache UID Pwd Set:  true
          N Cache Groups:     0
        Db Status:
          Db:            Loaded
          Db Id:         26
          Db Updatable:  No
        Initialized:     true
        Pod Status:
          Agent:                Up
          Last Time Reachable:  1590939597
          Pod IP:               192.0.2.2
          Pod Phase:            Running
        Replication Status:
          Last Time Rep State Changed:  1590939496
          Rep Agent:                    Running
          Rep Peer P State:             start
          Rep Scheme:                   Exists
          Rep State:                    STANDBY
        Times Ten Status:
          Daemon:            Up
          Instance:          Exists
          Release:           18.1.4.11.0
        Admin User File:     true
        Cache User File:     false
        Cg File:             false
        High Level State:    Healthy
        Intended State:      Standby
        Name:                sample-1
        Schema File:         true
      Rep Create Statement:  create active standby pair "sample" on 
    "sample-0.sample.mynamespace.svc.cluster.local", "sample" on 
    "sample-1.sample.mynamespace.svc.cluster.local" NO RETURN store "sample" on 
    "sample-0.sample.mynamespace.svc.cluster.local" PORT 4444 FAILTHRESHOLD 0 
    store "sample" on "sample-1.sample.mynamespace.svc.cluster.local" PORT 4444 
    FAILTHRESHOLD 0
      Rep Port:              4444
      Status Version:        1.0
    Events:
      Type  Reason       Age    From       Message
      ----  ------       ----   ----       -------
      -     Create       4m43s  ttclassic  Secret 
    tt517a8646-a354-11ea-a9fb-0a580aed5e4a created
      -     Create       4m43s  ttclassic  Service sample created
      -     Create       4m43s  ttclassic  StatefulSet sample created
      -     StateChange  3m47s  ttclassic  Pod sample-0 Daemon Unknown
      -     StateChange  3m47s  ttclassic  Pod sample-0 CacheAgent Unknown
      -     StateChange  3m47s  ttclassic  Pod sample-0 RepAgent Unknown
      -     StateChange  3m47s  ttclassic  Pod sample-1 Daemon Unknown
      -     StateChange  3m47s  ttclassic  Pod sample-1 CacheAgent Unknown
      -     StateChange  3m47s  ttclassic  Pod sample-1 RepAgent Unknown
      -     StateChange  3m26s  ttclassic  Pod sample-0 Agent Up
      -     StateChange  3m26s  ttclassic  Pod sample-0 Release 18.1.4.11.0
      -     StateChange  3m26s  ttclassic  Pod sample-0 Daemon Down
      -     StateChange  3m26s  ttclassic  Pod sample-1 Agent Up
      -     StateChange  3m26s  ttclassic  Pod sample-1 Release 18.1.4.11.0
      -     StateChange  3m26s  ttclassic  Pod sample-1 Daemon Down
      -     StateChange  3m26s  ttclassic  Pod sample-0 Daemon Up
      -     StateChange  3m25s  ttclassic  Pod sample-1 Daemon Up
      -     StateChange  2m13s  ttclassic  Pod sample-0 RepState IDLE
      -     StateChange  2m13s  ttclassic  Pod sample-0 Database Updatable
      -     StateChange  2m13s  ttclassic  Pod sample-0 CacheAgent Not Running
      -     StateChange  2m13s  ttclassic  Pod sample-0 RepAgent Not Running
      -     StateChange  2m13s  ttclassic  Pod sample-0 RepScheme None
      -     StateChange  2m13s  ttclassic  Pod sample-0 Database Loaded
      -     StateChange  2m11s  ttclassic  Pod sample-0 RepAgent Running
      -     StateChange  2m10s  ttclassic  Pod sample-0 RepScheme Exists
      -     StateChange  2m10s  ttclassic  Pod sample-0 RepState ACTIVE
      -     StateChange  113s   ttclassic  Pod sample-1 Database Loaded
      -     StateChange  113s   ttclassic  Pod sample-1 Database Not Updatable
      -     StateChange  113s   ttclassic  Pod sample-1 CacheAgent Not Running
      -     StateChange  113s   ttclassic  Pod sample-1 RepAgent Not Running
      -     StateChange  113s   ttclassic  Pod sample-1 RepScheme Exists
      -     StateChange  113s   ttclassic  Pod sample-1 RepState IDLE
      -     StateChange  106s   ttclassic  Pod sample-1 RepAgent Running
      -     StateChange  101s   ttclassic  Pod sample-1 RepState STANDBY
      -     StateChange  101s   ttclassic  TimesTenClassic was Initializing, 
    now Normal
    

TimesTenデータベースのアクティブ・スタンバイ・ペアが(Normalで示されているように)正常にデプロイされました。アクティブ・スタンバイ・ペアとして構成された2つのTimesTenデータベースがあります。1つのデータベースがアクティブです。(この例では、Rep State ACTIVEで示されているように、sample-0がアクティブ・データベースです。)もう1つのデータベースはスタンバイです。(この例では、Rep State STANDBYで示されているように、sample-1はスタンバイ・データベースです。)アクティブ・データベースは、変更および問合せできます。アクティブ・データベースで行われた変更は、スタンバイ・データベースにレプリケートされます。アクティブ・データベースで障害が発生した場合、オペレータは自動的にスタンバイ・データベースをアクティブに昇格させます。以前のアクティブ・データベースは修復または置換され、スタンバイになります。

基礎となるオブジェクトが存在するかどうかの確認

オペレータは、その他の基礎となるオブジェクトを自動的に作成します。これらのオブジェクトが作成されていることを確認します。

  1. StatefulSet:

    % kubectl get statefulset sample
    NAME     READY   AGE
    sample   2/2     8m21s
    
  2. サービス:

    % kubectl get service sample
    NAME     TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
    sample   ClusterIP   None         <none>        6625/TCP   9m28s
    
  3. ポッド:

    % kubectl get pods
    NAME                                        READY   STATUS    RESTARTS   AGE
    sample-0                                    2/2     Running   0          10m
    sample-1                                    2/2     Running   0          10m
    timestenclassic-operator-5d7dcc7948-8mnz4   1/1     Running   0          11h
    
  4. PersistentVolumeClaims (PVC):

    % kubectl get pvc
    NAME                         STATUS   VOLUME 
    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    tt-persistent-sample-0       Bound
    ocid1.volume.oc1.phx.abyhqljrbxcgzyixa4pmmcwiqxgqclc7gxvdnoty367w2qn26tij6kfpx
    6qq
    250Gi       RWO            oci            10m
    tt-persistent-sample-1       Bound
    ocid1.volume.oc1.phx.abyhqljtt4qxxoj5jqiskriskh66hakaw326rbza4uigmuaezdnu53qhh
    oaa
    250Gi       RWO            oci            10m
    

アクティブ・データベースへの接続の確認

kubectl execコマンドを実行して、ポッドのシェルを起動し、それらのポッドで実行されているTimesTenを制御できます。TimesTenは、ポッドでoracleユーザーとして実行されます。ポッドでシェルを確立したら、su - oracleコマンドを使用してoracleユーザーに切り替えます。oracleユーザーに切り替えた後、sampleデータベースに接続できること、およびメタデータ・ファイルの情報が正しいことを確認します。オプションで、データベースまたは他の操作に対して問合せを実行できます。

  1. ポッドでシェルを確立し、oracleユーザーに切り替えます。

    % kubectl exec -it sample-0 -c tt -- /usr/bin/su - oracle 
    
  2. sampleデータベースに接続します。メタデータ・ファイルの情報がデータベースに正しく存在していることを確認します。たとえば、scottユーザーとしてデータベースへの接続を試みます。200PermSize値が正しいことを確認します。scott.emp表が存在することを確認します。

     % ttIsql sample
     
    Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
    Type ? or "help" for help, type "exit" to quit ttIsql.
     
     
     
    connect "DSN=sample";
    Connection successful:
    DSN=sample;UID=oracle;DataStore=/tt/home/oracle/datastore/sample;
    DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;PermSize=200;
    DDLReplicationLevel=3;
    (Default setting AutoCommit=1)
    
    Command> connect adding "uid=scott;pwd=tiger" as scott;
    Connection successful:
    DSN=sample;UID=scott;DataStore=/tt/home/oracle/datastore/sample;
    DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;PermSize=200;
    DDLReplicationLevel=3;
    (Default setting AutoCommit=1)
    scott: Command> tables;
      SCOTT.EMP
    1 table found.