検索

第5章 コントロールプレーンのバックアップおよび復元

download PDF

5.1. etcd のバックアップ

etcd は OpenShift Container Platform のキーと値のストアであり、すべてのリソースオブジェクトの状態を保存します。

クラスターの etcd データを定期的にバックアップし、OpenShift Container Platform 環境外の安全な場所に保存するのが理想的です。インストールの 24 時間後に行われる最初の証明書のローテーションが完了するまで etcd のバックアップを実行することはできません。ローテーションの完了前に実行すると、バックアップに期限切れの証明書が含まれることになります。etcd スナップショットは I/O コストが高いため、ピーク使用時間以外に etcd バックアップを取得することも推奨します。

クラスターのアップグレード後に必ず etcd バックアップを作成してください。これは、クラスターを復元する際に、同じ z-stream リリースから取得した etcd バックアップを使用する必要があるために重要になります。たとえば、OpenShift Container Platform 4.y.z クラスターは、4.y.z から取得した etcd バックアップを使用する必要があります。

重要

コントロールプレーンホストでバックアップスクリプトの単一の呼び出しを実行して、クラスターの etcd データをバックアップします。各コントロールプレーンホストのバックアップを取得しないでください。

etcd のバックアップを作成した後に、クラスターの直前の状態への復元を実行できます。

5.1.1. etcd データのバックアップ

以下の手順に従って、etcd スナップショットを作成し、静的 Pod のリソースをバックアップして etcd データをバックアップします。このバックアップは保存でき、etcd を復元する必要がある場合に後で使用することができます。

重要

単一のコントロールプレーンホストからのバックアップのみを保存します。クラスター内の各コントロールプレーンホストからのバックアップは取得しないでください。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • クラスター全体のプロキシーが有効になっているかどうかを確認している。

    ヒント

    oc get proxy cluster -o yaml の出力を確認して、プロキシーが有効にされているかどうかを確認できます。プロキシーは、httpProxyhttpsProxy、および noProxy フィールドに値が設定されている場合に有効にされます。

手順

  1. コントロールプレーンノードの root としてデバッグセッションを開始します。

    $ oc debug --as-root node/<node_name>
  2. デバッグシェルで root ディレクトリーを /host に変更します。

    sh-4.4# chroot /host
  3. クラスター全体のプロキシーが有効になっている場合は、次のコマンドを実行して、NO_PROXYHTTP_PROXY、および HTTPS_PROXY 環境変数をエクスポートします。

    $ export HTTP_PROXY=http://<your_proxy.example.com>:8080
    $ export HTTPS_PROXY=https://<your_proxy.example.com>:8080
    $ export NO_PROXY=<example.com>
  4. デバッグシェルで cluster-backup.sh スクリプトを実行し、バックアップの保存先となる場所を渡します。

    ヒント

    cluster-backup.sh スクリプトは etcd Cluster Operator のコンポーネントとして維持され、etcdctl snapshot save コマンドに関連するラッパーです。

    sh-4.4# /usr/local/bin/cluster-backup.sh /home/core/assets/backup

    スクリプトの出力例

    found latest kube-apiserver: /etc/kubernetes/static-pod-resources/kube-apiserver-pod-6
    found latest kube-controller-manager: /etc/kubernetes/static-pod-resources/kube-controller-manager-pod-7
    found latest kube-scheduler: /etc/kubernetes/static-pod-resources/kube-scheduler-pod-6
    found latest etcd: /etc/kubernetes/static-pod-resources/etcd-pod-3
    ede95fe6b88b87ba86a03c15e669fb4aa5bf0991c180d3c6895ce72eaade54a1
    etcdctl version: 3.4.14
    API version: 3.4
    {"level":"info","ts":1624647639.0188997,"caller":"snapshot/v3_snapshot.go:119","msg":"created temporary db file","path":"/home/core/assets/backup/snapshot_2021-06-25_190035.db.part"}
    {"level":"info","ts":"2021-06-25T19:00:39.030Z","caller":"clientv3/maintenance.go:200","msg":"opened snapshot stream; downloading"}
    {"level":"info","ts":1624647639.0301006,"caller":"snapshot/v3_snapshot.go:127","msg":"fetching snapshot","endpoint":"https://10.0.0.5:2379"}
    {"level":"info","ts":"2021-06-25T19:00:40.215Z","caller":"clientv3/maintenance.go:208","msg":"completed snapshot read; closing"}
    {"level":"info","ts":1624647640.6032252,"caller":"snapshot/v3_snapshot.go:142","msg":"fetched snapshot","endpoint":"https://10.0.0.5:2379","size":"114 MB","took":1.584090459}
    {"level":"info","ts":1624647640.6047094,"caller":"snapshot/v3_snapshot.go:152","msg":"saved","path":"/home/core/assets/backup/snapshot_2021-06-25_190035.db"}
    Snapshot saved at /home/core/assets/backup/snapshot_2021-06-25_190035.db
    {"hash":3866667823,"revision":31407,"totalKey":12828,"totalSize":114446336}
    snapshot db and kube resources are successfully saved to /home/core/assets/backup

    この例では、コントロールプレーンホストの /home/core/assets/backup/ ディレクトリーにファイルが 2 つ作成されます。

    • snapshot_<datetimestamp>.db: このファイルは etcd スナップショットです。cluster-backup.sh スクリプトで、その有効性を確認します。
    • static_kuberesources_<datetimestamp>.tar.gz: このファイルには、静的 Pod のリソースが含まれます。etcd 暗号化が有効にされている場合、etcd スナップショットの暗号化キーも含まれます。

      注記

      etcd 暗号化が有効にされている場合、セキュリティー上の理由から、この 2 つ目のファイルを etcd スナップショットとは別に保存することが推奨されます。ただし、このファイルは etcd スナップショットから復元するために必要になります。

      etcd 暗号化はキーではなく値のみを暗号化することに注意してください。つまり、リソースタイプ、namespace、およびオブジェクト名は暗号化されません。

