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

前
 
次
 

2 環境の設定

この章では、TimesTenオペレータの設定プロセスについて説明します。

何もルートとして実行できない環境では、オペレータを使用できます。これが目的の環境である場合、このような環境を設定する手順は、付録C「非ルートとしてコンテナを実行」を参照してください。付録の手順を実行することを選択した場合は、この章の手順を実行する必要はありません。

トピック:

前提条件

TimesTenオペレータをインストールする前に、次の前提条件を満たすようにします。

  • 稼働中のKubernetesクラスタがあることを確認します。

    • オペレータとCRDは、クイック作成を使用してプロビジョニングされたクラスタでOracle Cloud Infrastructure Container Engine for Kubernetes (OKEと呼ばれる)を使用して開発されています。(OKEリリース1.14以降)。オペレータとCRDの詳細は、TimesTenオペレータの概要を参照してください。

    • クラスタでは、PersistentVolumesをリクエストするために使用できるStorageClassを提供する必要があります。TimesTenを実行する各ポッドは、PersistentVolumeを使用して、管理対象のTimesTenデータベースを格納します。この記憶域クラスの名前を知っている必要があります。たとえば、OKEではoci記憶域クラスを使用できます。記憶域クラスの詳細は、次を参照してください。

      https://kubernetes.io/docs/concepts/storage/storage-classes/

    • クラスタ内のノードは、NTPまたは他の方法でクロックが同期している必要があります。

  • KubernetesクラスタにアクセスするためのLinux開発ホストがあることを確認します。この開発ホストは、Kubernetesクラスタの外部にある必要があり、このホストからKubernetesクラスタにアクセスして制御できる必要があります。それには、次のものをインストールする必要があります。

    • kubectlコマンドライン・ツール: kubectlコマンドライン・ツールを使用して、Kubernetesクラスタを制御および管理します。

    • dockerコマンドライン・ツール: dockerコマンドライン・ツールを使用してイメージを作成し、そのイメージをイメージ・レジストリにプッシュします。

  • イメージ・レジストリにアクセスできることを確認します。

    • Kubernetesクラスタでコンテナを実行するには、イメージ・レジストリが必要です。このレジストリを使用して、Kubernetesで実行されるコンテナ・イメージを格納します。たとえば、OKEでKubernetesクラスタを使用する際には、Oracle Container Image Registry (OCIR)の使用を検討できます。他のイメージ・レジストリも使用できます。

    • 開発ホストは、docker pushコマンドを使用して、レジストリにイメージをプッシュできる必要があります。

    • Kubernetesクラスタは、イメージ・プル・シークレットを使用してレジストリからイメージをプルできる必要があります。

    • ベース・オペレーティング・システムのイメージをイメージ・レジストリから取得できる必要があります。

TimesTenおよびTimesTenオペレータのダウンロード

TimesTenオペレータを使用するには、TimesTenフル・ディストリビューションをLinux-64ビットにダウンロードする必要があります。

