Kubernetes 環境への CData Arc のデプロイ

CData Arc は、最もユーザーフレンドリーなEDI およびMFT 統合プラットフォームです。

コンテナ化技術を使用すると、アプリケーションを迅速かつ安全に作成し、あらゆるインフラストラクチャにデプロイできます。ただし、システム内の各コンテナを手動でインストール・管理するのは、時間がかかり、エラーが発生しやすく、リソースを大量に消費します。これらの問題を回避するには、コンテナ化されたアプリケーションのデプロイ、スケーリング、および管理のプロセスを自動化するツールが必要です。

Kubernetes は、Google における15年間のコンテナ管理の経験に基づいて構築された人気のオープンソースプラットフォームであり、コンテナ化されたアプリケーションのデプロイとスケーリングに関わるすべてのプロセスを自動化・管理することでこれらの問題を解決します。Kubernetes 環境にCData Arc をデプロイすることで、高可用性(ダウンタイムなし)、負荷のスケーラビリティ、バックアップおよびリストア機能など、Kubernetes のオーケストレーション機能を活用できます。

本記事では、Kubernetes 環境にArc をデプロイするための手順と、そのプロセスに必要なツールについて説明します。

前提条件

Kubernetes にArc をデプロイするには、以下のツールが必要です:

Kubernetes 環境への CData Arc のデプロイ

Kubernetes にArc をデプロイする基本的な手順は以下のとおりです:

  1. リソースを収集し、Docker イメージをビルドする。
  2. Docker コンテナをビルドする。
  3. Docker イメージをプッシュする。
  4. PVC とPV を作成する。
  5. Kubernetes にArc をデプロイする。

各メインステップは、以下のセクションで複数のステップに分けて説明します:

ステップ 1: リソースの収集とDocker イメージのビルド

  1. ローカルに新しいフォルダを作成します。このフォルダに以下のアイテムを含めます:
    • arc.jar ファイル
    • arc.properties ファイル
    • webapp フォルダ(arc.war ファイルを含む)
    これらのファイルとwebapp フォルダは、Arc のインストール時にインストールされます。以下はフォルダ構造の例です:
  2. ステップ 1 で作成したフォルダ内にDockerfile という名前のファイルを作成します。そのファイルに以下の内容を含めます:
    FROM mcr.microsoft.com/openjdk/jdk:17-ubuntu
    
    # copy required files and fix permissions
    RUN mkdir -p /opt/arc/webapp
    WORKDIR /opt/arc/
    
    COPY arc.jar arc.jar
    COPY webapp/arc.war webapp/arc.war
    COPY arc.properties /opt/arc/
    
    RUN addgroup --system --gid 20000 cdataarc \
    && adduser --system --uid 20000 --gid 20000 cdataarc \
    && mkdir -p /cdata/data \
    && chown -R cdataarc:cdataarc /opt/arc \
    && chown -R cdataarc:cdataarc /cdata
    
    # change user and set environment
    USER cdataarc
    ENV APP_DIRECTORY=/cdata/data
    
    EXPOSE 8080
    
    # run the app
    CMD ["java","-jar","arc.jar"]

    注意: 本記事の執筆時点では、Java 17 が最低サポートバージョンです。使用しているバージョンのドキュメントを参照して、デプロイに使用すべき最低Java バージョンを確認してください。

  3. アプリケーションデータベース(ApplicationDatabase)として使用するデータベースサーバーを作成します。
    1. Azure でデータベース(例: PostgreSQL データベース)を作成します:
      az postgres flexible-server create --resource-group ResourceGroup --name ServerName
      このコマンドの出力が認証情報です。Web ブラウザでAzure ポータルから認証情報にアクセスすることもできます。
    2. arc.properties ファイルのcdata.app.db 設定に認証情報を追加します(arc.properties ファイルはインストールディレクトリにあります)。
      cdata.app.db=jdbc:cdata:postgresql:UseConnectionPooling=true;Server=databaseServer;Port=5432;Database=databaseName>;User=Username;Password=Password;UseSSL=True;
  4. ApplicationDirectory として使用するAzure ストレージアカウントを作成します。
    1. アカウントを作成します:
      az storage account create --name AccountName --resource-group ResourceGroup --kind FileStorage --sku Premium_LRS
      注意: パフォーマンス向上のため、ローカル冗長ストレージにはPremium ストレージタイプが推奨されます。
    2. ストレージアカウントにファイル共有を作成します:
      az storage share-rm create --resource-group ResourceGroup --storage-account AccountName --name ShareName --quota 100

