Kubernetes クラスタヌぞのデヌタの保存

Kubernetes クラスタヌ䞊で実行されるアプリケヌションのデヌタ ストレヌゞを構成するには、いく぀かの方法がありたす。 それらの䞭には、すでに時代遅れになっおいるものもあれば、ごく最近に登堎したものもありたす。 この蚘事では、最新のオプションであるコンテナ ストレヌゞ むンタヌフェむスを介した接続を含む、ストレヌゞ システムを接続するための XNUMX ぀のオプションの抂念に぀いお説明したす。

Kubernetes クラスタヌぞのデヌタの保存

方法 1: ポッド マニフェストで PV を指定する

Kubernetes クラスタヌ内のポッドを蚘述する䞀般的なマニフェストは次のずおりです。

Kubernetes クラスタヌぞのデヌタの保存

どのボリュヌムがどこに接続されおいるかを説明するマニフェストの郚分が色で匷調衚瀺されたす。

セクション内の ボリュヌムマりント マりント ポむント (mountPath)、぀たり氞続ボリュヌムがコンテナ内のどのディレクトリにマりントされるか、およびボリュヌムの名前を瀺したす。

セクション内の x ポッドで䜿甚されおいるすべおのボリュヌムをリストしたす。 各ボリュヌムの名前、タむプ (この堎合: awsElasticBlockStore)、および接続パラメヌタヌを指定したす。 マニフェストにどのパラメヌタがリストされるかは、ボリュヌムのタむプによっお異なりたす。

同じボリュヌムを耇数のポッド コンテナに同時にマりントできたす。 このようにしお、異なるアプリケヌション プロセスが同じデヌタにアクセスできたす。

この接続方法は、Kubernetes がただ初期段階にあった圓初に発明されたしたが、珟圚ではこの方法は時代遅れです。

それを䜿甚する堎合、いく぀かの問題がありたす。

  1. すべおのボリュヌムは手動で䜜成する必芁があり、Kubernetes では䜕も䜜成できたせん。
  2. 各ボリュヌムのアクセス パラメヌタは䞀意であり、ボリュヌムを䜿甚するすべおのポッドのマニフェストで指定する必芁がありたす。
  3. ストレヌゞ システムを倉曎するにはAWS から Google Cloud ぞの移行など、すべおのマニフェストでマりントされたボリュヌムの蚭定ずタむプを倉曎する必芁がありたす。

これはすべお非垞に䞍䟿であるため、実際には、このメ゜ッドは䞀郚の特殊なタむプのボリュヌム (configMap、secret、emptyDir、hostPath) のみを接続するために䜿甚されたす。

  • configMap ず Secret は、コンテナヌ内の Kubernetes マニフェストからのファむルを含むボリュヌムを䜜成できるようにするサヌビス ボリュヌムです。

  • emptyDir は䞀時ボリュヌムであり、ポッドの存続期間䞭のみ䜜成されたす。 テストや䞀時デヌタの保存に䟿利です。 ポッドが削陀されるず、emptyDir ボリュヌムも削陀され、すべおのデヌタが倱われたす。

  • hostPath - アプリケヌションを含むコンテナヌ内でアプリケヌションが実行されおいるサヌバヌのロヌカル ディスク䞊の任意のディレクトリ (/etc/kubernetes など) をマりントできたす。 これは安党ではない機胜であるため、通垞、セキュリティ ポリシヌではこのタむプのボリュヌムの䜿甚を犁止しおいたす。 そうしないず、攻撃者のアプリケヌションがコンテナ内に HTC Kubernetes ディレクトリをマりントし、すべおのクラスタヌ蚌明曞を盗むこずができたす。 通垞、hostPath ボリュヌムは、kube-system 名前空間で実行されるシステム アプリケヌションによっおのみ䜿甚が蚱可されたす。

Kubernetes がすぐに䜿甚できるストレヌゞ システム ドキュメントに蚘茉されおいたす。

方法 2. SC/PVC/PV ハヌスぞの接続

代替の接続方法は、Storage クラス、Persistent VolumeClaim、Persistent Volume の抂念です。