次のステップを実行して、TimesTenのフル・ディストリビューションをダウンロードし、その中に埋め込まれているTimesTenオペレータのディストリビューションを解凍します。すべてのステップをLinux開発ホストから実行します。

  1. 選択したディレクトリから次のことを実行します。

    • TimesTenのフル・ディストリビューションをダウンロードするサブディレクトリを1つ作成します。たとえば、installation_dirサブディレクトリを作成します。(このマニュアルではこれ以降、installation_dirディレクトリを使用します。)

    • TimesTenオペレータのディストリビューションを解凍する2つ目のサブディレクトリを作成します。たとえば、kube_filesサブディレクトリを作成します。(このマニュアルではこれ以降、このkube_filesディレクトリを使用します。)

    % mkdir -p installation_dir
    % mkdir -p kube_files
    

    これで、TimesTenのフル・ディストリビューションをダウンロードして解凍する準備ができました。

  2. installation_dirに移動します。

    % cd installation_dir
    

    このディレクトリにTimesTenのフル・ディストリビューションをダウンロードします。例として、timesten1814110.server.linux8664.zipファイル(Linux 64ビットの18.1.4.11.0フル・ディストリビューション)をダウンロードします。

  3. installation_dirから、ZIPユーティリティを使用してTimesTenのディストリビューションを解凍します。

    % unzip timesten1814110.server.linux8664.zip
    Archive:  /timesten/installation/timesten1814110.server.linux8664.zip
       creating: tt18.1.4.11.0/
       creating: tt18.1.4.11.0/ttoracle_home/
    ...
       creating: tt18.1.4.11.0/kubernetes/
    ...
    

    TimesTenのフル・ディストリビューションを正常に解凍しました。

    installation_dir/tt18.1.4.11.0/kubernetesディレクトリが作成されることに注意してください。operator.zipファイルは、このディレクトリにあります。たとえば、分散を解凍した後のディレクトリ構造の例を次に示します。

    % pwd
    installation_dir/tt18.1.4.11.0
    % dir
    3rdparty  include     lib      oraclescripts  README.html  ttoracle_home
    bin       info        network  PERL           startup
    grid      kubernetes  nls      plsql          support
    
  4. kube_filesディレクトリに移動し、operator.zipファイルをそのディレクトリに解凍します。この例では、installation_dir/tt18.1.4.11.0/kubernetes/operator.zipファイルを解凍します。

    % cd kube_files
    % unzip installation_dir/tt18.1.4.11.0/kubernetes/operator.zip
    [...UNZIP OUTPUT...]
    

    installation_dir/tt18.1.4.11.0/kubernetes/operator.zipファイルをkube_filesディレクトリに正常に解凍しました。

  5. ディレクトリ構造を確認します。この章の後半で、これらのサブディレクトリ内のファイルをいくつか変更します。この例では、リリースごとに変更される可能性がある最も重要なサブディレクトリとファイルを示します。

    README.md
    deploy/crd.yaml
    deploy/operator.yaml
    deploy/service_account.yaml
    operator/Dockerfile
    operator/timestenclassic-operator
    ttimage/agent2
    ttimage/.bashrc
    ttimage/create1.sql
    ttimage/create2.sql
    ttimage/Dockerfile
    ttimage/get1.sql
    ttimage/pausecq.sql
    ttimage/repcreate.sql
    ttimage/repduplicate.sql
    ttimage/runsql,sql
    ttimage/starthost.pl
    ttimage/.ttdotversion
    ttimage/.ttdrop
    

    ノート:

    このディレクトリ・ツリーは、TimesTenオペレータの存続期間中存続している必要があります。

    また、TimesTenのフル・ディストリビューション・ファイル(この例ではtimesten1814110.server.linux8664.zip)は削除しないでください。このファイルは次の場所にコピーする必要があります。

    • オペレータ・イメージを作成し、イメージをイメージ・レジストリにプッシュするための/operatorディレクトリ。詳細は、オペレータ・イメージの作成を参照してください。

    • TimesTenイメージをビルドし、イメージをイメージ・レジストリにプッシュするための/ttimageディレクトリ。詳細は、TimesTenイメージの作成を参照してください。


TimesTenオペレータのディストリビューションを正常にダウンロードし、展開しました。

Kubernetesの構成

オペレータは、Kubernetesサービス・アカウントを使用して実行されます。このサービス・アカウントにはネームスペースでの権限が必要です。これらの権限は、ロールを介して付与されます。service_account.yamlファイルは、サービス・アカウントとロールをネームスペースに追加し、ロールで指定された権限をサービス・アカウントに付与します。service_account.yamlファイルは、以前に解凍したoperator.zipファイルに含まれています。

次のステップを実行します。

  1. kube_files/deployディレクトリに移動します。

    % cd kube_files/deploy
    
  2. サービス・アカウントを作成します。

    % kubectl create -f service_account.yaml
    role.rbac.authorization.k8s.io/timestenclassic-operator created
    serviceaccount/timestenclassic-operator created
    rolebinding.rbac.authorization.k8s.io/timestenclassic-operator created
    

service_account.yamlファイルによって、timestenclassic-operatorサービス・アカウントとtimestenclassic-operatorロールがネームスペースに作成され、ロールで指定されている権限がサービス・アカウントに付与されました。

TimesTenClassic CRDのデプロイ

Kubernetesは、ポッドやStatefulSetsなどのオブジェクトをサポートしています。Kubernetes APIを拡張して、カスタマイズされたオブジェクト・タイプを作成できます。このステップでは、TimesTenClassicという新しいオブジェクト・タイプをクラスタに追加します。

kube_files/deployディレクトリに移動し、kubectl createコマンドを使用して、TimesTenClassicのカスタマイズされたリソース定義(CRD)をKubernetesクラスタに作成します。

