{"id":6727,"date":"2019-01-11T08:00:17","date_gmt":"2019-01-11T16:00:17","guid":{"rendered":"http:\/\/softwareengineeringdaily.com\/?p=6727"},"modified":"2019-01-13T23:01:02","modified_gmt":"2019-01-14T07:01:02","slug":"why-is-storage-on-kubernetes-is-so-hard","status":"publish","type":"post","link":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/","title":{"rendered":"Why Is Storage On Kubernetes So Hard?"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Container orchestration tools like Kubernetes are revolutionizing the way applications are being developed and deployed. With the rise of the microservices architecture and decoupling of infrastructure from application logic from the developer\u2019s point of view, developers are becoming more focused on building software and delivering value. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Kubernetes abstracts away the physical machines it is managing. With Kubernetes, you can describe the amount of memory and compute power you want, and have it available without worrying about the underlying infrastructure. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">When managing Docker images, Kubernetes also makes applications portable. Once they are developed with a containerized architecture using Kubernetes, they can be deployed anywhere &#8211; public cloud, hybrid, on-prem &#8211; without any change to the underlying code.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">While Kubernetes is extremely useful in many aspects, like scalability, portability, and management, it does not support storing state. Almost all production applications are stateful, i.e. require some sort of external storage.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A Kubernetes architecture is very dynamic. Containers are being created and destroyed, depending on the load and on the specifications of the developers. Pods and containers can self-heal and replicate. They are, in essence, ephemeral. <\/span><\/p>\n<p><b>However, a persistent storage solution cannot afford this dynamic behavior. Persistent storage cannot be bound to the rules of being dynamically created and destroyed. <\/b><\/p>\n<p><span style=\"font-weight: 400;\">Stateful applications face challenges in terms of portability, when they need to be deployed on another infrastructure, perhaps another cloud provider, on-prem, or on a hybrid model. Persistent storage solutions can be tied to a specific cloud provider. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Moreover, the storage landscape for cloud native applications is not easy to understand. The <\/span><a href=\"https:\/\/www.youtube.com\/watch?v=uSxlgK1bCuA\"><span style=\"font-weight: 400;\">Kubernetes storage lingo<\/span><\/a><span style=\"font-weight: 400;\"> can be confusing, with many terms that have intricate meanings and subtle changes. Additionally, there are many options between native Kubernetes, open-source frameworks, and managed or paid services that developers must consider before reaching a decision. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can see below the cloud-native storage solutions listed in <\/span><a href=\"https:\/\/landscape.cncf.io\/format=landscape\"><span style=\"font-weight: 400;\">CNCF\u2019s landscape<\/span><\/a><span style=\"font-weight: 400;\">:<\/span><\/p>\n<p><a href=\"https:\/\/landscape.cncf.io\/format=landscape\"><img fetchpriority=\"high\" decoding=\"async\" data-attachment-id=\"6728\" data-permalink=\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/image3-16\/\" data-orig-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3.png?fit=1999%2C645&amp;ssl=1\" data-orig-size=\"1999,645\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image3\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3.png?fit=300%2C97&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3.png?fit=1024%2C330&amp;ssl=1\" class=\"alignnone wp-image-6728\" src=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3-1024x330.png?resize=835%2C269&#038;ssl=1\" alt=\"\" width=\"835\" height=\"269\" srcset=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3.png?resize=1024%2C330&amp;ssl=1 1024w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3.png?resize=300%2C97&amp;ssl=1 300w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3.png?resize=768%2C248&amp;ssl=1 768w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image3.png?w=1999&amp;ssl=1 1999w\" sizes=\"(max-width: 835px) 100vw, 835px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Maybe the first idea that comes to mind is deploying a database in Kubernetes: pick out a database solution that fits your needs, containerize it to run on local disk, and deploy it in your cluster as just another workload. However, due to the inherent properties of databases, this does not work well. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Containers are built with statelessness as a principle. This makes spinning containers up or down easy. Since there is no data to be saved and to be migrated, the cluster does not deal with the usually intensive work of disk reads and writes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">With a database, state needs to be preserved. If the database that is deployed on the cluster in a containerized manner does not migrate or is not being spun up frequently, then the physics of data storage come into play. Ideally, containers that would be using the data would be in the same pod with the database.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This is not to say deploying databases in containers is a bad idea &#8211; in some use cases, this approach can be quite adequate. In a test environment, or for a task that does not require production-level amount of data, databases in clusters can make sense, due to the small scale of the data being held.<\/span><\/p>\n<p><b>In production developers usually rely on external storage. <\/b><\/p>\n<p><span style=\"font-weight: 400;\">How does Kubernetes communicate with storage? It uses control plane interfaces. These interfaces link Kubernetes with external storage. These external storage solutions linked to Kubernetes are called Volume plugins,. Volume Plugins enable abstracting storage and grant storage portability.<\/span><\/p>\n<p><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#out-of-tree-volume-plugins\"><span style=\"font-weight: 400;\">Previously, volume plugins were built<\/span><\/a><span style=\"font-weight: 400;\">, linked, compiled, and shipped with the core Kubernetes codebase. This greatly limited the flexibility of the developer, and brought on additional maintenance costs. Adding new storage options required changes in the Kubernetes codebase. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">With the introduction of CSI and Flexvolume, volume plugins can be deployed on a cluster without the changes to the codebase. <\/span><\/p>\n<p><a href=\"https:\/\/blog.thecodeteam.com\/2017\/06\/27\/container-storage-architectures-kubernetes-docker-mesos-compare\/\"><img decoding=\"async\" data-attachment-id=\"6729\" data-permalink=\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/image1-20\/\" data-orig-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image1.png?fit=975%2C325&amp;ssl=1\" data-orig-size=\"975,325\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image1.png?fit=300%2C100&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image1.png?fit=975%2C325&amp;ssl=1\" class=\"alignnone wp-image-6729\" src=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image1.png?resize=840%2C280&#038;ssl=1\" alt=\"\" width=\"840\" height=\"280\" srcset=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image1.png?w=975&amp;ssl=1 975w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image1.png?resize=300%2C100&amp;ssl=1 300w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image1.png?resize=768%2C256&amp;ssl=1 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<h2><span style=\"font-weight: 400;\">Native Kubernetes &amp; Storage<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">How does native Kubernetes handle storage? Kubernetes natively offers some solutions to manage storage: ephemeral options, persistent storage in terms of Persistent Volumes, \u00a0Persistent Volume Claims, Storage Classes, or StatefulSets. This can be quite confusing.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Persistent Volumes (PV) are storage units that have been provisioned by an administrator. They are independent of any single pod, breaking them free from the ephemeral life cycle of pods. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Persistent Volume Claims (PVC), on the other hand, are requests for the storage, i.e. PVs. With PVC, it\u2019s possible to bind storage to a particular node, making it available to that node for usage. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">There are two ways of dealing with storage: statically or dynamically.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">With static provisioning, administrator provisions PVs that they think pods might require before the actual requests are made, and these PVs are manually bound to specific pods with explicit PVCs. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">In practice, statically defined PVs are not compatible with the portable structure of Kubernetes, since the storage that is being used can be environment-dependent, such as AWS EBS or GCE Persistent Disk. Manual binding requires changes in the YAML file to point to the vendor-specific storage solutions. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Static provisioning also goes against the mindset of Kubernetes in terms of how developers think about resources: CPU and memory are not allocated beforehand and bound to pods or containers. They are dynamically granted. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dynamic provisioning is done with Storage Classes. Cluster administrator do not need to manually create the PVs beforehand. They instead create multiple profiles of storage, just like templates. When a developer makes a PVC, depending on the requirements of the request, one of these templates is created at the time of the request, and attached to the pod.<\/span><\/p>\n<p><a href=\"https:\/\/thenewstack.io\/strategies-running-stateful-applications-kubernetes-persistent-volumes-claims\/\"><img decoding=\"async\" data-attachment-id=\"6730\" data-permalink=\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/image4-14\/\" data-orig-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1.png?fit=1999%2C930&amp;ssl=1\" data-orig-size=\"1999,930\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image4\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1.png?fit=300%2C140&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1.png?fit=1024%2C476&amp;ssl=1\" class=\"alignnone wp-image-6730\" src=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1-1024x476.png?resize=837%2C389&#038;ssl=1\" alt=\"\" width=\"837\" height=\"389\" srcset=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1.png?resize=1024%2C476&amp;ssl=1 1024w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1.png?resize=300%2C140&amp;ssl=1 300w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1.png?resize=768%2C357&amp;ssl=1 768w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image4-1.png?w=1999&amp;ssl=1 1999w\" sizes=\"(max-width: 837px) 100vw, 837px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">This is a very broad overview of how external storage is generally handled with native Kubernetes. There are many other options to consider, however. <\/span><\/p>\n<h2><span style=\"font-weight: 400;\">CSI &#8211; Container Storage Interface<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Before moving forward, I want to introduce <\/span><a href=\"https:\/\/github.com\/container-storage-interface\/spec\"><span style=\"font-weight: 400;\">Container Storage Interface<\/span><\/a><span style=\"font-weight: 400;\">. CSI is a unifying effort created by CNCF Storage Working Group, aimed towards defining a standard container storage interface that can enable storage drivers to work on any container orchestrator. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">CSI specifications have already been adapted into Kubernetes, and <\/span><a href=\"https:\/\/kubernetes-csi.github.io\/docs\/Drivers.html#production-drivers\"><span style=\"font-weight: 400;\">numerous driver plugins<\/span><\/a><span style=\"font-weight: 400;\"> are available to be deployed on a Kubernetes cluster. Developers can access storage exposed by a CSI compatible volume driver with the <\/span><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#csi\"><span style=\"font-weight: 400;\">csi<\/span><\/a><span style=\"font-weight: 400;\"> volume type on Kubernetes. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">With the introduction of CSI, storage can be treated as another workload to be containerized and deployed on a Kubernetes cluster.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For more information, listen to <\/span><a href=\"https:\/\/softwareengineeringdaily.com\/2018\/06\/06\/container-storage-with-jie-yu\/\"><span style=\"font-weight: 400;\">our episode on CSI with Jie Yu<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Open-Source Projects<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">There\u2019s a significant upsurge of tools and projects around cloud-native technologies. As one of the most prominent problems in production, dealing with storage on a cloud-native architecture has a fair share of open-source projects dedicated to solving it. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">The most popular projects regarding storage are Ceph and Rook.<\/span><\/p>\n<p><a href=\"https:\/\/ceph.com\/\"><span style=\"font-weight: 400;\">Ceph<\/span><\/a><span style=\"font-weight: 400;\"> is a dynamically managed, horizontally scalable, distributed storage cluster. Ceph provides a logical abstraction over the storage resources. It\u2019s designed to have no single point of failure, to be self-managing, and to be software-based. Ceph provides block, object, or file system interfaces into to same storage cluster simultaneously. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ceph\u2019s architecture is complicated, with a multitude of underlying technologies such as RADOS, librados, RADOSGW, RDB, its CRUSH algorithm, and components like monitors, OSD, and MDS. Without delving into its architecture, the key point to take is, Ceph is a distributed storage cluster that makes scalability much easier, eliminates single points of failure without sacrificing performance, and provides a unified storage with access to object, block, and file. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Naturally, Ceph has been adapted into the cloud-native environment. There are numerous ways you can deploy a Ceph cluster, such as with Ansible. You can deploy a Ceph cluster and have an interface into it from your Kubernetes cluster, using CSI and PVCs.<\/span><\/p>\n<figure id=\"attachment_6731\" aria-describedby=\"caption-attachment-6731\" style=\"width: 693px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/docs.ceph.com\/docs\/mimic\/architecture\/\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6731\" data-permalink=\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/image5-10\/\" data-orig-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image5-1.png?fit=693%2C490&amp;ssl=1\" data-orig-size=\"693,490\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image5\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image5-1.png?fit=300%2C212&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image5-1.png?fit=693%2C490&amp;ssl=1\" class=\"wp-image-6731 size-full\" src=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image5-1.png?resize=693%2C490&#038;ssl=1\" alt=\"\" width=\"693\" height=\"490\" srcset=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image5-1.png?w=693&amp;ssl=1 693w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image5-1.png?resize=300%2C212&amp;ssl=1 300w\" sizes=\"(max-width: 693px) 100vw, 693px\" data-recalc-dims=\"1\" \/><\/a><figcaption id=\"caption-attachment-6731\" class=\"wp-caption-text\">Ceph architecture.<\/figcaption><\/figure>\n<p><span style=\"font-weight: 400;\">Another interesting, and quite popular project is Rook, a tool that aims to converge Kubernetes and Ceph &#8211; to bring compute and storage together in one cluster. <\/span><\/p>\n<p><a href=\"https:\/\/rook.io\/\"><span style=\"font-weight: 400;\">Rook<\/span><\/a><span style=\"font-weight: 400;\"> is a cloud-native storage orchestrator. It extends Kubernetes. Rook essentially allows putting Ceph into containers, and provides cluster management logic for running Ceph reliably on Kubernetes. Rook automates deployment, bootstrapping, configuration, scaling, rebalancing, i.e. the jobs that a cluster admin would do. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Rook allows deploying a Ceph cluster from a yaml, just like Kubernetes. This file serves as the higher-level declaration of what the cluster admin wants in the cluster. Rook spins up the cluster, and starts actively monitoring. Rook serves as an operator or a controller, making sure that the declared desired state in the yaml file is upheld. Rook runs in a reconciliation loop that observes the state and acting upon the differences it detects. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Rook does not have its own persistent state, and does not need to be managed. It\u2019s truly built according to the principles of Kubernetes.<\/span><\/p>\n<p><a href=\"https:\/\/rook.io\/docs\/rook\/v0.8\/\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6732\" data-permalink=\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/image2-19\/\" data-orig-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1.png?fit=1999%2C1010&amp;ssl=1\" data-orig-size=\"1999,1010\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image2\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1.png?fit=300%2C152&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1.png?fit=1024%2C517&amp;ssl=1\" class=\"alignnone wp-image-6732\" src=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1-1024x517.png?resize=683%2C345&#038;ssl=1\" alt=\"\" width=\"683\" height=\"345\" srcset=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1.png?resize=1024%2C517&amp;ssl=1 1024w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1.png?resize=300%2C152&amp;ssl=1 300w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1.png?resize=768%2C388&amp;ssl=1 768w, https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/image2-1.png?w=1999&amp;ssl=1 1999w\" sizes=\"(max-width: 683px) 100vw, 683px\" data-recalc-dims=\"1\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Rook, bringing Ceph and Kubernetes together, is one of the most popular cloud-native storage solutions, with almost 4000 Github stars, 16.3M downloads, and 100+ contributors. \u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Being accepted into CNCF as the first storage project, <\/span><a href=\"https:\/\/blog.rook.io\/rook-moves-into-the-cncf-incubator-d25197a6bb14\"><span style=\"font-weight: 400;\">Rook has recently been accepted to the Incubation stage<\/span><\/a><span style=\"font-weight: 400;\">. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For more information about Rook, listen to <\/span><a href=\"https:\/\/softwareengineeringdaily.com\/2018\/01\/18\/kubernetes-storage-with-bassam-tabbara\/\"><span style=\"font-weight: 400;\">our episode on Kubernetes Storage with Bassam Tabara<\/span><\/a><span style=\"font-weight: 400;\">. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">For any problem in an application, it\u2019s important to identify the requirements, and design the system or pick the tools accordingly. Storage in the cloud-native environment is no different. While the problem is quite complicated, there are numerous tools and approaches out there. As the cloud-native world progresses, new solutions will also undoubtedly emerge. <\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Container orchestration tools like Kubernetes are revolutionizing the way applications are being developed and deployed. With the rise of the microservices architecture and decoupling of infrastructure from application logic from the developer\u2019s point of view, developers are becoming more focused on building software and delivering value. Kubernetes abstracts away the physical machines it is managing.<\/p>\n","protected":false},"author":15,"featured_media":6778,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[1363,83,2143],"tags":[2636,1806,2402,379],"class_list":["post-6727","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all-episodes","category-articles","category-exclusive-content","tag-cloud-infrastructure","tag-cloud-storage","tag-gokhan-simsek","tag-kubernetes"],"jetpack_publicize_connections":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Why Is Storage On Kubernetes So Hard? - Software Engineering Daily<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why Is Storage On Kubernetes So Hard? - Software Engineering Daily\" \/>\n<meta property=\"og:description\" content=\"Container orchestration tools like Kubernetes are revolutionizing the way applications are being developed and deployed. With the rise of the microservices architecture and decoupling of infrastructure from application logic from the developer\u2019s point of view, developers are becoming more focused on building software and delivering value. Kubernetes abstracts away the physical machines it is managing.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/\" \/>\n<meta property=\"og:site_name\" content=\"Software Engineering Daily\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-11T16:00:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-14T07:01:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"799\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Gokhan Simsek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GokhanSimseek\" \/>\n<meta name=\"twitter:site\" content=\"@software_daily\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gokhan Simsek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/\"},\"author\":{\"name\":\"Gokhan Simsek\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/#\/schema\/person\/e890d5bb8941fc76fb69909e6702c34d\"},\"headline\":\"Why Is Storage On Kubernetes So Hard?\",\"datePublished\":\"2019-01-11T16:00:17+00:00\",\"dateModified\":\"2019-01-14T07:01:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/\"},\"wordCount\":1564,\"publisher\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1\",\"keywords\":[\"Cloud Infrastructure\",\"cloud storage\",\"Gokhan Simsek\",\"Kubernetes\"],\"articleSection\":[\"All Content\",\"Exclusive Articles\",\"Exclusive Content\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/\",\"url\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/\",\"name\":\"Why Is Storage On Kubernetes So Hard? - Software Engineering Daily\",\"isPartOf\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1\",\"datePublished\":\"2019-01-11T16:00:17+00:00\",\"dateModified\":\"2019-01-14T07:01:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1\",\"width\":1536,\"height\":799},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/softwareengineeringdaily.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why Is Storage On Kubernetes So Hard?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/#website\",\"url\":\"https:\/\/softwareengineeringdaily.com\/\",\"name\":\"Software Engineering Daily\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/softwareengineeringdaily.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/#organization\",\"name\":\"Software Engineering Daily\",\"url\":\"https:\/\/softwareengineeringdaily.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2024\/01\/cropped-sed_website_banner.png?fit=549%2C169&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2024\/01\/cropped-sed_website_banner.png?fit=549%2C169&ssl=1\",\"width\":549,\"height\":169,\"caption\":\"Software Engineering Daily\"},\"image\":{\"@id\":\"https:\/\/softwareengineeringdaily.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/software_daily\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/#\/schema\/person\/e890d5bb8941fc76fb69909e6702c34d\",\"name\":\"Gokhan Simsek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/softwareengineeringdaily.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9ad291f06753e23a47e536bcfe34701f?s=96&d=retro&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9ad291f06753e23a47e536bcfe34701f?s=96&d=retro&r=pg\",\"caption\":\"Gokhan Simsek\"},\"description\":\"Gokhan is a computer science graduate, currently pursuing a MSc. degree in Data Science at Eindhoven University of Technology.\",\"sameAs\":[\"https:\/\/x.com\/GokhanSimseek\"],\"url\":\"https:\/\/softwareengineeringdaily.com\/author\/gokhan\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Why Is Storage On Kubernetes So Hard? - Software Engineering Daily","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/","og_locale":"en_US","og_type":"article","og_title":"Why Is Storage On Kubernetes So Hard? - Software Engineering Daily","og_description":"Container orchestration tools like Kubernetes are revolutionizing the way applications are being developed and deployed. With the rise of the microservices architecture and decoupling of infrastructure from application logic from the developer\u2019s point of view, developers are becoming more focused on building software and delivering value. Kubernetes abstracts away the physical machines it is managing.","og_url":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/","og_site_name":"Software Engineering Daily","article_published_time":"2019-01-11T16:00:17+00:00","article_modified_time":"2019-01-14T07:01:02+00:00","og_image":[{"width":1536,"height":799,"url":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1","type":"image\/png"}],"author":"Gokhan Simsek","twitter_card":"summary_large_image","twitter_creator":"@GokhanSimseek","twitter_site":"@software_daily","twitter_misc":{"Written by":"Gokhan Simsek","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#article","isPartOf":{"@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/"},"author":{"name":"Gokhan Simsek","@id":"https:\/\/softwareengineeringdaily.com\/#\/schema\/person\/e890d5bb8941fc76fb69909e6702c34d"},"headline":"Why Is Storage On Kubernetes So Hard?","datePublished":"2019-01-11T16:00:17+00:00","dateModified":"2019-01-14T07:01:02+00:00","mainEntityOfPage":{"@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/"},"wordCount":1564,"publisher":{"@id":"https:\/\/softwareengineeringdaily.com\/#organization"},"image":{"@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1","keywords":["Cloud Infrastructure","cloud storage","Gokhan Simsek","Kubernetes"],"articleSection":["All Content","Exclusive Articles","Exclusive Content"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/","url":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/","name":"Why Is Storage On Kubernetes So Hard? - Software Engineering Daily","isPartOf":{"@id":"https:\/\/softwareengineeringdaily.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage"},"image":{"@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1","datePublished":"2019-01-11T16:00:17+00:00","dateModified":"2019-01-14T07:01:02+00:00","breadcrumb":{"@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#primaryimage","url":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1","contentUrl":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1","width":1536,"height":799},{"@type":"BreadcrumbList","@id":"https:\/\/softwareengineeringdaily.com\/2019\/01\/11\/why-is-storage-on-kubernetes-is-so-hard\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/softwareengineeringdaily.com\/"},{"@type":"ListItem","position":2,"name":"Why Is Storage On Kubernetes So Hard?"}]},{"@type":"WebSite","@id":"https:\/\/softwareengineeringdaily.com\/#website","url":"https:\/\/softwareengineeringdaily.com\/","name":"Software Engineering Daily","description":"","publisher":{"@id":"https:\/\/softwareengineeringdaily.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/softwareengineeringdaily.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/softwareengineeringdaily.com\/#organization","name":"Software Engineering Daily","url":"https:\/\/softwareengineeringdaily.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/softwareengineeringdaily.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2024\/01\/cropped-sed_website_banner.png?fit=549%2C169&ssl=1","contentUrl":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2024\/01\/cropped-sed_website_banner.png?fit=549%2C169&ssl=1","width":549,"height":169,"caption":"Software Engineering Daily"},"image":{"@id":"https:\/\/softwareengineeringdaily.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/software_daily"]},{"@type":"Person","@id":"https:\/\/softwareengineeringdaily.com\/#\/schema\/person\/e890d5bb8941fc76fb69909e6702c34d","name":"Gokhan Simsek","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/softwareengineeringdaily.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9ad291f06753e23a47e536bcfe34701f?s=96&d=retro&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9ad291f06753e23a47e536bcfe34701f?s=96&d=retro&r=pg","caption":"Gokhan Simsek"},"description":"Gokhan is a computer science graduate, currently pursuing a MSc. degree in Data Science at Eindhoven University of Technology.","sameAs":["https:\/\/x.com\/GokhanSimseek"],"url":"https:\/\/softwareengineeringdaily.com\/author\/gokhan\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/softwareengineeringdaily.com\/wp-content\/uploads\/2019\/01\/Kubernetes_New.png?fit=1536%2C799&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p7GuoD-1Kv","_links":{"self":[{"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/posts\/6727"}],"collection":[{"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/comments?post=6727"}],"version-history":[{"count":0,"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/posts\/6727\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/media\/6778"}],"wp:attachment":[{"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/media?parent=6727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/categories?post=6727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/softwareengineeringdaily.com\/wp-json\/wp\/v2\/tags?post=6727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}