{"id":498868,"date":"2022-10-07T03:48:42","date_gmt":"2022-10-07T00:48:42","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-resize-a-kubernetes-statefulsets-volumes\/"},"modified":"2022-10-07T03:48:42","modified_gmt":"2022-10-07T00:48:42","slug":"how-to-resize-a-kubernetes-statefulsets-volumes","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-resize-a-kubernetes-statefulsets-volumes\/","title":{"rendered":"#How to Resize a Kubernetes StatefulSet\u2019s Volumes"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a41047be7801\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" 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: #dd3333;color:#dd3333\" 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><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a41047be7801\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-resize-a-kubernetes-statefulsets-volumes\/#%E2%80%9CHow_to_Resize_a_Kubernetes_StatefulSets_Volumes%E2%80%9D\" >&#8220;How to Resize a Kubernetes StatefulSet\u2019s Volumes&#8221;<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-resize-a-kubernetes-statefulsets-volumes\/#Creating_a_StatefulSet\" >Creating a StatefulSet<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-resize-a-kubernetes-statefulsets-volumes\/#Manually_Resizing_StatefulSet_Volumes\" >Manually Resizing StatefulSet Volumes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-resize-a-kubernetes-statefulsets-volumes\/#Recreating_the_StatefulSet\" >Recreating the StatefulSet<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-resize-a-kubernetes-statefulsets-volumes\/#Summary\" >Summary<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"%E2%80%9CHow_to_Resize_a_Kubernetes_StatefulSets_Volumes%E2%80%9D\"><\/span>&#8220;How to Resize a Kubernetes StatefulSet\u2019s Volumes&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<div>\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage alignnone size-full wp-image-803403\" data-pagespeed-no-defer=\"\" src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2022\/05\/Kubernetes.jpg?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Kubernetes logo\" width=\"1602\" height=\"902\"\/><\/p>\n<p>Kubernetes StatefulSets are used to deploy stateful <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">app<\/a>lications inside your cluster. Each Pod in the StatefulSet can access <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/blog\/2019\/04\/04\/kubernetes-1.14-local-persistent-volumes-ga\">local persistent volumes<\/a> that stick to it even after it\u2019s rescheduled. This allows Pods to maintain individual state that\u2019s separate from their neighbors in the set.<\/p>\n<p>Unfortunately these volumes come with a big limitation: Kubernetes doesn\u2019t provide a way to resize them from the StatefulSet object. The <code>spec.resources.requests.storage<\/code> property of the StatefulSet\u2019s <code>volumeClaimTemplates<\/code> field <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/statefulset\">is immutable<\/a>, preventing you from applying any capacity increases you require. This article will show you how to workaround the problem.<\/p>\n<h2 id=\"creating-a-statefulset\"><span class=\"ez-toc-section\" id=\"Creating_a_StatefulSet\"><\/span>Creating a StatefulSet<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Copy this YAML and save it to <code>ss.yaml<\/code>:<\/p>\n<div class=\"wp-geshi-highlight-wrap5\">\n<div class=\"wp-geshi-highlight-wrap4\">\n<div class=\"wp-geshi-highlight-wrap3\">\n<div class=\"wp-geshi-highlight-wrap2\">\n<div class=\"wp-geshi-highlight-wrap\">\n<div class=\"wp-geshi-highlight\">\n<div class=\"yaml\">\n<pre class=\"de1\"><strong class=\"co3\">apiVersion<\/strong><strong class=\"sy2\">: <\/strong>v1<strong class=\"co3\">\nkind<\/strong><strong class=\"sy2\">: <\/strong>Service<strong class=\"co4\">\nmetadata<\/strong>:<strong class=\"co3\">\n  name<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co4\">\n  labels<\/strong>:<strong class=\"co3\">\n    app<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co4\">\nspec<\/strong>:<strong class=\"co4\">\n  selector<\/strong>:<strong class=\"co3\">\n    app<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co4\">\n  ports<\/strong>:<strong class=\"co3\">\n  - name<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co3\">\n    port<\/strong><strong class=\"sy2\">: <\/strong>80<strong class=\"co3\">\n  clusterIP<\/strong><strong class=\"sy2\">: <\/strong><strong class=\"kw1\">None<\/strong>\n<strong class=\"sy1\">---<\/strong><strong class=\"co3\">\napiVersion<\/strong><strong class=\"sy2\">: <\/strong>apps\/v1<strong class=\"co3\">\nkind<\/strong><strong class=\"sy2\">: <\/strong>StatefulSet<strong class=\"co4\">\nmetadata<\/strong>:<strong class=\"co3\">\n  name<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co4\">\nspec<\/strong>:<strong class=\"co4\">\n  selector<\/strong>:<strong class=\"co4\">\n    matchLabels<\/strong>:<strong class=\"co3\">\n      app<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co3\">\n  replicas<\/strong><strong class=\"sy2\">: <\/strong>3<strong class=\"co3\">\n  serviceName<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co4\">\n  template<\/strong>:<strong class=\"co4\">\n    metadata<\/strong>:<strong class=\"co4\">\n      labels<\/strong>:<strong class=\"co3\">\n        app<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co4\">\n    spec<\/strong>:<strong class=\"co4\">\n      containers<\/strong>:<strong class=\"co3\">\n      - name<\/strong><strong class=\"sy2\">: <\/strong>nginx<strong class=\"co3\">\n        image<\/strong><strong class=\"sy2\">: <\/strong>nginx:latest<strong class=\"co4\">\n        ports<\/strong>:<strong class=\"co3\">\n        - name<\/strong><strong class=\"sy2\">: <\/strong>web<strong class=\"co3\">\n          containerPort<\/strong><strong class=\"sy2\">: <\/strong>80<strong class=\"co4\">\n        volumeMounts<\/strong>:<strong class=\"co3\">\n        - name<\/strong><strong class=\"sy2\">: <\/strong>data<strong class=\"co3\">\n          mountPath<\/strong><strong class=\"sy2\">: <\/strong>\/usr\/share\/nginx\/html<strong class=\"co4\">\n  volumeClaimTemplates<\/strong>:<strong class=\"co4\">\n  - metadata<\/strong>:<strong class=\"co3\">\n      name<\/strong><strong class=\"sy2\">: <\/strong>data<strong class=\"co4\">\n    spec<\/strong>:<strong class=\"co3\">\n      accessModes<\/strong><strong class=\"sy2\">: <\/strong><strong class=\"br0\">[<\/strong><strong class=\"st0\">\"ReadWriteOnce\"<\/strong><strong class=\"br0\">]<\/strong><strong class=\"co4\">\n      resources<\/strong>:<strong class=\"co4\">\n        requests<\/strong>:<strong class=\"co3\">\n          storage<\/strong><strong class=\"sy2\">: <\/strong>1Gi<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Apply the YAML to your cluster with Kubectl:<\/p>\n<pre>$ kubectl apply -f ss.yaml&#13;\nservice\/nginx created&#13;\nstatefulset.apps\/nginx created<\/pre>\n<p>You\u2019ll need a <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/storage-classes\">storage class<\/a> and provisioner in your cluster to run this example. It creates a StatefulSet that runs three replicas of an NGINX web server.<\/p>\n<p>While this isn\u2019t representative of when StatefulSets should be used, it\u2019s adequate as a demo of the volume problems you can face. A volume claim with 1 Gi of storage is mounted to NGINX\u2019s data directory. Your web content could outgrow this relatively small allowance as your service scales. However trying to modify the <code>volumeClaimTemplates.spec.resources.requests.storage<\/code> field to <code>10Gi<\/code> will report the following error when you run <code>kubectl apply<\/code>:<\/p>\n<pre>$ kubectl apply -f ss.yaml&#13;\nservice\/nginx unchanged&#13;\nThe StatefulSet \"nginx\" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden<\/pre>\n<p>This occurs because almost all the fields of a StatefulSet\u2019s manifest are immutable after creation.<\/p>\n<h2 id=\"manually-resizing-statefulset-volumes\"><span class=\"ez-toc-section\" id=\"Manually_Resizing_StatefulSet_Volumes\"><\/span>Manually Resizing StatefulSet Volumes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You can bypass the restriction by manually resizing the persistent volume claim (PVC). You\u2019ll then need to recreate the StatefulSet to release and rebind the volume from your Pods. This will trigger the actual volume resize event.<\/p>\n<p>First use Kubectl to find the PVCs associated with your StatefulSet:<\/p>\n<pre>$ kubectl get pvc&#13;\nNAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES&#13;\ndata-nginx-0   Bound    pvc-ccb2c835-e2d3-4632-b8ba-4c8c142795e4   1Gi        RWO         &#13;\ndata-nginx-1   Bound    pvc-1b0b27fe-3874-4ed5-91be-d8e552e515f2   1Gi        RWO         &#13;\ndata-nginx-2   Bound    pvc-4b7790c2-3ae6-4e04-afee-a2e1bae4323b   1Gi        RWO<\/pre>\n<p>There are three PVCs because there are three replicas in the StatefulSet. Each Pod gets its own individual volume.<\/p>\n<p>Now use <code>kubectl edit<\/code> to adjust the capacity of each volume:<\/p>\n<pre>$ kubectl edit pvc data-nginx-0<\/pre>\n<p>The PVC\u2019s YAML manifest will appear in your editor. Find the <code>spec.resources.requests.storage<\/code> field and change it to your new desired capacity:<\/p>\n<div class=\"wp-geshi-highlight-wrap5\">\n<div class=\"wp-geshi-highlight-wrap4\">\n<div class=\"wp-geshi-highlight-wrap3\">\n<div class=\"wp-geshi-highlight-wrap2\">\n<div class=\"wp-geshi-highlight-wrap\">\n<div class=\"wp-geshi-highlight\">\n<div class=\"yaml\">\n<pre class=\"de1\"><strong class=\"co1\"># ...<\/strong><strong class=\"co4\">\nspec<\/strong>:<strong class=\"co4\">\n  resources<\/strong>:<strong class=\"co4\">\n    requests<\/strong>:<strong class=\"co3\">\n      storage<\/strong><strong class=\"sy2\">: <\/strong>10Gi\n<strong class=\"co1\"># ...<\/strong><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Save and close the file. Kubectl should report that the change has been applied to your cluster.<\/p>\n<pre>persistentvolumeclaim\/data-nginx-0 edited<\/pre>\n<p>Now repeat these steps for the StatefulSet\u2019s remaining PVCs. Listing your cluster\u2019s persistent volumes should then show the new size against each one:<\/p>\n<pre>$ kubectl get pv&#13;\nNAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               &#13;\npvc-0a0d0b15-241f-4332-8c34-a24b61944fb7   10Gi       RWO            Delete           Bound    default\/data-nginx-2&#13;\npvc-33af452d-feff-429d-80cd-a45232e700c1   10Gi       RWO            Delete           Bound    default\/data-nginx-0&#13;\npvc-49f3a1c5-b780-4580-9eae-17a1f002e9f5   10Gi       RWO            Delete           Bound    default\/data-nginx-1<\/pre>\n<p>The claims will maintain the old size for now:<\/p>\n<pre>$ kubectl get pvc&#13;\nNAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES&#13;\ndata-nginx-0   Bound    pvc-33af452d-feff-429d-80cd-a45232e700c1   10Gi       RWO         &#13;\ndata-nginx-1   Bound    pvc-49f3a1c5-b780-4580-9eae-17a1f002e9f5   10Gi       RWO         &#13;\ndata-nginx-2   Bound    pvc-0a0d0b15-241f-4332-8c34-a24b61944fb7   10Gi       RWO<\/pre>\n<p>This is because the volume can\u2019t be resized while Pods are still using it.<\/p>\n<h2 id=\"recreating-the-statefulset\"><span class=\"ez-toc-section\" id=\"Recreating_the_StatefulSet\"><\/span>Recreating the StatefulSet<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Complete the resize by releasing the volume claim from the StatefulSet that\u2019s holding it. Delete the StatefulSet but use the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/use-cascading-deletion\"><code>orphan<\/code> cascading mechanism<\/a> so its Pods remain in your cluster. This will help minimize downtime.<\/p>\n<pre>$ kubectl delete statefulset --cascade=orphan nginx&#13;\nstatefulset.apps \"nginx\" deleted<\/pre>\n<p>Next edit your original YAML file to include the new volume size in the <code>spec.resources.requests.storage<\/code> file. Then use <code>kubectl apply<\/code> to recreate the StatefulSet in your cluster:<\/p>\n<pre>$ kubectl apply -f ss.yaml&#13;\nservice\/nginx unchanged&#13;\nstatefulset.apps\/nginx created<\/pre>\n<p>The new StatefulSet will assume ownership of the previously orphaned Pods because they\u2019ll already meet its requirements. The volumes may get resized at this point but in most cases you\u2019ll have to manually initiate a rollout that restarts your Pods:<\/p>\n<pre>$ kubectl rollout restart statefulset nginx<\/pre>\n<p>The rollout proceeds sequentially, targeting one Pod at a time. This ensures your service remains accessible throughout.<\/p>\n<p>Now your PVCs should show the new size:<\/p>\n<pre>$ kubectl get pvc&#13;\nNAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES&#13;\ndata-nginx-0   Bound    pvc-33af452d-feff-429d-80cd-a45232e700c1   10Gi       RWO         &#13;\ndata-nginx-1   Bound    pvc-49f3a1c5-b780-4580-9eae-17a1f002e9f5   10Gi       RWO         &#13;\ndata-nginx-2   Bound    pvc-0a0d0b15-241f-4332-8c34-a24b61944fb7   10Gi       RWO<\/pre>\n<p>Try connecting to one of your Pods to check the increased capacity is visible from within:<\/p>\n<pre>$ kubectl exec -it nginx-0 bash&#13;\nroot@nginx-0:\/# df -h \/usr\/share\/nginx\/html&#13;\nFilesystem                                                                Size  Used Avail Use% Mounted on&#13;\n\/dev\/disk\/by-id\/scsi-0DO_Volume_pvc-33af452d-feff-429d-80cd-a45232e700c1  9.9G  4.5M  9.4G   1% \/usr\/share\/nginx\/html<\/pre>\n<p>The Pod\u2019s reporting the expected 10 Gi of storage.<\/p>\n<h2 id=\"summary\"><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Kubernetes StatefulSets let you run stateful applications in Kubernetes with persistent storage volumes that are scoped to individual Pods. However the flexibility this permits ends when you need to resize one of your volumes. This is a missing feature which currently requires several manual steps to be completed in sequence.<\/p>\n<p>The Kubernetes maintainers are aware of the issue. There\u2019s an open <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/661\">feature request<\/a> to develop a solution which should eventually let you initiate volume resizes by editing a StatefulSet\u2019s manifest. This will be much quicker and safer than the current situation.<\/p>\n<p>One final caveat is that volume resizes are dependent on a storage driver that <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/blog\/2022\/05\/05\/volume-expansion-ga\">permits dynamic expansion<\/a>. This feature only became <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/general\/\" data-internallinksmanager029f6b8e52c=\"3\" title=\"General\" target=\"_blank\" rel=\"noopener\">general<\/a>ly available in Kubernetes v1.24 and not all drivers, Kubernetes distributions, and cloud platforms will support it. You can check whether yours does by running <code>kubectl get sc<\/code> and looking for <code>true<\/code> in the <code>ALLOWVOLUMEXPANSION<\/code> column of the storage driver you\u2019re using with your StatefulSets.<\/p>\n<\/div>\n<p><script>\n setTimeout(function(){\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s) } (window, document,'script',\n  'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\n   fbq('init', '335401813750447');\n   fbq('track', 'PageView');\n  },3000);\n<\/script><\/p>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.howtogeek.com\/devops\/how-to-resize-a-kubernetes-statefulsets-volumes\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;How to Resize a Kubernetes StatefulSet\u2019s Volumes&#8221; Kubernetes StatefulSets are used to deploy stateful applications inside your cluster. Each Pod in the StatefulSet can access local persistent volumes that stick to it even after it\u2019s rescheduled. This allows Pods to maintain individual state that\u2019s separate from their neighbors in the set. Unfortunately these volumes come&#8230;<\/p>\n","protected":false},"author":1,"featured_media":498869,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2022\/05\/Kubernetes.jpg?height=200p&trim=2,2,2,2","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-498868","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/498868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=498868"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/498868\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/498869"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=498868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=498868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=498868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}