{"id":38648,"date":"2019-10-31T22:25:04","date_gmt":"2019-10-31T19:25:04","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kratkoe-vvedenie-v-kustomize\/"},"modified":"2019-10-31T22:25:04","modified_gmt":"2019-10-31T19:25:04","slug":"kratkoe-vvedenie-v-kustomize","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kratkoe-vvedenie-v-kustomize","title":{"rendered":"A brief introduction to Kustomize","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Note: translation.<\/b>: The article was written by Scott Lowe \u2014 a seasoned IT engineer and author\/co-author of seven published books (primarily on VMware vSphere). He currently works for its subsidiary VMware \u2014 Heptio (acquired in 2016), specializing in cloud computing and Kubernetes. The text serves as a concise and easy-to-understand introduction to managing configurations for Kubernetes using technology <noindex><a rel=\"nofollow\" href=\"https:\/\/kustomize.io\/\">Kustomize<\/a><\/noindex>, recently integrated into K8s.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"A brief introduction to Kustomize\" src=\"\/wp-content\/uploads\/2019\/10\/099d2281c06d7a294532a816bb6aab21.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKustomize is a tool that allows users to \"customize simple and template-free YAML files for various purposes, leaving the original YAML untouched and reusable\" (description borrowed directly from <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kustomize\">the kustomize repository on GitHub<\/a><\/noindex>). Kustomize can be run directly or, starting with Kubernetes 1.14, utilized through <code>kubectl -k<\/code> to access its features (though as of Kubernetes 1.15, a separate binary is newer than the capabilities built into kubectl). <i>(<b>Note: translation.<\/b>: With the recent release of <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/467477\/\">Kubernetes 1.16<\/a><\/noindex> kustomize <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/1177\">is supported<\/a><\/noindex> , it is also available in the kubeadm utility.)<\/i> In this publication, I want to introduce readers to the basics of kustomize.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>In its simplest form\/application, kustomize is just a set of resources (YAML files that define Kubernetes objects: Deployments, Services, etc.) plus a list of instructions for changes to be made to these resources. Similar to how make uses a set of instructions contained in <code>Makefile<\/code>, and Docker builds a container based on instructions from <code>Dockerfile<\/code>, kustomize uses <code>kustomization.yaml<\/code> to store directives on what changes the user wants to apply to the resource set.<\/p>\n<p>Here is an example file <code>kustomization.yaml<\/code>:<\/p>\n<pre><code class=\"plaintext\">resources:\n- deployment.yaml\n- service.yaml\nnamePrefix: dev-\nnamespace: development\ncommonLabels:\n  environment: development<\/code><\/pre>\n<p>\nI won\u2019t attempt to cover all possible fields in the file <code>kustomization.yaml<\/code> (this is well addressed in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kustomize\/blob\/master\/docs\/fields.md\">here<\/a><\/noindex>), but I will provide a brief explanation of a specific example:<\/p>\n<ul>\n<li> Field <code>resources<\/code> indicates which resources kustomize will change. In this case, it will look for resources in the files <code>deployment.yaml<\/code> and <code>service.yaml<\/code> in its directory (full or relative paths can be specified if necessary).<\/li>\n<li> Field <code>namePrefix<\/code> requires kustomize to add a specific prefix (in this case \u2014 <code>dev-<\/code>) to the attribute <code>name<\/code> of all resources defined in the field <code>resources<\/code>. Thus, if the Deployment contains <code>name<\/code> with the value <code>nginx-deployment<\/code>, kustomize will turn it into <code>dev-nginx-deployment<\/code>.<\/li>\n<li> Field <code>namespace<\/code> requires kustomize to add a specified namespace to all resources. In this case, the Deployment and Service will be placed in the namespace <code>development<\/code>.<\/li>\n<li> Finally, the field <code>commonLabels<\/code> contains a set of labels that will be added to all resources. In our example, kustomize will assign a label named <code>environment<\/code> and value <code>development<\/code>.<\/li>\n<\/ul>\n<p>\nIf the user executes <code>kustomize build .<\/code> in the directory with the file <code>kustomization.yaml<\/code> and the necessary resources (i.e., files <code>deployment.yaml<\/code> and <code>service.yaml<\/code>), they will receive output with the changes specified in <code>kustomization.yaml<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"A brief introduction to Kustomize\" src=\"\/wp-content\/uploads\/2019\/10\/f15c7ccb5f200c7e9b5a25142c364cb8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i><b>Note: translation.<\/b>: An illustration from the project documentation on the 'simple' use of kustomize<\/i><\/p>\n<p>The output can be redirected if it is necessary to save changes:<\/p>\n<pre><code class=\"bash\">kustomize build . &gt; custom-config.yaml<\/code><\/pre>\n<p>\nThe output data is deterministic (the same input will yield the same results each time), so there is no need to save the result to a file. Instead, it can be directly piped into another command:<\/p>\n<pre><code class=\"bash\">kustomize build . | kubectl apply -f -<\/code><\/pre>\n<p>\nAccess to kustomize features can also be obtained via <code>kubectl -k<\/code> (starting with Kubernetes version 1.14). However, keep in mind that the standalone kustomize package updates faster than the integrated one in kubectl (at least, this is the case with Kubernetes release 1.15).<\/p>\n<p>Readers may ask: 'Why all these complexities when you can edit the files directly?'. Great question. In our example, it is indeed <i>in<\/i> possible to modify files <code>deployment.yaml<\/code> and <code>service.yaml<\/code> directly, but what if they are a fork of someone else's project? Directly altering the files complicates (if not outright prevents) the rebase of the fork when changes are made to the source. Using kustomize allows you to centralize these changes in the file <code>kustomization.yaml<\/code>, keeping the original files intact and thus making it easier to rebase the original files if necessary.<\/p>\n<p>The advantages of kustomize become evident in more complex use cases. In the example above, <code>kustomization.yaml<\/code> the resources are in the same directory. However, kustomize supports use cases where you have a base configuration and many variations of it, also known as <i>overlays<\/i>. For example, a user may want to take the Deployment and Service for nginx, which I used as an example, and create development, staging, and production versions (or variants) of those files. For this, they will need the overlays mentioned above and the base resources themselves.<\/p>\n<p>To illustrate the idea of overlays and base resources <i>(base resources)<\/i>, let's assume the directories have the following structure:<\/p>\n<pre><code class=\"plaintext\">- base\n  - deployment.yaml\n  - service.yaml\n  - kustomization.yaml\n- overlays\n  - dev\n    - kustomization.yaml\n  - staging\n    - kustomization.yaml\n  - prod\n    - kustomization.yaml<\/code><\/pre>\n<p>\nIn the file <code>base\/kustomization.yaml<\/code> users by the field <code>resources<\/code> simply declare the resources that should be included by kustomize.<\/p>\n<p>In each of the files <code>overlays\/{dev,staging,prod}\/kustomization.yaml<\/code> users reference the base configuration in the field <code>resources<\/code>, and then specify the specific changes for <i>that environment<\/i>. For example, the file <code>overlays\/dev\/kustomization.yaml<\/code> might look like the example given earlier:<\/p>\n<pre><code class=\"plaintext\">resources:\n- ..\/..\/\/base\nnamePrefix: dev-\nnamespace: development\ncommonLabels:\n  environment: development<\/code><\/pre>\n<p>\nMeanwhile, the file <code>overlays\/prod\/kustomization.yaml<\/code> might be completely different:<\/p>\n<pre><code class=\"plaintext\">resources:\n- ..\/..\/\/base\nnamePrefix: prod-\nnamespace: production\ncommonLabels:\n  environment: production\n  sre-team: blue<\/code><\/pre>\n<p>\nWhen the user runs <code>kustomize build .<\/code> in the directory <code>overlays\/dev<\/code>, kustomize will generate the development variant. If you run <code>kustomize build .<\/code> in the directory <code>overlays\/prod<\/code> , you'll get the production variant. And all of this is done without making any changes to the original <i>(base)<\/i> files, and all of this is done in a declarative and deterministic way. You can commit the base configuration and overlay directories directly into version control, knowing that based on these files, you can reproduce the needed configuration at any moment.<\/p>\n<p><img decoding=\"async\" alt=\"A brief introduction to Kustomize\" src=\"\/wp-content\/uploads\/2019\/10\/959af6422f6ae4c1b8d755e9c5728d38.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i><b>Note: translation.<\/b>: Illustration from the project documentation on using overlays in kustomize<\/i><\/p>\n<p>Kustomize can do <i>much<\/i> more than what has been described in this article. However, I hope it serves as a good introduction.<\/p>\n<h2>Additional resources<\/h2>\n<p>\nThere are many good articles and publications about kustomize. Here are a few that I found particularly useful:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/levelup.gitconnected.com\/kubernetes-change-base-yaml-config-for-different-environments-prod-test-6224bfb6cdd6\">Change base YAML config for different environments prod\/test using Kustomize<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.stack-labs.com\/code\/kustomize-101\/\">Kustomize \u2014 The right way to do templating in Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/manage-kubernetes-objects\/kustomization\/\">Declarative Management of Kubernetes Objects Using Kustomize<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/testingclouds.wordpress.com\/2018\/07\/20\/844\/\">Customizing Upstream Helm Charts with Kustomize<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\n<i><b>Note: translation.<\/b>: You can also check out the link block published as <noindex><a rel=\"nofollow\" href=\"https:\/\/kustomize.io\/#resources\">Resources<\/a><\/noindex> on the utility's website, followed by a collection of videos with the latest talks about kustomize.<\/i><\/p>\n<p>If you have any questions or suggestions for improving this material, I am always open to feedback. You can contact me in the <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/scott_lowe\">Twitter<\/a><\/noindex> or in <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.slack.com\/\">Kubernetes Slack channel.<\/a><\/noindex>Enjoy modifying your manifests with kustomize!<\/p>\n<h2>P.S. from the translator<\/h2>\n<p>\nAlso read in our blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/462707\/\">Tools for application developers running in Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">Kubernetes 1.13: an overview of major innovations<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/468259\/\">Five Key Takeaways from Helm Summit 2019 in Amsterdam<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420437\/\">A practical introduction to the package manager for Kubernetes \u2014 Helm<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/469179\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0421\u0442\u0430\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043b Scott Lowe \u2014 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0430\u0436\u0435\u043c \u0432 \u0418\u0422, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u043c\/\u0441\u043e\u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u043c\u0438 \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0445 \u043a\u043d\u0438\u0433 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e VMware vSphere). \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0435\u0451 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 VMware \u2014 Heptio (\u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d\u0430 \u0432 2016 \u0433\u043e\u0434\u0443), \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445 \u0438 Kubernetes. \u0421\u0430\u043c \u0436\u0435 \u0442\u0435\u043a\u0441\u0442 \u0441\u043b\u0443\u0436\u0438\u0442 \u0451\u043c\u043a\u0438\u043c \u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28991,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0421\u0442\u0430\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043b Scott Lowe \u2014 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0430\u0436\u0435\u043c \u0432 \u0418\u0422, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u043c\/\u0441\u043e\u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u043c\u0438 \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0445 \u043a\u043d\u0438\u0433 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e VMware vSphere).\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kratkoe-vvedenie-v-kustomize\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Kustomize | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0421\u0442\u0430\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043b Scott Lowe \u2014 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0430\u0436\u0435\u043c \u0432 \u0418\u0422, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u043c\/\u0441\u043e\u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u043c\u0438 \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0445 \u043a\u043d\u0438\u0433 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e VMware vSphere).\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kratkoe-vvedenie-v-kustomize\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:25:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:25:04+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Brief Introduction to Kustomize | ProHoster","description":"Translator's Note: The article was written by Scott Lowe \u2014 an experienced IT engineer who is the author\/co-author of seven printed books (mostly on VMware vSphere).","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kratkoe-vvedenie-v-kustomize","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Kustomize | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0421\u0442\u0430\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043b Scott Lowe \u2014 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0430\u0436\u0435\u043c \u0432 \u0418\u0422, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u043c\/\u0441\u043e\u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u043c\u0438 \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0445 \u043a\u043d\u0438\u0433 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e VMware vSphere).","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kratkoe-vvedenie-v-kustomize","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:25:04+00:00","article:modified_time":"2019-10-31T19:25:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38648","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 22:54:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:05:23","updated":"2026-01-23 22:54:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=38648"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/38648\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/28991"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=38648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=38648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=38648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}