{"id":494717,"date":"2022-09-21T03:48:14","date_gmt":"2022-09-21T00:48:14","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/"},"modified":"2022-09-21T03:48:14","modified_gmt":"2022-09-21T00:48:14","slug":"how-to-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/","title":{"rendered":"#How to Migrate Away From Dockershim In Kubernetes v1.24 and Later"},"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-6a3ae8c223965\" 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-6a3ae8c223965\" 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-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/#%E2%80%9CHow_to_Migrate_Away_From_Dockershim_In_Kubernetes_v124_and_Later%E2%80%9D\" >&#8220;How to Migrate Away From Dockershim In Kubernetes v1.24 and Later&#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-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/#What_Was_Dockershim\" >What Was Dockershim?<\/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-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/#Checking_Whether_Youre_Using_Dockershim\" >Checking Whether You\u2019re Using Dockershim<\/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-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/#Changing_A_Nodes_Runtime\" >Changing A Node\u2019s Runtime<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/#Using_containerd\" >Using containerd<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/#Using_cri-dockerd\" >Using cri-dockerd<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-migrate-away-from-dockershim-in-kubernetes-v1-24-and-later\/#Conclusion\" >Conclusion<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"%E2%80%9CHow_to_Migrate_Away_From_Dockershim_In_Kubernetes_v124_and_Later%E2%80%9D\"><\/span>&#8220;How to Migrate Away From Dockershim In Kubernetes v1.24 and Later&#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><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/blog\/2022\/05\/03\/kubernetes-1-24-release-announcement\">Kubernetes v1.24 <\/a>and later releases ship without Dockershim after <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/blog\/2020\/12\/02\/dockershim-faq\/\">its deprecation<\/a> in December 2020\u2019s v1.20 release. Dockershim\u2019s no longer available as a built-in container runtime. You need to use a different <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/setup\/production-environment\/container-runtimes\">supported runtime<\/a> instead, such as containerd, CRI-O, or <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/setup\/production-environment\/container-runtimes\/#docker\">Docker Engine<\/a> with the <code>cri-dockerd<\/code> adapter.<\/p>\n<p>In this article, we\u2019ll show how to check whether you\u2019re affected, then explain how you can migrate to a different runtime. You should take these steps <em>before<\/em> you upgrade to Kubernetes v1.24 or a later version so your cluster\u2019s workloads aren\u2019t impacted.<\/p>\n<h2 id=\"what-was-dockershim\"><span class=\"ez-toc-section\" id=\"What_Was_Dockershim\"><\/span>What Was Dockershim?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Dockershim was developed as a necessary component so Kubernetes could support more container runtimes. At the start of the project, Kubernetes only worked with Docker Engine. This restriction was removed by the introduction of the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/blog\/2016\/12\/container-runtime-interface-cri-in-kubernetes\">CRI standard<\/a>. Any CRI-compatible runtime could now be used with Kubernetes, including containerd and <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/cri-o\/cri-o\">CRI-O<\/a>, an <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/opencontainers.org\">OCI<\/a> implementation of the standard.<\/p>\n<p>While CRI brought new flexibility to Kubernetes, it presented an issue for existing clusters. Docker lacked support for the CRI standard so Dockershim was built to let the Kubernetes team layer compatibility on top. Dockershim was a direct integration with Docker Engine that was always intended to be a temporary measure.<\/p>\n<p>The container movement is now much more than Docker, as the original Kubernetes push to CRI demonstrates. Docker itself has split into individual components with its runtime extracted as containerd, a graduate of the Cloud Native Computing Foundation (CNCF).<\/p>\n<p>containerd is fully supported by Kubernetes and more suited to standalone use in cloud environments. Kubernetes doesn\u2019t require the Docker CLI and its bevy of features to run your Pods; all it needs is the ability to start and run containers at a relatively low level. Dockershim has been removed because it was difficult to maintain. Its use created <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/blog\/2022\/01\/07\/kubernetes-is-moving-on-from-dockershim\">fragile code<\/a> that was tightly coupled to Docker Engine\u2019s implementation.<\/p>\n<h2 id=\"checking-whether-youre-using-dockershim\"><span class=\"ez-toc-section\" id=\"Checking_Whether_Youre_Using_Dockershim\"><\/span>Checking Whether You\u2019re Using Dockershim<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Recently created clusters on modern platforms are highly unlikely to be using Dockershim. This includes clusters managed by popular cloud providers such as Amazon EKS, Azure AKS, Google GKE, and DigitalOcean DOKS.<\/p>\n<p>You\u2019re most likely to need to take action if you maintain your own cluster and first set it up several years ago. You can check whether you\u2019re using Dockershim as the runtime for any of your Nodes by running this Kubectl command:<\/p>\n<pre>$ kubectl get nodes -o wide&#13;\nNAME    STATUS  VERSION     CONTAINER-RUNTIME&#13;\nnode-1  Ready   v1.22.8     docker:\/\/19.3.1&#13;\nnode-2  Ready   v1.22.8     containerd:\/\/1.4.13<\/pre>\n<p>In this example, one of the nodes is using containerd and can be left as-is. The other node is configured using Docker and could be affected by the Dockershim removal. You can check by running this command on the Node:<\/p>\n<pre>$ tr \\\\0 ' ' &lt; \/proc\/\"$(pgrep kubelet)\"\/cmdline | grep \"\\-\\-container\\-runtime\"<\/pre>\n<p>Your Node is using Dockershim to run containers if no output\u2019s displayed. If you do get some output, inspect the displayed <code>--container-runtime-endpoint<\/code> flag value to determine if Dockershim is active. A runtime endpoint of <code>unix:\/\/\/run\/containerd\/containerd.sock<\/code> signals containerd is used, so no migration is necessary.<\/p>\n<h2 id=\"changing-a-nodes-runtime\"><span class=\"ez-toc-section\" id=\"Changing_A_Nodes_Runtime\"><\/span>Changing A Node\u2019s Runtime<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nodes that are using Dockershim need to be updated to <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/migrating-from-dockershim\/change-runtime-containerd\">use a different runtime<\/a>. First drain the Node\u2019s workloads using Kubectl, so your Pods are rescheduled to other Nodes in your cluster. You should cordon the Node too to stop any new Pods being scheduled.<\/p>\n<pre>$ kubectl cordon node-1&#13;\n$ kubectl drain node-1 --ignore-daemonsets<\/pre>\n<p>Next run the following commands on the Node itself. Begin by stopping the Docker daemon and the Node\u2019s Kubelet worker process:<\/p>\n<pre>$ systemctl stop kubelet&#13;\n$ systemctl disable docker.service --now<\/pre>\n<p>Now you can install your new runtime.<\/p>\n<h3 id=\"using-containerd\"><span class=\"ez-toc-section\" id=\"Using_containerd\"><\/span>Using containerd<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>containerd is <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/general\/\" data-internallinksmanager029f6b8e52c=\"3\" title=\"General\" target=\"_blank\" rel=\"noopener\">general<\/a>ly the preferred solution for current clusters. You should be able to migrate to containerd if you\u2019re not relying on specific features of Docker Engine. If you are, head to the following section and install <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/Mirantis\/cri-dockerd\">cri-dockerd<\/a> instead.<\/p>\n<p>Add Docker\u2019s repository to your system if your package lists don\u2019t already include it. containerd is distributed in Docker\u2019s repository.<\/p>\n<pre>$ sudo apt-get update&#13;\n$ sudo apt-get install ca-certificates curl gnupg lsb-release&#13;\n$ curl -fsSL https:\/\/<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\">download<\/a>.docker.com\/linux\/debian\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg&#13;\n$ echo \\&#13;\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/debian \\&#13;\n  $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null<\/pre>\n<p>Install containerd:<\/p>\n<pre>$ sudo apt update&#13;\n$ sudo apt install containerd<\/pre>\n<p>Now update the Node\u2019s Kubelet configuration file to use the new runtime. Open <code>\/var\/lib\/kubelet\/kubeadm-flags.env<\/code>. Look for or add the <code>--container-runtime<\/code> and <code>--container-runtime-endpoint<\/code> flags with the following values:<\/p>\n<ul>\n<li><code>--container-runtime=remote<\/code><\/li>\n<li><code>--container-runtime-endpoint=unix:\/\/\/run\/containerd\/containerd.sock<\/code><\/li>\n<\/ul>\n<p>Next change the socket annotation saved against the Node object in the Kubernetes control plane:<\/p>\n<pre>$ kubectl edit node node-1<\/pre>\n<p>In the file that opens, find the <code>kubeadm.alpha.kubernetes.io\/cri-socket<\/code> annotation and change it to <code>unix:\/\/\/run\/containerd\/containerd.sock<\/code>. Save and close the file to update the Node\u2019s object.<\/p>\n<p>Now restart Kubelet:<\/p>\n<pre>$ systemctl start kubelet<\/pre>\n<p>Allow the Node a few moments to start and connect to the Kubernetes control plane. You should be able to repeat the <code>get nodes<\/code> command and see that containerd is now being used.<\/p>\n<pre>$ kubectl get nodes -o wide&#13;\nNAME    STATUS  VERSION     CONTAINER-RUNTIME&#13;\nnode-1  Ready   v1.22.8     containerd:\/\/1.4.13&#13;\nnode-2  Ready   v1.22.8     containerd:\/\/1.4.13<\/pre>\n<p>Finally remove the cordon you placed around the Node so it can begin to receive Pods:<\/p>\n<pre>$ kubectl uncordon node-1<\/pre>\n<h3 id=\"using-cri-dockerd\"><span class=\"ez-toc-section\" id=\"Using_cri-dockerd\"><\/span>Using cri-dockerd<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/Mirantis\/cri-dockerd\">cri-dockerd<\/a> is a runtime jointly developed by Docker and Mirantis. It\u2019s effectively a standalone version of Dockershim that\u2019s independently maintained. It allows you to keep using familiar functionality without encumbering the Kubernetes project with Dockershim\u2019s maintenance requirements.<\/p>\n<p>Make sure you\u2019ve already got Docker Engine installed. Then install cri-dockerd by downloading the latest binary from GitHub releases:<\/p>\n<pre>$ wget https:\/\/github.com\/Mirantis\/cri-dockerd\/releases\/download\/v0.2.0\/cri-dockerd-v0.2.0-linux-amd64.tar.gz&#13;\n$ tar xvf cri-dockerd-v0.2.0-linux-amd64.tar.gz&#13;\n$ mv cri-dockerd \/usr\/local\/bin\/<\/pre>\n<p>Next download, install, and enable cri-dockerd\u2019s systemd service configurations:<\/p>\n<pre>wget https:\/\/raw.githubusercontent.com\/Mirantis\/cri-dockerd\/master\/packaging\/systemd\/cri-docker.service&#13;\nwget https:\/\/raw.githubusercontent.com\/Mirantis\/cri-dockerd\/master\/packaging\/systemd\/cri-docker.socket&#13;\nsudo mv cri-docker.socket cri-docker.service \/etc\/systemd\/system\/&#13;\nsudo sed -i -e 's,\/usr\/bin\/cri-dockerd,\/usr\/local\/bin\/cri-dockerd,' \/etc\/systemd\/system\/cri-docker.service&#13;\n&#13;\nsudo systemctl daemon-reload&#13;\nsudo systemctl enable cri-docker.service&#13;\nsudo systemctl enable --now cri-docker.socket<\/pre>\n<p>Now you can modify your Node\u2019s Kubelet configuration to use cri-dockerd. This is similar to configuring a Node to use containerd.<\/p>\n<p>Open <code>\/var\/lib\/kubelet\/kubeadm-flags.env<\/code>. Look for or add the <code>--container-runtime<\/code> and <code>--container-runtime-endpoint<\/code> flags with the following values:<\/p>\n<ul>\n<li><code>--container-runtime=remote<\/code><\/li>\n<li><code>--container-runtime-endpoint=unix:\/\/\/var\/run\/cri-dockerd.sock<\/code><\/li>\n<\/ul>\n<p>Next change the Node object\u2019s socket annotation:<\/p>\n<pre>$ kubectl edit node node-1<\/pre>\n<p>In the file that opens, find the <code>kubeadm.alpha.kubernetes.io\/cri-socket<\/code> annotation and change it to <code>unix:\/\/\/var\/run\/cri-dockerd.sock<\/code>. Save and close the file to update the Node\u2019s object.<\/p>\n<p>Now restart Kubelet:<\/p>\n<pre>$ systemctl start kubelet<\/pre>\n<p>Wait a few moments and then use Kubectl to check the Node is up. It will still show the Docker runtime but it\u2019s now based on the standalone cri-dockerd, instead of the Dockershim that\u2019s integrated with Kubernetes.<\/p>\n<pre>$ kubectl get nodes -o wide&#13;\nNAME    STATUS  VERSION     CONTAINER-RUNTIME&#13;\nnode-1  Ready   v1.22.8     docker:\/\/19.3.1&#13;\nnode-2  Ready   v1.22.8     containerd:\/\/1.4.13<\/pre>\n<p>You can now remove the cordon you placed around the Node. It will start to accept Pod scheduling requests again.<\/p>\n<pre>$ kubectl uncordon node-1<\/pre>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Kubernetes v1.24 removed the Dockershim component that previously integrated CRI compatibility for Docker Engine. While most recent clusters will be unaffected, you should check whether you\u2019re using Dockershim before upgrading to the new release.<\/p>\n<p>The runtime to switch to depends on how you currently use your cluster. containerd is usually a good choice if you\u2019re not using Docker features. You can use cri-dockerd to bring back Dockershim-like integration if you need to maintain compatibility with existing tooling that\u2019s reliant on Docker Engine. This also helps <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/kubernetes.io\/blog\/2022\/02\/17\/dockershim-faq\/#what-should-i-look-out-for-when-changing-cri-implementations\">if you\u2019re mounting<\/a> the Docker daemon socket (<code>\/var\/run\/docker.sock<\/code>) into your containers to power Docker-in-Docker workflows.<\/p>\n<p>Dockershim\u2019s removal doesn\u2019t impact how you build and use container images. Kubernetes can still run images created with <code>docker build<\/code> and they\u2019re compatible with all supported runtimes. CRI runtimes work with any OCI-format image, as output by Docker and other image builders.<\/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\/kubernetes-v1.24-how-to-migrate-away-from-dockershim\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;How to Migrate Away From Dockershim In Kubernetes v1.24 and Later&#8221; Kubernetes v1.24 and later releases ship without Dockershim after its deprecation in December 2020\u2019s v1.20 release. Dockershim\u2019s no longer available as a built-in container runtime. You need to use a different supported runtime instead, such as containerd, CRI-O, or Docker Engine with the cri-dockerd&#8230;<\/p>\n","protected":false},"author":1,"featured_media":494718,"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-494717","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\/494717","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=494717"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/494717\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/494718"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=494717"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=494717"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=494717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}