Kubernetes 環境への CData Arc のデプロイ
CData Arc は、最もユーザーフレンドリーなEDI およびMFT 統合プラットフォームです。
コンテナ化技術を使用すると、アプリケーションを迅速かつ安全に作成し、あらゆるインフラストラクチャにデプロイできます。ただし、システム内の各コンテナを手動でインストール・管理するのは、時間がかかり、エラーが発生しやすく、リソースを大量に消費します。これらの問題を回避するには、コンテナ化されたアプリケーションのデプロイ、スケーリング、および管理のプロセスを自動化するツールが必要です。
Kubernetes は、Google における15年間のコンテナ管理の経験に基づいて構築された人気のオープンソースプラットフォームであり、コンテナ化されたアプリケーションのデプロイとスケーリングに関わるすべてのプロセスを自動化・管理することでこれらの問題を解決します。Kubernetes 環境にCData Arc をデプロイすることで、高可用性(ダウンタイムなし)、負荷のスケーラビリティ、バックアップおよびリストア機能など、Kubernetes のオーケストレーション機能を活用できます。
本記事では、Kubernetes 環境にArc をデプロイするための手順と、そのプロセスに必要なツールについて説明します。
前提条件
Kubernetes にArc をデプロイするには、以下のツールが必要です:
- Docker Desktop
- Windows System for Linux (WSL) 2
- Ubuntu(Microsoft Store から入手可能)
- kubectl コマンドラインツール
- Azure Kubernetes Services (AKS)
- Microsoft Azure コマンドラインインターフェース (CLI) - Windows
- Microsoft Azure コマンドラインインターフェース (CLI) - Linux
- Docker on Ubuntu
Kubernetes 環境への CData Arc のデプロイ
Kubernetes にArc をデプロイする基本的な手順は以下のとおりです:
- リソースを収集し、Docker イメージをビルドする。
- Docker コンテナをビルドする。
- Docker イメージをプッシュする。
- PVC とPV を作成する。
- Kubernetes にArc をデプロイする。
各メインステップは、以下のセクションで複数のステップに分けて説明します:
ステップ 1: リソースの収集とDocker イメージのビルド
-
ローカルに新しいフォルダを作成します。このフォルダに以下のアイテムを含めます:
- arc.jar ファイル
- arc.properties ファイル
- webapp フォルダ(arc.war ファイルを含む)
-
ステップ 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 バージョンを確認してください。
-
アプリケーションデータベース(ApplicationDatabase)として使用するデータベースサーバーを作成します。
-
Azure でデータベース(例: PostgreSQL データベース)を作成します:
このコマンドの出力が認証情報です。Web ブラウザでAzure ポータルから認証情報にアクセスすることもできます。az postgres flexible-server create --resource-group ResourceGroup --name ServerName
-
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;
-
Azure でデータベース(例: PostgreSQL データベース)を作成します:
-
ApplicationDirectory として使用するAzure ストレージアカウントを作成します。
-
アカウントを作成します:
注意: パフォーマンス向上のため、ローカル冗長ストレージにはPremium ストレージタイプが推奨されます。az storage account create --name AccountName --resource-group ResourceGroup --kind FileStorage --sku Premium_LRS
-
ストレージアカウントにファイル共有を作成します:
az storage share-rm create --resource-group ResourceGroup --storage-account AccountName --name ShareName --quota 100
-
アカウントを作成します:
ステップ 2: Docker コンテナのビルド
- ターミナルで、先ほど作成したarc.war やその他のリソースを含むローカルフォルダに移動します(まだ移動していない場合)。
-
以下のコマンドを実行して、Docker コンテナイメージをビルドします。このイメージの名前は「arc」です。
docker build . -t arc
-
コンテナイメージがビルドされたら、コンテナイメージの実行時にArc が起動するかテストします。コンテナイメージを実行するには、以下のコマンドを実行します。
docker run -p 8080:8080 -d arc
- http://localhost:8080 にアクセスして、アプリが動作していることを確認します。ローカルでアプリの動作を確認したら、コンテナを停止できます。
ステップ 3: Docker イメージのプッシュ
-
Azure 上にKubernetes サービスを作成します。
- 後のステップで必要になるため、Azure Kubernetes Service 内にコンテナレジストリを作成してください。
-
コマンドラインからAzure アカウントにログインします。インストールしたAzure CLI のバージョン(Windows/Linux)に応じて、適切なターミナルからログインする必要があります。ログインするには、以下のコマンドを実行します:
az login
-
Azure Kubernetes Service のリソースグループに移動し、コンテナレジストリを見つけます。ログインサーバーを取得するためにこのレジストリが必要です。
- Azure Kubernetes Service でリソースグループに移動します。
- リソースグループ内のコンテナレジストリを見つけます。
-
ログインサーバーは、コンテナレジストリ内の「概要」タブで確認できます:
-
ユーザー名、パスワード、およびログインサーバーを使用してコンテナレジストリにログインします。ユーザー名とパスワードがわからない場合は、コンテナレジストリ内の「設定」→「アクセスキー」タブで確認できます。
az acr login --name LoginServerName --username YourUserName --password YourPassword
-
タグを追加し(オプション)、以下の2つのコマンドを実行してローカルのDocker イメージをコンテナレジストリにプッシュします:
実際のイメージとコンテナレジストリを使用した例は以下のとおりです。この例では、特定のタグを指定せずにデフォルトの「latest」タグを使用しています:docker tag LocalImageName LoginServerName/name:value docker push LoginServerName/name:value
docker tag arc cdatadocstest.azurecr.io/arc docker push cdatadocstest.azurecr.io/arc
-
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 を使用してボリュームを作成・使用するをご覧ください。主な手順は以下のとおりです:
-
Azure のKubernetes Service に移動し、「接続」をクリックします。すると、クラスターに接続するために実行する必要があるコマンドがAzure に表示されます。以下のコマンドを実行して、接続されていることを確認できます:
kubectl get nodes
-
Kubernetes Secret を作成します:
-
以下のコマンドを使用して、STORAGE_KEY 環境変数を作成します。nodeResourceGroupName とmyAKSStorageAccount は実際の値に置き換えてください。この変数は次のステップで使用します。
STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
-
kubectl create secret コマンドを使用してSecret を作成します。nodeResourceGroupName とmyAKSStorageAccount は実際の値に置き換えてください。このSecret の名前は「azure-secret」で、以降のステップで参照する必要があります。
kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
-
以下のコマンドを使用して、STORAGE_KEY 環境変数を作成します。nodeResourceGroupName とmyAKSStorageAccount は実際の値に置き換えてください。この変数は次のステップで使用します。
-
PV を作成します:
-
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 -
以下のコマンドを実行して、AKS 環境にPV を作成します:
kubectl create -f arc-pv.yaml
-
arc-pv.yaml というファイルを作成し、以下の内容を含めます。csi の下のresourceGroup、volumeHandle、shareName を実際の値に更新してください:
-
PVC を作成します:
-
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
-
以下のコマンドを使用して、AKS 環境にPVC を作成します:
kubectl apply -f my-pvc.yaml
-
arc-pvc.yaml という新しいファイルを作成し、以下の内容をコピーします。デフォルトのazurefile-csi ストレージクラスが使用されることに注意してください。また、volumeName の値は前のステップで作成したPV の名前と一致する必要があります:
ステップ 5: Kubernetes へのArc のデプロイ
PV とPVC が作成されたら、AKS 環境内にArc のデプロイメントを作成します。以下の手順に従ってください。
-
AKS 環境に接続されていることを確認します。以下のコマンドを実行して、接続を確認してください:
kubectl get nodes
-
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
-
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
-
以下のコマンドを実行して、デプロイメントをAKS にプッシュします:
kubectl apply -f arc.yaml
-
以下のコマンドを実行して、デプロイメントが動作していることを確認します:
正しく設定されている場合、arc デプロイメントが動作中で利用可能であることが表示されます:kubectl get deployments
-
以下のコマンドを実行して、Arc を公開します:
kubectl expose deployment arc --type=LoadBalancer --port=8080
-
以下のコマンドを実行して、Arc デプロイメントにパブリックIP が割り当てられたことを確認し、Arc サービスのEXTERNAL-IP を記録します:
kubectl get all
-
以下のコマンドを実行して、Arc デプロイメントにパブリックIP が割り当てられたことを確認し、Arc サービスのEXTERNAL-IP を記録します:
- http://EXTERNAL-IP:8080 を使用してアプリにアクセスできます。
無料トライアルと詳細情報
Kubernetes 環境へのArc のデプロイ方法をご確認いただけましたので、CData Arc ページにアクセスして、CData Arc の詳細情報をご覧いただき、無料トライアルをダウンロードしてください。いつでも、ワールドクラスのサポートチームがご質問にお答えします。
データ連携をノーコードで
CData Arc なら、業務システム間のデータ連携をノーコードで簡単に実現できます。Arc を5分で体験できる製品ツアーで、アプリ間連携フローの作成をご体験ください。
製品ツアーへ