{"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\/fr\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","title":{"rendered":"Exemple pratique de connexion d'un stockage bas\u00e9 sur Ceph \u00e0 un cluster Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>L'Interface de Stockage de Conteneurs (CSI) est une interface unifi\u00e9e pour l'interaction entre Kubernetes et les syst\u00e8mes de stockage. Nous en avons d\u00e9j\u00e0 parl\u00e9 bri\u00e8vement, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/519130\/\">ont racont\u00e9<\/a><\/noindex>, et aujourd'hui, nous allons examiner plus en d\u00e9tail le lien entre CSI et Ceph : nous allons vous montrer comment <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">connecter le stockage Ceph<\/a><\/noindex> au cluster Kubernetes.<br \/>\nCet article pr\u00e9sente des exemples r\u00e9els, bien qu'un peu simplifi\u00e9s pour faciliter la compr\u00e9hension. Nous ne traiterons pas de l'installation et de la configuration des clusters Ceph et Kubernetes.<\/p>\n<p>Vous vous demandez comment cela fonctionne ?<\/p>\n<p><img decoding=\"async\" alt=\"Exemple pratique de connexion d&#039;un stockage bas\u00e9 sur Ceph \u00e0 un cluster Kubernetes\" 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>Donc, vous avez un cluster Kubernetes d\u00e9ploy\u00e9, par exemple, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kubespray\">kubespray<\/a><\/noindex>. \u00c0 c\u00f4t\u00e9, un cluster Ceph fonctionne \u00e9galement \u2014 vous pouvez \u00e9galement l'installer, par exemple, avec cet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-ansible\">ensemble de playbooks.<\/a><\/noindex>J'esp\u00e8re qu'il n'est pas n\u00e9cessaire de mentionner que pour la production, il doit y avoir un r\u00e9seau entre eux avec une bande passante d'au moins 10 Gbit\/s.<\/p>\n<p>Si tout cela est en place, allons-y !<\/p>\n<p>Tout d'abord, connectons-nous \u00e0 l'un des n\u0153uds du cluster Ceph et v\u00e9rifions que tout fonctionne correctement :<\/p>\n<pre><code class=\"plaintext\">ceph health\nceph -s<\/code><\/pre>\n<p>Ensuite, cr\u00e9ons un pool pour les disques RBD :<\/p>\n<pre><code class=\"plaintext\">ceph osd pool create kube 32\nceph osd pool application enable kube rbd<\/code><\/pre>\n<p>Passons au cluster Kubernetes. L\u00e0, nous allons d'abord installer le pilote Ceph CSI pour RBD. Nous allons l'installer comme il se doit, \u00e0 l'aide de Helm.<br \/>\nAjoutons le d\u00e9p\u00f4t avec le chart et obtenons un ensemble de variables pour le 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>Maintenant, nous devons remplir le fichier cephrbd.yml. Pour cela, d\u00e9couvrons l'ID du cluster et les adresses IP des moniteurs dans Ceph :<\/p>\n<pre><code class=\"plaintext\">ceph fsid  # ainsi, nous d\u00e9couvrons le clusterID\nceph mon dump  # ici, nous verrons les adresses IP des moniteurs<\/code><\/pre>\n<p>Ins\u00e9rons les valeurs obtenues dans le fichier cephrbd.yml. En m\u00eame temps, activons la cr\u00e9ation de politiques PSP (Pod Security Policies). Les options dans les sections <strong>nodeplugin<\/strong> et <strong>provisioner<\/strong> sont d\u00e9j\u00e0 pr\u00e9sentes dans le fichier, elles peuvent \u00eatre modifi\u00e9es comme indiqu\u00e9 ci-dessous :<\/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>Ensuite, il ne nous reste plus qu'\u00e0 installer le chart dans le cluster Kubernetes.<\/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>Super, le pilote RBD fonctionne !<br \/>\nCr\u00e9ons un nouveau StorageClass dans Kubernetes. Pour cela, nous devrons \u00e0 nouveau travailler un peu avec Ceph.<\/p>\n<p>Cr\u00e9ons un nouvel utilisateur dans Ceph et donnons-lui des droits d'\u00e9criture sur le pool <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>Et maintenant, regardons la cl\u00e9 d'acc\u00e8s au m\u00eame endroit :<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.rbdkube<\/code><\/pre>\n<p>La commande renverra quelque chose comme :<\/p>\n<pre><code class=\"plaintext\">AQCO9NJbhYipKRAAMqZsnqqS\/T8OYQX20xIa9A==<\/code><\/pre>\n<p>Inscrivons cette valeur dans un Secret dans le cluster Kubernetes \u2014 o\u00f9 elle est n\u00e9cessaire <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  # Les valeurs des cl\u00e9s correspondent au nom d'utilisateur et \u00e0 sa cl\u00e9, comme indiqu\u00e9 dans\n  # le cluster Ceph. L'ID de l'utilisateur doit avoir acc\u00e8s au pool,\n  # sp\u00e9cifi\u00e9 dans la classe de stockage\n  userID: rbdkube\n  userKey:<\/code><\/pre>\n<p>Et cr\u00e9ons notre secret :<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Ensuite, nous avons besoin d'un manifeste StorageClass comme celui-ci :<\/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   # Ces secrets doivent contenir des donn\u00e9es pour l'authentification\n   # dans votre 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>Il faut remplir <strong>clusterID<\/strong>, que nous avons d\u00e9j\u00e0 appris avec la commande <em>ceph fsid<\/em>, et appliquer ce manifeste dans le cluster Kubernetes :<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<p>Pour v\u00e9rifier le fonctionnement des clusters en tandem, cr\u00e9ons un PVC (Persistent Volume Claim) comme ceci :<\/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>Voyons tout de suite comment Kubernetes a cr\u00e9\u00e9 le volume demand\u00e9 dans Ceph :<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Tout semble parfait ! Et comment cela se pr\u00e9sente-t-il du c\u00f4t\u00e9 de Ceph ?<br \/>\nObtenons la liste des volumes dans le pool et consultons les informations sur notre volume :<\/p>\n<pre><code class=\"plaintext\">rbd ls -p kube\nrbd -p kube info csi-vol-eb3d257d-8c6c-11ea-bff5-6235e7640653  # ici, il y aura bien s\u00fbr un autre ID de volume, que vous a donn\u00e9e la commande pr\u00e9c\u00e9dente<\/code><\/pre>\n<p>Maintenant, voyons comment fonctionne l'augmentation de la taille du volume RBD.<br \/>\nModifiez la taille du volume dans le manifeste pvc.yaml \u00e0 2Gi et appliquez-le :<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>Attendez que les changements prennent effet, puis regardez \u00e0 nouveau la taille du volume.<\/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>Nous voyons que la taille du PVC n'a pas chang\u00e9. Pour conna\u00eetre la raison, vous pouvez demander \u00e0 Kubernetes la description du PVC au format YAML :<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc rbd-pvc -o yaml<\/code><\/pre>\n<p>Et voici le probl\u00e8me :<\/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>C'est-\u00e0-dire que le disque a \u00e9t\u00e9 agrandi, mais le syst\u00e8me de fichiers dessus ne l'est pas.<br \/>\nPour augmenter le syst\u00e8me de fichiers, il faut monter le volume. Actuellement, notre PVC\/PV cr\u00e9\u00e9 n'est pas utilis\u00e9.<\/p>\n<p>Nous pouvons cr\u00e9er un Pod de test, par exemple comme ceci :<\/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>Et maintenant, regardons le PVC :<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc<\/code><\/pre>\n<p>La taille a chang\u00e9, tout va bien.<\/p>\n<p>Dans la premi\u00e8re partie, nous avons travaill\u00e9 avec un dispositif de bloc RBD (c'est exactement ce que signifie - Rados Block Device), mais ce n'est pas possible si plusieurs microservices doivent acc\u00e9der simultan\u00e9ment \u00e0 ce disque. Pour le travail avec des fichiers, plut\u00f4t qu'avec une image de disque, CephFS est beaucoup mieux adapt\u00e9.<br \/>\nPrenons l'exemple des clusters Ceph et Kubernetes pour configurer CSI et les autres entit\u00e9s n\u00e9cessaires pour travailler avec CephFS.<\/p>\n<p>Nous allons obtenir les valeurs \u00e0 partir de notre nouveau Helm chart :<\/p>\n<pre><code class=\"plaintext\">helm inspect values ceph-csi\/ceph-csi-cephfs &gt; cephfs.yml<\/code><\/pre>\n<p>Nous devons de nouveau remplir le fichier cephfs.yml. Comme pr\u00e9c\u00e9demment, les commandes Ceph vont nous aider :<\/p>\n<pre><code class=\"plaintext\">ceph fsid\nceph mon dump<\/code><\/pre>\n<p>Remplissons le fichier avec les valeurs comme suit :<\/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>Notez que les adresses des moniteurs sont indiqu\u00e9es sous la forme simple address:port. Pour monter cephfs sur le n\u0153ud, ces adresses sont transmises au module du noyau, qui ne sait pas encore travailler avec le protocole des moniteurs v2.<br \/>\nNous changeons le port pour httpMetrics (c'est l\u00e0 que Prometheus ira chercher les m\u00e9triques pour le suivi) afin qu'il ne soit pas en conflit avec nginx-proxy, qui est install\u00e9 par Kubespray. Ce n'est peut-\u00eatre pas n\u00e9cessaire pour vous.<\/p>\n<p>Installons le Helm chart dans le cluster Kubernetes :<\/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>Nous passons au stockage de donn\u00e9es Ceph pour cr\u00e9er un utilisateur distinct. La documentation indique que le provisionneur CephFS a besoin de droits d'acc\u00e8s administrateur au cluster. Mais nous allons cr\u00e9er un utilisateur distinct <em>fs<\/em> avec des droits limit\u00e9s :<\/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>Et nous allons imm\u00e9diatement regarder sa cl\u00e9 d'acc\u00e8s, elle nous sera utile par la suite :<\/p>\n<pre><code class=\"plaintext\">ceph auth get-key client.fs<\/code><\/pre>\n<p>Cr\u00e9ons des Secret et StorageClass distincts.<br \/>\nRien de nouveau, nous l'avons d\u00e9j\u00e0 vu avec l'exemple 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\u00e9cessaire pour les volumes cr\u00e9\u00e9s dynamiquement\n  adminID: fs\n  adminKey:<\/code><\/pre>\n<p>Appliquons le manifeste :<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f secret.yaml<\/code><\/pre>\n<p>Et maintenant - une StorageClass distincte :<\/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  # Nom du syst\u00e8me de fichiers CephFS dans lequel le volume sera cr\u00e9\u00e9\n  fsName: cephfs\n\n  # (facultatif) Pool Ceph o\u00f9 les donn\u00e9es du volume seront stock\u00e9es\n  # pool: cephfs_data\n\n  # (facultatif) Options de montage s\u00e9par\u00e9es par des virgules pour Ceph-fuse\n  # par exemple:\n  # fuseMountOptions: debug\n\n  # (facultatif) Options de montage s\u00e9par\u00e9es par des virgules pour CephFS pour le noyau\n  # Voir man mount.ceph pour la liste de ces options. Par exemple:\n  # kernelMountOptions: readdir_max_bytes=1048576,norbytes\n\n  # Les secrets doivent contenir les acc\u00e8s pour l'administrateur et\/ou l'utilisateur 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  # (facultatif) Le pilote peut utiliser soit ceph-fuse (fuse), \n  # soit ceph kernelclient (kernel).\n  # Si non sp\u00e9cifi\u00e9, le montage des volumes par d\u00e9faut sera utilis\u00e9,\n  # cela est d\u00e9termin\u00e9 par la recherche de ceph-fuse et mount.ceph\n  # mounter: kernel\nreclaimPolicy: Delete\nallowVolumeExpansion: true\nmountOptions:\n  - debug<\/code><\/pre>\n<p>Remplissons ceci <strong>clusterID<\/strong> et appliquons-le dans Kubernetes :<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f storageclass.yaml<\/code><\/pre>\n<h2 id=\"proverka\">V\u00e9rification<\/h2>\n<p>Pour v\u00e9rifier, comme dans l'exemple pr\u00e9c\u00e9dent, cr\u00e9ons 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>Et v\u00e9rifions la pr\u00e9sence de PVC\/PV :<\/p>\n<pre><code class=\"plaintext\">kubectl get pvc\nkubectl get pv<\/code><\/pre>\n<p>Si vous souhaitez voir les fichiers et r\u00e9pertoires dans CephFS, vous pouvez monter ce syst\u00e8me de fichiers quelque part. Par exemple, comme indiqu\u00e9 ci-dessous.<\/p>\n<p>Acc\u00e9dons \u00e0 l'un des n\u0153uds du cluster Ceph et effectuons les actions suivantes :<\/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>\u00c9videmment, un tel montage FS sur un n\u0153ud Ceph est strictement destin\u00e9 \u00e0 des fins p\u00e9dagogiques, ce que nous faisons dans nos <noindex><a rel=\"nofollow\" href=\"http:\/\/slurm.io\">cours Slurm<\/a><\/noindex>. Je ne pense pas que quelqu'un va faire cela en production, le risque d'\u00e9craser accidentellement des fichiers importants est grand.<\/p>\n<p>Enfin, v\u00e9rifions comment cela se passe avec le changement de taille des volumes dans le cas de CephFS. Revenons \u00e0 Kubernetes et modifions notre manifeste pour PVC \u2014 augmentons la taille, par exemple, \u00e0 7Gi.<\/p>\n<p>Appliquons le fichier modifi\u00e9 :<\/p>\n<pre><code class=\"plaintext\">kubectl apply -f pvc.yaml<\/code><\/pre>\n<p>V\u00e9rifions dans le r\u00e9pertoire mont\u00e9 comment la quota a chang\u00e9 :<\/p>\n<pre><code class=\"plaintext\">getfattr -n ceph.quota.max_bytes<\/code><\/pre>\n<p>Pour ex\u00e9cuter cette commande, vous devrez peut-\u00eatre installer le paquet <strong>attr<\/strong>.<\/p>\n<h2 id=\"glaza-boyatsya-a-ruki-delayut\">Les yeux ont peur, mais les mains font<\/h2>\n<p>\u00c0 premi\u00e8re vue, tous ces sorts et ces longs manifestes YAML semblent compliqu\u00e9s, mais en pratique, les \u00e9tudiants de Slyrm s'en sortent assez rapidement.<br \/>\nDans cet article, nous n'avons pas approfondi le sujet \u2014 pour cela, il existe la documentation officielle. Si vous \u00eates int\u00e9ress\u00e9 par les d\u00e9tails de la configuration du stockage Ceph avec un cluster Kubernetes, ces liens vous seront utiles :<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/\">Principes g\u00e9n\u00e9raux du fonctionnement de Kubernetes avec des volumes<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/rbd\/\">Documentation sur RBD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/rbd-kubernetes\/\">Int\u00e9gration de RBD et Kubernetes du point de vue de Ceph<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-rbd.md\">Int\u00e9gration de RBD et Kubernetes du point de vue du CSI<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ceph.readthedocs.io\/en\/latest\/cephfs\/\">Documentation g\u00e9n\u00e9rale sur CephFS<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ceph\/ceph-csi\/blob\/master\/docs\/deploy-cephfs.md\">Int\u00e9gration de CephFS et Kubernetes du point de vue du CSI<\/a><\/noindex><\/p>\n<p>Dans le cours Slyrm <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/6p9lng\">Base Kubernetes<\/a><\/noindex> vous pouvez aller encore un peu plus loin et d\u00e9ployer une vraie application dans Kubernetes qui utilisera CephFS comme stockage pour les fichiers. Gr\u00e2ce aux requ\u00eates GET\/POST, vous pourrez transf\u00e9rer des fichiers et les r\u00e9cup\u00e9rer depuis Ceph.<\/p>\n<p>Si vous \u00eates davantage int\u00e9ress\u00e9 par le stockage des donn\u00e9es, inscrivez-vous \u00e0 <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/WkM2Eg\">un nouveau cours sur Ceph<\/a><\/noindex>. Pendant la phase de b\u00eata-test, le cours est disponible \u00e0 prix r\u00e9duit et vous pouvez influencer son contenu.<\/p>\n<p><em>Auteur de l'article : Alexandre Chvalov, ing\u00e9nieur praticien <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/ophLww\">Southbridge<\/a><\/noindex>, Administrateur Kubernetes Certifi\u00e9, auteur et d\u00e9veloppeur des cours Slyrm.<\/em><\/p>\n<p>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Exemple pratique de connexion d'un stockage bas\u00e9 sur Ceph \u00e0 un cluster Kubernetes | ProHoster","description":"Container Storage Interface (CSI) \u2014 c'est une interface unifi\u00e9e pour l'interaction entre Kubernetes et les syst\u00e8mes de stockage.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/prakticheskij-primer-podklyucheniya-hranilishha-na-baze-ceph-v-klaster-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/94739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=94739"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/94739\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/94740"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=94739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=94739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=94739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}