概要
Kubernetes(以下k8s
)ベースのPega Systemsの動作環境(Pega + PostgreSQL
)を構築するための手順です。
公式のHelm Chartページの手順に従っても期待通りに動作しなかったため、公式手順を参考にしつつアレンジしたものになります。
また、以下の説明においては当リポジトリ(comefigo/k8s-pega-sample)をベースに説明していきます。
当サンプルコードに記載されているユーザ名やパスワード、各種設定はサンプルとして利用してください。本番運用では絶対利用しないこと!
手順にはk8sの操作をしやすくする(入力補完、エイリアス)ためにリモートコンテナを利用していますが、不要な方は該当手順をスキップし、各種k
コマンドをkubectl
に置き換えて実行してください。
動作確認環境
以下の環境にて最小構成での動作確認しました。
マシンスペックは最低限以下を満たさないと起動が困難であることを確認しています。
- CPU: 4コア以上
- メモリ:12GB以上
- Windows 10
- Docker Desktop・・・4.20.1
商用利用の場合は、ライセンスを購入しましょう! - k8s・・・1.25.9
- kubectl・・・1.25.9
- helm・・・3.11.3
- 各種pegaコンテナイメージ・・・8.8.2
システム構成
公式ドキュメントのシステム構成図を引用していますが、以下の変更点があります。
-
Ingress/LoadBalancer
→NodePort(30000)
- Pega Database → PostgreSQL
- Cassandra → disable
- Elastic Search → disable
- 各種PODのReplicas → 1
ファイル構成
サンプルコードのpega/charts/pega
は公式のpega/charts/pega(https://github.com/pegasystems/pega-helm-charts/commit/2b5e96c3842a5f8290c43cdd1de31a8f1e75f772
)から取得したものです。
pega/charts/pega/ ・・・Pega公式のHelm Chart
values-minimal.yaml ・・・Pega用Helm変数ファイル(pega/charts/pega/values-minimal.yamlをベースyに修正)
pega-postgres.yml ・・・PostgreSQL用のマニフェスト
事前準備
Docker Desktop
- Docker Desktopをインストールする
- 非WSL2モードに設定(作者都合)
ついでに自動起動もOFF
- Kubernetesを有効化
※Docker Desktopが更新されてもk8sのバージョンアップは自動更新されないので、k8sを更新したい場合は「リセット」ボタンからどうぞ
- 各種リソース条件を設定し、「Apply& restart」後に左下がすべて「緑」になるまで待機
最低限:CPU>=4、メモリ>=12GB
- 当ソースがあるフォルダを共有に追加
例:c:\k8s-pega-sample
にある場合は、c:\k8s-pega-sample
を追加します。
VSCode
- VSCodeをインストールする
- 拡張機能でRemote Developmentを追加する
手順
リモートコンテナを起動する
リモートコンテナを使用しない場合は、k8sと同バージョンのkubectl(https://dl.k8s.io/release/v<バージョン>/bin/windows/amd64/kubectl.exe
)を取得してください。
- Docker Desktopを起動する
- Docker Desktopのk8sの
config
(%USERPROFILE%\.kube\config
)をkube-configにコピー
複数のコンテキストがある場合、デフォルトをdocker-desktop
になるように編集してください - VSCode「Remote Container」を起動する
初回時間がかかります...
- 左にエクスプローラーが表示されたら起動完了、
「Ctrl」+「@」
でターミナルを開く
以降の手順はこのターミナルで実行していきます。
- 以下のコマンドを実行し、以下のような結果が返ってくればOK
k
はkubectlのエイリアスとして設定しています。詳しくは.bashrc
を参照
トラブルを避けるためにクライアントとサーバのバージョンは揃えておくと良い
詳しくはこちらを参照> k version WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version. Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.9", GitCommit:"a1a87a0a2bcd605820920c6b0e618a8ab7d117d4", GitTreeState:"clean", BuildDate:"2023-04-12T12:16:51Z", GoVersion:"go1.19.8", Compiler:"gc", Platform:"linux/amd64"} Kustomize Version: v4.5.7 Server Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.9", GitCommit:"a1a87a0a2bcd605820920c6b0e618a8ab7d117d4", GitTreeState:"clean", BuildDate:"2023-04-12T12:08:36Z", GoVersion:"go1.19.8", Compiler:"gc", Platform:"linux/amd64"}
Pega
以下のコマンドはすべてpega/charts/
配下で実行します。
なお、各種コマンドや設定値は公式ドキュメントを元に(一部アレンジして)実行および設定していますので、必要に応じて参照してください。
1. namespace作成(オプション)
当手順はオプションになります。
なお、以下の手順でリソースを当namespaceにデプロイした場合は、各コマンドでnamespaceを指定する必要があります。
ローカル環境であれば不要でよい。
k create namespace mypega
2. PostgreSQLのデプロイ
Runningになるまで確認すること
k apply -f pega-postgres.yml
3. 各種Pegaコンテナイメージをpullする
installer、pega、searchはバージョンを揃えること
installerは約7GBあるので、pull完了するまでにかなり時間がかかります。
複数人で共有する場合は、ローカルネットワークにコンテナイメージレジストリを設けて2人目以降はそこからpullすることをお勧めします。
なお、ローカルのコンテナレジストリを設けた場合は、後続の手順や各種変数において該当箇所を適宜修正してください。
下記のPega用dockerレジストリのユーザ名、PWは公式ドキュメントを参考に取得してください。
# Pegaのプライベートリポジトリを参照できるようにログインする
# successと表示されればOK
docker login pega-docker.downloads.pega.com -u <ユーザ名> -p <キー>
# コンテナイメージのtagは適宜変更してください
docker pull pega-docker.downloads.pega.com/platform/installer:8.8.2
docker pull pega-docker.downloads.pega.com/platform/pega:8.8.2
docker pull pega-docker.downloads.pega.com/platform/search:8.8.2
docker pull pega-docker.downloads.pega.com/platform/clustering-service:1.3.4
docker pull pega-docker.downloads.pega.com/platform/clustering-service-kubectl:1.0.0
【番外編】使用可能のコンテナイメージ一覧を取得
詳しくは上記の公式ドキュメント
curl -X GET "https://pega-docker.downloads.pega.com/v2/_catalog" -H "X-JFrog-Art-Api:<キー>"
【番外編】特定のコンテナイメージの使用可能のタグ一覧を取得
詳しくは上記の公式ドキュメント
curl -X GET "https://pega-docker.downloads.pega.com/v2/<コンテナイメージ名>/tags/list" -H "X-JFrog-Art-Api:<キー>"
4. values-minimal.yamlを編集
pega/charts/pega/values-minimal.yaml
をベースに前述の最小リソース量で起動できるように修正したもの。
また、最小構成になるようにreplicas
はすべて1にしています。
詳しい変更内容は初回コミットとの差分で比較してください。
actions.execute: "install"
-
jdbc.url
・・・jdbc:postgresql://pega-postgres.<namespace>.svc.cluster.local:5432/pegarules
<namespace>
・・・postgresqlデプロイ時のnamespaceに設定すること。namespace未指定の場合はdefault
になります。 -
jdbc.username
とjdbc.password
はpega-postgres.yml
のPOSTGRES_USER
とPOSTGRES_PASSWORD
になります。(初期値から変更していなければそのままでOK) -
docker.registry.username
とdocker.registry.password
にPegaのプライベートリポジトリの情報(docker login
時の情報)
5. Pega初期データの投入
# 初回のみ
helm dependency build pega
# completedになるまで10分以上かかります。
# 進行状況を確認する場合は、logsコマンドで処理を確認しましょう。
helm install -f values-minimal.yaml pega-install ./pega
# 完了すると以下のようになります。
NAME READY STATUS RESTARTS AGE
pega-db-install-d6dld 0/1 Completed 0 11m
6. Pega起動
values-minimal.yamlのactions.execute: "deploy"
に編集し、以下を実行
pega-web-0
でポートが競合エラーになっている場合は、service.NodePort
を変更してください。
helm install -f values-minimal.yaml pega-deploy ./pega
# db-installを除くPodがすべて 1/1 になったら起動完了
NAME READY STATUS RESTARTS AGE
pega-db-install-d6dld 0/1 Completed 0 17h
pega-hazelcast-0 1/1 Running 0 16m
pega-postgres-0 1/1 Running 4 (43m ago) 17h
pega-search-0 1/1 Running 0 16m
pega-web-0 1/1 Running 0 16m
7. 動作確認
ブラウザでhttp://localhost:30000/prweb
にアクセスすると見慣れたPegaのログイン画面が表示されるかと思います。
※service.NodePort
を変更した場合はそのポート番号にしてください。
- ユーザ名:
Administrator@pega.com
- pw: values-minimal.yamlの
installer.adminPassword
片付け
# pegaインストーラの削除(初回実行後にいつでも削除可)
helm uninstall pega-install
# pegaアプリケーションの削除
helm uninstall pega-deploy
# DBの削除(データは残る)
k delete -f pega-postgres.yml
番外編
DBのデータを削除
pega-postgres.yml
のinitContainers
配下のコメントアウトを解除し、applyする
k apply -f pega-postgres.yml
PostgresのPodが再作成されたら、再度該当箇所をコメントアウトし、applyする
k apply -f pega-postgres.yml
DB接続
リモートコンテナを利用されている場合は、拡張機能「Database」から直接データを参照することができます
- ホストは
127.0.0.1
- ユーザ名、PW、Database名はそれぞれ
POSTGRES_USER
、POSTGRES_PASSWORD
、POSTGRES_DB
- ポート番号は
pega-postgres.yml
のnodePort
で指定したもの
Podのlogを確認する
Podの実行ログの確認
k logs pod名
# ログを追従する
k logs pod名 -f
Podの状態を確認する
正常にPodが起動されていない時の状態確認
k describe po pod名