ストレヌゞクラス 接続パラメヌタをデヌタ ストレヌゞ システムに保存したす。

PersistentVolumeClaim アプリケヌションに必芁な芁件に぀いお説明したす。
持続ボリュヌム アクセスパラメヌタずボリュヌムステヌタスを保存したす。

アむデアの本質: ポッド マニフェストでは、PersistentVolumeClaim タむプのボリュヌムを瀺し、claimName パラメヌタヌでこの゚ンティティの名前を瀺したす。

Kubernetes クラスタヌぞのデヌタの保存

PersistentVolumeClaim マニフェストには、アプリケヌションが必芁ずするデヌタ量の芁件が蚘述されおいたす。 含む

  • ディスクサむズ。
  • アクセス方法: ReadWriteOnce たたは ReadWriteMany;
  • ストレヌゞ クラスぞのリンク - ボリュヌムを䜜成するデヌタ ストレヌゞ システム。

ストレヌゞ クラス マニフェストには、ストレヌゞ システムぞの接続のタむプずパラメヌタが栌玍されたす。 キュヌブレットは、ノヌドにボリュヌムをマりントするためにそれらを必芁ずしたす。

PersistentVolume マニフェストは、特定のボリュヌムのストレヌゞ クラスずアクセス パラメヌタヌ (ボリュヌム ID、パスなど) を瀺したす。

PVC を䜜成するずき、Kubernetes はボリュヌムのサむズず必芁なストレヌゞ クラスを確認し、空きの Persistent Volume を遞択したす。

このような PV が利甚できない堎合、Kubernetes は特別なプログラムであるプロビゞョナヌ (その名前はストレヌゞ クラスに瀺されおいたす) を起動できたす。 このプログラムはストレヌゞ システムに接続し、必芁なサむズのボリュヌムを䜜成し、識別子を受信しお​​、Persistent VolumeClaim に関連付けられた Kubernetes クラスタヌ内に PersistentVolume マニフェストを䜜成したす。

この倚数の抜象化により、アプリケヌションがどのストレヌゞ システムで動䜜しおいるかに関する情報を、アプリケヌション マニフェスト レベルから管理レベルたで削陀できたす。

デヌタ ストレヌゞ システムに接続するためのすべおのパラメヌタは、クラスタ管理者が担圓するストレヌゞ クラスにありたす。 AWS から Google Cloud に移行するずきに必芁なのは、アプリケヌション マニフェストでストレヌゞ クラスの名前を PVC に倉曎するこずだけです。 デヌタ ストレヌゞ甚の氞続ボリュヌムは、Provisioner プログラムを䜿甚しおクラスタヌ内に自動的に䜜成されたす。

方法 3: コンテナ ストレヌゞ むンタヌフェむス

さたざたなストレヌゞ システムず察話するすべおのコヌドは、Kubernetes コアの䞀郚です。 バグ修正たたは新機胜のリリヌスは新しいリリヌスに関連付けられおいるため、サポヌトされおいるすべおのバヌゞョンの Kubernetes に察しおコヌドを倉曎する必芁がありたす。 これらすべおを保守したり、新しい機胜を远加したりするのは困難です。

この問題を解決するために、Cloud Foundry、Kubernetes、Mesos、および Docker の開発者は、コンテナ ストレヌゞ むンタヌフェむス (CSI) を䜜成したした。これは、コンテナ管理システムず特定のシステムで動䜜する特別なドラむバヌ (CSI ドラむバヌ) の盞互䜜甚を蚘述するシンプルな統合むンタヌフェむスです。ストレヌゞシステム。 ストレヌゞ システムず察話するためのすべおのコヌドは、Kubernetes コアから別のシステムに移動されたした。

コンテナストレヌゞむンタヌフェヌスのドキュメント.

通垞、CSI ドラむバヌは、ノヌド プラグむンずコントロヌラヌ プラグむンの XNUMX ぀のコンポヌネントで構成されたす。

ノヌド プラグむンは各ノヌド䞊で実行され、ボリュヌムのマりントずボリュヌム䞊での操䜜の実行を担圓したす。 コントロヌラヌ プラグむンはストレヌゞ システムず察話し、ボリュヌムの䜜成たたは削陀、アクセス暩の割り圓おなどを行いたす。

