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周年: クラウドネイティブに対応

推薦する

1つの記事で完了! Saga 分散トランザクションを 10 分で説明する

[[388307]]この記事は、Cui Hao 氏が執筆した WeChat 公開アカウント「Shis...

ウェブサイトの運用指標を素早く完成させるには?

インターネット時代を迎え、多くの企業がインターネットを取り入れ、自社のウェブサイトをカスタマイズして...

vpsace-2g メモリ/2g Vswap/100g ハードディスク/2T トラフィック/月額 7 USD

vpsace のヘンは、Intel Xeon E3-1240v2 CPU、32G メモリ、4×1 T...

WeChatマーケティングの問題を解決するための3つの小さな提案

以前、「現在のWeChatマーケティングの問題点は何ですか?」という記事をシェアしましたが、主に現在...

ufovpsはどうですか?ロサンゼルスCN2ラインVPSの簡単なレビュー

HostCat はこれまで ufovps の米国 BGP 高防御 VPS をテストしてきました。今日...

タオバオは史上最も厳しい偽造品対策規則を制定しました。悪意を持って偽造品を販売する店舗は直ちに閉鎖されます。

【TechWeb Report】7月22日、Taobaoは偽造品販売に関する最新の管理規則を発表した...

王同福氏による SEO に関する最初の会議を聞く (パート 1)

2012年5月25日午後8時、昨夜でした。筆者はYYのSutu Online Salon第11回に参...

開始 | Web脆弱性スキャンUWS(クローラーシングル)サービス

近年、インターネット技術の継続的な発展により、Web アプリケーション システムが大規模に登場しまし...

onetechcloud 春節 VPS 30% オフ、月額 19 元、香港 CN2/CMI、米国 CN2 GIA/CUII/AS4837 (デュアル ISP IP + 高防御付き)

onetechcloud は、春節の大規模なプロモーションを開始しました。すべての VPS クラウド...

SEO 職場体験シーズン 1: 初心者

あっという間に、SEOに取り組んで1年以上経ちました。それまで、他の多くの新卒者と同じように、私は将...

オレンジクラウドが2021年CIFTISに初登場、中国工業企業の発展に新たな活力を注入

9月2日、「デジタルが未来を切り開き、サービスが発展を促進する」をテーマにした2021年中国国際サー...

SaaS導入において顧客が直面する主な課題

[[425760]] SaaS ビジネス モデルは、2021 年の開発トレンドになりました。データ処...

キングゴールドグループとオラクルがデジタルトランスフォーメーション2.0の推進で提携

デジタルトランスフォーメーションがビジネス展開の主流になるにつれ、デジタルトランスフォーメーションを...

Baidu が頻繁に新製品をリリースしていることについての SEO 専門家の推測

2012年はBaiduにとって激動の年であり、私たちウェブマスターにとっても激動の年でした。長年SE...

なぜ私たちは素晴らしいウェブマスターになれないのでしょうか?

2014年、インターネットに関する記事は「ナンセンス」で溢れていましたが、いずれにしても、もうすぐ一...