{"id":35248,"date":"2018-08-09T20:19:13","date_gmt":"2018-08-09T17:19:13","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=35248"},"modified":"2018-10-01T18:08:09","modified_gmt":"2018-10-01T15:08:09","slug":"enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/","title":{"rendered":"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#The_need_for_persistent_storage\" >The need for persistent storage<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#Docker_volumes_and_swarms\" >Docker volumes and swarms<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#Kubernetes_PersistentVolumes\" >Kubernetes PersistentVolumes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#Oracles_Volume_Provisioner\" >Oracle&#8217;s Volume Provisioner<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#Want_details_Watch_the_video\" >Want details? Watch the video!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#Related_slides\" >Related slides<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#Further_reading\" >Further reading<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#About_the_expert\" >About the expert<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"The_need_for_persistent_storage\"><\/span>The need for persistent storage<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The very essence of immutability implies that once a container image is created, it cannot be altered. If you need to change any bit of data, you have to recreate a container and then kill the one storing the outdated information.<\/p>\n<p>Here comes the challenge of maintaining persistence for the containerized apps. The app data maps to the containers, which are immutable, while the data is constantly changing. And this, in its turn, contradicts with the nature of immutability. So, the question is, how to address this contradiction?<\/p>\n<p>At a recent <a href=\"https:\/\/www.meetup.com\/ru-RU\/Seattle-Cloud-Native-and-Kubernetes-Meetup\/events\/251173592\/\" rel=\"noopener\" target=\"_blank\">Kubernetes meetup<\/a> in Seattle, <a href=\"https:\/\/www.linkedin.com\/in\/kaslinfields\/\">Kaslin Fields<\/a>, a Solutions Architect at Oracle Cloud Infrastructure, overviewed functionality to enable persistent storage for containerized apps available through Docker and Kubernetes.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-1024x576.jpg\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-35270\" \/><\/a><small>Kaslin Fields at the Cloud-Native and Kubernetes meetup in Seattle<\/small><\/center><\/p>\n<p>As mentioned above, the application data maps to the containers that cannot be changed on the fly. This way, one has to separate data from apps. It means that we need to map apps to containers, and app data to somewhere else, which happens to be <em>volumes<\/em>. Both Docker and Kubernetes have tooling that help to manage <em>volumes<\/em>, as well as plug-ins that reach out to several types of cloud infrastructure.<\/p>\n<blockquote><p><em>&#8220;If your containers can never change while they\u2019re running and writing new data inside the running container would be a change, then where\u2019s all your data supposed to go?!<br \/>\n\u2014Kaslin Fields, Oracle<\/em><\/p><\/blockquote>\n<p>Taking WordPress-based apps as an example, Kaslin explained how Docker <a href=\"https:\/\/docs.docker.com\/storage\/volumes\/\" rel=\"noopener\" target=\"_blank\">volumes<\/a> and <a href=\"https:\/\/docs.docker.com\/engine\/swarm\/\" rel=\"noopener\" target=\"_blank\">swarms<\/a>, Kubernetes <a href=\"https:\/\/cloud.google.com\/kubernetes-engine\/docs\/concepts\/persistent-volumes\" rel=\"noopener\" target=\"_blank\">PersistentVolumes<\/a>, and Oracle&#8217;s <a href=\"https:\/\/github.com\/oracle\/oci-volume-provisioner\" rel=\"noopener\" target=\"_blank\">Volume Provisioner<\/a> help to enable persistence.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Docker_volumes_and_swarms\"><\/span>Docker volumes and swarms<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>One way to approach the situation is with Docker <em>volumes<\/em>, which store data, and <em>Swarm<\/em>, which functions as the Docker&#8217;s container orchestrator.<\/p>\n<p><a href=\"https:\/\/docs.docker.com\/storage\/volumes\/\" rel=\"noopener\" target=\"_blank\">Volumes<\/a> are considered the preferred way today to ensure data persistence with Docker containers. They should be considered in comparison to the earlier <a href=\"https:\/\/docs.docker.com\/storage\/bind-mounts\/#choosing-the--v-or---mount-flag\">bind mounts<\/a> method. While bind mounts are heavily dependent on the directory structure of the host machine, volumes are managed by Docker itself\u2014either via CLI commands or API. This way, it is easier to back up or migrate volumes, which can be distributed across multiple containers. It is also possible to store volumes on remote hosts or cloud providers, to encrypt volume contents, or to extend their functionality.<\/p>\n<p>Furthermore, volumes don&#8217;t increase the size of containers they are using, and the volume&#8217;s contents exist outside the life cycle of a taken container.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Oracle-Docker-Bind-Mounts.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Oracle-Docker-Bind-Mounts.png\" alt=\"\" width=\"502\" height=\"256\" class=\"aligncenter size-full wp-image-35460\" \/><\/a><small>Docker volumes vs. bind mounts (<a href=\"https:\/\/docs.docker.com\/storage\/bind-mounts\/#choosing-the--v-or---mount-flag\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>A <a href=\"https:\/\/docs.docker.com\/get-started\/part4\/#introduction\" rel=\"noopener\" target=\"_blank\">swarm<\/a>, actually, represents a group of machines running on Docker and joined to a cluster. With swarms, you continue to utilize the familiar Docker commands with the only difference that they are now executed on a cluster by a <em>swarm manager<\/em>. By switching on the <em>swarm mode<\/em>, you assign your physical\/virtual machine as a swarm manager.<\/p>\n<p>Docker volumes work natively with the swarm mode. Docker itself will seek a volume on every node of a swarm, which means a project might need more than one volume. Alternatively, volumes can be created with multiple nodes.<\/p>\n<p>Developers can use local storage or plug-ins from <a href=\"https:\/\/www.netapp.com\/devops-solutions\/containers\/\" rel=\"noopener\" target=\"_blank\">NetApp<\/a> and <a href=\"https:\/\/hub.docker.com\/search?category=volume&#038;q=&#038;type=plugin&#038;page=2\" rel=\"noopener\" target=\"_blank\">several other<\/a> storage companies to create a file storage system through an API. Because Docker, and thus the swarm mode, come with only a local driver, the plug-ins make it aware of your swarms and match volumes with service tasks. For instance, there is such a plug-in for Docker volumes on Oracle Cloud Infrastructure (OCI).<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/persistent-storage-with-docker-volumes-on-oracle-cloud-infrastructure.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/persistent-storage-with-docker-volumes-on-oracle-cloud-infrastructure-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-35530\" \/><\/a><small>A sample architecture of Docker Volume Plugin on Oracle Cloud Infrastructure (<a href=\"https:\/\/www.slideshare.net\/secret\/JkJAg4RAYG3epD\" rel=\"noopener\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kubernetes_PersistentVolumes\"><\/span>Kubernetes PersistentVolumes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>With the continued, growing strength of Kubernetes, it&#8217;s no surprise to see a Kube-centric path to persistent storage. The relatively new Kubernetes <a href=\"https:\/\/cloud.google.com\/kubernetes-engine\/docs\/concepts\/persistent-volumes\" rel=\"noopener\" target=\"_blank\">PersistentVolumes<\/a>, which date only to September 2017, provide this path.<\/p>\n<p>As with Docker volumes, <em>PersistentVolumes<\/em> are fully managed by Kubernetes itself. Typically, PersistentVolumes are backed by Compute Engine persistent disks and can be used with other storage types like a network file system. <em>PersistentVolumes<\/em> can be dynamically provisioned, and the user doesn&#8217;t need to manually create or delete the backing storage.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v3.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v3-1024x576.png\" alt=\"\" width=\"640\"  class=\"aligncenter size-large wp-image-35507\" \/><\/a><small>Kaslin Fields, a Solutions Architect at Oracle<\/small><\/center><\/p>\n<p>As <em>PersistentVolumes<\/em> are independent of Kubernetes <a href=\"https:\/\/cloud.google.com\/kubernetes-engine\/docs\/concepts\/pod\" rel=\"noopener\" target=\"_blank\">pods<\/a>, the disk and data continue to exist as the cluster changes and if pods are deleted or recreated. It&#8217;s important to remember that pods are considered to be &#8220;cattle&#8221; (rather than &#8220;pets&#8221;), so they can be terminated or go down if a machine failures. This was an obvious issue with the original Kubernetes volumes. With <em>PersistentVolumes<\/em> and its <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/\">PersistentVolumeClaims<\/a> sibling, physical storage is invoked, so that pods can go down, but the storage persists.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Oracles_Volume_Provisioner\"><\/span>Oracle&#8217;s Volume Provisioner<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>When it comes to Oracle, the company offers its <a href=\"https:\/\/github.com\/oracle\/oci-volume-provisioner\" rel=\"noopener\" target=\"_blank\">OCI Volume Provisioner<\/a>. The tool enables dynamic provisioning of storage resources for running Kubernetes on Oracle Cloud Infrastructure. It uses the OCI Flexvolume Driver to bind storage resources to Kubernetes nodes. The volume provisioner offers support for <a href=\"https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Block\/Concepts\/overview.htm\" rel=\"noopener\" target=\"_blank\">block volumes<\/a>.<\/p>\n<p>With these blocks, one is able to create, attach, connect, and move volumes as needed to meet storage and app requirements. Once a block volume is attached and connected to an instance, one can use it as a regular hard drive. The great thing is that no loss of data is expected if you disconnect a volumes and reattach it to any other instance.<\/p>\n<blockquote><p><em>\u201cIn the real world, all of these containers work within availability domains. We especially need persistent storage for highly available apps, so we want persistent block storage and a driver that lets Kubernetes know how to talk to that block storage.&#8221; \u2014Kaslin Fields, Oracle<\/em><\/p><\/blockquote>\n<p>Whichever approach is taken, a project that moves into deployment will need to reach to cloud-computing infrastructure. Cloud providers offer solutions, such as Amazon&#8217;s <a href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2017\/05\/amazon-appstream-2-0-now-offers-persistent-storage-for-end-users-files-backed-by-amazon-s3\/\">AppStream<\/a>, Google&#8217;s <a href=\"https:\/\/cloud.google.com\/persistent-disk\/\">Persistent Disk<\/a>, and Docker&#8217;s <a href=\"https:\/\/docs.docker.com\/docker-for-azure\/persistent-data-volumes\/\">Cloudstor for Azure<\/a>.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Oracle-Block-Storage-v2.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Oracle-Block-Storage-v2-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-35391\" \/><\/a><small>A high-level architecture of the OCI Volume Provisioner (<a href=\"https:\/\/www.slideshare.net\/altoros\/persistent-storage-with-containers-108762867\/secret\/JkJAg4RAYG3epD\" rel=\"noopener\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>The ripples caused by image immutability will roil all enterprises and developers who seek the speed and efficiency of containers, but also have a need for data persistence. No doubt increasing numbers of these enterprises will choose one of the the paths outlined here to solve this problem. It will be instructive to see which of these paths, or perhaps another path, becomes the road most traveled.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Want_details_Watch_the_video\"><\/span>Want details? Watch the video!<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<table width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div style=\"float: right; width: 45%; padding-left: 15px; font-size: 14px;\">\n<p><strong>Table of contents<\/strong><\/p>\n<ol>\n<li style=\"margin-bottom: 10px;\">What are containers? (<a href=\"#wistia_txuw1fltp2?time=183\">3&#8217;03&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 10px;\">How does persistent data work with containers? (<a href=\"#wistia_txuw1fltp2?time=450\">7&#8217;30&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 10px;\">What are Docker volumes and swarms? (<a href=\"#wistia_txuw1fltp2?time=618\">10&#8217;18&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 10px;\">How does the Docker volume plug-in work? (<a href=\"#wistia_txuw1fltp2?time=795\">13&#8217;15&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 10px;\">How are volumes implemented in Kubernetes? (<a href=\"#wistia_txuw1fltp2?time=945\">15&#8217;45&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 10px;\">How do Kubernetes PersistentVolumes work? (<a href=\"#wistia_txuw1fltp2?time=1212\">20&#8217;12&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 10px;\">Can persistent data be stored in databases? (<a href=\"#wistia_txuw1fltp2?time=1575\">26&#8217;15&#8221;<\/a>)<\/li>\n<li style=\"margin-bottom: 10px;\">Questions and answers (<a href=\"#wistia_txuw1fltp2?time=1855\">30&#8217;55&#8221;<\/a>)<\/li>\n<\/ol>\n<\/div>\n<p><script charset=\"ISO-8859-1\" src=\"\/\/fast.wistia.com\/assets\/external\/E-v1.js\" async><\/script><\/p>\n<div class=\"wistia_embed wistia_async_txuw1fltp2\" style=\"height:300px;width:400px\">&nbsp;<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Related_slides\"><\/span>Related slides<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><center><iframe loading=\"lazy\" src=\"\/\/www.slideshare.net\/slideshow\/embed_code\/key\/JkJAg4RAYG3epD\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> <\/iframe><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/managing-multi-cluster-workloads-with-google-kubernetes-engine\/\">Managing Multi-Cluster Workloads with Google Kubernetes Engine<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/deploying-services-to-cloud-foundry-is-easier-with-kubernetes\/\">Deploying Services to Cloud Foundry Using Kubernetes: Less BOSH, More Freedom<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/a-multitude-of-kubernetes-deployment-tools-kubespray-kops-and-kubeadm\/\">A Multitude of Kubernetes Deployment Tools: Kubespray, kops, and kubeadm<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"About_the_expert\"><\/span>About the expert<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div>\n<div style=\"float: right;\"><a href=\"https:\/\/www.linkedin.com\/in\/kaslinfields\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Kaslin-Fields-Oracle-bio.png\" alt=\"\" width=\"150\" height=\"150\" class=\"aligncenter size-full wp-image-35301\" \/><\/a><\/div>\n<div style=\"width: 600px;\"><small><a href=\"https:\/\/www.linkedin.com\/in\/kaslinfields\/\">Kaslin Fields<\/a> is a Solutions Architect at Oracle Cloud Infrastructure. She says her role is to &#8220;keep informed of what&#8217;s going on in the container world and use that knowledge to help customers build cool stuff on Oracle Cloud Infrastructure.&#8221; Kaslin holds a Bachelor of Engineering degree in Computer Science from Virginia Tech.<\/small><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The need for persistent storage<\/p>\n<p>The very essence of immutability implies that once a container image is created, it cannot be altered. If you need to change any bit of data, you have to recreate a container and then kill the one storing the outdated information.<\/p>\n<p>Here comes the challenge of maintaining [&#8230;]<\/p>\n","protected":false},"author":9,"featured_media":35539,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[7],"tags":[873,570,912],"class_list":["post-35248","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news-and-opinion","tag-cloud-native","tag-containers","tag-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud | Altoros<\/title>\n<meta name=\"description\" content=\"Learn how Docker&#039;s volumes and swarms, Kubernetes PersistentVolumes, and Oracle&#039;s Volume Provisioner help to enable persistent storage.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud | Altoros\" \/>\n<meta property=\"og:description\" content=\"The need for persistent storage The very essence of immutability implies that once a container image is created, it cannot be altered. If you need to change any bit of data, you have to recreate a container and then kill the one storing the outdated information. Here comes the challenge of maintaining [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-09T17:19:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-10-01T15:08:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Roger Strukhoff\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roger Strukhoff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/\",\"name\":\"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif\",\"datePublished\":\"2018-08-09T17:19:13+00:00\",\"dateModified\":\"2018-10-01T15:08:09+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8\",\"name\":\"Roger Strukhoff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg\",\"caption\":\"Roger Strukhoff\"},\"description\":\"Roger Strukhoff is Director of Research at Altoros. He also serves as Executive Director of the Tau Institute for Global ICT Research, Conference Chair of Cloud Expo and Things Expo, Co-Chair of the Big Data World Forum, and Open-Source Chair for the global DCD Converged conference series. He received his BA from Knox College, and conducted MBA studies at California State University\/East Bay. Previously in his career, he was VP of New Products at International Data Group and Director of Global Publications at TIBCO Software.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/rstrukhoff\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud | Altoros","description":"Learn how Docker's volumes and swarms, Kubernetes PersistentVolumes, and Oracle's Volume Provisioner help to enable persistent storage.","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:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/","og_locale":"en_US","og_type":"article","og_title":"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud | Altoros","og_description":"The need for persistent storage The very essence of immutability implies that once a container image is created, it cannot be altered. If you need to change any bit of data, you have to recreate a container and then kill the one storing the outdated information. Here comes the challenge of maintaining [...]","og_url":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/","og_site_name":"Altoros","article_published_time":"2018-08-09T17:19:13+00:00","article_modified_time":"2018-10-01T15:08:09+00:00","og_image":[{"width":640,"height":360,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif","type":"image\/gif"}],"author":"Roger Strukhoff","twitter_misc":{"Written by":"Roger Strukhoff","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/","url":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/","name":"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif","datePublished":"2018-08-09T17:19:13+00:00","dateModified":"2018-10-01T15:08:09+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/08\/Cloud-Native-Kubernetes-Persistent-Storage-Containers-Docker-Kaslin-Fields-Oracle-v6.gif","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/enabling-persistent-storage-for-docker-and-kubernetes-on-oracle-cloud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Enabling Persistent Storage for Docker and Kubernetes on Oracle Cloud"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/56ea20d6f280f7a442e89e5884b06fd8","name":"Roger Strukhoff","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/roger_strukhoff_user_icon-150x150.jpg","caption":"Roger Strukhoff"},"description":"Roger Strukhoff is Director of Research at Altoros. He also serves as Executive Director of the Tau Institute for Global ICT Research, Conference Chair of Cloud Expo and Things Expo, Co-Chair of the Big Data World Forum, and Open-Source Chair for the global DCD Converged conference series. He received his BA from Knox College, and conducted MBA studies at California State University\/East Bay. Previously in his career, he was VP of New Products at International Data Group and Director of Global Publications at TIBCO Software.","url":"https:\/\/www.altoros.com\/blog\/author\/rstrukhoff\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/35248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=35248"}],"version-history":[{"count":119,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/35248\/revisions"}],"predecessor-version":[{"id":37077,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/35248\/revisions\/37077"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/35539"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=35248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=35248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=35248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}