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

推薦する

3つのアルゴリズムによる外部リンクの重要性の簡単な分析

Fuqing SEO は検索エンジンのアルゴリズムについて詳細な調査を実施したことはありませんし、詳...

完璧なページ依存関係

インターネット マーケティングは、さまざまな Web サイト間の接続を構成する多数のページで構成され...

Prometheus が NAT 経由でメトリックをスクレイピングできるようにするツール - PushProx

Prometheus は Pull モードを使用して監視インジケーターをプルすることがわかっています...

CCTVの丑年春節祝賀会は初めて「クラウド」放送を採用

CCTV Newsのクライアントによると、2月1日、「2021年春節祝賀会」の初リハーサルが中国中央...

企業ブランドの確立を目的としたSEOが最善の方法です

実際、多くの人はなぜ SEO を行うのか理解していません。レイヤーごとの分析を通じて、ようやく核とな...

ウェブサイトがBaiduの審査サイクルをスムーズに通過するためのいくつかの重要な段階

ご存知のとおり、ウェブサイトの運用最適化は段階的なプロセスです。ウェブサイト構築後の SEO の各段...

Kafka Consumerについて学んでみましょう

これまで、Kafka の全体的なアーキテクチャ、Kafka プロデューサー、そして Kafka によ...

悲惨な企業ウェブサイトSEO担当者が解雇されたことで浮かんだ思い

結果重視の企業環境では、指定された期限内にタスクを完了できなかった場合、解雇という結果に直面すること...

百度入札の悪質クリックを個人的にテスト:広告料の60%が無駄になっている

この記事を書いたとき、私は百度の入札クリック料金の実態を確認するのに1日半を費やしました。多くの講師...

投資家の2012年:虎は昼寝をせず、中小企業は苦境に立たされる

2006年から2012年までのVCPE機関のIPO出口の帳簿収益2012年は中国の投資家と起業家にと...

速報:360 Comprehensive Search は独立したドメイン名と独立したブランドを使用しています

360 検索ページのスクリーンショット新浪科技は8月31日午前、360総合検索が今朝、「360 Se...

QingStorのソフトウェア定義ストレージがIDCレポートでコアSDSベンダーとしてリストアップ

最近、IDCが発表した「中国のソフトウェア定義ストレージおよびハイパーコンバージド市場追跡調査レポー...

プロのSEO人材のキャリア開発の方向性について議論する

SEO 業界を理解した後、ウェブサイト構築は一生を託せる平坦な道だと感じたウェブマスターがどれだけい...

ページコピーは SEO にどのように役立ちますか?

先日、「Webコピー:SEOと読みやすさを考慮したウェブサイト作成の新テクニック」という記事を書きま...

タオバオのウェブサイトSEOに影響を与える要因

キーワードのランキングに影響を与える要因は数百あります。すべてを網羅することはできません。キーワード...