{"id":218,"date":"2019-03-18T18:03:29","date_gmt":"2019-03-18T17:03:29","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/kubinception-using-kubernetes-to-run-kubernetes\/"},"modified":"2020-02-14T10:32:52","modified_gmt":"2020-02-14T09:32:52","slug":"kubinception-using-kubernetes-to-run-kubernetes","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/","title":{"rendered":"Kubinception: using Kubernetes to run Kubernetes"},"content":{"rendered":"<p>This article written by Horacio Gonz\u00e1lez was originally published on <a href=\"https:\/\/www.ovh.com\/fr\/blog\/kubinception-using-kubernetes-to-run-kubernetes\/\" target=\"_blank\" rel=\"noopener noreferrer\">OVH Blog<\/a>.<\/p>\n<p><q>When faced with the challenge of building a managed Kubernetes service at OVH, fully based on open-source tools, we had to take some tough design decisions. Today we review one of them\u2026<\/q><\/p>\n<p><a style=\"width: 300px; height: 110px;\" href=\"https:\/\/www.ovh.com\/fr\/blog\/kubinception-using-kubernetes-to-run-kubernetes\/\"><img decoding=\"async\" class=\"aligncenter wp-image-2474 size-full\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/kubinception-header-768x358.jpg\" alt=\"\"><\/a><\/p>\n<p>One of the most structural choices we made while building <a href=\"https:\/\/www.ovh.com\/fr\/kubernetes\/\" target=\"_blank\" rel=\"noopener noreferrer\">OVH Managed Kubernetes<\/a> service was to deploy our customers\u2019 clusters over our own ones. <strong>Kubinception<\/strong> indeed\u2026<\/p>\n<p>In this post we are relating our experience running Kubernetes over Kubernetes, with hundreds of customers\u2019 clusters. Why did we choose this architecture? What are the main stakes with such a design? What problems did we encounter? How did we deal with those issues? And, even more important, if we had to take the decision today, would we choose again to do the Kubinception?<\/p>\n<h2>How does a Kubernetes cluster work?<\/h2>\n<p>To fully understand why we run Kubernetes on Kubernetes, we need at least a basic understanding of how a Kubernetes cluster works. <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/\" target=\"_blank\" rel=\"noopener noreferrer\">A full explanation on this topic<\/a> is out of the context of this post, but let\u2019s do a quick summary:<\/p>\n<p>A working Kubernetes cluster is composed of:<\/p>\n<ul>\n<li>A <strong>control plane<\/strong> that makes global decisions about the cluster, and detects and responds to cluster events. This control plane is composed of several <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/overview\/components\/#master-components\" target=\"_blank\" rel=\"noopener noreferrer\">master components<\/a>.<\/li>\n<li>A set of <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/architecture\/nodes\/\" target=\"_blank\" rel=\"noopener noreferrer\">nodes<\/a>, worker instances containing the services necessary to run <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod\/\" target=\"_blank\" rel=\"noopener noreferrer\">pods<\/a>, with some node components running on every node, maintaining running pods and providing the Kubernetes runtime environment.<\/li>\n<\/ul>\n<p><a style=\"width: 300px; height: 110px;\" href=\"https:\/\/www.ovh.com\/fr\/blog\/kubinception-using-kubernetes-to-run-kubernetes\/\"><img decoding=\"async\" class=\"aligncenter wp-image-2474 size-full\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/1_SBeqRVXUkpAV1vB65yJ3Hg.png\" alt=\"\"><\/a><br \/>\n<em>Simplified Kubernetes architecture<\/em><\/p>\n<h2>Master components<\/h2>\n<p>In this category of components we have:<\/p>\n<ul>\n<li><strong>API Server<\/strong>: exposes the Kubernetes API. It is the entry-point for the Kubernetes control plane.<\/li>\n<li><strong>Scheduler<\/strong>: watches newly created pods and selects a node for them to run on, managing ressource allocation.<\/li>\n<li><strong>Controller-manager<\/strong>: run controllers, control loops that watch the state of the cluster and move it towards the desired state.<\/li>\n<li><strong>ETCD<\/strong>: Consistent and highly-available key value store used as Kubernetes\u2019 backing store for all cluster data. This topic deserves its own blog post, so we speaking about it in the coming weeks.<\/li>\n<\/ul>\n<h2>Node components<\/h2>\n<p>In every node we have:<\/p>\n<ul>\n<li><strong>Kubelet<\/strong>: agent that makes sure that containers described in PodSpecs are running and healthy. It\u2019s the link between the node and the control plane.<\/li>\n<li><strong>Kube-proxy<\/strong>: network proxy running in each node, enabling the Kubernetes service abstraction by maintaining network rules and performing connection forwarding.<\/li>\n<\/ul>\n<h2>Our goal: quick and painless cluster deployment<\/h2>\n<p>How come did we go from this that simple Kubernetes architecture to a Kubernetes over Kubernetes one? The answer lies on one of our our main goals building OVH Managed Kubernetes service: to be able to <strong>deploy clusters<\/strong> in the <strong>simplest<\/strong> and most <strong>automated<\/strong> way.<\/p>\n<p>And we didn\u2019t only want to deploy clusters, we wanted the deployed clusters to be:<\/p>\n<ul>\n<li>Resilient<\/li>\n<li>Isolated<\/li>\n<li>Cost-optimized<\/li>\n<\/ul>\n<h2>Kubinception: running Kubernetes over Kubernetes<\/h2>\n<p>The idea is to use a Kubernetes cluster we are calling admin cluster to deploy customer clusters.<\/p>\n<p>As every Kubernetes cluster, the customer clusters have a set of nodes and a control plane, composed of several master components (API server, scheduler\u2026).<\/p>\n<p>What we are doing is to <strong>deploy<\/strong> those customer cluster <strong>master components as pods<\/strong> in the admin cluster nodes.<\/p>\n<p><a style=\"width: 300px; height: 110px;\" href=\"https:\/\/www.ovh.com\/fr\/blog\/kubinception-using-kubernetes-to-run-kubernetes\/\"><img decoding=\"async\" class=\"aligncenter wp-image-2474 size-full\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/1_pFziI2YQgKEYx2qLWP68ww.png\" alt=\"\"><\/a><br \/>\n<em>Simplified Kubinception architecture<\/em><\/p>\n<p>So now we have the stateless components of the customer cluster control plane running as pods in the admin cluster nodes. We haven\u2019t spoken about the ETCD, as we will speak about it in a next post, for the moment let\u2019s only say that is it a dedicated component, living outside Kubernetes.<\/p>\n<p>And the customer cluster worker nodes? They are normal Kubernetes nodes: OVH public cloud instances connecting to the customer cluster API server running in an admin cluster pod.<\/p>\n<p><a style=\"width: 300px; height: 110px;\" href=\"https:\/\/www.ovh.com\/fr\/blog\/kubinception-using-kubernetes-to-run-kubernetes\/\"><img decoding=\"async\" class=\"aligncenter wp-image-2474 size-full\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/1_SqJhBXovAor41w3kTwu9rQ.png\" alt=\"\"><\/a><br \/>\n<em>Customer cluster with nodes and ETCD<\/em><\/p>\n<p>Our goal is to manage lots of cluster, not only one, so how can we add another customer cluster? As you could expect, we deploy the new customer cluster control plane on the admin cluster nodes.<\/p>\n<p><a style=\"width: 300px; height: 110px;\" href=\"https:\/\/www.ovh.com\/fr\/blog\/kubinception-using-kubernetes-to-run-kubernetes\/\"><img decoding=\"async\" class=\"aligncenter wp-image-2474 size-full\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/1_VJG5LJUK8Ou3MLYlsx3u5g.png\" alt=\"\"><\/a><br \/>\n<em>Two customer clusters on Kubinception<\/em><\/p>\n<p>From the admin cluster point of view, we have simple deployed three new pods. Then we spawn some new node instances and connect an ETCD and the cluster is up.<\/p>\n<h2>If something can fail, it will do it<\/h2>\n<p>We have now an architecture that allows us to quickly deploy new clusters, but if we go back to our goal, quickly deployment was only half of it, we wanted the cluster to be <strong>resilient<\/strong>. Let\u2019s begin with the resiliency.<\/p>\n<p>The customer cluster nodes are already resilient, as they are <strong>vanilla Kubernetes nodes<\/strong>, and the ETCD resiliency will be detailed in a specific blog post, so let\u2019s see the control plane resiliency, as it\u2019s the specific part of our architecture.<\/p>\n<p>And that\u2019s the beauty of the Kubinception architecture, we are deploying the customer clusters <strong>control plane<\/strong> as simple, standard, vanilla <strong>pods<\/strong> in our admin cluster. And that means they are as resilient as any other Kubernetes pod: if one of the customer cluster master components goes down, the controller-manager of the admin cluster will detect it and the pod will be rescheduled and redeployed, without any manual action on our side.<\/p>\n<h2>What a better way to be sure that our Kubernetes is solid enough\u2026<\/h2>\n<p>Basing our Managed Kubernetes service on Kubernetes made us to stumble on facets of Kubernetes we hadn\u2019t found before, to learn lots of things about installing, deploying and operating Kubernetes. And all those knowledge and tooling was <strong>directly applied<\/strong> to our customers clusters, making the experience better for everybody.<\/p>\n<h2>And what about scaling<\/h2>\n<p>The whole system has been designed from the ground up with this idea of scaling The Kubernetes over Kubernetes architecture allows easy <strong>horizontal scaling<\/strong>. When an admin cluster begins to get too big, we can simply spawn a new one and deploy there the next customer control planes.<\/p>\n<h2>What\u2019s next?<\/h2>\n<p>As this post is already long enough, so I leave the explanation on the <strong>ETCD<\/strong> for the next post in the series, in two weeks.<\/p>\n<p>Next week let\u2019s focus on another topic, we will deal with <a href=\"https:\/\/flink.apache.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Apache Flink<\/a> and how do we use it for handling alerts at OVH-scale\u2026<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article written by Horacio Gonz\u00e1lez was originally published on OVH Blog. When faced with the challenge of building a managed Kubernetes service at OVH, fully based on open-source tools, we had to take some tough design decisions. Today we review one of them\u2026 One of the most structural choices we made while building OVH&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\">Read more<\/a><\/p>\n","protected":false},"author":64,"featured_media":219,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[36],"tags":[56],"collections":[],"class_list":{"0":"post-218","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend","8":"tag-kubernetes","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Kubinception: using Kubernetes to run Kubernetes - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\" \/>\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.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubinception: using Kubernetes to run Kubernetes\" \/>\n<meta property=\"og:description\" content=\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-18T17:03:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-14T09:32:52+00:00\" \/>\n<meta name=\"author\" content=\"Codemotion\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Codemotion\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\"},\"author\":{\"name\":\"Codemotion\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c\"},\"headline\":\"Kubinception: using Kubernetes to run Kubernetes\",\"datePublished\":\"2019-03-18T17:03:29+00:00\",\"dateModified\":\"2020-02-14T09:32:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\"},\"wordCount\":1029,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg\",\"keywords\":[\"Kubernetes\"],\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\",\"name\":\"Kubinception: using Kubernetes to run Kubernetes - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg\",\"datePublished\":\"2019-03-18T17:03:29+00:00\",\"dateModified\":\"2020-02-14T09:32:52+00:00\",\"description\":\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg\",\"width\":1200,\"height\":558},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/backend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Kubinception: using Kubernetes to run Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c\",\"name\":\"Codemotion\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png\",\"caption\":\"Codemotion\"},\"description\":\"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.\",\"sameAs\":[\"https:\/\/x.com\/CodemotionIT\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubinception: using Kubernetes to run Kubernetes - Codemotion Magazine","description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","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.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/","og_locale":"en_US","og_type":"article","og_title":"Kubinception: using Kubernetes to run Kubernetes","og_description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","og_url":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2019-03-18T17:03:29+00:00","article_modified_time":"2020-02-14T09:32:52+00:00","author":"Codemotion","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Codemotion","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/"},"author":{"name":"Codemotion","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c"},"headline":"Kubinception: using Kubernetes to run Kubernetes","datePublished":"2019-03-18T17:03:29+00:00","dateModified":"2020-02-14T09:32:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/"},"wordCount":1029,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg","keywords":["Kubernetes"],"articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/","url":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/","name":"Kubinception: using Kubernetes to run Kubernetes - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg","datePublished":"2019-03-18T17:03:29+00:00","dateModified":"2020-02-14T09:32:52+00:00","description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg","width":1200,"height":558},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/kubinception-using-kubernetes-to-run-kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/backend\/"},{"@type":"ListItem","position":3,"name":"Kubinception: using Kubernetes to run Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c","name":"Codemotion","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","caption":"Codemotion"},"description":"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.","sameAs":["https:\/\/x.com\/CodemotionIT"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-600x558.jpg","author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg",1200,558,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-300x140.jpg",300,140,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-768x357.jpg",768,357,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-1024x476.jpg",1024,476,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg",1200,558,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg",1200,558,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1.jpg",100,47,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/DyBGI7jX0AIlloT-1-600x558.jpg",600,558,true]},"uagb_author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_comment_info":0,"uagb_excerpt":"This article written by Horacio Gonz\u00e1lez was originally published on OVH Blog. When faced with the challenge of building a managed Kubernetes service at OVH, fully based on open-source tools, we had to take some tough design decisions. Today we review one of them\u2026 One of the most structural choices we made while building OVH&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=218"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/218\/revisions"}],"predecessor-version":[{"id":793,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/218\/revisions\/793"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/219"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=218"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}