前回の記事では、Longhorn UI を使用してボリューム スナップショット、バックアップとリカバリなどの機能を実行できることを紹介しました。さらに、Kubernetes を通じてボリュームを管理することもできます。たとえば、クラスター上で CSI を使用して、スナップショット、バックアップとリカバリ、クローン作成、容量拡張機能を実装できます。 CSI ボリューム スナップショットKubernetes はバージョン 1.12 からストレージ ボリューム スナップショット機能を導入し、バージョン 1.17 でベータ版になりました。 2 つのリソース オブジェクト PV と PVC と同様に、Kubernetes はボリューム スナップショット管理用に VolumeSnapshotContent、VolumeSnapshot、および VolumeSnapshotClass の 3 つのリソース オブジェクトを提供します。 コンセプトVolumeSnapshotContent は、PV のリソース概念に似ており、PV に基づいて作成されたスナップショットです。 VolumeSnapshot は、永続宣言 PVC の概念に似た、ボリューム スナップショットに対するユーザーの要求です。 VolumeSnapshotClass オブジェクトを使用すると、スナップショットの特性を設定し、VolumeSnapshotContent の詳細を保護し、StorageClass の「クラス」概念と同様に、VolumeSnapshot バインディングの動的な管理を提供できます。 ボリューム スナップショット機能は、Kubernetes ユーザーに、完全に新しいボリュームを作成しなくても、指定した時点でボリュームの内容をコピーする標準的な方法を提供します。たとえば、データベース管理者は、編集や削除などの変更を実行する前に、データベースのバックアップを実行できます。 ただし、この機能を使用する場合は、次の点に注意してください。
VolumeSnapshotContents と VolumeSnapshots のライフサイクルには、リソースのプロビジョニング、リソースのバインディング、PVC を使用するための保護メカニズム、リソースの削除など、さまざまな段階が含まれます。これら 2 つのオブジェクトは、次のライフサイクルに従います。 リソースのプロビジョニング: PV リソースのプロビジョニングと同様に、VolumeSnapshotContent でも静的または動的な方法でリソースをプロビジョニングできます。
リソース バインディング:スナップショット コントローラーは、静的プロビジョニングと動的プロビジョニングの両方を含む、VolumeSnapshot を適切な VolumeSnapshotContent にバインドする役割を担います。 VolumeSnapshot と VolumeSnapshotContent も 1 対 1 でバインドされており、1 対多の状況は発生しません。 使用中の PVC の保護メカニズム:ストレージ スナップショット VolumeSnapshot が作成中でまだ完了していない場合、関連する PVC は使用中としてマークされます。ユーザーが PVC を削除した場合、スナップショットが完了しないことによるデータ損失を回避するために、システムは PVC をすぐには削除しません。削除操作は、VolumeSnapshot が作成される (readyToUse ステータス) か終了する (aborted ステータス) まで遅延されます。 リソースの削除: VolumeSnapshot で削除操作が開始されると、バインドされたバックエンド VolumeSnapshotContent での削除操作は、削除ポリシー DeletionPolicy の設定に基づいて決定されます。設定可能な削除ポリシーは次のとおりです。
当社の Longhorn システムは、デプロイメント後に 3 つの csi-snapshotter Pod を作成します。 ➜ kubectl get pods - n longhorn - システム これらは実際に開始される 3 つのレプリカです。同時にサービスを提供できるのは 1 つの Pod のみです。リーダー選出は高可用性を実現するために使用されます。たとえば、現在ここでサービスを提供しているのは csi-snapshotter-86f65d8bc-dncwv です。対応するログ情報を表示できます。 ➜ kubectl ログ- f csi - スナップショット- 86f 65 d8bc - dncwv - n longhorn - システム VolumeSnapshotClass リソースと VolumeSnapshotContent リソースがないことがわかります。これは、これら 2 つのリソースが Kubernetes の組み込みリソース オブジェクトではなく、CRD であるためです。 Longhorn のインストール時にこれら 2 つの CRD をインストールしなかったため、見つかりません。 CSI を介してボリューム スナップショット機能を実装するには、当然ながら、まず CRD をインストールする必要があります。これらは https://github.com/kubernetes-csi/external-snapshotter プロジェクトから取得できます。 ➜ git clone https://github.com/kubernetes-csi/external-snapshotter 上記のコマンドは、上記の 3 つのスナップショット CRD をインストールします。 ➜ kubectl でcrd を取得します| grep スナップショット インストールが完了したら、上記の csi-snapshotter 関連の Pod ログを確認すると、すべてが正常であることがわかります。 CRD をインストールした後では、それだけでは不十分です。 VolumeSnapshot および VolumeSnapshotContent オブジェクトをリッスンするためのスナップショット コントローラーも必要です。同様に、external-snapshotter プロジェクトも Common Snapshot Controller を提供します。ワンクリックでインストールするには、次のコマンドを実行します。 # deploy / kubernetes / snapshot - controller / setup - snapshot - controller .yaml を変更します。 イメージアドレスはcnych / csi - snapshot - controller : v5.0.0 です。 デフォルトはgcr イメージです。 ここでは、スナップショット コントローラーを kube-system 名前空間にインストールし、2 つのコピーを開始します。繰り返しますが、一度にサービスを提供できるのは 1 つの Pod だけです。 ➜ kubectl get pods - n kube - system - l app = snapshot - controller この時点で、CSI を使用してスナップショットを構成するための環境が準備されました。 テストボリューム スナップショット機能の使用方法を説明するために、前の mysql-pvc ボリュームを例に挙げてみましょう。 ➜ kubectl でpvc を取得- pvc mysql-pvc のスナップショット要求を作成するには、まず VolumeSnapshot オブジェクトを作成する必要があります。 # スナップショット- mysql 。 ヤム 主な構成パラメータは 2 つあります。
上記ではストレージ スナップショット クラス longhorn を指定しましたが、もちろんこのオブジェクトを作成する必要があります。 # スナップショットクラス.yaml 各 VolumeSnapshotClass には、driver、deletionPolicy、およびparameters フィールドが含まれており、このクラスに属する VolumeSnapshot を動的に構成する必要がある場合に使用されます。
現在のスナップショット クラスをデフォルトとして設定する場合は、 snapshot.storage.kubernetes.io/is-default-class: "true" などのアノテーションを追加する必要があります。 ここで、上記の 2 つのリソース オブジェクトを直接作成します。 ➜ kubectl apply -f スナップショットクラス.yaml この時点で、VolumeSnapshotContent オブジェクトが動的に作成されます。 ➜ kubectl ボリュームスナップショットコンテンツを取得する 自動的に作成された VolumeSnapshotContent オブジェクトの内容は次のとおりです。 apiVersion : スナップショット。 ストレージ。 k8s 。 io / v1 source.volumeHandle フィールドの値は、バックエンド ストレージ上に作成され、ストレージ ボリュームの作成中に CSI ドライバーによって返されるボリュームの一意の識別子です。このフィールドは動的プロビジョニング モードで必須であり、スナップショットのソース ボリューム情報を指定します。 volumeSnapshotRef の下には、関連付けられている VolumeSnapshot オブジェクトに関する関連情報があります。もちろん、この時点では、上記で作成したスナップショットを Longhorn UI インターフェイスで確認することもできます。スナップショット名は snapshot-1119649a-d4f2-447f-a21a-e527f202e43e であり、その背後にある ID は上記の VolumeSnapshotContent 名と一致しています。 対応するバックアップ操作も実行されます。バックアップ情報は、bs://backup-/backup- の形式で snapshotHandle によって指定されます。 これにより、CSI によるボリューム スナップショット管理機能が完成しました。 CSIボリュームリカバリKubernetes は、バージョン 1.17 でスナップショットに基づいてストレージ ボリュームを作成するベータ バージョンを更新しました。この機能を有効にするには、kube-apiserver、kube-controller-manager、および kubelet の Feature Gate で --feature-gates=...,VolumeSnapshotDataSource を有効にする必要があります (バージョン 1.22 ではデフォルトで有効になっています)。その後、スナップショットに基づいて新しい PVC ストレージ ボリュームを作成できます。たとえば、上記で作成した mysql-snapshot-demo オブジェクトに基づいて新しい PVC を作成します。 # 復元- mysql 。 ヤム 上記の PVC オブジェクトは、基本的に通常の宣言方法と同じです。唯一の違いは、dataSource フィールドを通じて、mysql-snapshot-demo という名前のストレージ スナップショットに基づいて作成されることです。上記のリソース オブジェクトを作成すると、PV が自動的に作成され、それにバインドされます。 ➜ kubectl get pvc mysql - 復元- pvc Longhorn UI でボリュームを確認すると、ボリュームの実際のサイズが 0 ではないことがわかります。これは、スナップショットからボリュームを作成したためです。これは、上記のスナップショットからデータを復元することと同じです。 ボリュームのクローン作成CSI ストレージは、スナップショットに基づいて新しい PVC オブジェクトを作成するだけでなく、既存の PVC に基づいて新しい PVC を複製できるストレージ クローンもサポートしています。これは、dataSource フィールドにソース PVC を設定することによっても実現されます。 PVC のクローン作成は、実際には既存のストレージ ボリュームのコピーを作成することです。唯一の違いは、システムがクローンされた PVC にバックエンド ストレージ リソースを提供するときに、新しい空の PV を作成せず、元の PVC にバインドされた PV とまったく同じ PV をコピーすることです。 Kubernetes API の観点から見ると、クローンの実装は、新しい PVC を作成するときに既存の PVC をデータ ソースとして指定する機能を追加するだけです。ソース PVC はバインドされた状態にあり、使用可能 (使用されていない) である必要があります。 この機能を使用する場合、ユーザーは以下の事項に注意する必要があります。
同様に、以前の mysql-pvc ストレージ ボリュームをクローンしてみましょう。対応する PVC 宣言は次のとおりです。 APIバージョン: v1 この PVC は、ソース PVC と同じ構成を宣言します。唯一の違いは、ソース PVC の名前が dataSource を通じて指定されることです。このリソース オブジェクトは直接作成されます。その結果、新しい PVC mysql-clone-pvc にはソース mysql-pvc と同じデータが含まれます。 ➜ kubectl get pvc mysql - クローン- pvc 対応するボリュームは、Longhorn UI ページでも確認できます。 新しい PVC が使用可能になると、複製された PVC は他の PVC と同様に使用でき、複製、スナップショット、削除などを行うことができます。 ダイナミックボリューム拡張容量の拡張はストレージにとって非常に重要な要件であることは承知しています。 Kubernetes における動的ボリューム拡張も基本機能です。 PV 拡張には、基盤となるストレージのサポートが必要です。 Longhorn の基盤となるストレージはボリューム拡張をサポートしていますが、拡張されたボリュームはデタッチされた状態である必要があります。 Longhorn ボリュームを拡張するには、PVC を変更する方法と Longhorn UI を使用する方法の 2 つがあります。 Longhorn UI を使用すると操作は比較的簡単です。操作を実行するには、ページで拡張するボリュームを選択し、操作でボリュームの拡張を選択するだけです。 PVC を通じて容量を拡張するには、まず PVC を Longhorn StorageClass によって動的にプロビジョニングし、StorageClass の allowVolumeExpansion プロパティを true に設定する必要があります。この方法は、PVC と PV が自動的に更新され、拡張後も一貫性が維持されるため、推奨されます。たとえば、上記で使用した mysql-clone-pvc ボリューム (デタッチ状態) で使用される longhorn StorageClass は、すでに allowVolumeExpansion: true に設定されています。次に、mysql-pvc ボリュームの下の spec.resources.requests.storage 値を直接変更できます。 ➜ kubectl get pvc mysql - クローン- pvc 変更後、PVC のイベント情報を表示できます。 ➜ kubectl はpvc mysql を記述します- クローン- pvc サイズ変更操作は、external-resizer コンポーネントを通じて実装されていることがわかります。 PVC および PV のサイズ検証を確認します。 ➜ kubectl get pvc mysql - クローン- pvc PVC、PVともに容量が2Giになっており、拡張が成功していることがわかります。 Longhorn UI を通じてボリューム拡張の成功を確認することもできます。 |
<<: 2022 年に企業はクラウドでどのような課題に直面するでしょうか?
>>: インターネットの巨人「クラウド」の最も暗い瞬間:退化、降格、そして大量の顧客喪失
「ダブル11」の戦いは終わりを迎えた。 「ダブル11」期間中に利益を上げるために、各店舗は最善を尽く...
Hostwindsは、当初は米国中部の都市ダラスを拠点として開発されました。その後、西海岸のシアトル...
前回の「SEO初心者向け本」コンテストが終了してから1週間以上が経ちました。北京に到着した翌日に、Q...
IDC Review Network (idcps.com) は 3 月 21 日に次のように報告し...
電力システムを仮想化することで、企業は柔軟性を獲得し、メンテナンスを削減し、さらには余剰電力を販売し...
Hawkhost の毎年恒例のブラックフライデー セールが始まりました。サイト上のすべての製品 (仮...
インターネットマーケティングは今や誰もが知る存在であり、アリババチームは忘れられない貢献を果たしてき...
製品の同質化による競争の激化に直面し、広告は間違いなく競争力を高めるための重要な手段です。しかし、メ...
サイト内の検索ボックスの話題について言及している人はほとんどいませんでした。私も刺激を受けました。今...
ウェブマスターの友人は皆、Aizhan.com をよくご存知だと思います。 Aizhan.com 独...
ニュース追跡最終レポートインデックス日付: 2012年7月3日版:A20「深センニュース」タイトル:...
Wenku外部リンクは、外部リンクの非常に一般的な方法であり、非常に高品質の外部リンクです。なぜでし...
2020年、新型コロナウイルス感染症との戦いにおいて、AI体温測定、AIフィルム読み取り、AI速達車...
検索エンジンのアルゴリズムの調整に伴い、主要な検索エンジンによるブログの認知度は、大多数のSEO担当...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス2019年、李佳琦や魏亜...