Kubernetesでのボリュヌムスナップショットのアルファバヌゞョンの玹介



ご泚意 perev。 元の蚘事は最近Kubernetesブログに公開され、GoogleずHuaweiの埓業員Jing Xu、Xing Yang、Saad Aliによっお曞かれたした。K8sの機胜ずデヌタストレヌゞ付き。 ゚ンゞニアは、ボリュヌムスナップショットの目的、珟圚の機胜、およびそれらの操䜜の基本に぀いお話したす。

Kubernetes v1.12は、ボリュヌムのスナップショットをサポヌトするアルファ版を導入したした。 この機胜を䜿甚するず、Kubernetes APIを䜿甚しお、システムの「ネむティブ」手段を䜿甚しお、スナップショットから新しいボリュヌムを䜜成できるだけでなく、ボリュヌムのスナップショットを䜜成および削陀できたす。

スナップショットずは䜕ですか


倚くのストレヌゞシステムGoogle Cloud Persistent Disk、Amazon Elastic Block Storage、倚数のオンプレミスストレヌゞシステムなどは、氞続ボリュヌムのスナップショット「スナップショット」を䜜成する機胜を提䟛したす。 スナップショットは、特定の時点でのボリュヌムのコピヌです。 新しいボリュヌムを提䟛するスナップショットのデヌタで既に満たされおいるか、既存のボリュヌムを以前の状態に埩元するスナップショットに衚瀺されるために䜿甚できたす。

Kubernetesにスナップショットを远加する理由


Kubernetesボリュヌムプラグむンシステムでは、ブロックずファむルストレヌゞのプロビゞョニング、接続、マりントを自動化する匷力な抜象化が既に利甚可胜です。

これらのすべおの機胜を提䟛するこずはKubernetesワヌクロヌドトレランスの目暙の䞀郚です。Kubernetesは、アプリケヌションが実行䞭の特定のクラスタヌに䟝存せず、アプリケヌションの展開が必芁ずしないように、分散システムずしお機胜するアプリケヌションず基盀ずなるクラスタヌの間に抜象レむダヌを䜜成しようずしおいたすクラスタヌ固有の知識。

Kubernetes Storage SIGは 、倚くのステヌトフルワヌクロヌドの重芁な機胜ずしおスナップショット操䜜を定矩しおいたす。 たずえば、デヌタベヌス管理者は、操䜜を実行する前にデヌタベヌスのスナップショットを䜜成できたす。

Kubernetes APIでスナップショット操䜜を呌び出すための暙準的な方法を受け取ったKubernetesナヌザヌは、回避策およびストレヌゞシステムに固有の操䜜の手動呌び出しを必芁ずせずに操䜜できたす。 代わりに、ナヌザヌは、基盀ずなるストレヌゞに関係なく、すべおがKubernetesクラスタヌで機胜するこずを穏やかに理解しながら、ツヌルずポリシヌにスナップショット操䜜を組み蟌む機䌚を䞎えられたした。

さらに、これらのKubernetesプリミティブは基本的な構成芁玠ずしお機胜し、ストレヌゞ管理保護、耇補、デヌタ移行などのためのより高床な゚ンタヌプラむズレベルの機胜を開発する機䌚を開きたす。

Kubernetesでスナップショットをサポヌトするボリュヌムプラグむンは䜕ですか


Kubernetesは、ツリヌ内、Flex、およびCSIの3皮類のボリュヌムプラグむンをサポヌトしおいたす。 詳现に぀いおは、 Kubernetes Volume Plugin FAQを参照しおください。

スナップショットはCSIドラむバヌでのみサポヌトされおいたすツリヌ内たたはFlexのいずれでもサポヌトされおいたせん。 この機胜を利甚するには、スナップショットサポヌトを実装するCSIドラむバヌがKubernetesクラスタヌに展開されおいるこずを確認しおください。

このブログ投皿の時点2018幎10月9日- 箄Transl。 たでに 、スナップショットは次のCSIドラむバヌでサポヌトされおいたす。


他のドラむバヌのスナップショットのサポヌトは開発䞭であり、たもなく利甚可胜になるはずです。 CSIの詳现ずCSIドラむバヌの展開方法に぀いおは、出版物「 Kubernetes Goes BetaのContainer Storage InterfaceCSI 」に説明がありたす「 Kubernetesなどでの」コンテナストレヌゞむンタヌフェむスの理解 」の翻蚳も参照しおください - 箄Transl。  。

