7. データバックアップ・リストア

7.1. 目的

本書では、Exastroシステムで利用する永続データのバックアップとリストア手順について説明します。
パブリッククラウドの仕組みにより、データバックアップの仕組みが利用可能であればそちらを利用しても問題ありません。

7.2. 前提条件

本頁で紹介するバックアップ・リストア手順では、下記の前提条件を満たしている必要があります。

7.2.1. 条件

  • 下記のコマンドが利用可能なこと
    • tar

    • kubectl

  • 作業環境のサーバで充分なディスクの空き容量があること

7.2.2. 暗号化キーのバックアップ

Exastro システムのパスワードや認証情報といった機密情報はすべて暗号化されています。
必ず、下記で取得した暗号化キーをバックアップして、適切に保管してください。

危険

暗号化キーを紛失した場合、バックアップデータからシステムを復旧した際にデータの復号ができなくなります。
リスト 7.1 コマンド
# Exastro IT Automation ENCRYPT_KEY
kubectl get secret ita-secret-ita-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
リスト 7.2 出力結果
JnIoXzJtPic2MXFqRl1yI1chMj8hWzQrNypmVn41Pk8=
リスト 7.3 コマンド
# Exastro Platform ENCRYPT_KEY
kubectl get secret platform-secret-pf-global --namespace exastro -o jsonpath='{.data.ENCRYPT_KEY}' | base64 -d
リスト 7.4 出力結果
bHFZe2VEVVM2PmFeQDMqNG4oZT4lTlglLjJJekxBTHE=

7.3. 概要

バックアップ・リストア対象となるデータは下記の3つです。
  • バックアップ・リストア対象
    • Exastro Platform のデータベース

    • Exastro IT Automation のデータベース

    • Exastro IT Automation の共有ファイル

    • Exastro IT Automation OASE のMongoDB

これらのデータを kubectl コマンドを利用してバックアップ・リストアします。
作業の流れは、まず、ユーザからのデータの書き込みを制限するために、リバースプロキシを停止します。
次にバックヤード処理を停止し、データのバックアップを実施します。
最後に、作業前の数に Pod 数を戻します。
リストアの際の作業も同様の流れになります。

危険

本手順では、サービスの停止が発生します。

7.4. バックアップ

