GitLab システム管理者 - ハンズオンラボ: Kubernetes のバックアップとリストア

このハンズオンガイドでは、GitLab Kubernetes インスタンスのバックアップとリストア方法を紹介します。

推定所要時間: 30 分

目的

このラボの目的は、仮想マシン上の GitLab インスタンスをバックアップし、以前の状態にリストアする方法を示すことです。GitLab インスタンスのバックアップ/リストアの詳細については、こちらをクリックしてください。

タスク A. バックアップ設定の構成

  1. GitLab インスタンスサーバーで SSH セッションを開きます。

  2. お好みのテキストエディターで helm 値を開きます。

  3. このファイル内で、バックアップを有効にするためにいくつかの設定を更新する必要があります。まず、次の global 設定を追加します。

    global:
      appConfig:
        backups:
          bucket: gitlab-k8-bucket
        tmpBucket:
          bucket: gitlab-k8-tmp-bucket
    

    これらの設定は、各バックアップタイプのリモートストレージバケットの名前を設定します。

  4. Kubernetes のバックアップは toolbox Pod を通じて行われます。この Pod がバックアップを実行できるようにするには、バックアッププロバイダーに接続できる必要があります。次の設定を gitlab ブロックに追加することで実現できます。

      toolbox:
        backups:
          objectStorage:
            backend: gcs
            config:
              key: config
              secret: storage-config
              gcpProject: demosys-ilt-training-cloud
    
  5. これらのバケットにアクセスできるようにするには、GCS サービスアカウントの認証情報を提供する必要があります。これを行うには、kubectl create secret generic storage-config --from-file=config=storage.config コマンドを実行します。

  6. この設定を追加したら、helm upgrade --install gitlab gitlab/gitlab --version 9.4.3 --timeout 100s -f values.yml コマンドを実行します。

タスク B. GitLab インスタンスのバックアップ

  1. フルバックアップを取得するには、まず toolbox Pod を見つけます。

    kubectl get pods -lapp=toolbox
    
  2. 次に、toolbox Pod からバックアップユーティリティを実行します。

    kubectl exec <toolbox-name>  -it -- backup-utility
    
  3. 最後に、Kubernetes シークレットを取得してファイルに保存します。

    #Rails シークレットを取得
    kubectl get secrets | grep rails-secret
    
    #シークレットをローカルの場所に保存
    kubectl get secrets <rails-secret-name> -o jsonpath="{.data['secrets\.yml']}" | base64 --decode > gitlab-secrets.yaml
    

この時点で、バックアップはオブジェクトストレージに保存されます。ファイル名をメモしておきます。例: s3://bucket/1729261040_2024_10_18_17.4.1-ee_gitlab_backup.tar

重要: タイムスタンプをメモしておきます(この例では: 1729261040_2024_10_18_17.4.1-ee)。リストアプロセスで必要になります。

タスク C. GitLab 設定の変更

  1. Web ブラウザーで GitLab インスタンスにサインインし、サイドバーを開きます。左下隅の Admin area をクリックします。

  2. 左サイドバーで Settings > General を選択します。

  3. Account and limit を展開し、最大添付ファイルサイズを 500 MiB に、デフォルトのプロジェクト制限を 10000 に変更します。

  4. Save changes をクリックして変更を保存します。

  5. ページを更新して変更が適用されたことを確認します。

タスク D. バックアップからのリストア

  1. GitLab インスタンスサーバーの SSH セッションに戻ります。

  2. 現在の Kubernetes シークレットを削除します。

    kubectl delete secret <rails-secret-name>
    
  3. バックアップした Kubernetes シークレットに基づいて新しいシークレットセットを作成します。

    kubectl create secret generic <rails-secret-name> --from-file=secrets.yml=gitlab-secrets.yaml
    
  4. シークレットを適用するために Kubernetes Pod を再起動します。

    kubectl delete pods -lapp=sidekiq,release=gitlab
    kubectl delete pods -lapp=webservice,release=gitlab
    kubectl delete pods -lapp=toolbox,release=gitlab
    
  5. リストアプロセスを開始するには、toolbox Pod の名前を見つけます。

    kubectl get pods -lapp=toolbox
    
  6. Kubernetes Pod のレプリカを 0 にスケールダウンします。

    kubectl scale deploy -lapp=sidekiq,release=gitlab --replicas=0
    kubectl scale deploy -lapp=webservice,release=gitlab --replicas=0
    kubectl scale deploy -lapp=prometheus,release=gitlab --replicas=0
    
  7. バックアップコマンドから取得したタイムスタンプ ID を使用してリストアを実行します。

    kubectl exec <Toolbox pod name> -it -- backup-utility --restore -t your-timestamp-id
    

    リストアプロセスを開始するよう求められた場合は、yes と入力します。

  8. リストアプロセスが完了したら、Pod をスケールアップします。

    kubectl scale deploy -lapp=sidekiq,release=gitlab --replicas=1
    kubectl scale deploy -lapp=webservice,release=gitlab --replicas=1
    kubectl scale deploy -lapp=prometheus,release=gitlab --replicas=1
    
  9. Kubernetes インスタンスにアクセスして、リストアが正常に完了したことを確認します。

ラボガイド完了

このラボ演習を完了しました。このコースの他のラボガイドを参照できます。

ご提案はありますか?

ラボに変更を加えたい場合は、マージリクエストを通じて変更内容を送信してください。