この章では、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フル・ディストリビューションをLinux-64ビットにダウンロードする必要があります。
次のステップを実行して、TimesTenのフル・ディストリビューションをダウンロードし、その中に埋め込まれているTimesTenオペレータのディストリビューションを解凍します。すべてのステップをLinux開発ホストから実行します。
選択したディレクトリから次のことを実行します。
TimesTenのフル・ディストリビューションをダウンロードするサブディレクトリを1つ作成します。たとえば、installation_dir
サブディレクトリを作成します。(このマニュアルではこれ以降、installation_dir
ディレクトリを使用します。)
TimesTenオペレータのディストリビューションを解凍する2つ目のサブディレクトリを作成します。たとえば、kube_files
サブディレクトリを作成します。(このマニュアルではこれ以降、このkube_files
ディレクトリを使用します。)
% mkdir -pinstallation_dir
% mkdir -pkube_files
これで、TimesTenのフル・ディストリビューションをダウンロードして解凍する準備ができました。
installation_dir
に移動します。
% cd installation_dir
このディレクトリにTimesTenのフル・ディストリビューションをダウンロードします。例として、t
imesten1814110.server.linux8664.zip
ファイル(Linux 64ビットの18.1.4.11.0
フル・ディストリビューション)をダウンロードします。
installation_dir
から、ZIPユーティリティを使用してTimesTenのディストリビューションを解凍します。
% unziptimesten1814110
.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
kube_files
ディレクトリに移動し、operator.zip
ファイルをそのディレクトリに解凍します。この例では、installation_dir
/tt18.1.4.11.0/kubernetes
/operator.zip
ファイルを解凍します。
% cdkube_files
% unzipinstallation_dir
/tt18.1.4.11.0/kubernetes/operator.zip [...UNZIP OUTPUT...]
installation_dir
/tt18.1.4.11.0/kubernetes/operator.zip
ファイルをkube_files
ディレクトリに正常に解凍しました。
ディレクトリ構造を確認します。この章の後半で、これらのサブディレクトリ内のファイルをいくつか変更します。この例では、リリースごとに変更される可能性がある最も重要なサブディレクトリとファイルを示します。
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のフル・ディストリビューション・ファイル(この例では
|
TimesTenオペレータのディストリビューションを正常にダウンロードし、展開しました。
オペレータは、Kubernetesサービス・アカウントを使用して実行されます。このサービス・アカウントにはネームスペースでの権限が必要です。これらの権限は、ロールを介して付与されます。s
ervice_account.yaml
ファイルは、サービス・アカウントとロールをネームスペースに追加し、ロールで指定された権限をサービス・アカウントに付与します。service_account.yaml
ファイルは、以前に解凍したoperator.zip
ファイルに含まれています。
次のステップを実行します。
kube_files
/deploy
ディレクトリに移動します。
% cd kube_files
/deploy
サービス・アカウントを作成します。
% 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
ロールがネームスペースに作成され、ロールで指定されている権限がサービス・アカウントに付与されました。
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
およびオペレータ・イメージの作成に必要なバイナリがあります。
オペレータ・イメージを作成してレジストリにプッシュするには、次のステップを実行します。
kube_files
/operator
ディレクトリに移動し、TimesTenのディストリビューションをそのディレクトリにコピーします。この例は、installation_dir
ディレクトリにtimesten1814110.server.linux8664.zi
p
ディストリビューションをダウンロードしたと仮定しています。詳細は、TimesTenおよびTimesTenオペレータのダウンロードを参照してください。その次に、timesten1814110.server.linux8664.zi
p
ファイルがkube_files
/operator
ディレクトリにあることを確認します。
% cdkube_files
/operator % cpinstallation_dir
/timesten1814110.server.linux8664.zip . % ls -a Dockerfile timesten1814110.server.linux8664.zip timestenclassic-operator
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
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
オペレータ・イメージをレジストリにプッシュするには、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オペレータのダウンロードを参照してください。
太字で表示されている次のフィールド(次の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"
kubectl
create
コマンドを使用して、オペレータをネームスペースに定義し、オペレータを起動します。
% kubectl create -f operator.yaml deployment.apps/timestenclassic-operator created
オペレータをデプロイしました。これで、演算子が実行されます。
KubernetesクラスタでTimesTenを起動する前に、まずTimesTenをコンテナ・イメージとしてパッケージ化し、次にそのイメージをイメージ・レジストリにプッシュする必要があります。これを行う必要のあるファイルは、kube_files
ディレクトリ・ツリーに表示されます。詳細は、TimesTenおよびTimesTenオペレータのダウンロードを参照してください。
TimesTenコンテナ・イメージを作成するには、次のステップを実行します。
kube_files
/ttimage
ディレクトリに移動し、TimesTenのディストリビューションをそのディレクトリにコピーします。この例は、installation_dir
ディレクトリにtimesten1814110.server.linux8664.zi
p
ディストリビューションをダウンロードしたと仮定しています。詳細は、TimesTenおよびTimesTenオペレータのダウンロードを参照してください。その次に、timesten1814110.server.linux8664.zi
p
ファイルがkube_files
/ttimage
ディレクトリにあることを確認します。
% cdkube_files
/ttimage % cpinstallation_dir
/timesten1814110.server.linux8664.zip . % ls *.zip timesten1814110.server.linux8664.zip
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"
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
docker
コマンドを使用して、TimesTenコンテナ・イメージにタグを付けます。次のdocker
tag
コマンドで太字で表示されている次のものを置き換えます。
tt1814110:3
: 前のステップで選択した名前に置き換えます。
p
hx.ocir.io/youraccount
: イメージ・レジストリの場所に置き換えます。
% docker tag tt1814110:3 phx.ocir.io/youraccount/tt1814110:3
TimesTenコンテナ・イメージをレジストリにプッシュするには、docker
コマンドを使用します。次のdocker
push
コマンドで太字で表示されている次のものを置き換えます。
p
hx.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コンテナ・イメージを正常に作成しました。イメージ・レジストリにプッシュされます。