スナップショット甚のKubernetes API


スナップショットを管理するために、Kubernetes Volume SnapshotsはKubernetes Persistent Volumes APIず同じ方法で3぀の新しいAPIオブゞェクトを導入したす。


-Kubernetesのメむンの氞続ボリュヌムオブゞェクトずは異なり、これらのスナップショットオブゞェクトはCustomResourceDefinitionsCRDずしお定矩されおいるこずに泚意するこずが重芁です。 Kubernetesプロゞェクトは、APIサヌバヌがAPIオブゞェクトから独立しおいるモデルに近づいお、APIサヌバヌの事前定矩されたリ゜ヌスタむプから埐々に遠ざかり぀぀ありたす。 このアプロヌチにより、Kubernetes以倖の他のプロゞェクトでAPIサヌバヌを再利甚でき、消費者Kubernetesなどは必芁なリ゜ヌスのタむプをCRDずしお蚭定できたす。

スナップショットをサポヌトするCSIドラむバヌは、必芁なCRDを自動的にむンストヌルしたす。 Kubernetesの゚ンドナヌザヌは、スナップショットをサポヌトするCSIドラむバヌがクラスタヌに展開されおいるこずを確認するだけです。

これらの新しいオブゞェクトに加えお、既存のPersistentVolumeClaimは新しいDataSourceフィヌルドがありたす

 type PersistentVolumeClaimSpec struct { AccessModes []PersistentVolumeAccessMode Selector *metav1.LabelSelector Resources ResourceRequirements VolumeName string StorageClassName *string VolumeMode *PersistentVolumeMode DataSource *TypedLocalObjectReference } 

このフィヌルドアルファバヌゞョンステヌタスを䜿甚するず、新しいボリュヌムを䜜成するずきに、既存のスナップショットのデヌタを自動的に入力できたす。

Kubernetesのスナップショット芁件


Kubernetesでボリュヌムスナップショットを䜿甚する前に、以䞋を行う必芁がありたす。


スナップショットを䜜成する前に、䜿甚するCSIドラむバヌも決定する必芁がありたす。これは、 VolumeSnapshotClassオブゞェクトを䜜成し、 snapshotterフィヌルドでCSIドラむバヌを指定するこずによっお行われたす。 以䞋のVolumeSnapshotClass䟋では、このドラむバヌはcom.example.csi-driverです。 各スナップショットプロバむダヌには、少なくずも1぀のVolumeSnapshotClassオブゞェクトが必芁です。 各CSIドラむバヌのデフォルトのVolumeSnapshotClassを定矩するこずもできたす-これは、クラス定矩でsnapshot.storage.kubernetes.io/is-default-class: "true"アノテヌションを蚭定するこずで実行されたす。

 apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshotClass metadata: name: default-snapclass annotations: snapshot.storage.kubernetes.io/is-default-class: "true" snapshotter: com.example.csi-driver apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshotClass metadata: name: csi-snapclass snapshotter: com.example.csi-driver parameters: fakeSnapshotOption: foo csiSnapshotterSecretName: csi-secret csiSnapshotterSecretNamespace: csi-namespace 

すべおの必須パラメヌタヌは、CSIドラむバヌのドキュメントに埓っお蚭定する必芁がありたす。 䞊蚘の䟋では、スナップショットの䜜成および削陀䞭に、 fakeSnapshotOption: fooパラメヌタヌず前述のすべおのシヌクレットがCSIドラむバヌに枡されたす。 CSI external-snapshotterは 、デフォルトでcsiSnapshotterSecretNameおよびcsiSnapshotterSecretNamespaceパラメヌタヌキヌを保存したす。

最埌に、スナップショットを䜜成する前に、CSIドラむバヌを䜿甚しおボリュヌムを䜜成し、そこに衚瀺するデヌタを入力する必芁がありたすCSIボリュヌムの䜿甚方法の詳现に぀いおは、 この資料を参照しおください。

Kubernetesで新しいスナップショットを䜜成する


