{"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\/da\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","title":{"rendered":"Praktisk eksempel p\u00e5 tilslutning af lagring baseret p\u00e5 Ceph i et Kubernetes-klynge","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Container Storage Interface (CSI) er et standardiseret interface mellem Kubernetes og lagringssystemer. Vi har allerede givet en kort oversigt om det, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/519130\/\">fortalt<\/a><\/noindex>og i dag kigger vi n\u00e6rmere p\u00e5 integrationen af CSI og Ceph: vi viser, hvordan man <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">tilslutter Ceph-lagring<\/a><\/noindex> til Kubernetes-klusteret.<br \/>\nArtiklen indeholder virkelige, omend lidt forenklede eksempler for lettere forst\u00e5else. Vi vil ikke se p\u00e5 installation og ops\u00e6tning af Ceph- og Kubernetes-klustre.<\/p>\n<p>Er du interesseret i, hvordan det fungerer?<\/p>\n<p><img decoding=\"async\" alt=\"Praktisk eksempel p\u00e5 tilslutning af lagring baseret p\u00e5 Ceph i et Kubernetes-klynge\" 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>S\u00e5 du har et Kubernetes-kluster til r\u00e5dighed, oprettet med eksempelvis <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\">kubespray.<\/a><\/noindex>Ved siden af fungerer et Ceph-kluster \u2014 det kan ogs\u00e5 installeres, for eksempel med dette <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-ansible\">playbook-s\u00e6t.<\/a><\/noindex>Jeg h\u00e5ber, det er un\u00f8dvendigt at n\u00e6vne, at der skal v\u00e6re et netv\u00e6rk med en b\u00e5ndbredde p\u00e5 mindst 10 Gbit\/s mellem dem i produktion.<\/p>\n<p>Hvis du har alt det, lad os komme i gang!<\/p>\n<p>F\u00f8rst g\u00e5r vi ind p\u00e5 en af noderne i Ceph-klusteret og kontrollerer, at alt er i orden:<\/p>\n<pre><code class=\"plaintext\">ceph health\nceph -s<\/code><\/pre>\n<p>Dern\u00e6st opretter vi straks en pulje til RBD-diske:<\/p>\n<pre><code class=\"plaintext\">ceph osd pool create kube 32\nceph osd pool application enable kube rbd<\/code><\/pre>\n<p>Vi g\u00e5r videre til Kubernetes-klusteret. Her vil vi f\u00f8rst installere Ceph CSI-driveren til RBD. Vi vil installere den ordentligt via Helm.<br \/>\nVi tilf\u00f8jer lageret med chartet og f\u00e5r et s\u00e6t variabler fra chartet 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 skal vi udfylde filen cephrbd.yml. For at g\u00f8re dette finder vi ID for klusteret og IP-adresserne for overv\u00e5gningsnoderne i Ceph:<\/p>\n<pre><code class=\"plaintext\">ceph fsid  # her finder vi clusterID\nceph mon dump  # dette vil vise IP-adresserne for overv\u00e5gningsnoderne<\/code><\/pre>\n<p>De modtagne v\u00e6rdier inds\u00e6ttes i filen cephrbd.yml. Samtidig aktiverer vi oprettelsen af PSP-politikker (Pod Security Policies). Indstillingerne i sektionerne <strong>nodeplugin<\/strong> og <strong>provisioner<\/strong> er allerede i filen, de kan \u00e6ndres, som vist nedenfor:<\/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>Det eneste, vi nu skal g\u00f8re, er at installere chartet i Kubernetes-klusteret.<\/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>Fantastisk, RBD-driveren fungerer!<br \/>\nVi opretter en ny StorageClass i Kubernetes. Det kr\u00e6ver igen lidt arbejde med Ceph.<\/p>\n<p>Vi opretter en ny bruger i Ceph og giver ham rettigheder til at skrive til puljen <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>Og nu kigger vi p\u00e5 adgangsn\u00f8glen, som ligger samme sted:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.rbdkube<\/code><\/pre>\n<p>Kommandoen vil producere noget som:<\/p>\n<pre><code class=\"plaintext\">AQCO9NJbhYipKRAAMqZsnqqS\/T8OYQX20xIa9A==<\/code><\/pre>\n<p>Vi inds\u00e6tter denne v\u00e6rdi i Secret i Kubernetes-klusteret \u2014 der, hvor det er n\u00f8dvendigt <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  # V\u00e6rdierne for n\u00f8glerne svarer til brugernavnet og dets n\u00f8gle, som angivet i\n  # Ceph klyngen. Bruger-ID'en skal have adgang til puljen,\n  # angivet i storage class\n  userID: rbdkube\n  userKey:<\/code><\/pre>\n<p>Og vi opretter vores hemmelighed:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Dern\u00e6st har vi brug for et manifest til StorageClass som omtrent dette:<\/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   # Disse hemmeligheder skal indeholde data til autorisation\n   # i din pulje.\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>Det skal udfyldes <strong>clusterID<\/strong>, som vi allerede har fundet med kommandoen <em>ceph fsid<\/em>, og anvende dette manifest i Kubernetes klyngen:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<p>For at teste klyngernes funktionalitet, lad os oprette en PVC (Persistent Volume Claim) som denne:<\/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>Lad os se, hvordan Kubernetes har oprettet den anmodede volumen i Ceph:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Det ser ud til at v\u00e6re fint! Men hvordan ser det ud p\u00e5 Ceph-siden?<br \/>\nHenter listen over volumener i puljen og ser p\u00e5 oplysningerne om vores volumen:<\/p>\n<pre><code class=\"plaintext\">rbd ls -p kube\nrbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653  # her vil der selvf\u00f8lgelig v\u00e6re en anden volumen-ID, som den forrige kommando gav<\/code><\/pre>\n<p>Lad os nu se, hvordan \u00e6ndringen af st\u00f8rrelsen p\u00e5 RBD-volumenet fungerer.<br \/>\n\u00c6ndrer st\u00f8rrelsen p\u00e5 volumenet i manifestet pvc.yaml til 2Gi og anvender det:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>Lad os vente, indtil \u00e6ndringerne tr\u00e6der i kraft, og se p\u00e5 volumenets st\u00f8rrelse igen.<\/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>Vi ser, at st\u00f8rrelsen p\u00e5 PVC ikke er \u00e6ndret. For at finde \u00e5rsagen kan vi anmode Kubernetes om at beskrive PVC i YAML-format:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc rbd-pvc -o yaml<\/code><\/pre>\n<p>Og her er problemet:<\/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>Det vil sige, at diskst\u00f8rrelsen er steget, men filsystemet p\u00e5 den er ikke.<br \/>\nFor at udvide filsystemet skal vi montere volumenet. Den oprettede PVC\/PV bruges i \u00f8jeblikket ikke.<\/p>\n<p>Vi kan oprette en testpod, for eksempel p\u00e5 denne m\u00e5de:<\/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>Og vi ser nu p\u00e5 PVC:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc<\/code><\/pre>\n<p>St\u00f8rrelsen er \u00e6ndret, alt er i orden.<\/p>\n<p>I f\u00f8rste del arbejdede vi med RBD (det st\u00e5r for Rados Block Device), men det kan ikke g\u00f8res, hvis forskellige mikrotjenester skal arbejde med disken samtidig. For filh\u00e5ndtering er CephFS meget bedre egnet.<br \/>\nVi vil konfigurere CSI og de andre n\u00f8dvendige enheder til at arbejde med CephFS med eksempler fra Ceph- og Kubernetes-klynger.<\/p>\n<p>Lad os hente v\u00e6rdierne fra det Helm-diagram, vi har brug for:<\/p>\n<pre><code class=\"plaintext\">helm inspect values ceph-csi\/ceph-csi-cephfs &gt; cephfs.yml<\/code><\/pre>\n<p>Vi skal igen udfylde filen cephfs.yml. Som f\u00f8r vil Ceph-kommandoerne v\u00e6re til hj\u00e6lp:<\/p>\n<pre><code class=\"plaintext\">ceph fsid\nceph mon dump<\/code><\/pre>\n<p>Udfyld filen med v\u00e6rdierne p\u00e5 f\u00f8lgende m\u00e5de:<\/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>Bem\u00e6rk, at adressen til monitorer angives i formatet adresse:port. For montering af cephfs p\u00e5 noden sendes disse adresser til kerne-modulet, som endnu ikke kan arbejde med monitor-protokol v2.<br \/>\nVi \u00e6ndrer porten til httpMetrics (hvor Prometheus vil hente metrics til overv\u00e5gning) for at undg\u00e5 konflikt med nginx-proxy, der installeres af Kubespray. Du m\u00e5tte ikke have brug for dette.<\/p>\n<p>Vi installerer Helm-diagrammet i Kubernetes-klyngen:<\/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>Vi g\u00e5r til Ceph-datalagringen for at oprette en separat bruger. I dokumentationen st\u00e5r der, at CephFS-provisioneren har brug for administratorrettigheder til klyngen. Men vi vil oprette en separat bruger <em>fs<\/em> med begr\u00e6nsede rettigheder:<\/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>Og lad os straks se hans adgangsn\u00f8gle, som vi senere vil f\u00e5 brug for:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.fs<\/code><\/pre>\n<p>Vi vil oprette separate Secret og StorageClass.<br \/>\nIntet nyt, det har vi allerede set med RBD:<\/p>\n<pre><code class=\"plaintext\">---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: csi-cephfs-secret\n  namespace: ceph-csi-cephfs\nstringData:\n  # n\u00f8dvendigt for dynamisk oprettede volumener\n  adminID: fs\n  adminKey:<\/code><\/pre>\n<p>Vi anvender manifestet:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Og nu \u2013 en separat 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  # Navn p\u00e5 CephFS-filsystemet, hvor volumenet vil blive oprettet\n  fsName: cephfs\n\n  # (valgfrit) Pool i Ceph, hvor data for volumenet vil blive gemt\n  # pool: cephfs_data\n\n  # (valgfrit) Komma-separerede monteringsmuligheder for Ceph-fuse\n  # f.eks.:\n  # fuseMountOptions: debug\n\n  # (valgfrit) Komma-separerede monteringsmuligheder for CephFS til kernen\n  # Se man mount.ceph for en liste over disse muligheder. F.eks.:\n  # kernelMountOptions: readdir_max_bytes=1048576,norbytes\n\n  # Hemmeligheder skal indeholde adgang for admin og\/eller Ceph-bruger.\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  # (valgfrit) Driveren kan bruge enten ceph-fuse (fuse) \n  # eller ceph kernelclient (kernel).\n  # Hvis ikke angivet, anvendes standard monteringsmetoden,\n  # som bestemmes ved at lede efter ceph-fuse og mount.ceph\n  # mounter: kernel\nreclaimPolicy: Delete\nallowVolumeExpansion: true\nmountOptions:\n  - debug<\/code><\/pre>\n<p>Lad os fylde noget herud <strong>clusterID<\/strong> og anvende det i Kubernetes:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<h2 id=\"proverka\">Kontrol<\/h2>\n<p>For at kontrollere, som i det tidligere eksempel, opretter vi en 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>Og vi kontrollerer tilg\u00e6ngeligheden af PVC\/PV:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Hvis du \u00f8nsker at se p\u00e5 filer og mapper i CephFS, kan du montere dette filsystem et sted. For eksempel, som vist nedenfor.<\/p>\n<p>Vi tager til en af Ceph-klyngeknudepunkterne og udf\u00f8rer disse handlinger:<\/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>Naturligvis er en s\u00e5dan montering af FS p\u00e5 Ceph-knuden kun til uddannelsesm\u00e6ssige form\u00e5l, hvilket er, hvad vi arbejder med p\u00e5 vores <noindex><a rel=\"nofollow\" href=\"http:\/\/slurm.io\">Slurm-kurser.<\/a><\/noindex>. Jeg tror ikke, at nogen vil g\u00f8re dette i produktion, da der er stor risiko for ved et uheld at overskrive vigtige filer.<\/p>\n<p>Og sidst, lad os se p\u00e5, hvordan det g\u00e5r med at \u00e6ndre volumenst\u00f8rrelsen i tilf\u00e6lde af CephFS. Vi g\u00e5r tilbage til Kubernetes og redigerer vores manifest for PVC \u2014 vi vil \u00f8ge st\u00f8rrelsen til for eksempel 7Gi.<\/p>\n<p>Vi anvender den redigerede fil:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>Lad os se p\u00e5 den monterede mappe og se, hvordan kvoten er \u00e6ndret:<\/p>\n<pre><code class=\"plaintext\">getfattr -n ceph.quota.max_bytes<\/code><\/pre>\n<p>For at f\u00e5 denne kommando til at fungere, skal du muligvis installere pakken <strong>attr<\/strong>.<\/p>\n<h2 id=\"glaza-boyatsya-a-ruki-delayut\">\u00d8jnene frygter, men h\u00e6nderne handler<\/h2>\n<p>Ved f\u00f8rste \u00f8jekast kan disse magiske formularer og lange YAML-manifester virke komplicerede, men i praksis klarer Sl\u00f8rm-studerende sig hurtigt med dem.<br \/>\nI denne artikel har vi ikke dykket ned i detaljer - det har den officielle dokumentation til. Hvis du er interesseret i detaljer om ops\u00e6tning af Ceph-lagring sammen med et Kubernetes-cluster, kan disse links hj\u00e6lpe:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/\">Generelle principper for Kubernetes med volumener<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/rbd\/\">Dokumentation om RBD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/rbd-kubernetes\/\">Integration af RBD og Kubernetes set fra Ceph<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-rbd.md\">Integration af RBD og Kubernetes set fra CSI<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/cephfs\/\">Generel dokumentation for CephFS<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-cephfs.md\">Integration af CephFS og Kubernetes set fra CSI<\/a><\/noindex><\/p>\n<p>P\u00e5 Sl\u00f8rm-kurset <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/6p9lng\">Kubernetes Basis<\/a><\/noindex> kan du g\u00e5 et skridt videre og implementere en rigtig applikation i Kubernetes, der bruger CephFS som lagring til filer. Gennem GET\/POST-anmodninger kan du overf\u00f8re filer og hente dem fra Ceph.<\/p>\n<p>Og hvis du er mere interesseret i datalagring, s\u00e5 tilmeld dig <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">et nyt kursus om Ceph<\/a><\/noindex>. Mens beta-testen p\u00e5g\u00e5r, kan kurset f\u00e5s med rabat, og du kan p\u00e5virke indholdet.<\/p>\n<p><em>Forfatter til artiklen: Alexander Shvalov, praktiserende ingeni\u00f8r <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/ophLww\">Southbridge<\/a><\/noindex>, Certified Kubernetes Administrator, forfatter og udvikler af Sl\u00f8rm-kurser.<\/em><\/p>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Praktisk eksempel p\u00e5 tilslutning af Ceph-baseret lagring til Kubernetes-cluster | ProHoster","description":"Container Storage Interface (CSI) er et ensartet interface til kommunikation mellem Kubernetes og datalagringssystemer.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/94739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=94739"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/94739\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/94740"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=94739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=94739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=94739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}