% cd kube_files/deploy
% kubectl create -f crd.yaml
customresourcedefinition.apiextensions.k8s.io/
timestenclassics.timesten.oracle.com created

TimesTenClassicオブジェクト・タイプをKubernetesクラスタに正常に追加しました。

オペレータ・イメージの作成

Kubernetesオペレータは、カスタマイズされたイメージを実行するポッドです。オペレータを実行する前に、このイメージを作成してイメージ・レジストリにプッシュする必要があります。

イメージの作成に必要なファイルは、kube_files/operatorディレクトリ(以前に解凍したZIPファイルの一部)にあります。kube_files/operatorディレクトリには、Dockerfileおよびオペレータ・イメージの作成に必要なバイナリがあります。

オペレータ・イメージを作成してレジストリにプッシュするには、次のステップを実行します。

  1. kube_files/operatorディレクトリに移動し、TimesTenのディストリビューションをそのディレクトリにコピーします。この例は、installation_dirディレクトリにtimesten1814110.server.linux8664.zipディストリビューションをダウンロードしたと仮定しています。詳細は、TimesTenおよびTimesTenオペレータのダウンロードを参照してください。その次に、timesten1814110.server.linux8664.zipファイルがkube_files/operatorディレクトリにあることを確認します。

    % cd kube_files/operator
    % cp installation_dir/timesten1814110.server.linux8664.zip .
    % ls -a
    Dockerfile
    timesten1814110.server.linux8664.zip
    timestenclassic-operator
    
  2. kube_files/operatorディレクトリに移動し(まだこのディレクトリにない場合)、dockerコマンドを使用してオペレータ・イメージを作成します。ttclassic-operator:3には任意の名前を選択できます(この例では太字で表示)。出力はリリースごとに変わる可能性があることに注意してください。

    % cd kube_files/operator
    % docker build -t ttclassic-operator:3 .
    Sending build context to Docker daemon  478.6MB
    Step 1/7 : FROM container-registry.oracle.com/os/oraclelinux:7
     ---> d788eca028a0
    Step 2/7 : ARG TT_DISTRO=timesten1814110.server.linux8664.zip
     ---> Using cache
     ---> a259a93fe906
    Step 3/7 : RUN yum -y install openssl unzip && /usr/sbin/useradd -d 
    /tt-operator -m -u 1001 -s /bin/nologin -U tt-operator
     ---> Using cache
     ---> e3f1427246ab
    Step 4/7 : COPY --chown=tt-operator:tt-operator timestenclassic-operator 
    /usr/local/bin/timestenclassic-operator
     ---> Using cache
     ---> 6ccad53230f0
    Step 5/7 : COPY --chown=tt-operator:tt-operator $TT_DISTRO /tt-operator/
    $TT_DISTRO
     ---> 5cd31705485a
    Step 6/7 : USER tt-operator
     ---> Running in 6a773ddac5dd
    Removing intermediate container 6a773ddac5dd
     ---> 875ee38ebc75
    Step 7/7 : ENTRYPOINT ["/usr/local/bin/timestenclassic-operator"]
     ---> Running in fed0f6c94c2f
    Removing intermediate container fed0f6c94c2f
     ---> 10dde79e1617
    Successfully built 10dde79e1617
    Successfully tagged ttclassic-operator:3
    
  3. dockerコマンドを使用して、オペレータ・イメージにタグを付けます。

    • phx.ocir.io/youraccountをイメージ・レジストリの場所に置き換えます。(この例では、phx.ocir.io/youraccount太字で表示されています。)

    • ttclassic-operator:3を、前のステップで選択した名前に置き換えます。(この例では、ttclassic-operator:3太字で表示されています。)

    % docker tag ttclassic-operator:3 phx.ocir.io/youraccount/ttclassic-operator:3
    
  4. オペレータ・イメージをレジストリにプッシュするには、dockerコマンドを使用します。

    • phx.ocir.io/youraccountをイメージ・レジストリの場所に置き換えます。(この例では、phx.ocir.io/youraccount太字で表示されています。)

    • ttclassic-operator:3を、前のステップで選択した名前に置き換えます。(この例では、ttclassic-operator:3太字で表示されています。)

    % docker push phx.ocir.io/youraccount/ttclassic-operator:3
    The push refers to repository [phx.ocir.io/youraccount/ttclassic-operator]
    46458e9fc890: Pushed
    471a399f0540: Pushed
    9e51a2b82af3: Pushed
    2f915858a916: Layer already exists
    3: digest: 
    sha256:9b941f12e3d52298b9b38f7766ddcdfb1d011857a990ff01a8adafd32f3d3e8d size: 
    1166
    

