{"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\/sv\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","title":{"rendered":"Ett praktiskt exempel p\u00e5 anslutning av ett lagringssystem baserat p\u00e5 Ceph i en Kubernetes-kluster.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Container Storage Interface (CSI) \u00e4r ett enhetligt gr\u00e4nssnitt f\u00f6r interaktion mellan Kubernetes och lagringssystem. Kortfattat har vi redan <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/519130\/\">om hur de till\u00e4mpar teknologin f\u00f6r en ovanlig uppgift \u2014 att hitta fel i rubriker.) I slut\u00e4ndan lyckades vi automatisera upp till 90 % av fl\u00f6det beroende p\u00e5 tj\u00e4nsten.<\/a><\/noindex>, men idag kommer vi att titta n\u00e4rmare p\u00e5 kopplingen mellan CSI och Ceph: vi kommer att visa hur <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">ansluta Ceph-lagring<\/a><\/noindex> till Kubernetes-klustret.<br \/>\nArtikeln inneh\u00e5ller verkliga, \u00e4ven om de \u00e4r n\u00e5got f\u00f6renklade f\u00f6r att underl\u00e4tta f\u00f6rst\u00e5elsen exempel. Installationen och konfigurationen av Ceph- och Kubernetes-kluster kommer vi inte att ta upp.<\/p>\n<p>\u00c4r du nyfiken p\u00e5 hur det fungerar?<\/p>\n<p><img decoding=\"async\" alt=\"Ett praktiskt exempel p\u00e5 anslutning av ett lagringssystem baserat p\u00e5 Ceph i en Kubernetes-kluster.\" 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 ett Kubernetes-kluster tillg\u00e4ngligt, till exempel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\">kubespray<\/a><\/noindex>. Bredvid det k\u00f6rs ett Ceph-kluster \u2013 det kan ocks\u00e5 installeras, till exempel med detta <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-ansible\">upps\u00e4ttning spelb\u00f6cker<\/a><\/noindex>. Jag hoppas att det inte beh\u00f6ver n\u00e4mnas att det mellan dem i produktion b\u00f6r finnas ett n\u00e4tverk med en bandbredd p\u00e5 minst 10 Gbit\/s.<\/p>\n<p>Om du har allt detta, d\u00e5 k\u00f6r vi!<\/p>\n<p>F\u00f6rst g\u00e5r vi in p\u00e5 en av noderna i Ceph-klustret och kontrollerar att allt st\u00e5r r\u00e4tt till:<\/p>\n<pre><code class=\"plaintext\">ceph health\nceph -s<\/code><\/pre>\n<p>D\u00e4refter skapar vi direkt en pool f\u00f6r RBD-diskar:<\/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 till Kubernetes-klustret. D\u00e4r installerar vi f\u00f6rst Ceph CSI-drivrutinen f\u00f6r RBD. Vi kommer att installera det, som vi ska, via Helm.<br \/>\nVi l\u00e4gger till ett repository med diagrammet och f\u00e5r en upps\u00e4ttning diagramvariabler f\u00f6r 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 m\u00e5ste vi fylla i filen cephrbd.yml. F\u00f6r detta tar vi reda p\u00e5 ID f\u00f6r klustret och IP-adresserna till monitorerna i Ceph:<\/p>\n<pre><code class=\"plaintext\">ceph fsid  # s\u00e5 f\u00e5r vi clusterID\nceph mon dump  # s\u00e5 ser vi IP-adresserna till monitorerna<\/code><\/pre>\n<p>De erh\u00e5llna v\u00e4rdena f\u00f6rs in i filen cephrbd.yml. Samtidigt aktiverar vi skapandet av PSP-policyer (Pod Security Policies). Alternativen i avsnitt <strong>nodeplugin<\/strong> och <strong>provisioner<\/strong> finns redan i filen, de kan \u00e4ndras som visas nedan:<\/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>D\u00e4refter \u00e4r allt vi har kvar att g\u00f6ra att installera diagrammet i Kubernetes-klustret.<\/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>Perfekt, RBD-drivrutinen fungerar!<br \/>\nL\u00e5t oss skapa en ny StorageClass i Kubernetes. F\u00f6r detta kommer vi \u00e5terigen att beh\u00f6va arbeta lite med Ceph.<\/p>\n<p>Vi skapar en ny anv\u00e4ndare i Ceph och ger den r\u00e4ttigheter att skriva till poolen <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>Och nu kan vi se \u00e5tkomstnyckeln d\u00e4r:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.rbdkube<\/code><\/pre>\n<p>Kommandot kommer att ge n\u00e5got liknande:<\/p>\n<pre><code class=\"plaintext\">AQCO9NJbhYipKRAAMqZsnqqS\/T8OYQX20xIa9A==<\/code><\/pre>\n<p>Vi kommer att l\u00e4gga detta v\u00e4rde i Secret i Kubernetes-klustret \u2014 dit d\u00e4r det beh\u00f6vs <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\u00e4rdena f\u00f6r nycklarna motsvarar anv\u00e4ndarnamn och dess nyckel, som angivits i\n  # Ceph-klustret. Anv\u00e4ndarens ID m\u00e5ste ha \u00e5tkomst till poolen,\n  # som anges i lagringsklassen\n  userID: rbdkube\n  userKey:<\/code><\/pre>\n<p>Och vi skapar v\u00e5r hemlighet:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>D\u00e4refter beh\u00f6ver vi en s\u00e5dan manifest f\u00f6r StorageClass:<\/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   # Dessa hemligheter m\u00e5ste inneh\u00e5lla data f\u00f6r autentisering\n   # mot din 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>Det m\u00e5ste fyllas i <strong>clusterID<\/strong>, som vi redan har f\u00e5tt veta med kommandot <em>ceph fsid<\/em>, och vi ska till\u00e4mpa denna manifest i Kubernetes-klustret:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<p>F\u00f6r att kontrollera hur kluster fungerar tillsammans, l\u00e5t oss skapa en s\u00e5dan 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>L\u00e5t oss genast se hur Kubernetes skapade den beg\u00e4rda volymen i Ceph:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Ser ut som allt \u00e4r bra! Men hur ser det ut p\u00e5 Ceph-sidan?<br \/>\nVi f\u00e5r en lista \u00f6ver volymer i poolen och ser information om v\u00e5r volym:<\/p>\n<pre><code class=\"plaintext\">rbd ls -p kube\nrbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653  # h\u00e4r kommer givetvis ett annat volym-ID som gavs av f\u00f6reg\u00e5ende kommando<\/code><\/pre>\n<p>L\u00e5t oss nu se hur storleks\u00e4ndringen av RBD-volymen fungerar.<br \/>\nVi \u00e4ndrar storleken p\u00e5 volymen i manifestet pvc.yaml till 2Gi och till\u00e4mpar det:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>L\u00e5t oss v\u00e4nta p\u00e5 att \u00e4ndringarna tr\u00e4der i kraft och se p\u00e5 storleken p\u00e5 volymen 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 att storleken p\u00e5 PVC inte har \u00e4ndrats. F\u00f6r att ta reda p\u00e5 orsaken kan vi be Kubernetes beskriva PVC:n i YAML-format:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc rbd-pvc -o yaml<\/code><\/pre>\n<p>Och h\u00e4r \u00e4r 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 vill s\u00e4ga att disken har \u00f6kat, men filsystemet p\u00e5 den har inte.<br \/>\nF\u00f6r att \u00f6ka filsystemet m\u00e5ste volymen monteras. V\u00e5r skapade PVC\/PV anv\u00e4nds varken nu.<\/p>\n<p>Vi kan skapa en test-Pod, till exempel s\u00e5 h\u00e4r:<\/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>Och nu l\u00e5t oss titta p\u00e5 PVC:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc<\/code><\/pre>\n<p>Storleken har \u00e4ndrats, allt \u00e4r i sin ordning.<\/p>\n<p>I den f\u00f6rsta delen arbetade vi med RBD-blockenheten (det st\u00e5r f\u00f6r Rados Block Device), men det g\u00e5r inte att g\u00f6ra s\u00e5 om olika mikrotj\u00e4nster beh\u00f6ver arbeta med denna disk samtidigt. F\u00f6r att hantera filer, ist\u00e4llet f\u00f6r diskavbildningar, \u00e4r CephFS mycket b\u00e4ttre l\u00e4mpad.<br \/>\nVi kommer att konfigurera CSI och andra n\u00f6dv\u00e4ndiga enheter f\u00f6r att arbeta med CephFS i Exempel p\u00e5 Ceph- och Kubernetes-kluster.<\/p>\n<p>Vi f\u00e5r v\u00e4rden fr\u00e5n den n\u00f6dv\u00e4ndiga nya Helm-diagrammet:<\/p>\n<pre><code class=\"plaintext\">helm inspect values ceph-csi\/ceph-csi-cephfs &gt; cephfs.yml<\/code><\/pre>\n<p>Det \u00e4r \u00e5terigen n\u00f6dv\u00e4ndigt att fylla i filen cephfs.yml. Precis som tidigare kommer Ceph-kommandon att hj\u00e4lpa:<\/p>\n<pre><code class=\"plaintext\">ceph fsid\nceph mon dump<\/code><\/pre>\n<p>Vi fyller i filen med v\u00e4rden ungef\u00e4r s\u00e5 h\u00e4r:<\/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>Observera att monitoradresserna anges i enkel form address:port. F\u00f6r att montera cephfs p\u00e5 noden skickas dessa adresser till k\u00e4rnmodulen, som \u00e4nnu inte kan hantera v2-monitorprotokollet.<br \/>\nPorten f\u00f6r httpMetrics (d\u00e4r Prometheus kommer att h\u00e4mta metrics f\u00f6r \u00f6vervakning) \u00e4ndrar vi s\u00e5 att den inte konflikterar med nginx-proxy, som installeras av Kubespray. Du kanske inte beh\u00f6ver g\u00f6ra detta.<\/p>\n<p>Vi installerar Helm-diagrammet i Kubernetes-klustret:<\/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 till Ceph-lagringen f\u00f6r att skapa en separat anv\u00e4ndare d\u00e4r. Dokumentationen anger att CephFS-provisioneraren beh\u00f6ver admin-r\u00e4ttigheter till klustret. Men vi kommer att skapa en separat anv\u00e4ndare <em>fs<\/em> med begr\u00e4nsade r\u00e4ttigheter:<\/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>Och l\u00e5t oss omedelbart titta p\u00e5 dess \u00e5tkomstnyckel, den kommer att vara anv\u00e4ndbar f\u00f6r oss senare:<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.fs<\/code><\/pre>\n<p>Vi skapar separata Secret och StorageClass.<br \/>\nInget nytt, vi har redan sett detta p\u00e5 exempelvis 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\u00f6dv\u00e4ndigt f\u00f6r dynamiskt skapade volymer\n  adminID: fs\n  adminKey:<\/code><\/pre>\n<p>Vi till\u00e4mpar manifestet:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Och 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  # Namn p\u00e5 CephFS-filsystemet d\u00e4r volymen kommer att skapas\n  fsName: cephfs\n\n  # (valfritt) Ceph-pool d\u00e4r data f\u00f6r volymen kommer att lagras\n  # pool: cephfs_data\n\n  # (valfritt) Komma-separerade monteringsalternativ f\u00f6r Ceph-fuse\n  # exempel:\n  # fuseMountOptions: debug\n\n  # (valfritt) Komma-separerade monteringsalternativ f\u00f6r CephFS f\u00f6r k\u00e4rnan\n  # Se man mount.ceph f\u00f6r att se listan \u00f6ver dessa alternativ. Till exempel:\n  # kernelMountOptions: readdir_max_bytes=1048576,norbytes\n\n  # Hemligheterna m\u00e5ste inneh\u00e5lla beh\u00f6righeter f\u00f6r admin och\/eller Ceph-anv\u00e4ndare.\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  # (valfritt) Drivrutinen kan anv\u00e4nda antingen ceph-fuse (fuse), \n  # eller ceph kernelclient (kernel).\n  # Om det inte anges, kommer standardmontage av volymer att anv\u00e4ndas,\n  # detta best\u00e4ms genom att s\u00f6ka efter ceph-fuse och mount.ceph\n  # mounter: kernel\nreclaimPolicy: Delete\nallowVolumeExpansion: true\nmountOptions:\n  - debug<\/code><\/pre>\n<p>L\u00e5t oss fylla i det h\u00e4r <strong>clusterID<\/strong> och till\u00e4mpa det i Kubernetes:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<h2 id=\"proverka\">Kontroll<\/h2>\n<p>F\u00f6r att kontrollera, precis som i det f\u00f6reg\u00e5ende exemplet, skapar 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>Och vi kontrollerar f\u00f6rekomsten av PVC\/PV:<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Om du vill titta p\u00e5 filer och kataloger i CephFS kan du montera detta filsystem n\u00e5gonstans. Till exempel, som visas nedan.<\/p>\n<p>Vi g\u00e5r till en av Ceph-klusterknutpunkterna och utf\u00f6r f\u00f6ljande \u00e5tg\u00e4rder:<\/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>Sj\u00e4lvklart, denna montering av FS p\u00e5 en Ceph-nod \u00e4r endast l\u00e4mplig f\u00f6r utbildningssyften, vilket vi sysslar med p\u00e5 v\u00e5ra <noindex><a rel=\"nofollow\" href=\"http:\/\/slurm.io\">Slurm-kurser<\/a><\/noindex>. Jag tror inte att n\u00e5gon skulle g\u00f6ra detta i produktion, risken f\u00f6r att av misstag skriva \u00f6ver viktiga filer \u00e4r stor.<\/p>\n<p>Och sista men inte minst, l\u00e5t oss kontrollera hur det st\u00e5r till med storleks\u00e4ndring av volymer i CephFS. Vi \u00e5terv\u00e4nder till Kubernetes och redigerar v\u00e5rt manifest f\u00f6r PVC - vi \u00f6kar storleken till exempel till 7Gi.<\/p>\n<p>Vi till\u00e4mpar den redigerade filen:<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>Vi kollar p\u00e5 den monterade katalogen, hur kvoten har f\u00f6r\u00e4ndrats:<\/p>\n<pre><code class=\"plaintext\">getfattr -n ceph.quota.max_bytes<\/code><\/pre>\n<p>F\u00f6r att k\u00f6ra detta kommando kan du beh\u00f6va installera paketet <strong>attr<\/strong>.<\/p>\n<h2 id=\"glaza-boyatsya-a-ruki-delayut\">\u00d6gonen \u00e4r r\u00e4dda, men h\u00e4nderna g\u00f6r jobbet<\/h2>\n<p>Vid ytan kan alla dessa trollformler och l\u00e5nga YAML-manifest som verkar komplicerade, men i praktiken f\u00f6rst\u00e5r eleverna p\u00e5 Slurm dem ganska snabbt.<br \/>\nI den h\u00e4r artikeln g\u00e5r vi inte in p\u00e5 detaljer \u2014 det finns officiell dokumentation f\u00f6r det. Om du \u00e4r intresserad av detaljer kring konfiguration av Ceph-lagring tillsammans med Kubernetes-klustret, kan dessa l\u00e4nkar vara till hj\u00e4lp:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/\">Allm\u00e4nna principer f\u00f6r hur Kubernetes fungerar med volymer<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/rbd\/\">Dokumentation f\u00f6r RBD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/rbd-kubernetes\/\">Integration av RBD och Kubernetes ur Ceph:s perspektiv<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-rbd.md\">Integration av RBD och Kubernetes ur CSI:s perspektiv<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/cephfs\/\">Allm\u00e4n dokumentation om CephFS<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-cephfs.md\">Integration av CephFS och Kubernetes ur CSI:s perspektiv<\/a><\/noindex><\/p>\n<p>P\u00e5 Slurm-kursen <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/6p9lng\">Kubernetes Grund<\/a><\/noindex> kan du g\u00e5 ett steg l\u00e4ngre och implementera en verklig applikation i Kubernetes som anv\u00e4nder CephFS som lagring f\u00f6r filer. Genom GET\/POST-f\u00f6rfr\u00e5gningar kan du \u00f6verf\u00f6ra filer och h\u00e4mta dem fr\u00e5n Ceph.<\/p>\n<p>Och om du \u00e4r mer intresserad av datalagring, anm\u00e4l dig till <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">den nya kursen om Ceph<\/a><\/noindex>. Under betatestningen kan kursen f\u00e5s till rabatterat pris och p\u00e5verka inneh\u00e5llet.<\/p>\n<p><em>Artikelns f\u00f6rfattare: Alexander Shvalov, praktiserande ingenj\u00f6r <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/ophLww\">Southbridge<\/a><\/noindex>, Certifierad Kubernetes-administrat\u00f6r, f\u00f6rfattare och utvecklare av Slurm-kurser.<\/em><\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Praktiskt exempel p\u00e5 hur man ansluter lagring baserad p\u00e5 Ceph i ett Kubernetes-kluster | ProHoster","description":"Container Storage Interface (CSI) \u2014 en enhetlig gr\u00e4nssnitt f\u00f6r interaktion mellan Kubernetes och lagringssystem.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/94739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=94739"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/94739\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/94740"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=94739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=94739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=94739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}