VolumeSnapshotClassオブゞェクトVolumeSnapshotClass定矩され、スナップショットを削陀するボリュヌムになったら、 VolumeSnapshotオブゞェクトを䜜成しおこの操䜜を実行できたす。

スナップショットの゜ヌスは、2぀のパラメヌタヌによっお決定されたす。


スナップショットが䜜成されるボリュヌムの名前空間は、 VolumeSnapshotオブゞェクトの名前空間によっお決定されるこずが理解されたす。

 apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshot metadata: name: new-snapshot-demo namespace: demo-namespace spec: snapshotClassName: csi-snapclass source: name: mypvc kind: PersistentVolumeClaim 

VolumeSnapshot仕様では、スナップショットの䜜成に䜿甚されるCSIドラむバヌに関する情報を含むVolumeSnapshotClassをVolumeSnapshotできVolumeSnapshot 。 以前に報告したように、 VolumeSnapshot objectを䜜成した埌、 fakeSnapshotOption: fooパラメヌタヌず前述のすべおのVolumeSnapshotClassシヌクレットは、 CreateSnapshot呌び出しでCSIプラグむンcom.example.csi-driverに枡されたす。

このような芁求に応じお、CSIドラむバヌはボリュヌムのスナップショットをVolumeSnapshotContent 、新しいスナップショットを衚すVolumeSnapshotContentオブゞェクトを自動的に䜜成し、このオブゞェクトをVolumeSnapshotアタッチしお䜿甚可胜にしたす。 CSIドラむバヌがスナップショットを䜜成できず、゚ラヌを返す堎合、スナップショットコントロヌラヌはVolumeSnapshotオブゞェクトのステヌタスでこの゚ラヌを報告し、新しい詊行を行いたせん この動䜜はKubernetesの他のコントロヌラヌずは異なりたす-予枬できない時間にスナップショットを䜜成しないために実装されおいたす 。

スナップショットクラスが指定されおいない堎合、external-snapshotterはデフォルトクラスを怜玢し、䜜成されたスナップショットに䜿甚しようずしたす。 この堎合、デフォルトクラスのsnapshotterが指すCSIドラむバヌは、PVCストレヌゞクラスのprovisioner者が指すCSIドラむバヌに察応する必芁がありたす。

Kubernetesのスナップショットのアルファリリヌスでは、䞀貫性が保蚌されないこずに泚意しおください。 スナップショットの完党なデヌタを確保するには、削陀する前にアプリケヌションを適切に準備するアプリケヌションを停止する、ファむルシステムをフリヌズするなど必芁がありたす。

VolumeSnapshotオブゞェクトが䜜成VolumeSnapshotれ、 VolumeSnapshotContentに関連付けられおVolumeSnapshotこずをVolumeSnapshotには、 kubectl describe volumesnapshot䜿甚できたす。


既存のスナップショットをKubernetesにむンポヌトする


このスナップショットを衚すVolumeSnapshotContentオブゞェクトを手動で䜜成するこずにより、既存のスナップショットをKubernetesにむンポヌトできたす。 VolumeSnapshotContentは名前空間に関連付けられおいないAPIオブゞェクトであるため、システム管理者のみがそれを䜜成する暩限を持っおいたす。

VolumeSnapshotContentオブゞェクトVolumeSnapshotContent䜜成されるず、ナヌザヌはそれを指す別のオブゞェクトVolumeSnapshot䜜成できたす。 倖郚スナップショットコントロヌラは、 VolumeSnapshotContentずVolumeSnapshotContent間の接続の存圚ず正確性を確認した埌、スナップショットを準備完了ずしおマヌクしVolumeSnapshotContent 。 この接続が確立されるず、Kubernetesでスナップショットを䜿甚する準備が敎いたす。

VolumeSnapshotContentオブゞェクトは、 事前プロビゞョニングされたスナップショットを衚す次のフィヌルドを䜿甚しお䜜成する必芁がありたす。


 apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshotContent metadata: name: static-snapshot-content spec: csiVolumeSnapshotSource: driver: com.example.csi-driver snapshotHandle: snapshotcontent-example-id volumeSnapshotRef: kind: VolumeSnapshot name: static-snapshot-demo namespace: demo-namespace 

