{"id":94739,"date":"2020-09-20T19:42:27","date_gmt":"2020-09-20T17:42:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes"},"modified":"2021-01-02T13:05:08","modified_gmt":"2021-01-02T11:05:08","slug":"prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","title":{"rendered":"Gyakorlati p\u00e9ld\u00e1ja a Ceph-alap\u00fa t\u00e1rol\u00f3 Kubernetes klaszterhez val\u00f3 csatlakoz\u00e1s\u00e1nak.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A Kont\u00e9ner T\u00e1rol\u00e1si Fel\u00fclet (CSI) egy egys\u00e9ges interf\u00e9sz a Kubernetes \u00e9s a t\u00e1rol\u00f3rendszerek k\u00f6z\u00f6tti interakci\u00f3hoz. R\u00f6viden r\u00f3la m\u00e1r <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/519130\/\">besz\u00e9lt\u00fcnk<\/a><\/noindex>, de ma r\u00e9szletesebben megvizsg\u00e1ljuk a CSI \u00e9s a Ceph \u00f6sszekapcsol\u00e1s\u00e1t: megmutatjuk, hogyan <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">k\u00f6tj\u00fck \u00f6ssze a Ceph t\u00e1rol\u00f3t<\/a><\/noindex> a Kubernetes klaszterrel.<br \/>\nA cikkben val\u00f3s p\u00e9ld\u00e1k szerepelnek, amelyek b\u00e1r kiss\u00e9 leegyszer\u0171s\u00edtettek az olvashat\u00f3s\u00e1g kedv\u00e9\u00e9rt. A Ceph \u00e9s a Kubernetes klaszterek telep\u00edt\u00e9se \u00e9s konfigur\u00e1l\u00e1sa nem k\u00e9pezi a t\u00e9ma r\u00e9sz\u00e9t.<\/p>\n<p>\u00c9rdekli, hogyan m\u0171k\u00f6dik?<\/p>\n<p><img decoding=\"async\" alt=\"Gyakorlati p\u00e9ld\u00e1ja a Ceph-alap\u00fa t\u00e1rol\u00f3 Kubernetes klaszterhez val\u00f3 csatlakoz\u00e1s\u00e1nak.\" src=\"\/wp-content\/uploads\/2020\/09\/db0a1d1e4c38c693f591057a219c141c.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Teh\u00e1t \u00d6nnek van egy Kubernetes klaszter a kez\u00e9ben, p\u00e9ld\u00e1ul telep\u00edtve a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\">kubespray<\/a><\/noindex>. Mellett m\u0171k\u00f6dik egy Ceph klaszter \u2014 ezt is telep\u00edtheti p\u00e9ld\u00e1ul ezzel a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-ansible\">playbook k\u00e9szlettel<\/a><\/noindex>. Rem\u00e9lem, nem kell megeml\u00edteni, hogy a termel\u00e9si k\u00f6rnyezetben k\u00f6z\u00f6tt\u00fck legal\u00e1bb 10 Gbit\/s sebess\u00e9g\u0171 h\u00e1l\u00f3zatnak kell lennie.<\/p>\n<p>Ha mindez megvan, kezdj\u00fcnk neki!<\/p>\n<p>El\u0151sz\u00f6r l\u00e9pj\u00fcnk be a Ceph klaszter egyik node-j\u00e1ba, \u00e9s ellen\u0151rizz\u00fck, hogy minden rendben van:<\/p>\n<pre><code class=\"plaintext\">ceph health\nceph -s<\/code><\/pre>\n<p>Ezt k\u00f6vet\u0151en l\u00e9trehozunk egy medenc\u00e9t az RBD lemezek sz\u00e1m\u00e1ra:<\/p>\n<pre><code class=\"plaintext\">ceph osd pool create kube 32\nceph osd pool application enable kube rbd<\/code><\/pre>\n<p>L\u00e9pj\u00fcnk a Kubernetes klaszterre. Itt el\u0151sz\u00f6r telep\u00edtj\u00fck a Ceph CSI meghajt\u00f3t az RBD-hez. Telep\u00edteni fogjuk, ahogy azt a Helm megk\u00edv\u00e1nja.<br \/>\nHozz\u00e1adjuk a chart rep\u00f3t, \u00e9s megkapjuk a ceph-csi-rbd chart v\u00e1ltoz\u00f3it:<\/p>\n<pre><code class=\"plaintext\">helm repo add ceph-csi https:\/\/ceph.github.io\/csi-charts\nhelm inspect values ceph-csi\/ceph-csi-rbd &gt; cephrbd.yml<\/code><\/pre>\n<p>Most ki kell t\u00f6lten\u00fcnk a cephrbd.yml f\u00e1jlt. Ehhez megtudjuk a klaszter azonos\u00edt\u00f3j\u00e1t \u00e9s a Ceph monitorok IP-c\u00edm\u00e9t:<\/p>\n<pre><code class=\"plaintext\">ceph fsid  # \u00edgy tudjuk meg a clusterID-t\nceph mon dump  # \u00e9s \u00edgy l\u00e1tjuk a monitorok IP-c\u00edmeit<\/code><\/pre>\n<p>A kapott \u00e9rt\u00e9keket be\u00edrjuk a cephrbd.yml f\u00e1jlba. Ek\u00f6zben enged\u00e9lyezz\u00fck a PSP (Pod Security Policies) l\u00e9trehoz\u00e1s\u00e1t. Az opci\u00f3k a <strong>nodeplugin<\/strong> \u00e9s <strong>provisioner<\/strong> m\u00e1r l\u00e9teznek a f\u00e1jlban, ezeket az al\u00e1bbiak szerint m\u00f3dos\u00edthatjuk:<\/p>\n<pre><code class=\"plaintext\">csiConfig:\n  - clusterID: \"bcd0d202-fba8-4352-b25d-75c89258d5ab\"\n    monitors:\n      - \"v2:172.18.8.5:3300\/0,v1:172.18.8.5:6789\/0\"\n      - \"v2:172.18.8.6:3300\/0,v1:172.18.8.6:6789\/0\"\n      - \"v2:172.18.8.7:3300\/0,v1:172.18.8.7:6789\/0\"\n\nnodeplugin:\n  podSecurityPolicy:\n    enabled: true\n\nprovisioner:\n  podSecurityPolicy:\n    enabled: true<\/code><\/pre>\n<p>Ezut\u00e1n m\u00e1r csak annyit kell tenn\u00fcnk, hogy telep\u00edtj\u00fck a chart-ot a Kubernetes klaszterre.<\/p>\n<pre><code class=\"plaintext\">helm upgrade -i ceph-csi-rbd ceph-csi\/ceph-csi-rbd -f cephrbd.yml -n ceph-csi-rbd --create-namespace<\/code><\/pre>\n<p>Remek, az RBD meghajt\u00f3 m\u0171k\u00f6dik!<br \/>\nHozzunk l\u00e9tre egy \u00faj StorageClass-t a Kubernetes-ben. Ehhez ism\u00e9t sz\u00fcks\u00e9g lesz egy kis munk\u00e1ra a Ceph-vel.<\/p>\n<p>\u00daj felhaszn\u00e1l\u00f3t hozunk l\u00e9tre a Ceph-ben, \u00e9s jogosults\u00e1gokat adunk neki a kube medenc\u00e9be val\u00f3 \u00edr\u00e1shoz <strong>kube<\/strong>:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-or-create client.rbdkube mon 'profile rbd' osd 'profile rbd pool=kube'<\/code><\/pre>\n<p>Most n\u00e9zz\u00fck meg a hozz\u00e1f\u00e9r\u00e9si kulcsot, ugyanott:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.rbdkube<\/code><\/pre>\n<p>A parancs k\u00f6r\u00fclbel\u00fcl ilyesmit ad vissza:<\/p>\n<pre><code class=\"plaintext\">AQCO9NJbhYipKRAAMqZsnqqS\/T8OYQX20xIa9A==<\/code><\/pre>\n<p>Ezt az \u00e9rt\u00e9ket be\u00edrjuk a Kubernetes klaszter titkos\u00edtott t\u00e1rol\u00f3j\u00e1ba \u2014 oda, ahol sz\u00fcks\u00e9ges <strong>userKey<\/strong>:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: csi-rbd-secret\n  namespace: ceph-csi-rbd\nstringData:\n  # A kulcsok \u00e9rt\u00e9kei megfelelnek a felhaszn\u00e1l\u00f3n\u00e9vnek \u00e9s a titkos kulcs\u00e1nak, ahogy azt\n  # a Ceph klaszterben megadt\u00e1k. A felhaszn\u00e1l\u00f3 ID-j\u00e1nak hozz\u00e1f\u00e9r\u00e9ssel kell rendelkeznie a megadott\n  # t\u00e1rol\u00f3 oszt\u00e1lyhoz tartoz\u00f3 medenc\u00e9hez.\n  userID: rbdkube\n  userKey:<\/code><\/pre>\n<p>\u00c9s l\u00e9trehozzuk a titkunkat:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Ezut\u00e1n sz\u00fcks\u00e9g\u00fcnk van egy ilyen StorageClass megval\u00f3s\u00edt\u00e1sra:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: storage.k8s.io\/v1\nkind: StorageClass\nmetadata:\n   name: csi-rbd-sc\nprovisioner: rbd.csi.ceph.com\nparameters:\n   clusterID: \n   pool: kube\n\n   imageFeatures: layering\n\n   # Ezeknek a titkoknak tartalmazniuk kell az azonos\u00edt\u00e1shoz sz\u00fcks\u00e9ges adatokat\n   # az \u00f6n medenc\u00e9j\u00e9hez.\n   csi.storage.k8s.io\/provisioner-secret-name: csi-rbd-secret\n   csi.storage.k8s.io\/provisioner-secret-namespace: ceph-csi-rbd\n   csi.storage.k8s.io\/controller-expand-secret-name: csi-rbd-secret\n   csi.storage.k8s.io\/controller-expand-secret-namespace: ceph-csi-rbd\n   csi.storage.k8s.io\/node-stage-secret-name: csi-rbd-secret\n   csi.storage.k8s.io\/node-stage-secret-namespace: ceph-csi-rbd\n\n   csi.storage.k8s.io\/fstype: ext4\n\nreclaimPolicy: Delete\nallowVolumeExpansion: true\nmountOptions:\n  - discard<\/code><\/pre>\n<p>Ki kell t\u00f6lteni <strong>clusterID<\/strong>, amelyet m\u00e1r tudunk a parancs seg\u00edts\u00e9g\u00e9vel <em>ceph fsid<\/em>, \u00e9s alkalmazni ezt a megval\u00f3s\u00edt\u00e1st a Kubernetes klaszterben:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<p>A klaszterek k\u00f6z\u00f6tti m\u0171k\u00f6d\u00e9s ellen\u0151rz\u00e9s\u00e9hez hozzunk l\u00e9tre egy ilyen PVC-t (Persistent Volume Claim):<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: rbd-pvc\nspec:\n  accessModes:\n  - ReadWriteOnce\n  resources:\n    requests:\n      storage: 1Gi\n  storageClassName: csi-rbd-sc<\/code><\/pre>\n<p>N\u00e9zz\u00fck meg, hogyan hozta l\u00e9tre Kubernetes a Ceph-ben a k\u00e9rt k\u00f6tetet:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>\u00dagy t\u0171nik, minden rendben van! Hogyan n\u00e9z ki ez a Ceph oldal\u00e1n?<br \/>\nK\u00e9rj\u00fck, azonos\u00edtsuk a k\u00f6teteket a medenc\u00e9ben, \u00e9s n\u00e9zz\u00fck meg a k\u00f6tet\u00fcnkr\u0151l sz\u00f3l\u00f3 inform\u00e1ci\u00f3kat:<\/p>\n<pre><code class=\"plaintext\">rbd ls -p kube\nrbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653  # itt term\u00e9szetesen m\u00e1s k\u00f6tet ID lesz, amelyet az el\u0151z\u0151 parancs adott<\/code><\/pre>\n<p>Most n\u00e9zz\u00fck meg, hogyan m\u0171k\u00f6dik a RBD k\u00f6tet m\u00e9ret\u00e9nek m\u00f3dos\u00edt\u00e1sa.<br \/>\nM\u00f3dos\u00edtjuk a k\u00f6tet m\u00e9ret\u00e9t a pvc.yaml megval\u00f3s\u00edt\u00e1sban 2Gi-ra, \u00e9s alkalmazzuk:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>V\u00e1rjunk egy kicsit, am\u00edg a m\u00f3dos\u00edt\u00e1sok \u00e9rv\u00e9nybe l\u00e9pnek, \u00e9s m\u00e9g egyszer n\u00e9zz\u00fck meg a k\u00f6tet m\u00e9ret\u00e9t.<\/p>\n<pre><code class=\"plaintext\">rbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653\n\nkubectl get pv\nkubectl get pvc<\/code><\/pre>\n<p>L\u00e1tjuk, hogy a PVC m\u00e9rete nem v\u00e1ltozott. Az ok megismer\u00e9s\u00e9hez k\u00e9rhetj\u00fck a Kubernetes-t\u0151l a PVC YAML form\u00e1tumban val\u00f3 le\u00edr\u00e1s\u00e1t:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc rbd-pvc -o yaml<\/code><\/pre>\n<p>Itt van a probl\u00e9ma:<\/p>\n<p><em>message: Waiting for user to (re-)start a pod to finish file system resize of volume on node. type: FileSystemResizePending<\/em><\/p>\n<p>Teh\u00e1t a lemez megn\u0151tt, de a rajta l\u00e9v\u0151 f\u00e1jlrendszer nem.<br \/>\nA f\u00e1jlrendszer megn\u00f6vel\u00e9s\u00e9hez csatolni kell a k\u00f6tetet. A m\u00e1r l\u00e9trehozott PVC\/PV jelenleg nem haszn\u00e1latos.<\/p>\n<p>L\u00e9trehozhatunk egy teszt Pod-ot, p\u00e9ld\u00e1ul \u00edgy:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: v1\nkind: Pod\nmetadata:\n  name: csi-rbd-demo-pod\nspec:\n  containers:\n    - name: web-server\n      image: nginx:1.17.6\n      volumeMounts:\n        - name: mypvc\n          mountPath: \/data\n  volumes:\n    - name: mypvc\n      persistentVolumeClaim:\n        claimName: rbd-pvc\n        readOnly: false<\/code><\/pre>\n<p>Most n\u00e9zz\u00fck meg a PVC-t:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc<\/code><\/pre>\n<p>A m\u00e9ret megv\u00e1ltozott, minden rendben van.<\/p>\n<p>Az els\u0151 r\u00e9szben egy RBD (Rados Block Device) blokkt\u00e1rol\u00f3 eszk\u00f6zzel dolgoztunk, de ezt nem lehet \u00edgy csin\u00e1lni, ha k\u00fcl\u00f6nb\u00f6z\u0151 mikroszolg\u00e1ltat\u00e1soknak egyidej\u0171leg kell hozz\u00e1f\u00e9rni\u00fck ehhez a lemezhez. F\u00e1jlokkal val\u00f3 munk\u00e1hoz sokkal jobban illik a CephFS.<br \/>\nA Ceph \u00e9s Kubernetes klaszterek alapj\u00e1n be\u00e1ll\u00edtjuk a CSI-t \u00e9s a CephFS haszn\u00e1lat\u00e1hoz sz\u00fcks\u00e9ges egy\u00e9b entit\u00e1sokat.<\/p>\n<p>Megkapjuk a sz\u00fcks\u00e9ges \u00faj Helm-diagram \u00e9rt\u00e9keket:<\/p>\n<pre><code class=\"plaintext\">helm inspect values ceph-csi\/ceph-csi-cephfs &gt; cephfs.yml<\/code><\/pre>\n<p>\u00dajra ki kell t\u00f6lteni a cephfs.yml f\u00e1jlt. Ahogyan kor\u00e1bban is, a Ceph parancsok seg\u00edtenek:<\/p>\n<pre><code class=\"plaintext\">ceph fsid\nceph mon dump<\/code><\/pre>\n<p>A f\u00e1jl \u00e9rt\u00e9keivel k\u00f6r\u00fclbel\u00fcl \u00edgy t\u00f6ltj\u00fck ki:<\/p>\n<pre><code class=\"plaintext\">csiConfig:\n  - clusterID: \"bcd0d202-fba8-4352-b25d-75c89258d5ab\"\n    monitors:\n      - \"172.18.8.5:6789\"\n      - \"172.18.8.6:6789\"\n      - \"172.18.8.7:6789\"\n\nnodeplugin:\n  httpMetrics:\n    enabled: true\n    containerPort: 8091\n  podSecurityPolicy:\n    enabled: true\n\nprovisioner:\n  replicaCount: 1\n  podSecurityPolicy:\n    enabled: true<\/code><\/pre>\n<p>Vedd \u00e9szre, hogy a monitorok c\u00edmei egyszer\u0171 form\u00e1ban address:port szerepelnek. A cephfs csatol\u00e1s\u00e1hoz a csom\u00f3ponton ezeket a c\u00edmeket a kernel modulhoz adjuk \u00e1t, amely m\u00e9g nem tudja kezelni a v2 monitor protokollt.<br \/>\nA httpMetrics portj\u00e1t (ahova a Prometheus megy a monitoroz\u00e1si metrik\u00e1k\u00e9rt) megv\u00e1ltoztatjuk, hogy ne \u00fctk\u00f6zz\u00f6n a kubespray \u00e1ltal telep\u00edtett nginx-proxyval. Lehet, hogy neked erre nem lesz sz\u00fcks\u00e9ged.<\/p>\n<p>Helm-diagram telep\u00edt\u00e9se a Kubernetes klaszterre:<\/p>\n<pre><code class=\"plaintext\">helm upgrade -i ceph-csi-cephfs ceph-csi\/ceph-csi-cephfs -f cephfs.yml -n ceph-csi-cephfs --create-namespace<\/code><\/pre>\n<p>\u00c1tmegy\u00fcnk a Ceph adatb\u00e1zis t\u00e1rol\u00f3j\u00e1ba, hogy ott l\u00e9trehozzunk egy k\u00fcl\u00f6n felhaszn\u00e1l\u00f3t. A dokument\u00e1ci\u00f3 szerint a CephFS prov\u00edzi\u00f3z\u00f3nak sz\u00fcks\u00e9ge van a klaszter adminisztr\u00e1tori jogaira. De l\u00e9trehozunk egy k\u00fcl\u00f6n felhaszn\u00e1l\u00f3t <em>fs<\/em> korl\u00e1tozott jogokkal:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-or-create client.fs mon 'allow r' mgr 'allow rw' mds 'allow rws' osd 'allow rw pool=cephfs_data, allow rw pool=cephfs_metadata'<\/code><\/pre>\n<p>\u00c9s azonnal megn\u00e9zz\u00fck a hozz\u00e1f\u00e9r\u00e9si kulcs\u00e1t, ez k\u00e9s\u0151bb j\u00f3l j\u00f6n:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.fs<\/code><\/pre>\n<p>L\u00e9trehozunk k\u00fcl\u00f6n Secret-et \u00e9s StorageClass-t.<br \/>\nSemmi \u00fajat, ezt m\u00e1r l\u00e1ttuk az RBD p\u00e9ld\u00e1j\u00e1n:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: csi-cephfs-secret\n  namespace: ceph-csi-cephfs\nstringData:\n  # Sz\u00fcks\u00e9ges a dinamikusan l\u00e9trehozott k\u00f6tetekhez\n  adminID: fs\n  adminKey:<\/code><\/pre>\n<p>Alkalmazzuk a manifesztet:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Most pedig \u2013 egy k\u00fcl\u00f6n StorageClass:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: storage.k8s.io\/v1\nkind: StorageClass\nmetadata:\n  name: csi-cephfs-sc\nprovisioner: cephfs.csi.ceph.com\nparameters:\n  clusterID: \n\n  # A CephFS f\u00e1jlrendszer neve, amelyben a k\u00f6tet l\u00e9trej\u00f6n\n  fsName: cephfs\n\n  # (opcion\u00e1lis) A Ceph t\u00e1rol\u00f3, ahol a k\u00f6tet adatai t\u00e1rol\u00f3dnak\n  # pool: cephfs_data\n\n  # (opcion\u00e1lis) Vessz\u0151vel elv\u00e1lasztott Ceph-fuse csatol\u00e1si opci\u00f3k\n  # p\u00e9ld\u00e1ul:\n  # fuseMountOptions: debug\n\n  # (opcion\u00e1lis) Vessz\u0151vel elv\u00e1lasztott CephFS csatol\u00e1si opci\u00f3k a kernelhez\n  # L\u00e1sd a man mount.ceph a lehet\u0151s\u00e9gek list\u00e1j\u00e1hoz. P\u00e9ld\u00e1ul:\n  # kernelMountOptions: readdir_max_bytes=1048576,norbytes\n\n  # A titkoknak tartalmazniuk kell a Ceph adminisztr\u00e1tor \u00e9s\/vagy felhaszn\u00e1l\u00f3i hozz\u00e1f\u00e9r\u00e9seit.\n  csi.storage.k8s.io\/provisioner-secret-name: csi-cephfs-secret\n  csi.storage.k8s.io\/provisioner-secret-namespace: ceph-csi-cephfs\n  csi.storage.k8s.io\/controller-expand-secret-name: csi-cephfs-secret\n  csi.storage.k8s.io\/controller-expand-secret-namespace: ceph-csi-cephfs\n  csi.storage.k8s.io\/node-stage-secret-name: csi-cephfs-secret\n  csi.storage.k8s.io\/node-stage-secret-namespace: ceph-csi-cephfs\n\n  # (opcion\u00e1lis) A meghajt\u00f3 haszn\u00e1lhat ceph-fuse-t (fuse) \n  # vagy ceph kernelclient-et (kernel).\n  # Ha nincs megadva, az alap\u00e9rtelmezett k\u00f6tetcsatol\u00e1s lesz haszn\u00e1lva,\n  # ezt a ceph-fuse \u00e9s mount.ceph keres\u00e9s\u00e9vel hat\u00e1rozz\u00e1k meg.\n  # mounter: kernel\nreclaimPolicy: Delete\nallowVolumeExpansion: true\nmountOptions:\n  - debug<\/code><\/pre>\n<p>T\u00f6lts\u00fck ki itt <strong>clusterID<\/strong> \u00e9s alkalmazzuk a Kubernetesben:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<h2 id=\"proverka\">Ellen\u0151rz\u00e9s<\/h2>\n<p>A p\u00e9ld\u00e1hoz hasonl\u00f3an ellen\u0151rizz\u00fck, hozzunk l\u00e9tre egy PVC-t:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: csi-cephfs-pvc\nspec:\n  accessModes:\n    - ReadWriteMany\n  resources:\n    requests:\n      storage: 5Gi\n  storageClassName: csi-cephfs-sc<\/code><\/pre>\n<p>\u00c9s ellen\u0151rizz\u00fck a PVC\/PV megl\u00e9t\u00e9t:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Ha meg szeretn\u00e9d n\u00e9zni a f\u00e1jlokat \u00e9s mapp\u00e1kat a CephFS-ben, csatolhatod ezt a f\u00e1jlrendszert valahov\u00e1. P\u00e9ld\u00e1ul, ahogy az al\u00e1bb l\u00e1that\u00f3.<\/p>\n<p>L\u00e1togassunk el a Ceph klaszter egyik csom\u00f3pontj\u00e1ra, \u00e9s v\u00e9gezz\u00fck el az al\u00e1bbi l\u00e9p\u00e9seket:<\/p>\n<pre><code class=\"plaintext\"># \u0422\u043e\u0447\u043a\u0430 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\nmkdir -p \/mnt\/cephfs\n\n# \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b \u0441 \u043a\u043b\u044e\u0447\u043e\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\nceph auth get-key client.admin &gt;\/etc\/ceph\/secret.key\n\n# \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \/etc\/fstab\n# !! \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c ip \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0448\u0435\u0433\u043e \u0443\u0437\u043b\u0430\necho \"172.18.8.6:6789:\/ \/mnt\/cephfs ceph name=admin,secretfile=\/etc\/ceph\/secret.key,noatime,_netdev    0       2\" &gt;&gt; \/etc\/fstab\n\nmount \/mnt\/cephfs<\/code><\/pre>\n<p>Term\u00e9szetesen, ez a fajta f\u00e1jlrendszer-csatol\u00e1s a Ceph csom\u00f3ponton kiz\u00e1r\u00f3lag tanul\u00e1si c\u00e9lokra alkalmas, ahogy mi is foglalkozunk a <noindex><a rel=\"nofollow\" href=\"http:\/\/slurm.io\">Slurm kurzusainkkal<\/a><\/noindex>. Nem gondolom, hogy b\u00e1rki ezt a produkci\u00f3ban tenni fogja, nagy a kock\u00e1zata, hogy v\u00e9letlen\u00fcl fel\u00fcl\u00edrja a fontos f\u00e1jlokat.<\/p>\n<p>V\u00e9g\u00fcl n\u00e9zz\u00fck meg, hogyan \u00e1llnak a k\u00f6tetm\u00e9retek m\u00f3dos\u00edt\u00e1si lehet\u0151s\u00e9gei CephFS eset\u00e9n. Visszat\u00e9r\u00fcnk a Kuberneteshez, \u00e9s szerkesztj\u00fck a PVC mifest, n\u00f6velj\u00fck a m\u00e9retet p\u00e9ld\u00e1ul 7Gi-ra.<\/p>\n<p>Alkalmazzuk a szerkesztett f\u00e1jlt:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>N\u00e9zz\u00fck meg a csatolt mapp\u00e1ban, hogyan v\u00e1ltozott a kv\u00f3ta:<\/p>\n<pre><code class=\"plaintext\">getfattr -n ceph.quota.max_bytes<\/code><\/pre>\n<p>Ehhez a parancshoz lehet, hogy telep\u00edtened kell a rendszerbe a csomagot <strong>attr<\/strong>.<\/p>\n<h2 id=\"glaza-boyatsya-a-ruki-delayut\">A szemek f\u00e9lnek, de a kezek dolgoznak<\/h2>\n<p>B\u00e1r ezek a var\u00e1zslatok \u00e9s hossz\u00fa YAML manifestei bonyolultnak t\u0171nnek, a Slurm di\u00e1kjai meglehet\u0151sen gyorsan meg\u00e9rtik \u0151ket a gyakorlatban.<br \/>\nEbben a cikkben nem m\u00e9lyedt\u00fcnk el a r\u00e9szletekbe \u2014 erre ott a hivatalos dokument\u00e1ci\u00f3. Ha a Ceph t\u00e1rol\u00f3 Kubernetes klaszterrel val\u00f3 be\u00e1ll\u00edt\u00e1s\u00e1nak r\u00e9szletei \u00e9rdeklik, ezek a linkek seg\u00edtenek:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/\">A Kubernetes \u00e1ltal\u00e1nos m\u0171k\u00f6d\u00e9si elvei a k\u00f6tetekkel<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/rbd\/\">Dokument\u00e1ci\u00f3 RBD-hez<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/rbd-kubernetes\/\">RBD \u00e9s Kubernetes integr\u00e1ci\u00f3ja a Ceph szempontj\u00e1b\u00f3l<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-rbd.md\">RBD \u00e9s Kubernetes integr\u00e1ci\u00f3ja a CSI szempontj\u00e1b\u00f3l<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/cephfs\/\">\u00c1ltal\u00e1nos dokument\u00e1ci\u00f3 a CephFS-r\u0151l<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-cephfs.md\">CephFS \u00e9s Kubernetes integr\u00e1ci\u00f3ja a CSI szempontj\u00e1b\u00f3l<\/a><\/noindex><\/p>\n<p>A Slurm tanfolyamon <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/6p9lng\">Kubernetes Alapok<\/a><\/noindex> tov\u00e1bbl\u00e9phet, \u00e9s egy val\u00f3s alkalmaz\u00e1st ind\u00edthat a Kubernetes alatt, amely CephFS-t haszn\u00e1l f\u00e1jlok t\u00e1rol\u00e1s\u00e1ra. GET\/POST lek\u00e9rdez\u00e9sekkel f\u00e1jlokat k\u00fcldhet \u00e9s kaphat a Ceph-b\u0151l.<\/p>\n<p>Ha ink\u00e1bb az adatmeg\u0151rz\u00e9s \u00e9rdekli, akkor iratkozzon fel a <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">\u00faj Ceph tanfolyamra<\/a><\/noindex>. Am\u00edg a b\u00e9tateszt zajlik, a tanfolyam kedvezm\u00e9nnyel \u00e9rhet\u0151 el, \u00e9s hat\u00e1ssal lehet a tartalm\u00e1ra.<\/p>\n<p><em>A cikk szerz\u0151je: Alexander Shvalov, gyakorl\u00f3 m\u00e9rn\u00f6k <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/ophLww\">Southbridge<\/a><\/noindex>, Certified Kubernetes Administrator, a Slurm tanfolyamok szerz\u0151je \u00e9s fejleszt\u0151je.<\/em><\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/519642\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Container Storage Interface (CSI) \u2014 \u044d\u0442\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f Kubernetes \u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043e \u043d\u0451\u043c \u043c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438, \u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0432\u044f\u0437\u043a\u0443 CSI \u0438 Ceph: \u043f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Ceph \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 Kubernetes. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435, \u0445\u043e\u0442\u044f \u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Ceph \u0438 Kubernetes [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":94740,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-94739","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"Container Storage Interface (CSI) \u2014 \u044d\u0442\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f Kubernetes \u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Ceph \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Container Storage Interface (CSI) \u2014 \u044d\u0442\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f Kubernetes \u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-20T17:42:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-01-02T11:05:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Gyakorlati p\u00e9lda Ceph alap\u00fa t\u00e1rol\u00f3 csatlakoztat\u00e1s\u00e1ra egy Kubernetes klaszterben | ProHoster","description":"A Container Storage Interface (CSI) egy egys\u00e9ges interf\u00e9sz a Kubernetes \u00e9s a t\u00e1rol\u00f3rendszerek k\u00f6z\u00f6tti kommunik\u00e1ci\u00f3hoz.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Ceph \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kubernetes | ProHoster","og:description":"Container Storage Interface (CSI) \u2014 \u044d\u0442\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f Kubernetes \u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-20T17:42:27+00:00","article:modified_time":"2021-01-02T11:05:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"94739","title":null,"description":"","keywords":"","keyphrases":null,"primary_term":null,"canonical_url":"","og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:19:21","updated":"2022-09-30 10:03:10","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/94739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=94739"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/94739\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/94740"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=94739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=94739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=94739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}