5.1.2. 関連情報

5.1.3. 自動 etcd バックアップの作成

etcd の自動バックアップ機能は、繰り返しバックアップとシングルバックアップの両方をサポートします。繰り返しバックアップでは、ジョブがトリガーされるたびにシングルバックアップを開始する cron ジョブが作成されます。

重要

etcd バックアップの自動化はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

5.1.3.1. 自動 etcd バックアップの有効化

etcd の自動バックアップを有効にするには、次の手順を実行します。

警告

クラスターで TechPreviewNoUpgrade 機能セットを有効にすると、マイナーバージョンの更新ができなくなります。TechPreviewNoUpgrade 機能セットは無効にできません。実稼働クラスターではこの機能セットを有効にしないでください。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) にアクセスできる。

手順

  1. 次の内容で、enable-tech-preview-no-upgrade.yaml という名前の FeatureGate カスタムリソース (CR) ファイルを作成します。

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade
  2. CR を適用し、自動バックアップを有効にします。

    $ oc apply -f enable-tech-preview-no-upgrade.yaml
  3. 関連する API を有効にするのに時間がかかります。次のコマンドを実行して、カスタムリソース定義 (CRD) が作成されたことを確認します。

    $ oc get crd | grep backup

    出力例

    backups.config.openshift.io 2023-10-25T13:32:43Z
    etcdbackups.operator.openshift.io 2023-10-25T13:32:04Z

5.1.3.2. シングル etcd バックアップの作成

次の手順でカスタムリソース (CR) を作成して適用することで、シングル etcd バックアップを作成します。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) にアクセスできる。
  • バックアップデータの保存先である PVC がある。

手順

  1. 次の例のような内容で、etcd-single-backup.yaml という名前の CR ファイルを作成します。

    apiVersion: operator.openshift.io/v1alpha1
    kind: EtcdBackup
    metadata:
      name: etcd-single-backup
      namespace: openshift-etcd
    spec:
      pvcName: etcd-backup-pvc 1
    1
    バックアップを保存する永続ボリューム要求 (PVC) の名前。この値は、使用している環境に応じて調整してください。
  2. CR を適用してシングルバックアップを開始します。

    $ oc apply -f etcd-single-backup.yaml

5.1.3.3. 繰り返し etcd バックアップの作成

etcd の自動繰り返しバックアップを作成するには、次の手順に従います。

可能であれば、動的にプロビジョニングされたストレージを使用して、作成された etcd バックアップデータを安全な外部の場所に保存します。動的にプロビジョニングされたストレージが利用できない場合は、バックアップの復元にアクセスしやすくするために、バックアップデータを NFS 共有に保存することを検討してください。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • OpenShift CLI (oc) にアクセスできる。