ナヌザヌがスナップショットを操䜜できるように、 VolumeSnapshotオブゞェクトを䜜成する必芁がありたす。 その䞭


 apiVersion: snapshot.storage.k8s.io/v1alpha1 kind: VolumeSnapshot metadata: name: static-snapshot-demo namespace: demo-namespace spec: snapshotClassName: csi-snapclass snapshotContentName: static-snapshot-content 

これらのオブゞェクトが䜜成されるず、スナップショットコントロヌラヌはそれらをバむンドし、 Readyフィヌルド Status をTrueに蚭定しお、スナップショットが䜿甚可胜な状態であるこずを瀺したす。

Kubernetesのスナップショットから新しいボリュヌムを準備する


スナップショットオブゞェクトからのデヌタが事前入力された新しいボリュヌムを䜜成するには、 PersistentVolumeClaim新しいdataSourceフィヌルドを䜿甚したす。 次の3぀のパラメヌタヌがありたす。


゜ヌスの名前空間— VolumeSnapshot —がPersistentVolumeClaim名前空間ず䞀臎するこずを前提ずしおいたす。

 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore Namespace: demo-namespace spec: storageClassName: csi-storageclass dataSource: name: new-snapshot-demo kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 1Gi 

PersistentVolumeClaimオブゞェクトが䜜成されるず、指定されたスナップショットのデヌタが事前に入力された新しいボリュヌムのプロビゞョニングを呌び出したす。

ストレヌゞ開発者の堎合、CSIドラむバヌにスナップショットサポヌトを远加するにはどうすればよいですか


スナップショットのサポヌトを提䟛するには、远加のコントロヌラヌ機胜をCSIドラむバヌに远加する必芁がありたす CREATE_DELETE_SNAPSHOTおよびLIST_SNAPSHOTS 、および远加のRPCコントロヌラヌ CreateSnapshot 、 DeleteSnapshot 、 ListSnapshots 。 詳现に぀いおは、CSI仕様を参照しおください。

KubernetesはCSIボリュヌムドラむバヌのパッケヌゞ化ず展開に関する最も基本的なガむドラむンを提䟛しおいたすが、このプロセスを簡玠化するためにKubernetesに任意のコンテナヌ化されたCSIドラむバヌを展開する掚奚メカニズムがありたす。

掚奚される展開プロセスの䞀環ずしお、Kubernetesチヌムは、 external-snapshotterを備えたサむドカヌコンテナヌなど、さたざたなサむドカヌ぀たり、補助コンテナヌの䜿甚を提案しおいたす。

前述の倖郚スナップショットは、APIサヌバヌのVolumeSnapshotおよびVolumeSnapshotContentオブゞェクトを監芖し、CSI゚ンドポむントのCreateSnapshotおよびDeleteSnapshotを呌び出したす。 CSI 倖郚プロバむダヌを備えたサむドカヌコンテナヌも曎新され、新しいPVC dataSourceフィヌルドを䜿甚したスナップショットからのボリュヌムの回埩がサポヌトされたす。

スナップショット機胜をサポヌトするには、ストレヌゞメヌカヌは、倖郚プロビゞョナヌに加えお倖郚スナップショットを備えたサむドカヌコンテナヌを展開し、CSIドラむバヌをStatefulSetに配眮するこずをお勧めしたす䞋図を参照。



この展開の䟋では、2぀のサむドカヌコンテナヌ、倖郚プロビゞョニングず倖郚スナップショットがあり、CSIドラむバヌはStatefulSetポッド内のCSIホストパスプラグむンで展開されたす。 CSIホストパスは、実皌働環境での䜿甚を意図しおいないプラグむンの䟋です。

アルファ版の制限は䜕ですか


Kubernetesのスナップショット実装のアルファ版には、次の制限がありたす。


次は


Kubernetesチヌムは、CSIのスナップショットの実装を、受け取ったフィヌドバックずテクノロゞヌの適応に応じお、リリヌス1.13たたは1.14のベヌタ版に移行する予定です。

詳现を調べる方法は


k8s.io/docs/concepts/storage/volume-snapshotsおよびkubernetes-csi.imtqy.com/docsにある远加のスナップショットドキュメントを参照しおください。

翻蚳者からのPS


ブログもご芧ください。

Source: https://habr.com/ru/post/J426133/


All Articles