ステップ 2: Docker コンテナのビルド

  1. ターミナルで、先ほど作成したarc.war やその他のリソースを含むローカルフォルダに移動します(まだ移動していない場合)。
  2. 以下のコマンドを実行して、Docker コンテナイメージをビルドします。このイメージの名前は「arc」です。
    docker build . -t arc
  3. コンテナイメージがビルドされたら、コンテナイメージの実行時にArc が起動するかテストします。コンテナイメージを実行するには、以下のコマンドを実行します。
    docker run -p 8080:8080 -d arc
  4. http://localhost:8080 にアクセスして、アプリが動作していることを確認します。ローカルでアプリの動作を確認したら、コンテナを停止できます。

ステップ 3: Docker イメージのプッシュ

  1. Azure 上にKubernetes サービスを作成します。
    1. 後のステップで必要になるため、Azure Kubernetes Service 内にコンテナレジストリを作成してください。
  2. コマンドラインからAzure アカウントにログインします。インストールしたAzure CLI のバージョン(Windows/Linux)に応じて、適切なターミナルからログインする必要があります。ログインするには、以下のコマンドを実行します:
    az login
  3. Azure Kubernetes Service のリソースグループに移動し、コンテナレジストリを見つけます。ログインサーバーを取得するためにこのレジストリが必要です。
    1. Azure Kubernetes Service でリソースグループに移動します。
    2. リソースグループ内のコンテナレジストリを見つけます。
    3. ログインサーバーは、コンテナレジストリ内の「概要」タブで確認できます:
  4. ユーザー名、パスワード、およびログインサーバーを使用してコンテナレジストリにログインします。ユーザー名とパスワードがわからない場合は、コンテナレジストリ内の「設定」→「アクセスキー」タブで確認できます。
    az acr login --name LoginServerName --username YourUserName --password YourPassword
  5. タグを追加し(オプション)、以下の2つのコマンドを実行してローカルのDocker イメージをコンテナレジストリにプッシュします:
    docker tag LocalImageName LoginServerName/name:value
    docker push LoginServerName/name:value
    実際のイメージとコンテナレジストリを使用した例は以下のとおりです。この例では、特定のタグを指定せずにデフォルトの「latest」タグを使用しています:
    docker tag arc cdatadocstest.azurecr.io/arc
    docker push cdatadocstest.azurecr.io/arc
  6. Azure Container Registry 内でリポジトリとイメージを確認できます。コンテナレジストリ → サービス → リポジトリに移動して確認してください。

ステップ 4: PVC とPV の作成

先ほど作成したストレージアカウントとファイル共有を使用するには、Kubernetes 内でこのリソースの定義を作成し、Kubernetes がそれを認識して使用方法を理解できるようにする必要があります。これは、Persistent Volume とPersistent Volume Claim の2つの部分で構成されます。

Persistent Volume(PV)は、Kubernetes Pod で使用するためにプロビジョニングされたストレージを表します。Persistent Volume Claim(PVC)は、ストレージクラスオブジェクトを使用してAzure ファイル共有を動的にプロビジョニングします。

