KubernetesとDockerをバックアップする方法

KubernetesとDockerをバックアップする方法

コンテナ内のすべてをバックアップする必要はありませんが、災害発生時にコンテナを実行および管理する構成をバックアップすることは重要です。

[[319191]]

コンテナ インフラストラクチャには何らかのバックアップが必要です。 Kubernetes と Docker は災害後に自動的に構築されるわけではありません。ユーザーは各コンテナの実行状態をバックアップする必要はありませんが、コンテナの実行と管理に使用される構成をバックアップする必要があります。

バックアップする必要があるものは次のとおりです。

構成と望ましい状態情報

  • Ytterbium イメージの構築に使用される Dockerfile とこれらのファイルのすべてのバージョン
  • Dockerfileから作成され、各コンテナを実行するために使用されるイメージ
  • クラスター状態用の Kubernetes etcd およびその他の K8s データベース
  • デプロイメントは、各デプロイメントを記述する YAML ファイルです。

コンテナによって作成または変更された永続データ

  • 永続ボリューム
  • データベース

Dockerファイル

Docker コンテナは、Dockerfile から構築されたイメージから実行されます。適切な Docker 構成は、すべての Dockerfile のバージョン管理システムとして何らかのリポジトリ (GitHub など) を使用することから始まります。一時的な Dockerfile から構築された一時的なイメージを使用して一時的なコンテナを作成しないでください。すべての Dockerfile は、現在のバージョンに問題がある場合、ユーザーがこの Dockerfile の過去のバージョンを取得できるリポジトリに保存する必要があります。

また、各 K8s デプロイメントに関連付けられた YAML ファイル用の何らかのリポジトリも用意する必要があります。これらはバージョン管理システムの恩恵を受けることができるテキスト ファイルです。

これらのリポジトリをバックアップする必要があります。 GitHub は最も人気のあるリポジトリの 1 つであり、リポジトリをバックアップするためのさまざまな方法を提供しています。提供されている API を使用してリポジトリの現在のバックアップをダウンロードするさまざまなスクリプトがあります。サードパーティの商用ツールを使用して、GitHub や作業中のリポジトリをバックアップすることもできます。

上記のアドバイスに従わず、Dockerfile がなくなったイメージに基づいてコンテナを実行している場合は、Docker イメージ履歴コマンドまたは dfimage などのツールを使用して、現在のイメージから Dockerfile を作成できます。これらの Dockerfile をリポジトリに配置して、バックアップを開始します。しかし、このような状況に陥らないでください。環境の作成に使用する Dockerfile と YAML ファイルを常に保存してバックアップする必要があります。

Docker イメージ

コンテナを実行するために使用されている現在のイメージもリポジトリに保存する必要があります (もちろん、Kubernetes で Docker イメージを実行している場合は、すでにこれが行われています)。ユーザーは、Docker レジストリなどのプライベート リポジトリ、または Dockerhub などのパブリック リポジトリを使用できます。クラウド コンピューティング プロバイダーは、ユーザーに画像を保存するためのプライベート リポジトリを提供することもできます。その後、そのリポジトリの内容をバックアップする必要があります。 「Dockerhub バックアップ」などの単純な検索では、驚くほど多くのオプションが表示されます。

ユーザーがコンテナを実行するための現在のイメージを持っていない場合は、docker commit コマンドを使用してイメージを作成できます。次に、Docker イメージ履歴またはツール dfimage を使用して、そのイメージから Dockerfile を作成します。

Kubernetes 等

Kubernetes etcd データベースは非常に重要なので、etcdctl snapshot save db コマンドを使用してバックアップする必要があります。これにより、現在のディレクトリに snapshot.db ファイルが作成されます。このファイルは外部ストレージにバックアップする必要があります。

市販のバックアップ ソフトウェアを使用している場合は、snapshot.db のディレクトリ バックアップを作成する前に、etcdctl snapshot save コマンドを簡単にトリガーできます。これは、バックアップを商用バックアップ環境に統合する 1 つの方法です。