7.4.1. サービス停止

  1. Pod 起動数の確認

    作業前の Pod 起動数の確認をし、状態を記録します。
    リスト 7.5 コマンド
    RS_AE=`kubectl get deploy ita-by-ansible-execute -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_ALRV=`kubectl get deploy ita-by-ansible-legacy-role-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_ATS=`kubectl get deploy ita-by-ansible-towermaster-sync -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_CS=`kubectl get deploy ita-by-conductor-synchronize -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_MC=`kubectl get deploy ita-by-menu-create -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_PA=`kubectl get deploy platform-auth -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    
    以下はITA2.1.0以降の場合に実行してください。
    RS_ALV=`kubectl get deploy ita-by-ansible-legacy-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_APV=`kubectl get deploy ita-by-ansible-pioneer-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_CFI=`kubectl get deploy ita-by-cicd-for-iac -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_CR=`kubectl get deploy ita-by-conductor-regularly -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_COL=`kubectl get deploy ita-by-collector -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_EEI=`kubectl get deploy ita-by-excel-export-import -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_HS=`kubectl get deploy ita-by-hostgroup-split -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_MEI=`kubectl get deploy ita-by-menu-export-import -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCE=`kubectl get deploy ita-by-terraform-cli-execute -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCV=`kubectl get deploy ita-by-terraform-cli-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCEE=`kubectl get deploy ita-by-terraform-cloud-ep-execute -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCEV=`kubectl get deploy ita-by-terraform-cloud-ep-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    
    以下はITA2.3.0以降の場合に実行してください。
    RS_OC=`kubectl get deploy ita-by-oase-conclusion -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    
  2. リバースプロキシの停止

    リバースプロキシ (platform-auth) の Pod 起動数を 0 に変更し、エンドユーザーからのアクセスを制限します。
    リスト 7.6 コマンド
    kubectl scale deployment platform-auth --namespace exastro --replicas=0
    
  3. バックヤード処理の停止

    バックヤード処理 (ita-by-***) の Pod 起動数を 0 に変更し、データベースの更新を停止します。
    リスト 7.7 コマンド
    kubectl scale deployment ita-by-ansible-execute --namespace exastro --replicas=0
    kubectl scale deployment ita-by-ansible-legacy-role-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-ansible-towermaster-sync --namespace exastro --replicas=0
    kubectl scale deployment ita-by-conductor-synchronize --namespace exastro --replicas=0
    kubectl scale deployment ita-by-menu-create --namespace exastro --replicas=0
    
    以下はITA2.1.0以降の場合に実行してください。
    kubectl scale deployment ita-by-ansible-legacy-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-ansible-pioneer-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-cicd-for-iac --namespace exastro --replicas=0
    kubectl scale deployment ita-by-collector --namespace exastro --replicas=0
    kubectl scale deployment ita-by-conductor-regularly --namespace exastro --replicas=0
    kubectl scale deployment ita-by-excel-export-import --namespace exastro --replicas=0
    kubectl scale deployment ita-by-hostgroup-split --namespace exastro --replicas=0
    kubectl scale deployment ita-by-menu-export-import --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cli-execute --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cli-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cloud-ep-execute --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cloud-ep-vars-listup --namespace exastro --replicas=0
    
    以下はITA2.3.0以降の場合に実行してください。
    kubectl scale deployment ita-by-oase-conclusion --namespace exastro --replicas=0
    
  4. Pod 起動数の確認

    上記で停止した対象の Pod 数が 0 になっていることを確認
    リスト 7.8 コマンド
    kubectl get deployment --namespace exastro
    
    リスト 7.9 実行結果
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    mariadb                                  1/1     1            1           3h41m
    ita-web-server                           1/1     1            1           3h41m
    platform-web                             1/1     1            1           3h41m
    ita-api-admin                            1/1     1            1           3h41m
    ita-api-organization                     1/1     1            1           3h41m
    platform-api                             1/1     1            1           3h41m
    keycloak                                 1/1     1            1           3h41m
    ita-by-menu-create                       0/0     0            0           3h41m
    ita-by-ansible-execute                   0/0     0            0           3h41m
    ita-by-ansible-legacy-role-vars-listup   0/0     0            0           3h41m
    ita-by-ansible-towermaster-sync          0/0     0            0           3h41m
    ita-by-conductor-synchronize             0/0     0            0           3h41m
    platform-auth                            0/0     0            0           3h41m
    
    以下はITA2.1.0以降の場合に確認してください。
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    ita-by-ansible-legacy-vars-listup        0/0     0            0           3h41m
    ita-by-ansible-pioneer-vars-listup       0/0     0            0           3h41m
    ita-by-cicd-for-iac                      0/0     0            0           3h41m
    ita-by-collector                         0/0     0            0           3h41m
    ita-by-conductor-regularly               0/0     0            0           3h41m
    ita-by-excel-export-import               0/0     0            0           3h41m
    ita-by-hostgroup-split                   0/0     0            0           3h41m
    ita-by-menu-export-import                0/0     0            0           3h41m
    ita-by-terraform-cli-execute             0/0     0            0           3h41m
    ita-by-terraform-cli-vars-listup         0/0     0            0           3h41m
    ita-by-terraform-cloud-ep-execute        0/0     0            0           3h41m
    ita-by-terraform-cloud-ep-vars-listup    0/0     0            0           3h41m
    
    以下はITA2.3.0以降の場合に確認してください。
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    ita-api-oase-receiver                    1/1     1            1           3h41m
    ita-by-oase-conclusion                   0/0     0            0           3h41m
    

7.4.2. バックアップ

Exastro システム内で、Exastro Platform と Exastro IT Automation でデータベースを共有するか、分離するかによって手順が異なります。
  1. メンテナンス用コンテナの作成

    データベース、ファイルのバックアップ作業用コンテナの作成をします。
    リスト 7.10 コマンド
     1cat <<_EOF_ | kubectl apply -f - --namespace exastro
     2apiVersion: v1
     3kind: Pod
     4metadata:
     5  name: exastro-maintenance
     6  namespace: exastro
     7spec:
     8  containers:
     9  - command:
    10    - sh
    11    - -c
    12    args:
    13    - |
    14      #!/bin/bash
    15      sleep 3600
    16    env:
    17    - name: PF_DB_DATABASE
    18      valueFrom:
    19        configMapKeyRef:
    20          key: DB_DATABASE
    21          name: platform-params-pf-database
    22    - name: PF_DB_HOST
    23      valueFrom:
    24        configMapKeyRef:
    25          key: DB_HOST
    26          name: platform-params-pf-database
    27    - name: PF_DB_PORT
    28      valueFrom:
    29        configMapKeyRef:
    30          key: DB_PORT
    31          name: platform-params-pf-database
    32    - name: PF_DB_ADMIN_PASSWORD
    33      valueFrom:
    34        secretKeyRef:
    35          key: DB_ADMIN_PASSWORD
    36          name: platform-secret-pf-database
    37    - name: PF_DB_ADMIN_USER
    38      valueFrom:
    39        secretKeyRef:
    40          key: DB_ADMIN_USER
    41          name: platform-secret-pf-database
    42    - name: ITA_DB_DATABASE
    43      valueFrom:
    44        configMapKeyRef:
    45          key: DB_DATABASE
    46          name: ita-params-ita-database
    47    - name: ITA_DB_HOST
    48      valueFrom:
    49        configMapKeyRef:
    50          key: DB_HOST
    51          name: ita-params-ita-database
    52    - name: ITA_DB_PORT
    53      valueFrom:
    54        configMapKeyRef:
    55          key: DB_PORT
    56          name: ita-params-ita-database
    57    - name: ITA_STORAGEPATH
    58      valueFrom:
    59        configMapKeyRef:
    60          key: STORAGEPATH
    61          name: ita-params-ita-global
    62    - name: ITA_DB_ADMIN_PASSWORD
    63      valueFrom:
    64        secretKeyRef:
    65          key: DB_ADMIN_PASSWORD
    66          name: ita-secret-ita-database
    67    - name: ITA_DB_ADMIN_USER
    68      valueFrom:
    69        secretKeyRef:
    70          key: DB_ADMIN_USER
    71          name: ita-secret-ita-database
    72    image: mariadb:10.9
    73    imagePullPolicy: IfNotPresent
    74    name: exastro-maintenance
    75    resources: {}
    76    securityContext:
    77      allowPrivilegeEscalation: false
    78      readOnlyRootFilesystem: false
    79      runAsGroup: 1000
    80      runAsNonRoot: true
    81      runAsUser: 1000
    82    volumeMounts:
    83    - mountPath: /storage
    84      name: volume-ita-backup-storage
    85  volumes:
    86  - name: volume-ita-backup-storage
    87    persistentVolumeClaim:
    88      claimName: pvc-ita-global
    89  restartPolicy: Always
    90  securityContext: {}
    91  serviceAccount: default
    92  serviceAccountName: default
    93_EOF_
    
    インストール時に設定したMongoDBを利用している場合、MongoDBのバックアップ作業用コンテナの作成をします。
    リスト 7.11 コマンド
     1cat <<_EOF_ | kubectl apply -f - --namespace exastro
     2apiVersion: v1
     3kind: Pod
     4metadata:
     5  name: exastro-oase-maintenance
     6  namespace: exastro
     7spec:
     8  containers:
     9  - command:
    10    - sh
    11    - -c
    12    args:
    13    - |
    14      #!/bin/bash
    15      sleep 3600
    16    env:
    17    - name: ITA_MONGO_HOST
    18      valueFrom:
    19        configMapKeyRef:
    20          key: MONGO_HOST
    21          name: ita-params-mongo
    22    - name: ITA_MONGO_PORT
    23      valueFrom:
    24        configMapKeyRef:
    25          key: MONGO_PORT
    26          name: ita-params-mongo
    27    - name: ITA_MONGO_ADMIN_USER
    28      valueFrom:
    29        secretKeyRef:
    30          key: MONGO_ADMIN_USER
    31          name: ita-secret-mongo
    32    - name: ITA_MONGO_ADMIN_PASSWORD
    33      valueFrom:
    34        secretKeyRef:
    35          key: MONGO_ADMIN_PASSWORD
    36          name: ita-secret-mongo
    37    image: mongo:6.0
    38    imagePullPolicy: IfNotPresent
    39    name: exastro-oase-maintenance
    40    resources: {}
    41    securityContext:
    42      allowPrivilegeEscalation: false
    43      readOnlyRootFilesystem: false
    44    volumeMounts:
    45    - mountPath: /storage
    46      name: volume-ita-backup-storage
    47  volumes:
    48  - name: volume-ita-backup-storage
    49    persistentVolumeClaim:
    50      claimName: pvc-ita-global
    51  restartPolicy: Always
    52  securityContext: {}
    53  serviceAccount: default
    54  serviceAccountName: default
    55_EOF_
    
  2. データベースのバックアップ取得

    データベースに対して mysqldump バックアップを取得します。
    Exastro Platform と Exastro IT Automation でデータベースサーバを共有するか、分離するかによって手順が異なります。
    リスト 7.12 アプリケーション用データベースバックアップコマンド
    kubectl exec -it exastro-maintenance --namespace exastro -- sh -c 'mysqldump -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} --all-databases --add-drop-table' | gzip > exastro_mysqldump_platform_db_`date +"%Y%m%d-%H%M%S"`.sql.gz
    
    リスト 7.13 ユーザ用データベースバックアップコマンド①
    kubectl exec -it exastro-maintenance --namespace exastro -- sh -c 'mysqldump -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} --allow-keywords  mysql --ignore-table=mysql.global_priv' | gzip > exastro_mysqldump_platform_mysql_`date +"%Y%m%d-%H%M%S"`.sql.gz
    
    リスト 7.14 ユーザ用データベースバックアップコマンド②
    # 作業用コンテナに入る
    kubectl exec -it exastro-maintenance --namespace exastro -- bash
    
    mysqldump -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} --allow-keywords --no-create-info mysql global_priv --where="user NOT IN ('mariadb.sys', 'root', 'keycloak', 'healthcheck', 'pf-user', 'ITA_USER')" >> /tmp/exastro_mysqldump_platform_mysqlgp.sql
    
    # 作業用コンテナから抜ける
    exit
    
    kubectl exec -it exastro-maintenance --namespace exastro -- sh -c 'cat /tmp/exastro_mysqldump_platform_mysqlgp.sql' | gzip > exastro_mysqldump_platform_mysqlgp_`date +"%Y%m%d-%H%M%S"`.sql.gz
    
  3. ファイルのバックアップ取得

    Exastro IT Automation のファイルのバックアップを取得します。
    リスト 7.21 コマンド
    kubectl exec -i exastro-maintenance --namespace exastro -- sh -c 'tar zcvf - ${ITA_STORAGEPATH}' > exastro_storage_backup_ita_`date +"%Y%m%d-%H%M%S"`.tar.gz
    
  4. MongoDBのバックアップ取得

    OASEでインストール時に設定したMongoDBを利用している場合、MongoDBに対して mongodump バックアップを取得します。
    リスト 7.22 コマンド
    kubectl exec -it exastro-oase-maintenance --namespace exastro -- sh -c 'mongodump --host=${ITA_MONGO_HOST} --port=${ITA_MONGO_PORT} --username=${ITA_MONGO_ADMIN_USER} --password=${ITA_MONGO_ADMIN_PASSWORD} --out=/storage/exastro_mongodump'
    
    sudo tar cvfz exastro_mongodump_`date +"%Y%m%d-%H%M%S"`.tar.gz /var/data/exastro_mongodump --remove-files
    
  5. メンテナンス用コンテナの削除

    バックアップ作業用コンテナを削除します。
    リスト 7.23 コマンド
    kubectl delete pod exastro-maintenance --namespace exastro
    
    # OASE利用の場合
    kubectl delete pod exastro-oase-maintenance --namespace exastro
    

7.4.3. サービス再開

  1. サービス再開

    サービス停止時に取得した各 Deployment の Pod 起動数を元に戻します。
    リスト 7.24 コマンド
    kubectl scale deployment ita-by-ansible-execute --namespace exastro --replicas=${RS_AE}
    kubectl scale deployment ita-by-ansible-legacy-role-vars-listup --namespace exastro --replicas=${RS_ALRV}
    kubectl scale deployment ita-by-ansible-towermaster-sync --namespace exastro --replicas=${RS_ATS}
    kubectl scale deployment ita-by-conductor-synchronize --namespace exastro --replicas=${RS_CS}
    kubectl scale deployment ita-by-menu-create --namespace exastro --replicas=${RS_MC}
    kubectl scale deployment platform-auth --namespace exastro --replicas=${RS_PA}
    
    以下はITA2.1.1以降の場合に実行してください。
    kubectl scale deployment ita-by-ansible-legacy-vars-listup --namespace exastro --replicas=${RS_ALV}
    kubectl scale deployment ita-by-ansible-pioneer-vars-listup --namespace exastro --replicas=${RS_APV}
    kubectl scale deployment ita-by-cicd-for-iac --namespace exastro --replicas=${RS_CFI}
    kubectl scale deployment ita-by-conductor-regularly --namespace exastro --replicas=${RS_CR}
    kubectl scale deployment ita-by-collector --namespace exastro --replicas=${RS_COL}
    kubectl scale deployment ita-by-excel-export-import --namespace exastro --replicas=${RS_EEI}
    kubectl scale deployment ita-by-hostgroup-split --namespace exastro --replicas=${RS_HS}
    kubectl scale deployment ita-by-menu-export-import --namespace exastro --replicas=${RS_MEI}
    kubectl scale deployment ita-by-terraform-cli-execute --namespace exastro --replicas=${RS_TCE}
    kubectl scale deployment ita-by-terraform-cli-vars-listup --namespace exastro --replicas=${RS_TCV}
    kubectl scale deployment ita-by-terraform-cloud-ep-execute --namespace exastro --replicas=${RS_TCEE}
    kubectl scale deployment ita-by-terraform-cloud-ep-vars-listup --namespace exastro --replicas=${RS_TCEV}
    
    以下はITA2.3.0以降の場合に実行してください。
    kubectl scale deployment ita-by-oase-conclusion --namespace exastro --replicas=${RS_OC}
    
  2. Pod 起動数の確認

    上記で起動した対象の Pod 数が元に戻りすべて READY になっていることを確認
    リスト 7.25 コマンド
    kubectl get deployment --namespace exastro
    
    リスト 7.26 実行結果
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    mariadb                                  1/1     1            1           7h46m
    ita-web-server                           1/1     1            1           7h46m
    platform-web                             1/1     1            1           7h46m
    ita-api-admin                            1/1     1            1           7h46m
    ita-api-organization                     1/1     1            1           7h46m
    platform-api                             1/1     1            1           7h46m
    keycloak                                 1/1     1            1           7h46m
    ita-by-menu-create                       1/1     1            1           7h46m
    ita-by-ansible-execute                   1/1     1            1           7h46m
    ita-by-ansible-legacy-role-vars-listup   1/1     1            1           7h46m
    ita-by-ansible-towermaster-sync          1/1     1            1           7h46m
    ita-by-conductor-synchronize             1/1     1            1           7h46m
    platform-auth                            1/1     1            1           7h46m
    
    以下はITA2.1.0以降の場合に確認してください。
    ita-by-ansible-legacy-vars-listup        1/1     1            1           7h46m
    ita-by-ansible-pioneer-vars-listup       1/1     1            1           7h46m
    ita-by-cicd-for-iac                      1/1     1            1           7h46m
    ita-by-collector                         1/1     1            1           7h46m
    ita-by-conductor-regularly               1/1     1            1           7h46m
    ita-by-excel-export-import               1/1     1            1           7h46m
    ita-by-hostgroup-split                   1/1     1            1           7h46m
    ita-by-menu-export-import                1/1     1            1           7h46m
    ita-by-terraform-cli-execute             1/1     1            1           7h46m
    ita-by-terraform-cli-vars-listup         1/1     1            1           7h46m
    ita-by-terraform-cloud-ep-execute        1/1     1            1           7h46m
    ita-by-terraform-cloud-ep-vars-listup    1/1     1            1           7h46m
    
    以下はITA2.3.0以降の場合に確認してください。
    ita-api-oase-receiver                    1/1     1            1           7h46m
    ita-by-oase-conclusion                   1/1     1            1           7h46m
    

7.5. リストア

7.5.1. サービス停止

  1. Pod 起動数の確認

    作業前の Pod 起動数の確認をし、状態を記録します。
    リスト 7.27 コマンド
    RS_AE=`kubectl get deploy ita-by-ansible-execute -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_ALRV=`kubectl get deploy ita-by-ansible-legacy-role-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_ATS=`kubectl get deploy ita-by-ansible-towermaster-sync -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_CS=`kubectl get deploy ita-by-conductor-synchronize -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_MC=`kubectl get deploy ita-by-menu-create -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_PA=`kubectl get deploy platform-auth -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    
    以下はITA2.1.0以降の場合に実行してください。
    RS_ALV=`kubectl get deploy ita-by-ansible-legacy-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_APV=`kubectl get deploy ita-by-ansible-pioneer-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_CFI=`kubectl get deploy ita-by-cicd-for-iac -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_CR=`kubectl get deploy ita-by-conductor-regularly -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_COL=`kubectl get deploy ita-by-collector -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_EEI=`kubectl get deploy ita-by-excel-export-import -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_HS=`kubectl get deploy ita-by-hostgroup-split -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_MEI=`kubectl get deploy ita-by-menu-export-import -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCE=`kubectl get deploy ita-by-terraform-cli-execute -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCV=`kubectl get deploy ita-by-terraform-cli-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCEE=`kubectl get deploy ita-by-terraform-cloud-ep-execute -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    RS_TCEV=`kubectl get deploy ita-by-terraform-cloud-ep-vars-listup -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    
    以下はITA2.3.0以降の場合に実行してください。
    RS_OC=`kubectl get deploy ita-by-oase-conclusion -o jsonpath='{@.spec.replicas}{"\n"}' --namespace exastro`
    
  2. リバースプロキシの停止

    リバースプロキシ (platform-auth) の Pod 起動数を 0 に変更し、エンドユーザーからのアクセスを制限します。
    リスト 7.28 コマンド
    kubectl scale deployment platform-auth --namespace exastro --replicas=0
    
  3. バックヤード処理の停止

    バックヤード処理 (ita-by-***) の Pod 起動数を 0 に変更し、データベースの更新を停止します。
    リスト 7.29 コマンド
    kubectl scale deployment ita-by-ansible-execute --namespace exastro --replicas=0
    kubectl scale deployment ita-by-ansible-legacy-role-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-ansible-towermaster-sync --namespace exastro --replicas=0
    kubectl scale deployment ita-by-conductor-synchronize --namespace exastro --replicas=0
    kubectl scale deployment ita-by-menu-create --namespace exastro --replicas=0
    
    以下はITA2.1.0以降の場合に実行してください。
    kubectl scale deployment ita-by-ansible-legacy-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-ansible-pioneer-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-cicd-for-iac --namespace exastro --replicas=0
    kubectl scale deployment ita-by-collector --namespace exastro --replicas=0
    kubectl scale deployment ita-by-conductor-regularly --namespace exastro --replicas=0
    kubectl scale deployment ita-by-excel-export-import --namespace exastro --replicas=0
    kubectl scale deployment ita-by-hostgroup-split --namespace exastro --replicas=0
    kubectl scale deployment ita-by-menu-export-import --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cli-execute --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cli-vars-listup --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cloud-ep-execute --namespace exastro --replicas=0
    kubectl scale deployment ita-by-terraform-cloud-ep-vars-listup --namespace exastro --replicas=0
    
    以下はITA2.3.0以降の場合に実行してください。
    kubectl scale deployment ita-by-oase-conclusion --namespace exastro --replicas=0
    
  4. Pod 起動数の確認

    上記で停止した対象の Pod 数が 0 になっていることを確認
    リスト 7.30 コマンド
    kubectl get deployment --namespace exastro
    
    リスト 7.31 実行結果
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    mariadb                                  1/1     1            1           3h41m
    ita-web-server                           1/1     1            1           3h41m
    platform-web                             1/1     1            1           3h41m
    ita-api-admin                            1/1     1            1           3h41m
    ita-api-organization                     1/1     1            1           3h41m
    platform-api                             1/1     1            1           3h41m
    keycloak                                 1/1     1            1           3h41m
    ita-by-menu-create                       0/0     0            0           3h41m
    ita-by-ansible-execute                   0/0     0            0           3h41m
    ita-by-ansible-legacy-role-vars-listup   0/0     0            0           3h41m
    ita-by-ansible-towermaster-sync          0/0     0            0           3h41m
    ita-by-conductor-synchronize             0/0     0            0           3h41m
    platform-auth                            0/0     0            0           3h41m
    
    以下はITA2.1.0以降の場合に確認してください。
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    ita-by-ansible-legacy-vars-listup        0/0     0            0           3h41m
    ita-by-ansible-pioneer-vars-listup       0/0     0            0           3h41m
    ita-by-cicd-for-iac                      0/0     0            0           3h41m
    ita-by-collector                         0/0     0            0           3h41m
    ita-by-conductor-regularly               0/0     0            0           3h41m
    ita-by-excel-export-import               0/0     0            0           3h41m
    ita-by-hostgroup-split                   0/0     0            0           3h41m
    ita-by-menu-export-import                0/0     0            0           3h41m
    ita-by-terraform-cli-execute             0/0     0            0           3h41m
    ita-by-terraform-cli-vars-listup         0/0     0            0           3h41m
    ita-by-terraform-cloud-ep-execute        0/0     0            0           3h41m
    ita-by-terraform-cloud-ep-vars-listup    0/0     0            0           3h41m
    
    以下はITA2.3.0以降の場合に確認してください。
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    ita-api-oase-receiver                    1/1     1            1           3h41m
    ita-by-oase-conclusion                   0/0     0            0           3h41m
    

7.5.2. リストア

Exastro システム内で、Exastro Platform と Exastro IT Automation でデータベースを共有するか、分離するかによって手順が異なります。
  1. メンテナンス用コンテナの作成

    データベース、ファイルのリストア作業用コンテナの作成をします。
    リスト 7.32 コマンド
     1cat <<_EOF_ | kubectl apply -f - --namespace exastro
     2apiVersion: v1
     3kind: Pod
     4metadata:
     5  name: exastro-maintenance
     6  namespace: exastro
     7spec:
     8  containers:
     9  - command:
    10    - sh
    11    - -c
    12    args:
    13    - |
    14      #!/bin/bash
    15      sleep 3600
    16    env:
    17    - name: PF_DB_DATABASE
    18      valueFrom:
    19        configMapKeyRef:
    20          key: DB_DATABASE
    21          name: platform-params-pf-database
    22    - name: PF_DB_HOST
    23      valueFrom:
    24        configMapKeyRef:
    25          key: DB_HOST
    26          name: platform-params-pf-database
    27    - name: PF_DB_PORT
    28      valueFrom:
    29        configMapKeyRef:
    30          key: DB_PORT
    31          name: platform-params-pf-database
    32    - name: PF_DB_ADMIN_PASSWORD
    33      valueFrom:
    34        secretKeyRef:
    35          key: DB_ADMIN_PASSWORD
    36          name: platform-secret-pf-database
    37    - name: PF_DB_ADMIN_USER
    38      valueFrom:
    39        secretKeyRef:
    40          key: DB_ADMIN_USER
    41          name: platform-secret-pf-database
    42    - name: ITA_DB_DATABASE
    43      valueFrom:
    44        configMapKeyRef:
    45          key: DB_DATABASE
    46          name: ita-params-ita-database
    47    - name: ITA_DB_HOST
    48      valueFrom:
    49        configMapKeyRef:
    50          key: DB_HOST
    51          name: ita-params-ita-database
    52    - name: ITA_DB_PORT
    53      valueFrom:
    54        configMapKeyRef:
    55          key: DB_PORT
    56          name: ita-params-ita-database
    57    - name: ITA_STORAGEPATH
    58      valueFrom:
    59        configMapKeyRef:
    60          key: STORAGEPATH
    61          name: ita-params-ita-global
    62    - name: ITA_DB_ADMIN_PASSWORD
    63      valueFrom:
    64        secretKeyRef:
    65          key: DB_ADMIN_PASSWORD
    66          name: ita-secret-ita-database
    67    - name: ITA_DB_ADMIN_USER
    68      valueFrom:
    69        secretKeyRef:
    70          key: DB_ADMIN_USER
    71          name: ita-secret-ita-database
    72    image: mariadb:10.9
    73    imagePullPolicy: IfNotPresent
    74    name: exastro-maintenance
    75    resources: {}
    76    securityContext:
    77      allowPrivilegeEscalation: false
    78      readOnlyRootFilesystem: false
    79      runAsGroup: 1000
    80      runAsNonRoot: true
    81      runAsUser: 1000
    82    volumeMounts:
    83    - mountPath: /storage
    84      name: volume-ita-backup-storage
    85  volumes:
    86  - name: volume-ita-backup-storage
    87    persistentVolumeClaim:
    88      claimName: pvc-ita-global
    89  restartPolicy: Always
    90  securityContext: {}
    91  serviceAccount: default
    92  serviceAccountName: default
    93_EOF_
    
    インストール時に設定したMongoDBを利用している場合、MongoDBのリストア作業用コンテナの作成をします。
    リスト 7.33 コマンド
     1cat <<_EOF_ | kubectl apply -f - --namespace exastro
     2apiVersion: v1
     3kind: Pod
     4metadata:
     5  name: exastro-oase-maintenance
     6  namespace: exastro
     7spec:
     8  containers:
     9  - command:
    10    - sh
    11    - -c
    12    args:
    13    - |
    14      #!/bin/bash
    15      sleep 3600
    16    env:
    17    - name: ITA_MONGO_HOST
    18      valueFrom:
    19        configMapKeyRef:
    20          key: MONGO_HOST
    21          name: ita-params-mongo
    22    - name: ITA_MONGO_PORT
    23      valueFrom:
    24        configMapKeyRef:
    25          key: MONGO_PORT
    26          name: ita-params-mongo
    27    - name: ITA_MONGO_ADMIN_USER
    28      valueFrom:
    29        secretKeyRef:
    30          key: MONGO_ADMIN_USER
    31          name: ita-secret-mongo
    32    - name: ITA_MONGO_ADMIN_PASSWORD
    33      valueFrom:
    34        secretKeyRef:
    35          key: MONGO_ADMIN_PASSWORD
    36          name: ita-secret-mongo
    37    image: mongo:6.0
    38    imagePullPolicy: IfNotPresent
    39    name: exastro-oase-maintenance
    40    resources: {}
    41    securityContext:
    42      allowPrivilegeEscalation: false
    43      readOnlyRootFilesystem: false
    44    volumeMounts:
    45    - mountPath: /storage
    46      name: volume-ita-backup-storage
    47  volumes:
    48  - name: volume-ita-backup-storage
    49    persistentVolumeClaim:
    50      claimName: pvc-ita-global
    51  restartPolicy: Always
    52  securityContext: {}
    53  serviceAccount: default
    54  serviceAccountName: default
    55_EOF_
    
  2. データベースのリストア実施

    データベースに対して mysqldump リストアを実施します。
    Exastro Platform と Exastro IT Automation でデータベースサーバを共有するか、分離するかによって手順が異なります。
    リスト 7.34 ユーザ用データベースリストアコマンド
    gzip -dc exastro_mysqldump_platform_mysql_YYYYMMDD-HHmmss.sql.gz | kubectl exec -i exastro-maintenance --namespace exastro -- sh -c 'mysql -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} mysql'
    
    gzip -dc exastro_mysqldump_platform_mysqlgp_YYYYMMDD-HHmmss.sql.gz | kubectl exec -i exastro-maintenance --namespace exastro -- sh -c 'mysql -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD} mysql'
    
    リスト 7.35 アプリケーション用データベースリストアコマンド
    gzip -dc exastro_mysqldump_platform_db_YYYYMMDD-HHmmss.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/'| kubectl exec -i exastro-maintenance --namespace exastro -- sh -c 'mysql -h ${PF_DB_HOST} -P ${PF_DB_PORT} -u ${PF_DB_ADMIN_USER} -p${PF_DB_ADMIN_PASSWORD}'
    
  3. ファイルのリストア実施

    Exastro IT Automation のファイルのリストアを実施します。
    リスト 7.40 コマンド
    kubectl exec -i exastro-maintenance --namespace exastro -- sh -c 'tar zxvf - -C /' < exastro_storage_backup_ita_YYYYMMDD-HHmmss.tar.gz
    
  4. MongoDBのリストア実施

    OASEでインストール時に設定したMongoDBを利用している場合、MongoDBのリストアを実施します。
    リスト 7.41 コマンド
    mv exastro_mongodump_YYYYMMDD-HHmmss.tar.gz /var/data/exastro-suite/exastro-it-automation/ita-common/
    
    tar -zxvf exastro_mongodump_YYYYMMDD-HHmmss.tar.gz
    
    kubectl exec -it exastro-oase-maintenance --namespace exastro -- sh -c 'mongorestore --host=${ITA_MONGO_HOST} --port=${ITA_MONGO_PORT} --username=${ITA_MONGO_ADMIN_USER} --password=${ITA_MONGO_ADMIN_PASSWORD} /storage/exastro_mongodump'
    
  5. メンテナンス用コンテナの削除

    リストア作業用コンテナを削除します。
    リスト 7.42 コマンド
    kubectl delete pod exastro-maintenance --namespace exastro
    
    # OASE利用の場合
    kubectl delete pod exastro-oase-maintenance --namespace exastro
    

7.5.3. サービス再開

  1. サービス再開

    サービス停止時に取得した各 Deployment の Pod 起動数を元に戻します。
    リスト 7.43 コマンド
    kubectl scale deployment ita-by-ansible-execute --namespace exastro --replicas=${RS_AE}
    kubectl scale deployment ita-by-ansible-legacy-role-vars-listup --namespace exastro --replicas=${RS_ALRV}
    kubectl scale deployment ita-by-ansible-towermaster-sync --namespace exastro --replicas=${RS_ATS}
    kubectl scale deployment ita-by-conductor-synchronize --namespace exastro --replicas=${RS_CS}
    kubectl scale deployment ita-by-menu-create --namespace exastro --replicas=${RS_MC}
    kubectl scale deployment platform-auth --namespace exastro --replicas=${RS_PA}
    
    以下はITA2.1.1以降の場合に実行してください。
    kubectl scale deployment ita-by-ansible-legacy-vars-listup --namespace exastro --replicas=${RS_ALV}
    kubectl scale deployment ita-by-ansible-pioneer-vars-listup --namespace exastro --replicas=${RS_APV}
    kubectl scale deployment ita-by-cicd-for-iac --namespace exastro --replicas=${RS_CFI}
    kubectl scale deployment ita-by-conductor-regularly --namespace exastro --replicas=${RS_CR}
    kubectl scale deployment ita-by-collector --namespace exastro --replicas=${RS_COL}
    kubectl scale deployment ita-by-excel-export-import --namespace exastro --replicas=${RS_EEI}
    kubectl scale deployment ita-by-hostgroup-split --namespace exastro --replicas=${RS_HS}
    kubectl scale deployment ita-by-menu-export-import --namespace exastro --replicas=${RS_MEI}
    kubectl scale deployment ita-by-terraform-cli-execute --namespace exastro --replicas=${RS_TCE}
    kubectl scale deployment ita-by-terraform-cli-vars-listup --namespace exastro --replicas=${RS_TCV}
    kubectl scale deployment ita-by-terraform-cloud-ep-execute --namespace exastro --replicas=${RS_TCEE}
    kubectl scale deployment ita-by-terraform-cloud-ep-vars-listup --namespace exastro --replicas=${RS_TCEV}
    
    以下はITA2.3.0以降の場合に実行してください。
    kubectl scale deployment ita-by-oase-conclusion --namespace exastro --replicas=${RS_OC}
    
  2. Pod 起動数の確認

    上記で起動した対象の Pod 数が元に戻りすべて READY になっていることを確認
    リスト 7.44 コマンド
    kubectl get deployment --namespace exastro
    
    リスト 7.45 実行結果
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    mariadb                                  1/1     1            1           7h46m
    ita-web-server                           1/1     1            1           7h46m
    platform-web                             1/1     1            1           7h46m
    ita-api-admin                            1/1     1            1           7h46m
    ita-api-organization                     1/1     1            1           7h46m
    platform-api                             1/1     1            1           7h46m
    keycloak                                 1/1     1            1           7h46m
    ita-by-menu-create                       1/1     1            1           7h46m
    ita-by-ansible-execute                   1/1     1            1           7h46m
    ita-by-ansible-legacy-role-vars-listup   1/1     1            1           7h46m
    ita-by-ansible-towermaster-sync          1/1     1            1           7h46m
    ita-by-conductor-synchronize             1/1     1            1           7h46m
    platform-auth                            1/1     1            1           7h46m
    
    以下はITA2.1.0以降の場合に確認してください。
    ita-by-ansible-legacy-vars-listup        1/1     1            1           7h46m
    ita-by-ansible-pioneer-vars-listup       1/1     1            1           7h46m
    ita-by-cicd-for-iac                      1/1     1            1           7h46m
    ita-by-collector                         1/1     1            1           7h46m
    ita-by-conductor-regularly               1/1     1            1           7h46m
    ita-by-excel-export-import               1/1     1            1           7h46m
    ita-by-hostgroup-split                   1/1     1            1           7h46m
    ita-by-menu-export-import                1/1     1            1           7h46m
    ita-by-terraform-cli-execute             1/1     1            1           7h46m
    ita-by-terraform-cli-vars-listup         1/1     1            1           7h46m
    ita-by-terraform-cloud-ep-execute        1/1     1            1           7h46m
    ita-by-terraform-cloud-ep-vars-listup    1/1     1            1           7h46m
    
    以下はITA2.3.0以降の場合に確認してください。
    ita-api-oase-receiver                    1/1     1            1           7h46m
    ita-by-oase-conclusion                   1/1     1            1           7h46m
    

7.6. トラブルシューティング

7.6.1. リストア後に500エラーが発生する

  • 事象

リストア作業実施後に画面にて、500エラーが発生する。
  • 対処

下記手順でリソースを一度削除した後、再度 インストール を実施してください。
リスト 7.46 Podの削除
kubectl delete deployment --all -n exastro

kubectl delete pod --all -n exastro
リスト 7.47 コンテナイメージの削除
docker exec -it kind-control-plane bash

for image in $(ctr -n k8s.io images ls | grep exastro | awk '{print $1}'); do
ctr -n k8s.io images rm $image
done

for image in $(ctr -n k8s.io images ls | grep mariadb | awk '{print $1}'); do
ctr -n k8s.io images rm $image
done

for image in $(ctr -n k8s.io images ls | grep mongo | awk '{print $1}'); do
ctr -n k8s.io images rm $image
done

for image in $(ctr -n k8s.io images ls | grep gitlab | awk '{print $1}'); do
ctr -n k8s.io images rm $image
done