オペレータ・イメージを正常に作成し、イメージ・レジストリにプッシュしました。

オペレータのデプロイ

この項では、オペレータをカスタマイズしてデプロイするステップについて説明します。また、オペレータが実行されていることを確認するコマンドも提供します。

オペレータのカスタマイズ

ネームスペースのオペレータをカスタマイズするには、kube_files/deployディレクトリに移動し、operator.yamlファイルを編集します。このファイルは、以前に解凍したディストリビューションで提供されています。詳細は、TimesTenおよびTimesTenオペレータのダウンロードを参照してください。

  1. 太字で表示されている次のフィールド(次のoperator.yamlファイル内)を変更します。

    • replicas: 1

      1を、実行するオペレータのコピー数に置き換えます。開発およびテストには1を使用できます。ただし、高可用性を確保する目的で、複数のレプリカを実行できます。

    • sekretを、Kubernetesがレジストリからイメージを取得するために使用するイメージ・プル・シークレットの名前に置き換えます。

    • phx.ocir.io/youraccountを、イメージ・レジストリの場所に置き換えます。

    • ttclassic-operator:3を、前のステップで選択した名前に置き換えます。

    % cd kube_files/deploy
    % vi operator.yaml
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: timestenclassic-operator
    spec:
      replicas: 1
      selector:
        matchLabels:
          name: timestenclassic-operator
      template:
        metadata:
          labels:
            name: timestenclassic-operator
        spec:
          serviceAccountName: timestenclassic-operator
          imagePullSecrets:
          - name: sekret
          containers:
            - name: timestenclassic-operator
              image: phx.ocir.io/youraccount/ttclassic-operator:3
              command:
              - timestenclassic-operator
              imagePullPolicy: Always
              env:
                - name: WATCH_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: OPERATOR_NAME
                  value: "timestenclassic-operator"
                - name: GODEBUG
                  value: "x509ignoreCN=0"
    
  2. kubectl createコマンドを使用して、オペレータをネームスペースに定義し、オペレータを起動します。

    % kubectl create -f operator.yaml
    deployment.apps/timestenclassic-operator created
    

オペレータをデプロイしました。これで、演算子が実行されます。

オペレータが実行されていることの確認

kubectl get podsコマンドを使用して、オペレータが実行されていることを確認します。STATUSフィールドの値がRunningの場合、オペレータが実行されています。

% kubectl get pods
NAME                                       READY   STATUS    RESTARTS   AGE
timestenclassic-operator-846cb5c97c-76zbx  1/1     Running   0          32s

TimesTenイメージの作成

KubernetesクラスタでTimesTenを起動する前に、まずTimesTenをコンテナ・イメージとしてパッケージ化し、次にそのイメージをイメージ・レジストリにプッシュする必要があります。これを行う必要のあるファイルは、kube_filesディレクトリ・ツリーに表示されます。詳細は、TimesTenおよびTimesTenオペレータのダウンロードを参照してください。

