{"id":482963,"date":"2022-08-10T09:02:15","date_gmt":"2022-08-10T06:02:15","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-prepare-a-kubernetes-node-for-maintenance\/"},"modified":"2022-08-10T09:02:15","modified_gmt":"2022-08-10T06:02:15","slug":"how-to-prepare-a-kubernetes-node-for-maintenance","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-prepare-a-kubernetes-node-for-maintenance\/","title":{"rendered":"#How to Prepare a Kubernetes Node for Maintenance"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 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-6a2f00eef27d2\" 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-6a2f00eef27d2\" 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-prepare-a-kubernetes-node-for-maintenance\/#%E2%80%9CHow_to_Prepare_a_Kubernetes_Node_for_Maintenance%E2%80%9D\" >&#8220;How to Prepare a Kubernetes Node for Maintenance&#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-prepare-a-kubernetes-node-for-maintenance\/#Applying_a_Node_Cordon\" >Applying a Node Cordon<\/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-prepare-a-kubernetes-node-for-maintenance\/#Draining_a_Node\" >Draining a Node<\/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-prepare-a-kubernetes-node-for-maintenance\/#Ignoring_Pod_Grace_Periods\" >Ignoring Pod Grace Periods<\/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-prepare-a-kubernetes-node-for-maintenance\/#Solving_Drain_Errors\" >Solving Drain Errors<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-prepare-a-kubernetes-node-for-maintenance\/#1_%E2%80%9CCannot_delete_Pods_not_managed_by_ReplicationController_ReplicaSet_Job_or_StatefulSet%E2%80%9D\" >1. \u201cCannot delete Pods not managed by ReplicationController, ReplicaSet, Job, or StatefulSet\u201d<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-prepare-a-kubernetes-node-for-maintenance\/#2_%E2%80%9CCannot_Delete_DaemonSet-managed_Pods%E2%80%9D\" >2. \u201cCannot Delete DaemonSet-managed Pods\u201d<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-prepare-a-kubernetes-node-for-maintenance\/#Minimizing_Downtime_With_Pod_Disruption_Budgets\" >Minimizing Downtime With Pod Disruption Budgets<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-prepare-a-kubernetes-node-for-maintenance\/#Overriding_Pod_Disruption_Budgets\" >Overriding Pod Disruption Budgets<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-prepare-a-kubernetes-node-for-maintenance\/#Bringing_Nodes_Back_Up\" >Bringing Nodes Back Up<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-prepare-a-kubernetes-node-for-maintenance\/#Summary\" >Summary<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"%E2%80%9CHow_to_Prepare_a_Kubernetes_Node_for_Maintenance%E2%80%9D\"><\/span>&#8220;How to Prepare a Kubernetes Node for Maintenance&#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-806255\" data-pagespeed-no-defer=\"\" src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2022\/05\/Kubernetes-New.jpg?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Graphic with the Kubernetes logo\" width=\"1202\" height=\"677\"\/><\/p>\n<p>Kubernetes Nodes need occasional maintenance. You could be updating the Node\u2019s kernel, resizing its compute resource in your cloud account, or replacing physical hardware components in a self-hosted installation.<\/p>\n<p>Kubernetes cordons and drains are two mechanisms you can use to safely prepare for Node downtime. They allow workloads running on a target Node to be rescheduled onto other ones. You can then shutdown the Node or remove it from your cluster without impacting service availability.<\/p>\n<h2 id=\"applying-a-node-cordon\"><span class=\"ez-toc-section\" id=\"Applying_a_Node_Cordon\"><\/span>Applying a Node Cordon<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Cordoning a Node marks it as unavailable to the Kubernetes scheduler. The Node will be ineligible to host any new Pods subsequently added to your cluster.<\/p>\n<p>Use the <code>kubectl cordon<\/code> command to place a cordon around a named Node:<\/p>\n<pre><code>$ kubectl cordon node-1&#13;\nnode\/node-1 cordoned<\/code><\/pre>\n<p>Existing Pods already running on the Node won\u2019t be affected by the cordon. They\u2019ll remain accessible and will still be hosted by the cordoned Node.<\/p>\n<p>You can check which of your Nodes are currently cordoned with the <code>get nodes<\/code> command:<\/p>\n<pre><code>$ kubectl get nodes&#13;\nNAME       STATUS                     ROLES                  AGE   VERSION&#13;\nnode-1     Ready,SchedulingDisabled   control-plane,master   26m   v1.23.3<\/code><\/pre>\n<p>Cordoned nodes <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>ear with the <code>SchedulingDisabled<\/code> status.<\/p>\n<h2 id=\"draining-a-node\"><span class=\"ez-toc-section\" id=\"Draining_a_Node\"><\/span>Draining a Node<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The next step is to drain remaining Pods out of the Node. This procedure will evict the Pods so they\u2019re rescheduled onto other Nodes in your cluster. Pods are allowed to <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod-lifecycle\/#pod-termination\">gracefully terminate<\/a> before they\u2019re forcefully removed from the target Node.<\/p>\n<p>Run <code>kubectl drain<\/code> to initiate a drain procedure. Specify the name of the Node you\u2019re taking out for maintenance:<\/p>\n<pre><code>$ kubectl drain node-1&#13;\nnode\/node-1 already cordoned&#13;\nevicting pod kube-system\/storage-provisioner&#13;\nevicting pod default\/nginx-7c658794b9-zszdd&#13;\nevicting pod kube-system\/coredns-64897985d-dp6lx&#13;\npod\/storage-provisioner evicted&#13;\npod\/nginx-7c658794b9-zszdd evicted&#13;\npod\/coredns-64897985d-dp6lx evicted&#13;\nnode\/node-1 evicted<\/code><\/pre>\n<p>The drain procedure first cordons the Node if you\u2019ve not already placed one manually. It will then evict running Kubernetes workloads by safely rescheduling them to other Nodes in your cluster.<\/p>\n<p>You can shutdown or destroy the Node once the drain\u2019s completed. You\u2019ve freed the Node from its responsibilities to your cluster. The cordon provides an assurance that no new workloads have been scheduled since the drain completed.<\/p>\n<h2 id=\"ignoring-pod-grace-periods\"><span class=\"ez-toc-section\" id=\"Ignoring_Pod_Grace_Periods\"><\/span>Ignoring Pod Grace Periods<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Drains can sometimes take a while to complete if your Pods have long grace periods. This might not be ideal when you need to urgently take a Node offline. Use the <code>--grace-period<\/code> flag to override Pod termination grace periods and force an im<a href=\"https:\/\/buradabiliyorum.com\/en\/category\/social-mediaa\/\" data-internallinksmanager029f6b8e52c=\"1\" title=\"Social Media\" target=\"_blank\" rel=\"noopener\">media<\/a>te eviction:<\/p>\n<pre><code>$ kubectl drain node-1 --grace-period 0<\/code><\/pre>\n<p>This should be used with care \u2013 some workloads might not respond well if they\u2019re stopped without being offered a chance to clean up.<\/p>\n<h2 id=\"solving-drain-errors\"><span class=\"ez-toc-section\" id=\"Solving_Drain_Errors\"><\/span>Solving Drain Errors<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Drains can sometimes result in an error depending on the types of Pod that exist in your cluster. Here are two common issues with their resolutions.<\/p>\n<h3 id=\"cannot-delete-pods-not-managed-by-replicationcontroller-replicaset-job-daemon-set-or-statefulset\"><span class=\"ez-toc-section\" id=\"1_%E2%80%9CCannot_delete_Pods_not_managed_by_ReplicationController_ReplicaSet_Job_or_StatefulSet%E2%80%9D\"><\/span>1. \u201cCannot delete Pods not managed by ReplicationController, ReplicaSet, Job, or StatefulSet\u201d<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>This message appears if the Node hosts Pods which aren\u2019t managed by a controller. It refers to Pods that have been created as standalone objects, where they\u2019re not part of a higher-level resource like a Deployment or ReplicaSet.<\/p>\n<p>Kubernetes can\u2019t automatically reschedule these \u201cbare\u201d Pods so evicting them will cause them to become unavailable. Either manually address these Pods before performing the drain or use the <code>--force<\/code> flag to permit their deletion:<\/p>\n<pre><code>$ kubectl drain node-1 --force<\/code><\/pre>\n<h3 id=\"cannot-delete-daemonset-managed-pods\"><span class=\"ez-toc-section\" id=\"2_%E2%80%9CCannot_Delete_DaemonSet-managed_Pods%E2%80%9D\"><\/span>2. \u201cCannot Delete DaemonSet-managed Pods\u201d<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pods that are part of daemon sets pose a challenge to evictions. DaemonSet controllers disregard the schedulable status of your Nodes. Deleting a Pod that\u2019s part of a DaemonSet will cause it to immediately return, even if you\u2019ve cordoned the Node. Drain operations consequently abort with an error to warn you about this behavior.<\/p>\n<p>You can proceed with the eviction by adding the <code>--ignore-daemonsets<\/code> flag. This will evict everything else while overlooking any DaemonSets that exist.<\/p>\n<pre><code>$ kubectl drain node-1 --ignore-daemonsets<\/code><\/pre>\n<p>You might need to use this flag even if you\u2019ve not created any DaemonSets yourself. Internal components within the <code>kube-system<\/code> namespace could be using DaemonSet resources.<\/p>\n<h2 id=\"minimizing-downtime-with-pod-disruption-budgets\"><span class=\"ez-toc-section\" id=\"Minimizing_Downtime_With_Pod_Disruption_Budgets\"><\/span>Minimizing Downtime With Pod Disruption Budgets<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Draining a Node doesn\u2019t guarantee your workloads will remain accessible throughout. Your other Nodes will need time to honor scheduling requests and create new containers.<\/p>\n<p>This can be particularly impactful if you\u2019re draining multiple Nodes in a short space of time. Draining the first Node could reschedule its Pods onto the second Node, which is itself then deleted.<\/p>\n<p><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/run-application\/configure-pdb\">Pod disruption budgets<\/a> are a mechanism for avoiding this situation. You can use them with Deployments, ReplicationControllers, ReplicaSets, and StatefulSets.<\/p>\n<p>Objects that are targeted by a Pod disruption budget are guaranteed to have a specific number of accessible Pods at any given time. Kubernetes will block Node drains that would cause the number of available Pods to fall too low.<\/p>\n<p>Here\u2019s an example of a <code>PodDisruptionBudget<\/code> YAML object:<\/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\"><span class=\"co3\">apiVersion<\/span><span class=\"sy2\">: <\/span>policy\/v1<span class=\"co3\">\nkind<\/span><span class=\"sy2\">: <\/span>PodDisruptionBudget<span class=\"co4\">\nmetadata<\/span>:<span class=\"co3\">\n  name<\/span><span class=\"sy2\">: <\/span>demo-pdb<span class=\"co4\">\nspec<\/span>:<span class=\"co3\">\n  minAvailable<\/span><span class=\"sy2\">: <\/span>4<span class=\"co4\">\n  selector<\/span>:<span class=\"co4\">\n    matchLabels<\/span>:<span class=\"co3\">\n      app<\/span><span class=\"sy2\">: <\/span>my-app<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>This policy requires there be at least four running Pods with the <code>app=my-app<\/code> label. Node drains that would cause only three Pods to be schedulable will be prevented.<\/p>\n<p>The level of disruption allowed is expressed as either the <code>maxUnavailable<\/code> or <code>minAvailable<\/code> field. Only one of these can exist in a single Pod Disruption Budget object. Each one accepts an absolute number of Pods or a percentage that\u2019s relative to the total number of Pods at full availability:<\/p>\n<ul>\n<li><code>minAvailable: 4<\/code> \u2013 Require at least four Pods to be available.<\/li>\n<li><code>maxUnavailable: 50%<\/code> \u2013 Allow up to half of the total number of Pods to be unavailable.<\/li>\n<\/ul>\n<h3 id=\"overriding-pod-disruption-budgets\"><span class=\"ez-toc-section\" id=\"Overriding_Pod_Disruption_Budgets\"><\/span>Overriding Pod Disruption Budgets<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pod disruption budgets are a mechanism that provide protection for your workloads. They shouldn\u2019t be overridden unless you must immediately shutdown a Node. The <code>drain<\/code> command\u2019s <code>--disable-eviction<\/code> flag provides a way to achieve this.<\/p>\n<pre><code>$ kubectl drain node-1 --disable-eviction<\/code><\/pre>\n<p>This circumvents the regular Pod eviction process. Pods will be directly <em>deleted<\/em> instead, ignoring any applied disruption budgets.<\/p>\n<h2 id=\"bringing-nodes-back-up\"><span class=\"ez-toc-section\" id=\"Bringing_Nodes_Back_Up\"><\/span>Bringing Nodes Back Up<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Once you\u2019ve completed your maintenance, you can power the Node back up to reconnect it to your cluster. You must then remove the cordon you created to mark the Node as schedulable again:<\/p>\n<pre><code>$ kubectl uncordon node-1&#13;\nnode\/node-1 uncordoned<\/code><\/pre>\n<p>Kubernetes will begin to allocate new workloads to the Node, returning it to active service.<\/p>\n<h2 id=\"summary\"><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Maintenance of Kubernetes Nodes shouldn\u2019t be attempted until you\u2019ve drained existing workloads and established a cordon. These measures help you avoid unexpected downtime when servicing actively used Nodes.<\/p>\n<p>Basic drains are often adequate if you\u2019ve got capacity in your cluster to immediately reschedule your workloads to other Nodes. Use Pod disruption budgets in situations where consistent availability must be guaranteed. They let you guard against unintentional downtime when multiple drains are commenced concurrently.<\/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\/cordons-and-drains-how-to-prepare-a-kubernetes-node-for-maintenance\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;How to Prepare a Kubernetes Node for Maintenance&#8221; Kubernetes Nodes need occasional maintenance. You could be updating the Node\u2019s kernel, resizing its compute resource in your cloud account, or replacing physical hardware components in a self-hosted installation. Kubernetes cordons and drains are two mechanisms you can use to safely prepare for Node downtime. They allow&#8230;<\/p>\n","protected":false},"author":1,"featured_media":482964,"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-New.jpg?height=200p&trim=2,2,2,2","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-482963","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\/482963","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=482963"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/482963\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/482964"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=482963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=482963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=482963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}