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.github.io/docsにある远加のスナップショットドキュメントを参照しおください。



翻蚳者からのPS



ブログもご芧ください。






All Articles