{"id":13014,"date":"2019-11-19T15:08:13","date_gmt":"2019-11-19T14:08:13","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/"},"modified":"2019-11-19T15:08:13","modified_gmt":"2019-11-19T14:08:13","slug":"nfs-storage-configuration-for-kubernetes","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/","title":{"rendered":"NFS Storage Configuration for Kubernetes"},"content":{"rendered":"<p>For one of our important customers, we are working on a major project to migrate critical applications to containers. From the implementation of the Kubernetes architecture to the deployment of applications and the administration of the platform, we are responsible for an important technological stack with new challenges for our team.<\/p>\n<p>One of the challenges, both important and exciting, is the implementation of Kubernetes clusters on bare metal (VM) and its management. We have deployed a Kubernetes cluster in VMs, based on VMWare.<\/p>\n<p>As you know, one of the challenges of containerization is storage management. Do we manage stateless or stateful applications? For stateful applications, the way the data generated by the application is stored is very important.<\/p>\n<p>Therefore, based on our infrastructure, we have 2 possibilities:<\/p>\n<ul>\n<li>The first one is to use the certified plugin provided by VMWare to create a storage class for our cluster and let him manage the persistent volume by itself: <a href=\"https:\/\/vmware.github.io\/vsphere-storage-for-kubernetes\/documentation\/overview.html\">https:\/\/vmware.github.io\/vsphere-storage-for-kubernetes\/documentation\/overview.html<\/a><\/li>\n<li>The second possibility is to use an NFS server. This is a more trivial choice and you have to manage your persistent volumes by yourself (manually).<\/li>\n<\/ul>\n<p>Here is a representative diagram of the 2 solutions:<br \/>\n<a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-35780\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png\" alt=\"\" width=\"1024\" height=\"459\" \/><\/a><\/p>\n<h3>Configuring NFS storage for Kubernetes<\/h3>\n<p>The Kubernetes infrastructure is composed of the following:<\/p>\n<ul>\n<li>k8s-master<\/li>\n<li>k8s-worker1<\/li>\n<li>k8s-worker2<\/li>\n<\/ul>\n<p>In addition, we have an NFS server to store our cluster data. In the next steps, we are going to expose the NFS share as a cluster object. We will create Kubernetes Persistent Volumes and Persistent Volume Claims for our application.<\/p>\n<h4>Persistent Volume Creation<\/h4>\n<p>Define the persistent volume at the cluster level as following:<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ vi create-pv.yaml\napiVersion: v1\nkind: PersistentVolume\nmetadata:\nname: nfs-demo\nlabels:\napp: nfs\ntype: data\nspec:\naccessModes:\n- ReadWriteOnce\ncapacity:\nstorage: 10Gi\nvolumeMode: Filesystem\nnfs:\npath: \/home\/ec2-user\/data\nserver: ec2-3-88-194-14.compute-1.amazonaws.com\npersistentVolumeReclaimPolicy: Retain<\/pre>\n<p>Create the persistent volume and see the results:<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ kubectl create -f create-pv.yaml\npersistentvolume\/nfs-demo created\n[ec2-user@ip-10-3-1-217 ~]$ kubectl get pv\nNAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE\nnfs-demo   10Gi       RWO            Retain           Available                                   7s<\/pre>\n<p>Once it&#8217;s created we can create a persistent volume claim. A PVC is dedicated to a specific namespace.<br \/>\nFirst, create the nfs-demo namespace, then the PVC.<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ kubectl create ns nfs-demo\nnamespace\/nfs-demo created<\/pre>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ vi create-pvc.yaml\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: nfs-demo\n  namespace: nfs-demo\n  labels:\n   app: nfs\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n     requests:\n       storage: 10Gi\n  selector:\n    matchLabels:\n      app: nfs\n      type: data\n[ec2-user@ip-10-3-1-217 ~]$ kubectl create -f create-pvc.yaml\npersistentvolumeclaim\/nfs-demo created\n\n[ec2-user@ip-10-3-1-217 ~]$ kubectl get pvc -n nfs-demo\nNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE\nnfs-demo Bound nfs-demo 10Gi RWO 3m21s<\/pre>\n<p>We can see now that our persistent volume changes its status from &#8220;Available&#8221; to &#8220;Bound&#8221;.<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ kubectl get pv\nNAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   REASON   AGE\nnfs-demo   10Gi       RWO            Retain           Bound    nfs-demo\/nfs-demo                           169m<\/pre>\n<p>Finally, let&#8217;s deploy now our workload which will consume the volume claim and the persistent volume. Whatever the workload API object you are using (Deployment, StatefulSet or DaemonSet) the Persistent Volume Claim is defined within the Pod specification, as follows:<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ vi create-pod.yaml\n\nkind: Pod\n[ec2-user@ip-10-3-1-217 ~]$ packet_write_wait: Connection to 18.205.188.55 port 22: Broken pipe\nkind: Pod\napiVersion: v1\nmetadata:\n  name: nfs-pod\nspec:\n  containers:\n    - name: nfs-demo\n      image: alpine\n      volumeMounts:\n      - name: nfs-demo\n          mountPath: \/data\/nfs\n      command: [\"\/bin\/sh\"]\n      args: [\"-c\", \"sleep 500000\"]\n  volumes:\n  - name: nfs-demo\n    persistentVolumeClaim:\n      claimName: nfs-demo<\/pre>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ kubectl create -f create-pod.yaml\npod\/nfs-pod created\n\n[ec2-user@ip-10-3-1-217 ~]$ kubectl get pods -o wide -n nfs-demo\nNAME      READY   STATUS    RESTARTS   AGE   IP              NODE                         NOMINATED NODE   READINESS GATES\nnfs-pod   1\/1     Running   0          9s    192.168.37.68   ip-10-3-0-143.ec2.internal              <\/pre>\n<p>Let&#8217;s now create an empty file into the container volume mount path and see if it is has been created on the NFS server. <\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">[ec2-user@ip-10-3-1-217 ~]$ kubectl -n nfs-demo exec nfs-pod touch \/data\/test-nfs.sh<\/pre>\n<p>We can see now, in the NFS server that the file has been properly stored.<\/p>\n<pre class=\"brush: shell; gutter: true; first-line: 1\">mehdi@MacBook-Pro: ssh -i \"dbi.pem\" ec2-user@ec2-3-88-194-14.compute-1.amazonaws.com\nLast login: Tue Nov 19 13:35:18 2019 from 62.91.42.92\n\n       __|  __|_  )\n       _|  (     \/   Amazon Linux 2 AMI\n      ___|\\___|___|\n\nhttps:\/\/aws.amazon.com\/amazon-linux-2\/\n16 package(s) needed for security, out of 27 available\nRun \"sudo yum update\" to apply all updates.\n\n[ec2-user@ip-10-3-0-184 ~]$ ls -lrt data\/\ntotal 0\n-rw-r--r-- 1 root root 0 Nov 19 13:42 test-nfs.sh<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>For one of our important customers, we are working on a major project to migrate critical applications to containers. From the implementation of the Kubernetes architecture to the deployment of applications and the administration of the platform, we are responsible for an important technological stack with new challenges for our team. One of the challenges, [&hellip;]<\/p>\n","protected":false},"author":109,"featured_media":13015,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[601,89],"type_dbi":[],"class_list":["post-13014","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-integration-middleware","tag-docker","tag-kubernetes"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>NFS Storage Configuration for Kubernetes - dbi Blog<\/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:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NFS Storage Configuration for Kubernetes\" \/>\n<meta property=\"og:description\" content=\"For one of our important customers, we are working on a major project to migrate critical applications to containers. From the implementation of the Kubernetes architecture to the deployment of applications and the administration of the platform, we are responsible for an important technological stack with new challenges for our team. One of the challenges, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-19T14:08:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1414\" \/>\n\t<meta property=\"og:image:height\" content=\"634\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"DevOps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DevOps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/\"},\"author\":{\"name\":\"DevOps\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4cd1b5f8a3de93f05a16ab8d7d2b7735\"},\"headline\":\"NFS Storage Configuration for Kubernetes\",\"datePublished\":\"2019-11-19T14:08:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/\"},\"wordCount\":406,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Screenshot-2019-11-18-at-08.25.34.png\",\"keywords\":[\"Docker\",\"kubernetes\"],\"articleSection\":[\"Application integration &amp; Middleware\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/\",\"name\":\"NFS Storage Configuration for Kubernetes - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Screenshot-2019-11-18-at-08.25.34.png\",\"datePublished\":\"2019-11-19T14:08:13+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4cd1b5f8a3de93f05a16ab8d7d2b7735\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Screenshot-2019-11-18-at-08.25.34.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/Screenshot-2019-11-18-at-08.25.34.png\",\"width\":1414,\"height\":634},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/nfs-storage-configuration-for-kubernetes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NFS Storage Configuration for Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4cd1b5f8a3de93f05a16ab8d7d2b7735\",\"name\":\"DevOps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"caption\":\"DevOps\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/devops\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"NFS Storage Configuration for Kubernetes - dbi Blog","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.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/","og_locale":"en_US","og_type":"article","og_title":"NFS Storage Configuration for Kubernetes","og_description":"For one of our important customers, we are working on a major project to migrate critical applications to containers. From the implementation of the Kubernetes architecture to the deployment of applications and the administration of the platform, we are responsible for an important technological stack with new challenges for our team. One of the challenges, [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/","og_site_name":"dbi Blog","article_published_time":"2019-11-19T14:08:13+00:00","og_image":[{"width":1414,"height":634,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png","type":"image\/png"}],"author":"DevOps","twitter_card":"summary_large_image","twitter_misc":{"Written by":"DevOps","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/"},"author":{"name":"DevOps","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735"},"headline":"NFS Storage Configuration for Kubernetes","datePublished":"2019-11-19T14:08:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/"},"wordCount":406,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png","keywords":["Docker","kubernetes"],"articleSection":["Application integration &amp; Middleware"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/","url":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/","name":"NFS Storage Configuration for Kubernetes - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png","datePublished":"2019-11-19T14:08:13+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/Screenshot-2019-11-18-at-08.25.34.png","width":1414,"height":634},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/nfs-storage-configuration-for-kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"NFS Storage Configuration for Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735","name":"DevOps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","caption":"DevOps"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/devops\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/13014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/109"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=13014"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/13014\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/13015"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=13014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=13014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=13014"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=13014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}