Azure がこの方法に関するガイドを提供しています。詳細はAzure Kubernetes Service (AKS) でAzure Files を使用してボリュームを作成・使用するをご覧ください。主な手順は以下のとおりです:

  1. Azure のKubernetes Service に移動し、「接続」をクリックします。すると、クラスターに接続するために実行する必要があるコマンドがAzure に表示されます。以下のコマンドを実行して、接続されていることを確認できます:
    kubectl get nodes
  2. Kubernetes Secret を作成します:
    1. 以下のコマンドを使用して、STORAGE_KEY 環境変数を作成します。nodeResourceGroupName とmyAKSStorageAccount は実際の値に置き換えてください。この変数は次のステップで使用します。
      STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    2. kubectl create secret コマンドを使用してSecret を作成します。nodeResourceGroupName とmyAKSStorageAccount は実際の値に置き換えてください。このSecret の名前は「azure-secret」で、以降のステップで参照する必要があります。
      kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
  3. PV を作成します:
    1. arc-pv.yaml というファイルを作成し、以下の内容を含めます。csi の下のresourceGroup、volumeHandle、shareName を実際の値に更新してください:
      apiVersion: v1
      kind: PersistentVolume
      metadata:
      annotations:
      pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: azurefile
      spec:
      capacity:
      storage: 5Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: azurefile-csi
      csi:
      driver: file.csi.azure.com
      volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"  # make sure this volumeid is unique for every identical share in the cluster
      volumeAttributes:
      resourceGroup: my-resource-group  # optional, only set this when storage account is not in the same resource group as node
      shareName: my-share-name
      nodeStageSecretRef:
      name: azure-secret
      namespace: default
      mountOptions:
      - dir_mode=0777
      - file_mode=0777
      - uid=20000
      - gid=20000Create
      - mfsymlinks
      - cache=strict
      - nosharesock
    2. 以下のコマンドを実行して、AKS 環境にPV を作成します:
      kubectl create -f arc-pv.yaml
  4. PVC を作成します:
    1. arc-pvc.yaml という新しいファイルを作成し、以下の内容をコピーします。デフォルトのazurefile-csi ストレージクラスが使用されることに注意してください。また、volumeName の値は前のステップで作成したPV の名前と一致する必要があります:
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: azurefile
      spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
      requests:
      storage: 100Gi
    2. 以下のコマンドを使用して、AKS 環境にPVC を作成します:
      kubectl apply -f my-pvc.yaml

ステップ 5: Kubernetes へのArc のデプロイ

PV とPVC が作成されたら、AKS 環境内にArc のデプロイメントを作成します。以下の手順に従ってください。

  1. AKS 環境に接続されていることを確認します。以下のコマンドを実行して、接続を確認してください:
    kubectl get nodes
  2. Kubernetes Docker Secret を作成します。このSecret は先ほど作成したものと似ていますが、コンテナレジストリからDocker イメージをプルするための認証情報を提供するためのものです。詳細はKubernetes のドキュメント(こちら)をご覧ください。Secret を作成するには、以下のコマンドを実行し、大文字の値を適切な値に置き換え、name を希望するSecret 名に置き換えてください。メールアドレスは必須ではありません:
    kubectl create secret docker-registry name \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-username=DOCKER_USER \
    --docker-password=DOCKER_PASSWORD \
    --docker-email=DOCKER_EMAIL
  3. Arc 用のデプロイメントYAML ファイルを作成します。arc.yaml というファイルを作成し、以下の内容を使用しますが、image、imagePullSecrets のname 値、およびclaimName の値が作成したリソースの値と一致するようにしてください。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: arc
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: arc
    template:
    metadata:
    labels:
    app: arc
    spec:
    securityContext:
    runAsUser: 20000
    runAsGroup: 20000
    fsGroup: 20000
    containers:
    - name: arc
    image: cdatadocstest.azurecr.io/arc:latest
    imagePullPolicy: Always
    ports:
    - containerPort: 8080
    volumeMounts:
    - mountPath: /cdata/data
    name: azure
    readOnly: false
    imagePullSecrets:
    - name: docker-secret
    volumes:
    - name: azure
    persistentVolumeClaim:
    claimName: azurefile
  4. 以下のコマンドを実行して、デプロイメントをAKS にプッシュします:
    kubectl apply -f arc.yaml
  5. 以下のコマンドを実行して、デプロイメントが動作していることを確認します:
    kubectl get deployments
    正しく設定されている場合、arc デプロイメントが動作中で利用可能であることが表示されます:
  6. 以下のコマンドを実行して、Arc を公開します:
    kubectl expose deployment arc --type=LoadBalancer --port=8080
    1. 以下のコマンドを実行して、Arc デプロイメントにパブリックIP が割り当てられたことを確認し、Arc サービスのEXTERNAL-IP を記録します:
      kubectl get all
  7. http://EXTERNAL-IP:8080 を使用してアプリにアクセスできます。

無料トライアルと詳細情報

Kubernetes 環境へのArc のデプロイ方法をご確認いただけましたので、CData Arc ページにアクセスして、CData Arc の詳細情報をご覧いただき、無料トライアルをダウンロードしてください。いつでも、ワールドクラスのサポートチームがご質問にお答えします。



データ連携をノーコードで

CData Arc なら、業務システム間のデータ連携をノーコードで簡単に実現できます。Arc を5分で体験できる製品ツアーで、アプリ間連携フローの作成をご体験ください。

製品ツアーへ