永続ボリューム

コンテナーはさまざまな方法で永続ストレージにアクセスでき、永続ストレージを使用してデータを保存または作成できます。従来の Docker ボリュームは、Docker 構成のサブディレクトリにあります。バインド マウントは、コンテナー内にマウントされる Docker ホスト上の任意のディレクトリです (bind mount コマンドを使用)。 Docker コミュニティは、いくつかの理由から最初に従来のボリュームを選択しましたが、バックアップの目的では、従来のボリュームとバインド マウントは基本的に同じです。ユーザーは、オブジェクト ストレージ システムからネットワーク ファイル システム (NFS) ディレクトリまたはオブジェクトをボリュームとしてコンテナーにマウントすることもできます。

永続ボリュームのバックアップに使用される方法は、コンテナーに使用される上記のオプションに基づきます。ただし、これらすべてに同じ問題があります。データが変更されている場合は、一貫性のあるバックアップを取得するためにそれに対処する必要があります。

これを行う 1 つの方法は、特定のボリュームを使用しているコンテナーをすべてシャットダウンすることです。この方法は少し古い方法ですが、コンテナの世界では課題の 1 つとなっています。コンテナにバックアップ エージェントを配置するという一般的なアプローチは、良い選択肢ではないからです。閉じたら、ボリュームをバックアップできます。従来の Docker ボリュームの場合は、バックアップ時にデータが変更されない別のコンテナーにマウントしてバックアップし、バインドマウントされたボリュームにそのボリュームの tar イメージを作成し、バックアップ システムで使用されている方法を使用してバックアップすることができます。

しかし、Kubernetes でこれを実行するのは非常に困難です。これが、ステートフル情報をファイル システムではなくデータベースに保存することが最適である理由の 1 つです。 K8s インフラストラクチャを設計する際には、この問題を考慮する必要があります。

さらに、バインドマウントされたディレクトリ、NFS マウントされたファイル システム、またはオブジェクト ストレージ システムを永続ストレージ システムとして使用する場合は、そのストレージ システムをバックアップするための優れた方法を使用できます。これは、スナップショットの後にレプリケーションを実行するか、そのシステムで商用バックアップ ソフトウェアを実行するだけである可能性があります。これらの方法により、同じボリュームの一般的なファイル レベルのバックアップよりも一貫性のあるバックアップが提供される場合があります。

データベース

次のバックアップの課題は、コンテナーがデータベースを使用してデータを保存することです。これらのデータベースは、整合性を保証する方法でバックアップする必要があります。データベースによっては、上記の方法が機能する可能性があります。データベースにアクセスしているコンテナをシャットダウンし、そのファイルが保存されているディレクトリをバックアップします。ただし、このアプローチに必要なダウンタイムは適切ではない可能性があります。

もう 1 つの方法は、データベース エンジン自体に直接接続し、バックアップ可能なファイルへのバックアップを実行するように要求することです。データベースがコンテナ内で実行されている場合は、まずバインドマウントを使用してバックアップ可能なボリュームを接続し、そのバックアップをコンテナの外部に存在させる必要があります。次に、データベースで使用されるコマンド (mysqldump など) を実行してバックアップを作成します。次に、バックアップ システムによって作成されたファイルを必ず使用します。

どのコンテナがどのストレージまたはどのデータベースを使用しているかをユーザーが知らない場合はどうなるでしょうか? 1 つの解決策としては、docker ps コマンドを使用して実行中のコンテナを一覧表示し、次に docker inspect コマンドを使用して各コンテナの構成を表示することが考えられます。 「マウント」というセクションがあり、どのボリュームがどこにマウントされているかをユーザーに知らせます。バインドマウントも、ユーザーが Kubernetes に送信する YAML ファイルで指定されます。

ビジネスバックアップソリューション

