{"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\/nl\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","title":{"rendered":"Praktisch voorbeeld van het aansluiten van opslag op basis van Ceph in een Kubernetes-cluster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Container Storage Interface (CSI) is een gestandaardiseerde interface voor de interactie tussen Kubernetes en opslagsystemen. Kort gezegd hebben we het er al over gehad, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/519130\/\">twee jaar geleden verteld, en in november 2018 gebeurde er een zeer interessante (wat betreft beveiliging) gebeurtenis. Kort samengevat, het team van CyberArk Software Ltd. slaagde erin het te hacken: ze kregen de mogelijkheid om commando's buiten de containers uit te voeren, d.w.z. op het host-systeem. Een prachtige illustratie van het beveiligingsprobleem in Docker, nietwaar? Over alle details van wat er gebeurde, lees je<\/a><\/noindex>, en vandaag bekijken we in detail de combinatie van CSI en Ceph: we laten zien hoe <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">je Ceph-opslag<\/a><\/noindex> aan een Kubernetes-cluster kunt koppelen.<br \/>\nDe artikelen bevatten echte, zij het iets vereenvoudigde voorbeelden voor een betere begrijpelijkheid. We bespreken de installatie en configuratie van Ceph- en Kubernetes-clusters niet.<\/p>\n<p>Ben je benieuwd hoe het werkt?<\/p>\n<p><img decoding=\"async\" alt=\"Praktisch voorbeeld van het aansluiten van opslag op basis van Ceph in een Kubernetes-cluster\" 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>Dus, je hebt een Kubernetes-cluster bij de hand, bijvoorbeeld, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\">kubespray<\/a><\/noindex>. Daarnaast draait er een Ceph-cluster - dat kan ook worden ge\u00efnstalleerd, bijvoorbeeld met dit <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-ansible\">set van playbooks<\/a><\/noindex>. Hopelijk is het niet nodig om te vermelden dat er voor productie tussen hen een netwerk moet zijn met een bandbreedte van minimaal 10 Gb\/s.<\/p>\n<p>Als je dat allemaal hebt, laten we beginnen!<\/p>\n<p>Laten we eerst een van de knooppunten van het Ceph-cluster bezoeken en controleren of alles in orde is:<\/p>\n<pre><code class=\"plaintext\">ceph health\nceph -s<\/code><\/pre>\n<p>Vervolgens maken we hier een pool voor de RBD-schijven aan:<\/p>\n<pre><code class=\"plaintext\">ceph osd pool create kube 32\nceph osd pool application enable kube rbd<\/code><\/pre>\n<p>We gaan naar het Kubernetes-cluster. Daar installeren we eerst de Ceph CSI-driver voor RBD. We zullen dit op de juiste manier via Helm doen.<br \/>\nLaten we de repository met de chart toevoegen en pakken het pakket met variabelen voor de chart ceph-csi-rbd:<\/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>Nu moeten we het bestand cephrbd.yml invullen. Hiervoor achterhalen we de cluster-ID en de IP-adressen van de monitoren in Ceph:<\/p>\n<pre><code class=\"plaintext\">ceph fsid  # zo vinden we clusterID\nceph mon dump  # en zo zien we de IP-adressen van de monitoren<\/code><\/pre>\n<p>De verkregen waarden plaatsen we in het bestand cephrbd.yml. Tussendoor activeren we de creatie van PSP (Pod Security Policies). De opties in de secties <strong>nodeplugin<\/strong> en <strong>provisioner<\/strong> zijn al in het bestand aanwezig; ze kunnen worden aangepast zoals hieronder wordt weergegeven:<\/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>Het enige wat we nog hoeven te doen, is de chart in het Kubernetes-cluster installeren.<\/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>Geweldig, de RBD-driver werkt!<br \/>\nLaten we een nieuwe StorageClass aanmaken in Kubernetes. Hiervoor moeten we opnieuw wat werk verrichten met Ceph.<\/p>\n<p>We cre\u00ebren een nieuwe gebruiker in Ceph en geven deze schrijfrechten op de pool <strong>kube<\/strong>:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-or-create client.rbdkube mon 'profiel rbd' osd 'profiel rbd pool=kube'<\/code><\/pre>\n<p>Laten we nu de toegangssleutel daar bekijken:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.rbdkube<\/code><\/pre>\n<p>De opdracht zal iets dergelijks opleveren:<\/p>\n<pre><code class=\"plaintext\">AQCO9NJbhYipKRAAMqZsnqqS\/T8OYQX20xIa9A==<\/code><\/pre>\n<p>We plaatsen deze waarde in een Secret in het Kubernetes-cluster \u2014 daar waar nodig <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  # De sleutelwaarden komen overeen met de gebruikersnaam en de bijbehorende sleutel, zoals opgegeven in\n  # de Ceph-cluster. De gebruikers-ID moet toegang hebben tot de pool,\n  # zoals opgegeven in de opslagklasse\n  userID: rbdkube\n  userKey:<\/code><\/pre>\n<p>En we maken onze secret aan:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Vervolgens hebben we ongeveer zo'n manifest voor de StorageClass nodig:<\/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   # Deze secrets moeten gegevens voor authenticatie bevatten\n   # naar uw pool.\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>Moet worden ingevuld <strong>clusterID<\/strong>, dat we al hebben ontdekt met het commando <em>ceph fsid<\/em>, en pas dit manifest toe in het Kubernetes-cluster:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<p>Om te controleren of de clusters goed samenwerken, maken we de volgende PVC (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>Laten we meteen kijken hoe Kubernetes de aangevraagde volume in Ceph heeft aangemaakt:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Alles ziet er goed uit! En hoe ziet het eruit aan de Ceph-kant?<br \/>\nLaten we een lijst van volumes in de pool ophalen en de informatie over ons volume bekijken:<\/p>\n<pre><code class=\"plaintext\">rbd ls -p kube\nrbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653  # hier zal natuurlijk een andere volume-ID worden getoond, die door het vorige commando werd gegeven<\/code><\/pre>\n<p>Laten we nu eens kijken hoe de grootte van het RBD-volume kan worden aangepast.<br \/>\nPas de grootte van het volume in het manifest pvc.yaml aan naar 2Gi en pas het toe:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>Laten we wachten totdat de wijzigingen zijn doorgevoerd en laten we nog eens naar de grootte van het volume kijken.<\/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>We zien dat de grootte van de PVC niet is gewijzigd. Om de reden te achterhalen, kunnen we Kubernetes vragen om de beschrijving van de PVC in YAML-indeling op te vragen:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc rbd-pvc -o yaml<\/code><\/pre>\n<p>En hier is het probleem:<\/p>\n<p><em>message: Wachten tot de gebruiker een pod (her)start om de schijfgrootte op de knoop af te ronden. type: FileSystemResizePending<\/em><\/p>\n<p>Dat wil zeggen, de schijf is vergroot, maar het bestandssysteem erop is dat niet.<br \/>\nOm het bestandssysteem te vergroten, moet het volume worden aangekoppeld. Onze gemaakte PVC\/PV wordt momenteel op geen enkele manier gebruikt.<\/p>\n<p>We kunnen een test-Pod aanmaken, bijvoorbeeld zo:<\/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>Laten we nu naar de PVC kijken:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc<\/code><\/pre>\n<p>De grootte is veranderd, alles is in orde.<\/p>\n<p>In het eerste deel hebben we gewerkt met het blokapparaat RBD (wat staat voor Rados Block Device), maar dit is niet mogelijk als meerdere microservices gelijktijdig toegang tot deze schijf nodig hebben. Voor het werken met bestanden in plaats van een schijfafbeelding is CephFS veel beter geschikt.<br \/>\nWe zullen een installatie van CSI en andere benodigde entiteiten voor CephFS configureren op basis van Ceph- en Kubernetes-clusters.<\/p>\n<p>We halen de waarden uit de gewenste nieuwe Helm-chart:<\/p>\n<pre><code class=\"plaintext\">helm inspect values ceph-csi\/ceph-csi-cephfs &gt; cephfs.yml<\/code><\/pre>\n<p>We moeten opnieuw het bestand cephfs.yml invullen. Zoals eerder, kunnen de Ceph-commando's hierbij helpen:<\/p>\n<pre><code class=\"plaintext\">ceph fsid\nceph mon dump<\/code><\/pre>\n<p>We vullen het waardenbestand ongeveer zo in:<\/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>Let op dat de adressen van de monitors in de eenvoudige vorm address:port worden opgegeven. Voor het koppelen van cephfs op de knooppunt worden deze adressen doorgegeven aan de kernelmodule, die nog niet met het v2 monitorprotocol kan werken.<br \/>\nWe wijzigen de poort voor httpMetrics (waar Prometheus metrics voor monitoring zal ophalen) zodat deze niet in conflict komt met de nginx-proxy die door Kubespray wordt ge\u00efnstalleerd. U heeft dit mogelijk niet nodig.<\/p>\n<p>We installeren de Helm-chart in het Kubernetes-cluster:<\/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>We gaan naar de Ceph-opslag om daar een aparte gebruiker aan te maken. In de documentatie staat dat de CephFS-provisioner beheerdersrechten voor het cluster nodig heeft. Maar we zullen een aparte gebruiker aanmaken <em>fs<\/em> met beperkte rechten:<\/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>En laten we meteen zijn toegangsgegevens bekijken, die we later nodig zullen hebben:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.fs<\/code><\/pre>\n<p>We zullen aparte Secret en StorageClass aanmaken.<br \/>\nNiets nieuws, we hebben dit al gezien met het RBD-voorbeeld:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: csi-cephfs-secret\n  namespace: ceph-csi-cephfs\nstringData:\n  # Vereist voor dynamisch gemaakte volumes\n  adminID: fs\n  adminKey:<\/code><\/pre>\n<p>We passen de manifest toe:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>En nu \u2013 een aparte 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  # De naam van het CephFS-bestandssysteem waarin de volume zal worden aangemaakt\n  fsName: cephfs\n\n  # (optioneel) De Ceph-pool waarin de gegevens van het volume worden opgeslagen\n  # pool: cephfs_data\n\n  # (optioneel) Door komma's gescheiden montagopties voor Ceph-fuse\n  # bijvoorbeeld:\n  # fuseMountOptions: debug\n\n  # (optioneel) Door komma's gescheiden montagopties voor CephFS voor de kernel\n  # Zie man mount.ceph voor een lijst van deze opties. Bijvoorbeeld:\n  # kernelMountOptions: readdir_max_bytes=1048576,norbytes\n\n  # Secrets moeten toegang bevatten voor de admin en\/of gebruiker van Ceph.\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  # (optioneel) De driver kan ofwel ceph-fuse (fuse) gebruiken,\n  # ofwel ceph kernelclient (kernel).\n  # Als niet opgegeven, wordt de standaard volume mounting gebruikt,\n  # die wordt bepaald door ceph-fuse en mount.ceph\n  # mounter: kernel\nreclaimPolicy: Delete\nallowVolumeExpansion: true\nmountOptions:\n  - debug<\/code><\/pre>\n<p>Laten we dit invullen <strong>clusterID<\/strong> en toepassen in Kubernetes:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<h2 id=\"proverka\">Controle<\/h2>\n<p>Om te controleren, zoals in het vorige voorbeeld, cre\u00ebren we een PVC:<\/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>En we controleren de aanwezigheid van PVC\/PV:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Als je de bestanden en mappen in CephFS wilt bekijken, kun je dit bestandssysteem ergens monteren. Bijvoorbeeld, zoals hieronder weergegeven.<\/p>\n<p>Laten we naar een van de knooppunten van de Ceph-cluster gaan en de volgende stappen uitvoeren:<\/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>Natuurlijk is het monteren van een FS op een Ceph-knooppunt uitsluitend geschikt voor opleidingsdoeleinden, wat we ook doen in onze <noindex><a rel=\"nofollow\" href=\"http:\/\/slurm.io\">Slurm-cursussen<\/a><\/noindex>. Ik denk niet dat iemand dit in productie zal doen, er is een groot risico om belangrijke bestanden per ongeluk te overschrijven.<\/p>\n<p>En tot slot, laten we controleren hoe het zit met de wijziging van de volumematen in het geval van CephFS. We keren terug naar Kubernetes en bewerken ons manifest voor de PVC \u2014 bijvoorbeeld, we verhogen de grootte naar 7Gi.<\/p>\n<p>Toepassen van het bewerkte bestand:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>Laten we kijken naar de gemonteerde map en hoe het quotum is veranderd:<\/p>\n<pre><code class=\"plaintext\">getfattr -n ceph.quota.max_bytes<\/code><\/pre>\n<p>Voor het uitvoeren van deze opdracht moet je mogelijk het pakket installeren in het systeem <strong>attr<\/strong>.<\/p>\n<h2 id=\"glaza-boyatsya-a-ruki-delayut\">De ogen zijn bang, maar de handen doen<\/h2>\n<p>Hoewel al deze toverspreuken en lange YAML-manifesten moeilijk lijken, begrijpen de Slurm-studenten ze in de praktijk vrij snel.<br \/>\nIn dit artikel zijn we niet diep op de materie ingegaan \u2014 daarvoor is er de offici\u00eble documentatie. Als je ge\u00efnteresseerd bent in de details van het instellen van Ceph-opslag samen met een Kubernetes-cluster, kunnen deze links helpen:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/\">Algemene principes van Kubernetes met volumes<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/rbd\/\">Documentatie over RBD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/rbd-kubernetes\/\">Integratie van RBD en Kubernetes vanuit het perspectief van Ceph<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-rbd.md\">Integratie van RBD en Kubernetes vanuit het perspectief van CSI<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/cephfs\/\">Algemene documentatie over CephFS<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-cephfs.md\">Integratie van CephFS en Kubernetes vanuit het perspectief van CSI<\/a><\/noindex><\/p>\n<p>Op de Slurm-cursus <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/6p9lng\">Kubernetes Basis<\/a><\/noindex> kun je nog een stap verder gaan en een echte applicatie in Kubernetes uitrollen die CephFS als opslag voor bestanden gebruikt. Via GET\/POST-aanvragen kun je bestanden verzenden en ontvangen uit Ceph.<\/p>\n<p>Als je meer ge\u00efnteresseerd bent in gegevensopslag, schrijf je dan in voor <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">een nieuwe cursus over Ceph<\/a><\/noindex>. Tijdens de b\u00e8tatest is de cursus met korting beschikbaar en kun je invloed uitoefenen op de inhoud.<\/p>\n<p><em>Auteur van het artikel: Alexander Shvalov, praktiserend ingenieur <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/ophLww\">Southbridge<\/a><\/noindex>, Certified Kubernetes Administrator, auteur en ontwikkelaar van Slurm-cursussen.<\/em><\/p>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Praktisch voorbeeld van het aansluiten van opslag op basis van Ceph in een Kubernetes-cluster | ProHoster","description":"Container Storage Interface (CSI) is een gestandaardiseerde interface voor de interactie tussen Kubernetes en opslagsystemen.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/94739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=94739"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/94739\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/94740"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=94739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=94739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=94739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}