Live Agent 4.44 における Helm依存関係の移行ガイド
v4.44で追加
これは、Live Agent 4.44バージョンアップのための移行ガイドです。このリリースは、PostgreSQLとRedisの依存関係をアップグレードします。この変更により、外部でそれらを使用していない場合は、手動でのデータ移行が必要になります。
Redisの場合は、すぐに動作しますが、PostgreSQLの場合は、古いデータベースから新しいデータベースへデータを移行する必要があります。
移行前の準備
values.yamlの変更
.Values.postgresql
以下の値も影響を受けます。カスタム values.yaml
ファイルに必要な変更を行います。
旧バージョンの値 | 新バージョンの値 |
Values.postgresql.postgresqlDatabase | Values.postgresql.auth.database |
Values.postgresql.postgresqlUsername | Values.postgresql.auth.username |
Values.postgresql.postgresqlPassword | Values.postgresql.auth.postgresPassword |
Values.postgresql.postgresqlHost | Values.postgresql.host |
Values.postgresql.postgresqlPort | Values.postgresql.port |
Values.postgresql.existingSecret | Values.postgresql.auth.existingSecret |
Values.postgresql.existingPasswordSecretKey | Values.postgresql.auth.secretKeys.adminPasswordKey |
cognigy-live-agentデプロイはcognigy-live-agent-app
と呼ばれるようになりました。この変更はカスタム values.yaml
ファイルの「service」と「ingress」にも適用されます。
旧バージョンの値
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- host: '<host>'
paths:
- path: /
pathType: Prefix
backend:
service:
# Same value as service.name above
name: cognigy-live-agent
port:
number: 3000
service:
name: cognigy-live-agent
internalPort: 3000
targetPort: 3000
type: ClusterIP
annotations: {}
新バージョンの値
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- host: '<host>'
paths:
- path: /
pathType: Prefix
backend:
service:
# Same value as service.name above
name: cognigy-live-agent-app
port:
number: 3000
service:
name: cognigy-live-agent-app
internalPort: 3000
targetPort: 3000
type: ClusterIP
annotations: {}
backup-pod.yamlの作成
PostgreSQLデータベースにアクセスするには、バックアップポッドが必要です。このポッドがバックアップを作成し、新しいデータベースに復元します。バックアップポッドのサイズは、ダンプを格納するために少なくとも3倍の大きさが必要です。
データベースのサイズを計算する
データベースのサイズを知るには、以下のコマンドを実行します:
kubectl exec -n live-agent -it <postgresql-pod-name> -- psql -U <postgresql-username> -d live_agent_production -c "SELECT pg_database_size('live_agent_production')/1024/1024/1024 AS size_in_gb;"
出力はこのようになります:
size_in_gb
------------
1.0000000
(1 row)
バックアップポッドのサイズは少なくとも3GBでなければなりません。
backup-pod.yaml
# Create a new file backup-pod.yaml
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
name: postgres-backup
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
encrypted: 'true'
fsType: ext4
reclaimPolicy: Retain
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: postgres-backup
name: postgres-backup
namespace: live-agent
spec:
serviceName: postgres-backup
replicas: 1
selector:
matchLabels:
app: postgres-backup
template:
metadata:
name: postgres-backup
labels:
app: postgres-backup
spec:
containers:
- image: postgres:11-alpine
name: postgres-backup
env:
- name: POSTGRES_PASSWORD
value: postgres # This is the password for the postgres admin user (can be obtained from the secret `cognigy-live-agent-postgresql`)
- name: PGPASSWORD
value: postgres # This is the password for the postgres admin user (can be obtained from the secret `cognigy-live-agent-postgresql`)
- name: POSTGRES_USER
value: postgres # This is the username specified in the values.yaml file
# - name: PGDATA
# value: /var/lib/postgresql/data/pgdata
ports:
- containerPort: 5432
resources: {}
volumeMounts:
- mountPath: /mnt/postgres-backup
name: postgres-backup-claim
restartPolicy: Always
volumeClaimTemplates:
- metadata:
name: postgres-backup-claim
spec:
accessModes: ['ReadWriteOnce']
storageClassName: 'postgres-backup'
resources:
requests:
storage: 100Gi # This is the size of the backup pod
---
apiVersion: v1
kind: Service
metadata:
labels:
app: postgres-backup
name: postgres-backup
namespace: live-agent
spec:
ports:
- name: 'postgres-backup'
port: 5432
targetPort: 5432
selector:
app: postgres-backup
clusterIP: None
バックアップポッドを導入するには、次のコマンドを実行します:
kubectl apply -n live-agent -f backup-pod.yaml
移行ステップ
ステップ1. レプリカのカウントを0に設定する
appとworkerのレプリカセットでは、レプリカのカウントに0を指定します。これにより、データベースにアクティビティが発生せず、データが安全にバックアップされます。
kubectl scale --replicas=0 -n live-agent deployment/cognigy-live-agent
kubectl scale --replicas=0 -n live-agent deployment/cognigy-live-agent-worker
kubectl scale --replicas=0 -n live-agent deployment/cognigy-live-agent-odata
備考
以前のバージョンでは、cognigy-live-agent-app
デプロイはまだcognigy-live-agent
と呼ばれています。
ステップ2. PostgreSQLバックアップポッドにシェルをアタッチし、Live Agentデータベースのバックアップを作成する
postgres-backupポッドにログインし、live_agent_production
データベースのダンプを作成します。
kubectl exec -n live-agent -it postgres-backup-0 -- bash
# Inside the PostgreSQL backup pod
cd /mnt/postgres-backup/
nohup time pg_dump --user $POSTGRES_USER --host cognigy-live-agent-postgresql -d live_agent_production > live_agent_production-postgres-dump.sql &
# (Alternative) Take a compressed dump, but this takes longer
nohup pg_dump --user $POSTGRES_USER --host cognigy-live-agent-postgresql -Fc -d live_agent_production > live_agent_production-postgres-dump.sql &
接頭辞nohup
と接尾辞&
はpg_dump
コマンドで使用され、バックグラウンドで実行されます。fg
コマンドで現在のセッションのバックグラウンドコマンドを呼び出し、jobs
コマンドでバックグラウンドジョブのステータスを確認することができます。
bash-5.1# jobs
[1]+ Running nohup pg_dump --user $POSTGRES_USER --host cognigy-live-agent-postgresql -d live_agent_production > live_agent_production-postgres-dump.sql &
# Once it has finished, check the output of the backup file
cat live_agent_production-postgres-dump.sql
exit
一度実行すれば、jobs
コマンドは何も出力しません。
ステップ3. 現在のリリースを削除し、PVC再利用ポリシーを確認する
PostgreSQLとRedisのバージョンが変更された場合、PVCは新しいバージョンとの互換性がなくなります。互換性を回復するには、現在のリリースとPVCを削除し、Live Agent PVC再利用ポリシーを確認します。
# Check that PVs are set as Retain:
kubectl get pv
# Patch the reclaim policy for the EFS storage PV, set <pv-name> to the name from the previous command
# Repeat for any PV related to LA that is not set to "Retain"
kubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
# Check that the reclaim policy is set to "Retain":
kubectl get pv
# Delete the current release
helm delete -n live-agent cognigy-live-agent
# Change the EFS storage PV status from "Released" to "Available"
kubectl patch pv <pv-name> -p '{"spec":{"claimRef": null}}'
# Check the PVCs
kubectl get pvc -n live-agent
# These commands will delete the database volumes. Make sure a backup was done before proceeding
kubectl delete pvc -n live-agent <data-postgres>
kubectl delete pvc -n live-agent <redis>
kubectl delete pvc -n live-agent <redis-replica>
ステップ4. 既存のデータベースシークレットの削除または変更
既存のシークレットを削除するか、新しいキーに変更する必要があります。既存のシークレットがvalues.yaml
ファイルで指定されていない場合、システムは新しいリリースで新しいシークレットを自動的に生成します。
- シークレットの削除(推奨)
- 既存のシークレットの変更
既存のシークレットを削除し、自動生成されたパスワードを取得するために、valuesファイルにコメントされたパスワードフィールドを残すことをお勧めします。
# Delete the secrets
kubectl delete secret -n live-agent cognigy-live-agent-postgresql
kubectl delete secret -n live-agent cognigy-live-agent-redis
シークレットを削除する代わりに、既存のシークレットを変更することができます。内部PostgreSQLを使用する場合の唯一の変更は、新しいPostgreSQLシークレットです。このシークレットには以下のキーを含める必要があります:
# The PostgreSQL admin password (.Values.postgresql.auth.secretKeys.adminPasswordKey)
postgres-password
# New field - The PostgreSQL user password
password
postgresql.auth.existingSecretとpostgresql.auth.secretKeys.adminPasswordKeyはデフォルトでpostgres-passwordとpasswordに設定されています。
ステップ5. バージョン4.44. 0のチャートをインストールする
以前のバックアップを復元するために、migrationsジョブを実行したり、デプロイメントがDBにアクセスしたりしていない空の状態で、新しいリリースをインストールします。custom-values.yaml ファイルでmigrationsジョブを false に設定し、appとworkerの両方でレプリカカウントを 0 に減らします:
# custom-values.yaml
app:
replica: 0
worker:
replica: 0
odata:
enabled: false
migration:
enabled: false
新しいバージョンのチャートをインストールする:
helm install cognigy-live-agent oci://cognigy.azurecr.io/helm/live-agent --version 4.44.0 --namespace live-agent -f custom-values.yaml
起動しているポッドはEFS、PostgreSQL、Redisのみになります。
ステップ6. 新しいPostgreSQLポッドにバックアップを復元する
PostgreSQLバックアップポッドにシェルを取りつけ、’live_agent_production’データベースを新しいPostgreSQLポッドに復元します。
# Log in to the postgres-backup-0 pod
kubectl exec -n live-agent -it postgres-backup-0 -- bash
# Get the password of the new PostgreSQL from the `cognigy-live-agent-postgresql` secret key `postgres-password` and export it to `PGPASSWORD` environment variable
export PGPASSWORD=<password>
# Connect to the newly deployed PostgreSQL DB with the `psql` command
psql --host cognigy-live-agent-postgresql -U postgres -d postgres -p 5432
# List details of DBs
\l+
DROP DATABASE live_agent_production;
create database live_agent_production;
grant all privileges on database live_agent_production to postgres;
# List details of DBs
\l+
# quit
\q
cd /mnt/postgres-backup/
# Restore the data from old postgres. This takes some time
nohup time psql --host cognigy-live-agent-postgresql -U postgres -d live_agent_production < live_agent_production-postgres-dump.sql &
# (Optional) Once restored, check postgres disk usages
PGPASSWORD=postgres psql --host cognigy-live-agent-postgresql -U postgres -d postgres -p 5432
# List details of DBs
\l+
ステップ7. custom-values.yamlを変更する
migrationsジョブを有効にして、custom-values.yamlファイルのappとworkerのレプリカカウントを希望の数に増やします。
# custom-values.yaml
app:
replica: 2
worker:
replica: 3
# In case the OData service was enabled, enable it again
odata:
enabled: true
migration:
enabled: true
チャートをアップグレードします。
helm upgrade cognigy-live-agent oci://cognigy.azurecr.io/helm/live-agent --version 4.44.0 --namespace live-agent -f custom-values.yaml
ステップ 8. シェルを取り付け、オンボーディング変数を削除する
アプリのポッドにシェルを取り付け、Redis の onboarding 変数を削除します。これにより、Live Agentへのアクセス後にオンボーディング画面が表示されなくなります。
# Attach a shell to the app pod
kubectl exec -n live-agent -it cognigy-live-agent-app-xxxxxxxxxx -- /bin/sh
# Execute a Rails console
RAILS_ENV=production bundle exec rails c
# Remove the onboarding variable from Redis
::Redis::Alfred.delete(::Redis::Alfred::CHATWOOT_INSTALLATION_ONBOARDING)
ステップ9. Live Agentにアクセスして内容を確認する
既存のトークと設定を確認し、すべてが希望通りに動作していることを確認します。すべての確認が終わったら、バックアップを削除することができます。
# Delete the backup pod deployment, service, Storage Class and pvc
kubectl delete statefulset -n live-agent postgres-backup
kubectl delete service -n live-agent postgres-backup
kubectl delete sc postgres-backup
kubectl delete pvc -n live-agent <postgres-backup-pvc>
リリースされた永続ボリュームが削除されていることを忘れず確認してください。問題がある場合は、テクニカルサポートにお問い合わせください。