上記のデータの一部またはすべてを保護できるさまざまな商用バックアップ ソリューションが存在します。以下に非常に簡単な要約を示します。

  • Commvault の仮想サーバー エージェントは、バックアップ コンテナーとそのイメージのプロキシとして機能できます。
  • Cohenity は、K8s 名前空間のデータ保護を提供します。
  • Heptio (現在は VMware の子会社) は、K8s 向けに設計された Velero バックアップを提供しています。
  • Contino、Datacore、Portworx は、K8 とコンテナ向けに設計されたストレージを提供し、その情報のバックアップもサポートしています。

K8s と Docker はさまざまな方法で構成できるため、すべてを網羅することは困難です。しかし、これが考える材料を提供したり、ユーザーがバックアップすべきだがまだバックアップしていないものをバックアップするのに役立つことを願っています。

<<:  Kubernetes C# クライアント ライブラリを使用するにはどうすればよいでしょうか?

>>:  Java 20周年: クラウドネイティブに対応

推薦する

digital-vm: 月額 80 ドル、日本の高帯域幅サーバー、最大 10Gbps の帯域幅、構成拡張をサポート

digital-vm は現在、日本の東京データセンターで 1Gbps 帯域幅、2Gbps 帯域幅、1...

インターネット会議の商業化が疑問視される:ショーケースから金儲けのツールへ

概要: 上記の種類の企業に加えて、インターネット会議には、Baofeng Video、Maxthon...

クラウド コンピューティングが直面している主なセキュリティ上の課題は何ですか?

クラウド コンピューティングは、柔軟性、拡張性、コスト効率など、さまざまな利点をもたらし、今日のビジ...

クラウド コンピューティングと DevOps: 次のキャリアへのステップ

多くの人が DevOps とクラウド コンピューティングを混同していますが、実際にはこの 2 つは ...

エッジ サービスが企業のレジリエンス戦略に不可欠な 5 つの理由

コンピューティングに関して言えば、エッジ コンピューティングが現在の流行語です。これはなぜでしょうか...

Kubernetes アプリケーションの問題に対する一般的なトラブルシューティングのアイデア

[[428799]]この記事はWeChatの公開アカウント「Mingge's IT Essa...

広告提携はますます多様化しています。ウェブマスターは提携を選択する際に注意する必要があります。

最近は広告同盟が多すぎます。数日前、ある広告同盟の広告で、100元使うごとに100元もらえると書いて...

あなたは本当にオンサイト最適化を理解していますか?

ウェブサイトの最適化は、主にオンサイトとオフサイトの2つの部分に分かれています。どちらも不可欠ですが...

SEO 最適化: キーワード密度とウェブサイトのランキング

検索エンジン最適化に携わっている同僚の中には、キーワードについて質問してくる人も多いです。たとえば、...

virtnetwork - $3.95/KVM/4 コア/2IP/1G メモリ/50G ハードディスク/2.5T トラフィック

VirtNetwork は、実は GVH のボスが立ち上げた VPS ブランドで、主に KVM 仮想...

Cloud Custodian を使用してクラウド ガバナンスをコードとして実装する方法

[51CTO.com クイック翻訳] Cloud Custodian を使用するユーザーは、シンプル...

2023年までにK8Sを知らない場合は排除されます。飛び方をお見せしましょう

1. Kubernetesの利点と欠点1. Kubernetesの利点高可用性: Kubernete...

Tektoncd Operator を使用した Tekton コンポーネントの管理

Tektoncd Operator は、Kubernetes クラスター上で TektonCD パイ...

Amazon Web Services がサーバーレス コンピューティング機能を強化し、Amazon Lambda の一時ストレージを 20 倍の 10 GB に拡張

最近、Amazon Web Services はサーバーレス コンピューティング サービスの機能を継...

VMware Photon プラットフォームはどこにありますか?

[[203967]] vMware GitHub wiki ページには、さまざまなインストール タイ...