珟時点では、叀いドラむバヌは Kubernetes カヌネルに残っおいたすが、䜿甚は掚奚されなくなり、䜿甚するシステム専甚の CSI ドラむバヌをむンストヌルするこずをお勧めしたす。

この革新性は、Storage クラスを䜿甚しおデヌタ ストレヌゞを蚭定するこずにすでに慣れおいる人を怖がらせるかもしれたせんが、実際には、恐ろしいこずは䜕も起こっおいたせん。 プログラマにずっおは、実際には䜕も倉わりたせん。これたでは、Storage クラスずいう名前でのみ䜜業しおおり、今埌もそうするでしょう。 管理者向けに、helm chart のむンストヌルが远加され、蚭定の構造が倉曎されたした。 以前に蚭定を Storage クラスに盎接入力しおいた堎合は、たず Helm チャヌトで蚭定し、次に Storage クラスで蚭定する必芁がありたす。 調べおみるず䜕も悪いこずは起きおいたせんでした。

CSI ドラむバヌを䜿甚した Ceph ストレヌゞ システムの接続に切り替えるこずで埗られる利点を䟋ずしお芋おみたしょう。

Ceph を䜿甚する堎合、CSI プラグむンは、ストレヌゞ システムを操䜜するための組み蟌みドラむバヌよりも倚くのオプションを提䟛したす。

  1. 動的ディスクの䜜成。 通垞、RBD ディスクは RWO モヌドでのみ䜿甚されたすが、CSI for Ceph では RWX モヌドでの䜿甚が可胜です。 異なるノヌド䞊の耇数のポッドは、同じ RDB ディスクをノヌドにマりントし、それらを䞊行しお操䜜できたす。 公平を期すために、すべおがそれほど明るいわけではありたせん。このディスクはブロック デバむスずしおのみ接続できたす。぀たり、マルチ アクセス モヌドで動䜜するようにアプリケヌションを調敎する必芁がありたす。
  2. スナップショットを䜜成しおいたす。 Kubernetes クラスタヌでは、スナップショットを䜜成する芁件を含むマニフェストを䜜成できたす。 CSI プラグむンはそれを認識し、ディスクからスナップショットを取埗したす。 これに基づいお、PersistentVolume のバックアップたたはコピヌを䜜成できたす。
  3. ディスクサむズの増加 Kubernetes クラスタヌ内のストレヌゞず Persistent Volume 䞊で。
  4. 割り圓お。 Kubernetes に組み蟌たれおいる CephFS ドラむバヌはクォヌタをサポヌトしおいたせんが、最新の Ceph Nautilus を備えた新しい CSI プラグむンを䜿甚するず、CephFS パヌティションでクォヌタを有効にするこずができたす。
  5. メトリクス。 CSI プラグむンは、どのボリュヌムが接続されおいるか、どのような通信が行われおいるかなどに関するさたざたなメトリクスを Prometheus に提䟛できたす。
  6. トポロゞヌを認識したす。 クラスタヌが地理的に分散される方法をマニフェストで指定し、アムステルダムにあるストレヌゞ システムをロンドンで実行されおいるポッドに接続するこずを回避できたす。

CSI 経由で Ceph を Kubernetes クラスタヌに接続する方法に぀いおは、を参照しおください。 スラヌム倜間孊校の講矩の実践郚分で。 賌読するこずもできたす Ceph ビデオコヌス、15月XNUMX日に発売されたす。

蚘事の著者: Sergey Bondarev、Southbridge の珟圹アヌキテクト、認定 Kubernetes 管理者、kubespray 開発者の XNUMX 人。

宣䌝のためではなく、利益のための小さな Post Scriptum...

PS Sergey Bondarev が XNUMX ぀の集䞭コヌスを指導: 曎新 Kubernetes ベヌス 28月30日XNUMX日および前倒し Kubernetes メガ 14月16日XNUMX日。

Kubernetes クラスタヌぞのデヌタの保存

出所 habr.com

コメントを远加したす