手順

  1. 動的にプロビジョニングされたストレージが利用可能な場合は、次の手順を実行して、自動化された繰り返しバックアップを作成します。

    1. 次の例のような内容で、etcd-backup-pvc.yaml という名前の永続ボリューム要求 (PVC) を作成します。

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: etcd-backup-pvc
        namespace: openshift-etcd
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 200Gi 1
        storageClassName: standard-csi 2
        volumeMode: Filesystem
      1
      PVC に利用できるストレージの量。この値は、要件に合わせて調整します。
      2
      要求で必要な StorageClass の名前。この値は、使用している環境に応じて調整してください。
      注記

      次の各プロバイダーでは、accessModes キーと storageClassName キーを変更する必要があります。

      ProvideraccessModesstorageClassName

      versioned-installer-efc_operator-ci プロファイルを持つ AWS

      - ReadWriteMany

      efs-sc

      Google Cloud Platform

      - ReadWriteMany

      filestore-csi

      Microsoft Azure

      - ReadWriteMany

      azurefile-csi

    2. 以下のコマンドを実行して PVC を適用します。

      $ oc apply -f etcd-backup-pvc.yaml
    3. 次のコマンドを実行して、PVC が作成されたことを確認します。

      $ oc get pvc

      出力例

      NAME              STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      etcd-backup-pvc   Pending                                      standard-csi   51s

      注記

      動的 PVC は、マウントされるまで Pending 状態から遷移しません。

  2. 動的にプロビジョニングされたストレージが使用できない場合は、次の手順を実行してローカルストレージ PVC を作成します。

    警告

    保存されているバックアップデータが格納されたノードを削除するか、該当ノードへのアクセスを失うと、データが失われる可能性があります。

    1. 次の内容で、etcd-backup-local-storage.yaml という名前の StorageClass CR ファイルを作成します。

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: etcd-backup-local-storage
      provisioner: kubernetes.io/no-provisioner
      volumeBindingMode: WaitForFirstConsumer
    2. 次のコマンドを実行して、StorageClass CR を適用します。

      $ oc apply -f etcd-backup-local-storage.yaml
    3. 適用された StorageClass から、次の例のような内容で etcd-backup-pv-fs.yaml という名前の PV を作成します。

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: etcd-backup-pv-fs
      spec:
        capacity:
          storage: 100Gi 1
        volumeMode: Filesystem
        accessModes:
        - ReadWriteMany
        persistentVolumeReclaimPolicy: Delete
        storageClassName: local-storage
        local:
          path: /mnt/
        nodeAffinity:
          required:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/hostname
                operator: In
                values:
                - <example-master-node> 2
      1
      PV が使用できるストレージの量。この値は、要件に合わせて調整します。
      2
      この値は、この PV を割り当てるノードに置き換えます。
      ヒント

      次のコマンドを実行して、使用可能なノードのリストを表示します。

      $ oc get nodes
    4. 次のコマンドを実行して、PV が作成されたことを確認します。

      $ oc get pv

      出力例

      NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS    REASON   AGE
      etcd-backup-pv-fs       100Gi      RWX            Delete           Available           local-storage            10s

    5. 次の例のような内容で、etcd-backup-pvc.yaml という名前の PVC を作成します。

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: etcd-backup-pvc
      spec:
        accessModes:
        - ReadWriteMany
        volumeMode: Filesystem
        resources:
          requests:
            storage: 10Gi 1
        storageClassName: local-storage
      1
      PVC に利用できるストレージの量。この値は、要件に合わせて調整します。
    6. 以下のコマンドを実行して PVC を適用します。

      $ oc apply -f etcd-backup-pvc.yaml
  3. etcd-recurring-backups.yaml という名前のカスタムリソース定義 (CRD) ファイルを作成します。作成された CRD の内容は、自動化されたバックアップのスケジュールと保持タイプを定義します。

    15 個のバックアップを保持する RetentionNumber のデフォルトの保持タイプでは、次の例のような内容を使用します。

    apiVersion: config.openshift.io/v1alpha1
    kind: Backup
    metadata:
      name: etcd-recurring-backup
    spec:
      etcd:
        schedule: "20 4 * * *" 1
        timeZone: "UTC"
        pvcName: etcd-backup-pvc
    1
    定期的なバックアップの CronTab スケジュール。この値は、必要に応じて調整します。

    バックアップの最大数に基づいて保持を使用するには、次のキーと値のペアを etcd キーに追加します。

    spec:
      etcd:
        retentionPolicy:
          retentionType: RetentionNumber 1
          retentionNumber:
            maxNumberOfBackups: 5 2
    1
    保持タイプ。指定しない場合、デフォルトは RetentionNumber です。
    2
    保持するバックアップの最大数。この値は、必要に応じて調整します。指定しない場合、デフォルトは 15 個のバックアップです。
    警告

    既知の問題により、保持されるバックアップの数が設定された値に 1 を加えた数になります。

    バックアップのファイルサイズに基いて保持する場合は、以下を使用します。

    spec:
      etcd:
        retentionPolicy:
          retentionType: RetentionSize
          retentionSize:
            maxSizeOfBackupsGb: 20 1
    1
    保持するバックアップの最大ファイルサイズ (ギガバイト単位)。この値は、必要に応じて調整します。指定しない場合、デフォルトは 10 GB になります。
    警告

    既知の問題により、保持されるバックアップの最大サイズが設定値より最大 10 GB 大きくなります。

  4. 次のコマンドを実行して、CRD で定義される cron ジョブを作成します。

    $ oc create -f etcd-recurring-backup.yaml
  5. 作成された cron ジョブを検索するには、次のコマンドを実行します。

    $ oc get cronjob -n openshift-etcd
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.