TimesTenコンテナ・イメージを作成するには、次のステップを実行します。

  1. kube_files/ttimageディレクトリに移動し、TimesTenのディストリビューションをそのディレクトリにコピーします。この例は、installation_dirディレクトリにtimesten1814110.server.linux8664.zipディストリビューションをダウンロードしたと仮定しています。詳細は、TimesTenおよびTimesTenオペレータのダウンロードを参照してください。その次に、timesten1814110.server.linux8664.zipファイルがkube_files/ttimageディレクトリにあることを確認します。

    % cd kube_files/ttimage
    % cp installation_dir/timesten1814110.server.linux8664.zip .
    % ls *.zip
    timesten1814110.server.linux8664.zip
    
  2. kube_files/ttimageディレクトリに移動します(まだこのディレクトリにない場合)。Dockerfileを編集し、timesten1814110.server.linux8664.zipをTimesTenのフル・ディストリビューションの名前に置き換えます。TimesTenのディストリビューションがtimesten1814110.server.linux8664.zipの場合、変更の必要はありません。そうでない場合、必要な変更は太字で表示されます。ノート: TimesTenのフル・ディストリビューションは、18.1.4.11.0以降であることが必要です。

    % cd kube_files/ttimage
    % vi Dockerfile
    
    # Copyright (c) 2019, 2021, Oracle and/or its affiliates.
     
    FROM container-registry.oracle.com/os/oraclelinux:7
     
    ARG TT_DISTRO=timesten1814110.server.linux8664.zip
     
    RUN yum -y install tar gzip vim curl unzip libaio util-linux
    RUN groupadd -g 333 oracle
    RUN useradd -M -d /tt/home/oracle -s /bin/bash -u 333 -g oracle oracle
    RUN install -d -m 0750 -o oracle -g oracle /home/oracle
    COPY --chown=oracle:oracle $TT_DISTRO /home/oracle/
    COPY --chown=oracle:oracle .bashrc starthost.pl .ttdrop .ttdotversion agent2 
    create1.sql create2.sql get1.sql repcreate.sql repduplicate.sql runsql.sql 
    pausecg.sql /home/oracle/
    # Uncomment the following line if you are using the optional non-root 
    installation procedure.
    # USER 333
    ENTRYPOINT "/home/oracle/starthost.pl"
    
  3. dockerコマンドを使用して、TimesTenコンテナ・イメージを作成します。tt1814110:3は、適宜の名前に置き換えます(次のdocker buildコマンドの太字で表示している部分)。出力はリリースごとに変わる可能性があることに注意してください。

    % docker build -t tt1814110:3 .
    
    Sending build context to Docker daemon  445.8MB
    Step 1/9 : FROM container-registry.oracle.com/os/oraclelinux:7
     ---> d788eca028a0
    Step 2/9 : ARG TT_DISTRO=timesten1814110.server.linux8664.zip
     ---> Using cache
     ---> a259a93fe906
    Step 3/9 : RUN yum -y install tar gzip vim curl unzip libaio util-linux
     ---> Using cache
     ---> ac676b5376f3
    Step 4/9 : RUN groupadd -g 333 oracle
     ---> Using cache
     ---> ce16920f085c
    Step 5/9 : RUN useradd -M -d /tt/home/oracle -s /bin/bash -u 333 -g oracle 
    oracle
     ---> Using cache
     ---> 0319814aca1c
    Step 6/9 : RUN install -d -m 0750 -o oracle -g oracle /home/oracle
     ---> Using cache
     ---> c8612b53398a
    Step 7/9 : COPY --chown=oracle:oracle $TT_DISTRO /home/oracle/
     ---> 31cae98b71fd
    Step 8/9 : COPY --chown=oracle:oracle .bashrc starthost.pl .ttdrop 
    .ttdotversion agent2 create1.sql create2.sql get1.sql repcreate.sql 
    repduplicate.sql runsql.sql pausecg.sql /home/oracle/
     ---> e50eb99c9b54
    Step 9/9 : ENTRYPOINT "/home/oracle/starthost.pl"
     ---> Running in 0b41efd38837
    Removing intermediate container 0b41efd38837
     ---> 171245e546d5
    Successfully built 171245e546d5
    Successfully tagged tt1814110:3
    
  4. dockerコマンドを使用して、TimesTenコンテナ・イメージにタグを付けます。次のdocker tagコマンドで太字で表示されている次のものを置き換えます。

    • tt1814110:3: 前のステップで選択した名前に置き換えます。

    • phx.ocir.io/youraccount: イメージ・レジストリの場所に置き換えます。

    % docker tag tt1814110:3 phx.ocir.io/youraccount/tt1814110:3
    
  5. TimesTenコンテナ・イメージをレジストリにプッシュするには、dockerコマンドを使用します。次のdocker pushコマンドで太字で表示されている次のものを置き換えます。

    • phx.ocir.io/youraccount: イメージ・レジストリの場所に置き換えます。

    • tt1814110:3: 前に選択した名前に置き換えます。

    % docker push phx.ocir.io/youraccount/tt1814110:3
    
    The push refers to repository [phx.ocir.io/youraccount/tt1814110]
    97a0f250b2fe: Pushed
    650b003a3ad4: Pushed
    b8de51528854: Pushed
    62192d26e325: Pushed
    7dfe13e9b5a4: Pushed
    d8570fce965c: Pushed
    2f915858a916: Layer already exists
    3: digest: 
    sha256:a6ac313394229eb2256d4a56fbcd8e2eda50ea2cc21991fa76f11701f2299710 
    size: 1788
    

TimesTenコンテナ・イメージを正常に作成しました。イメージ・レジストリにプッシュされます。