<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aroua KABOUBI</title>
    <description>The latest articles on DEV Community by Aroua KABOUBI (@aroua_kaboubi_82466ca9a52).</description>
    <link>https://dev.to/aroua_kaboubi_82466ca9a52</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4044151%2Feb4ba10c-b0b4-4fe0-8ab8-980ab51d90f3.png</url>
      <title>DEV Community: Aroua KABOUBI</title>
      <link>https://dev.to/aroua_kaboubi_82466ca9a52</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aroua_kaboubi_82466ca9a52"/>
    <language>en</language>
    <item>
      <title>Kubernetes expertise: how to choose a consulting partner in 2026</title>
      <dc:creator>Aroua KABOUBI</dc:creator>
      <pubDate>Tue, 18 Aug 2026 14:02:09 +0000</pubDate>
      <link>https://dev.to/aroua_kaboubi_82466ca9a52/kubernetes-expertise-how-to-choose-a-consulting-partner-in-2026-4hmd</link>
      <guid>https://dev.to/aroua_kaboubi_82466ca9a52/kubernetes-expertise-how-to-choose-a-consulting-partner-in-2026-4hmd</guid>
      <description>&lt;h1&gt;
  
  
  Key takeaways
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Five delivery models all answer “yes” to “do you do Kubernetes?”. They are not selling the same thing, and three of them will be wrong for your problem.&lt;/li&gt;
&lt;li&gt;The deciding criterion is neither day rate nor firm size. It is &lt;strong&gt;&lt;em&gt;who actually writes the code on your cluster&lt;/em&gt;&lt;/strong&gt;, and whether that is the person you met in pre-sales.&lt;/li&gt;
&lt;li&gt;One question reveals incentive alignment: “what happens if we take operations back in two years?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The market is not short of Kubernetes providers. It is short of ways to tell them apart, because five different businesses present themselves under the same phrase — “Kubernetes expertise” — and none will volunteer which one they actually are.&lt;/p&gt;

&lt;p&gt;This guide sets out those five models, what each is really selling, and the questions that separate a pitch from a capability. It names no companies: the model is the right level of analysis, because two firms sharing a delivery model resemble each other far more than two firms sharing a headcount.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Disclosure&lt;/em&gt;&lt;/strong&gt; :Edixos is a specialist cloud-native consultancy — model 3 — and also sells managed cloud operations. So we sit in two of the five models, including the one whose conflict of interest we flag. Put the same questions to us as to anyone else; we answer them at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five Kubernetes delivery models
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1. The large systems integrator
&lt;/h4&gt;

&lt;p&gt;The large technology consultancies, from several hundred to several thousand people, covering cloud, data, security and mobile, with framework agreements at most large enterprises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you are buying&lt;/strong&gt;: capacity and contractual coverage. If you need forty people staffed next quarter, or procurement only permits pre-approved suppliers, this is the only workable model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade-off&lt;/strong&gt; : pyramid staffing. The architect who convinces you in pre-sales is not the person who writes your controllers — the margin comes precisely from that gap. On work where depth beats volume, the gap is paid in months of drift.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. The cloud-native managed provider
&lt;/h4&gt;

&lt;p&gt;Firms that build the platform and then run it, with 24/7 on-call and sometimes their own sovereign cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you are buying&lt;/strong&gt;: the problem going away. No platform team to hire, no rotation to staff, no upgrade window to plan. For many organisations this is the right call, and it deserves saying plainly: if Kubernetes is not a strategic asset for you, operating it yourself is a cost with no return.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade-off&lt;/strong&gt;: incentive alignment. A provider whose recurring revenue depends on running your platform has no economic reason to make you self-sufficient. Not bad faith — the structure of the model, and it can be contracted around. Ask directly: “contractually and technically, what happens if we want to take over operations in two years?“&lt;/p&gt;

&lt;h4&gt;
  
  
  3. The specialist cloud-native consultancy
&lt;/h4&gt;

&lt;p&gt;Small to mid-sized firms where Kubernetes and platform engineering are the business, not one line in a catalogue of thirty expertises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you are buying&lt;/strong&gt; : depth, and a handover. These teams write controllers, publish code, and work on CRDs, Crossplane, multi-tenancy and bare metal — where generalists stop. The normal deliverable is a platform your team then operates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade-off&lt;/strong&gt;: capacity. Ten people will not staff forty roles, will not clear procurement demanding three years of minimum revenue, and will not cover your security workstream in parallel. If your binding constraint is volume or process, this model wastes your time.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. The freelancer
&lt;/h4&gt;

&lt;p&gt;An independent expert, often excellent, with no overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you are buying&lt;/strong&gt;: one precise skill, immediately. For an audit, an unblocking, or reinforcement on a team that already exists, this is frequently the best value in the market.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade-off&lt;/strong&gt;: bus factor. No continuity, nobody to review the work. A control plane designed by one person without review becomes an asset you can neither evolve nor hand on. The risk is not competence — that is usually present.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Vendor-managed Kubernetes
&lt;/h4&gt;

&lt;p&gt;GKE Autopilot, EKS, AKS, OVHcloud Managed Kubernetes, Scaleway Kapsule, with vendor support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you are buying&lt;/strong&gt;: the control plane, operated by the vendor, at a cost nowhere near a human engagement. Many organisations need nothing else, and paying a consultancy for what a managed service already does is a classic procurement mistake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade-off&lt;/strong&gt;: support stops at the edge of the product. It will not design your golden path, will not write your abstractions, and will not say no to a team deploying whatever it likes. Everything that decides whether a platform gets adopted stays with you.&lt;/p&gt;

&lt;h3&gt;
  
  
  The decision table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Large SI&lt;/th&gt;
&lt;th&gt;Managed Provider&lt;/th&gt;
&lt;th&gt;Specialist Consultancy&lt;/th&gt;
&lt;th&gt;Freelancer&lt;/th&gt;
&lt;th&gt;Vendor-managed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Who writes the code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Supervised juniors&lt;/td&gt;
&lt;td&gt;Their engineers&lt;/td&gt;
&lt;td&gt;The people you met&lt;/td&gt;
&lt;td&gt;One person&lt;/td&gt;
&lt;td&gt;Nobody (product)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seniority guaranteed in contract&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rarely&lt;/td&gt;
&lt;td&gt;Often&lt;/td&gt;
&lt;td&gt;By construction&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scale to 40 people&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ Limited&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Depth (CRDs, Crossplane, bare metal)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Varies&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ Narrow&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Your team inherits the platform&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Varies&lt;/td&gt;
&lt;td&gt;❌ Rarely the goal&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ Unreviewed&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;24/7 on-call&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;⚠️ Optional&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ Varies&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ Product scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fits enterprise procurement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;⚠️ Varies&lt;/td&gt;
&lt;td&gt;⚠️ Often not&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Contract rewards finishing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ Billed by time&lt;/td&gt;
&lt;td&gt;⚠️ Recurring revenue&lt;/td&gt;
&lt;td&gt;✅ Defined deliverable&lt;/td&gt;
&lt;td&gt;❌ Billed by time&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bus factor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This table describes models, never named companies. A single firm may sit in two models — Edixos included, which does both consulting and managed operations. When that is the case, ask which of the two carries the margin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Seven questions to ask in pre-sales
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;1. “Who specifically will do the work, and can I speak to them before signing?”&lt;/em&gt;&lt;/strong&gt; The one question whose answer cannot be rehearsed. A polite refusal, or “we’ll confirm staffing after signature”, is itself an answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. “Show me public code.”&lt;/em&gt;&lt;/strong&gt; Controllers, operators, Crossplane providers, CNCF contributions, maintained Helm charts. Real Kubernetes expertise leaves public traces; slide-deck expertise leaves none.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;3. “Tell me about a production incident you caused.”&lt;/em&gt;&lt;/strong&gt; An unfair question, deliberately. A team that has operated clusters has one, tells it precisely, and explains what they changed afterwards. A team without one has never been on call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;4. “What exactly is the deliverable, and what does the end of the engagement look like?”&lt;/em&gt;&lt;/strong&gt; A platform engagement with no exit milestone quietly becomes open-ended staffing. Insist on the Git repository, documentation, runbooks, a handover session, and a date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;5. “What happens if we take operations back in two years?”&lt;/em&gt;&lt;/strong&gt; The question that reveals alignment better than any reversibility clause.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;6. “What are you not good at?”&lt;/em&gt;&lt;/strong&gt; A provider claiming to cover everything has disqualified itself. Across a surface as wide as cloud-native, no admitted boundary means no actual specialism.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;7. “What does the deliverable cost, not the day?”&lt;/em&gt;&lt;/strong&gt; An isolated day rate informs nothing. A cheaper profile who takes three times as long costs more, and costs you a quarter on top. The full calculation is in what each model really costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Five red flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;A cloud partner tier presented as Kubernetes expertise&lt;/em&gt;&lt;/strong&gt; . A partnership measures resale volume, not engineering capability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;The senior CV in the appendix, with no staffing commitment in the contract.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;No public trace at all&lt;/em&gt;&lt;/strong&gt; — no repository, no talk, no technical writing, no post-mortem. In an ecosystem as open as the CNCF, that is abnormal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;A proposal that opens with a tool&lt;/em&gt;&lt;/strong&gt; — “we will deploy platform X” — before anyone has understood your golden path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;A quote with no discovery phase&lt;/em&gt;&lt;/strong&gt;. Nobody prices a Kubernetes migration without looking at what exists. An instant number means a change request is already planned.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Running the selection in three steps
&lt;/h3&gt;

&lt;p&gt;1- &lt;strong&gt;&lt;em&gt;Qualify the model before the firms&lt;/em&gt;&lt;/strong&gt;. Half a day internally: do we need capacity, operations, depth, reinforcement, or just a managed cluster? This eliminates two-thirds of the market and stops you comparing offers that were never comparable.&lt;/p&gt;

&lt;p&gt;2- &lt;strong&gt;&lt;em&gt;Buy an audit before you buy a project&lt;/em&gt;&lt;/strong&gt;. Two to five days of architecture review from two firms in the same model costs a fraction of the project and shows how they reason. It is the only test drive available.&lt;/p&gt;

&lt;p&gt;3- &lt;strong&gt;&lt;em&gt;Contract the exit at the start&lt;/em&gt;&lt;/strong&gt;. Repository on your side, documentation as a deliverable, a dated handover session. An aligned partner agrees without argument.&lt;/p&gt;

&lt;h3&gt;
  
  
  Edixos against its own checklist
&lt;/h3&gt;

&lt;p&gt;We are model 3: a small, senior consultancy building Kubernetes control planes, golden-path internal platforms, reusable Crossplane APIs and SRE agents. Here are our answers to the seven questions, in order&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Who will do the work?&lt;/em&gt;&lt;/strong&gt; Named engineers, with their record and certifications published on the team page. From the first conversation you are talking to the person who will write the code — there is no bench behind us.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Public code?&lt;/em&gt;&lt;/strong&gt; A Crossplane provider for OVHcloud that we maintain, 15,000+ downloads, running in production for French social ministries. Sveltos fleet work, contributions to the Tilt ecosystem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;A production incident?&lt;/em&gt;&lt;/strong&gt; Our field notes on Talos and bare metal and on a stale eBPF network policy on GKE are published, causes and fixes included.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Production tenure?&lt;/em&gt;&lt;/strong&gt; Kubernetes in production since version 1.2, in 2015 — before CRDs, before managed offerings existed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Real systems?&lt;/em&gt;&lt;/strong&gt; Over a thousand applications migrated for an automotive manufacturer, 150+ CRDs for a bespoke PaaS, self-service platforms in production.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;A clean end of engagement?&lt;/em&gt;&lt;/strong&gt; Repository, documentation and runbooks yours from day one, and a dated handover session written into the contract.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;What are we not good at?&lt;/em&gt;&lt;/strong&gt; Volume. We will not staff forty roles, will not clear heavyweight procurement, and for operations at very large scale on a provider’s own sovereign cloud another model will serve you better. We say so in the first meeting rather than cost you a quarter.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And to answer our own alignment question: &lt;strong&gt;&lt;em&gt;we also sell managed operations&lt;/em&gt;&lt;/strong&gt; , as Managed Cloud Operations. The conflict of interest described in model 2 therefore applies to us too. What you can verify in the contract rather than take on trust: it is contracted separately, never as the obligatory sequel to a build, and everything you need in order to do without us is yours from day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;The lowest-risk next step is a two-to-five-day architecture review&lt;/em&gt;&lt;/strong&gt;. You leave with an assessment you can act on even if you never work with us afterwards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frequently asked questions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What kind of Kubernetes consulting partner should I choose?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
The one whose model matches your binding constraint. Need headcount: a large systems integrator. Need never to operate the platform: a managed provider. Need technical depth and autonomy afterwards: a specialist consultancy. Vendor size is not the criterion; the delivery model is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;How do I verify a partner's real Kubernetes expertise?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Ask for public code: controllers, Crossplane providers, CNCF contributions, published post-mortems. Then ask to speak to the engineer who will do the work, not the pre-sales architect. The gap between those two people is the most useful signal in the whole procurement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What questions should I ask a Kubernetes provider before signing?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Who specifically will do the work, and can I speak to them? Where is your public code? Tell me about a production incident you caused. What exactly is the deliverable and what does the end of the engagement look like? What happens if we take operations back in two years?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Does a certified cloud partnership prove Kubernetes expertise?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
No. A partner tier measures resale volume and commercial certification counts, not the ability to design a control plane or write a controller. It is a procurement signal, not an engineering one, and it is routinely presented as the second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Specialist consultancy or vendor-managed Kubernetes?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
If you need a reliable cluster and nothing more, vendor-managed is enough and costs far less than a human engagement. A consultancy earns its place when the value sits in the layer above: golden paths, abstractions, governance, and product-team autonomy.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>cloudnative</category>
      <category>platformengineering</category>
      <category>consulting</category>
    </item>
    <item>
      <title>Why Terraform Falls Short for Platform Engineering (and Kubernetes Wins)</title>
      <dc:creator>Aroua KABOUBI</dc:creator>
      <pubDate>Tue, 11 Aug 2026 15:26:03 +0000</pubDate>
      <link>https://dev.to/aroua_kaboubi_82466ca9a52/why-terraform-falls-short-for-platform-engineering-and-kubernetes-wins-26nl</link>
      <guid>https://dev.to/aroua_kaboubi_82466ca9a52/why-terraform-falls-short-for-platform-engineering-and-kubernetes-wins-26nl</guid>
      <description>&lt;h3&gt;
  
  
  Key takeaways:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terraform is not the problem&lt;/strong&gt; — it’s the wrong tool for a self-service platform: manual apply per change, no native API, no continuous reconciliation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes + KRM + CRDs&lt;/strong&gt; turn infrastructure into a self-service API: request a database, bucket, or cache with a single YAML — no tickets.&lt;/li&gt;
&lt;li&gt;Even Kelsey Hightower has stated Terraform isn’t suited for building cloud-provider-style &lt;strong&gt;control planes&lt;/strong&gt; .
-Field-reported KPIs from teams that made the switch: &lt;strong&gt;+50% developer productivity, −36% lead time, +40% software quality&lt;/strong&gt; (Puppet State of DevOps, Gartner).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do you practice DevOps or Cloud today? Then you’ve lived this: you’re shipping a critical feature, but everything stops because you need a &lt;strong&gt;Jira&lt;/strong&gt; ticket to provision a database, an S3 bucket, or any other cloud service. Welcome to &lt;strong&gt;TicketOps&lt;/strong&gt; — a pattern that creates bottlenecks, silos, and quietly kills the agility your teams spent years building.&lt;/p&gt;

&lt;p&gt;Let’s be blunt: the celebrated principle “you build it, you run it” too often becomes “you build it, someone else queues it, and maybe one day you get to run it.” The result is wasted time, frustrated developers, and stalled innovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Terraform is not suited for Platform Engineering
&lt;/h2&gt;

&lt;p&gt;Terraform is popular and works well for provisioning resources occasionally — but it was never designed to be the engine of a self-service platform. Three structural gaps explain why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manual cycle&lt;/strong&gt; — a terraform apply is required for every change. Not viable for dynamic, constantly evolving resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No native API&lt;/strong&gt; — you can’t easily expose infrastructure as self-service through a simple API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No continuous reconciliation&lt;/strong&gt; — Terraform doesn’t automatically drive infrastructure back to its desired state when it drifts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, for a genuine platform-as-a-service, Terraform hits its ceiling fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kubernetes + KRM + CRDs: the new self-service model
&lt;/h2&gt;

&lt;p&gt;Kubernetes is no longer just a container orchestrator — it’s a &lt;strong&gt;universal control plane&lt;/strong&gt; for your entire infrastructure. The mechanism is the Kubernetes Resource Model (KRM) plus Custom Resource Definitions (CRDs), which let you manage anything declaratively.&lt;/p&gt;

&lt;p&gt;Imagine this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need a database? Apply a YAML.&lt;/li&gt;
&lt;li&gt;Need a Cloud Storage bucket? Another YAML.&lt;/li&gt;
&lt;li&gt;Want a Redis cache? That same YAML pattern again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is pure self-service, with zero tickets, powered by Kubernetes and projects like Crossplane, AWS Controllers for Kubernetes (ACK), and Google Config Connector.&lt;/p&gt;

&lt;p&gt;During his talk at Control Plane Day with Crossplane 2023, Kelsey Hightower — Developer Advocate at Google and a defining voice in the cloud-native community — put it plainly:&lt;/p&gt;

&lt;h4&gt;
  
  
  “Terraform is not suited for building control planes similar to those of major public cloud providers.”
&lt;/h4&gt;

&lt;p&gt;Coming from an engineer whose talks and live demos have guided modern infrastructure practice for a decade, that carries real weight.&lt;/p&gt;

&lt;h2&gt;
  
  
  Level up: expose everything via REST, gRPC, and SDKs
&lt;/h2&gt;

&lt;p&gt;The goal of this architecture is simple: &lt;strong&gt;give teams autonomy without losing control&lt;/strong&gt;. Kubernetes acts as the central control plane on top of KRM, and product, DevOps, and development teams provision what they need through a single API — exposed over REST, gRPC, or even WebSocket.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2poohn4hh2qjj6bl03ka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2poohn4hh2qjj6bl03ka.png" alt="Diagram comparing TicketOps versus the Golden Path in Kubernetes with KRM and CRDs. Left side, TicketOps: a developer files Jira ticket #4821 and requests the DB team, which routes through the network team and security review, taking days to weeks — " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This API isn’t a gadget — it becomes the standard entry point, usable from client libraries (Go, Python, JavaScript, Java), CLI tools, or an internal portal like Backstage. Teams stop waiting on tickets, and delivery cycles accelerate.&lt;/p&gt;

&lt;p&gt;In the background, the platform continuously reconciles resources against your cloud providers and key tools (Google Cloud, GitLab, Kubernetes, Vault, Okta…). While teams self-serve, your Platform Engineering, SRE, and DevSecOps groups enforce company-wide security rules, reliability standards, and best practices. You industrialize the cloud at scale without friction: governance stays central, teams gain speed — the best of both worlds.&lt;/p&gt;

&lt;p&gt;Better still, you can expose your services as a first-class API. From your CRDs you can auto-generate protobuf definitions, then expose REST or gRPC endpoints and ship SDKs for every language your developers use. They won’t even need to write YAML — they’ll call your platform API directly. The modern developer’s dream becomes real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero tickets&lt;/li&gt;
&lt;li&gt;Instant provisioning&lt;/li&gt;
&lt;li&gt;Transparent GitOps integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The numbers speak for themselves
&lt;/h2&gt;

&lt;p&gt;Here are concrete KPIs reported by organizations that made the leap from TicketOps to self-service platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 +50% developer productivity&lt;/li&gt;
&lt;li&gt;🕒 −36% lead time between commit and production&lt;/li&gt;
&lt;li&gt;🧘 +40% improvement in software quality&lt;/li&gt;
&lt;li&gt;📈 75% of large enterprises expected to adopt this model by end of 2025 (Gartner)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These figures come from the field — notably the Puppet State of DevOps report and Gartner analysis. Your mileage will vary, but the direction is consistent: less waiting, faster delivery, higher quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goodbye TicketOps, hello self-service
&lt;/h2&gt;

&lt;p&gt;The era of endless Jira tickets for simple provisioning is over. Adopt Kubernetes as the foundation of your Platform Engineering — with KRM and CRDs — and give your teams a genuinely self-service experience. Your infrastructure becomes agile, scalable, and API-first, and your developers will thank you (maybe even with cookies 🍪).&lt;/p&gt;

&lt;p&gt;So — ready to leave Terraform behind for the parts it was never built for, and step into an API-first future with Kubernetes? You won’t regret it. 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: how Edixos can support you
&lt;/h2&gt;

&lt;p&gt;At &lt;strong&gt;Edixos&lt;/strong&gt;, we know a cloud platform is more than a stack of tools: it must be built to last, evolve, and fit each organization’s specific needs. Our expertise goes far beyond deploying Kubernetes clusters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We write custom Kubernetes controllers that automate your business processes and specific needs.&lt;/li&gt;
&lt;li&gt;We integrate powerful composition engines like Crossplane and Kro to turn Kubernetes into a true multi-cloud provisioning engine.&lt;/li&gt;
&lt;li&gt;We work with existing controllers such as Config Connector (KCC), which natively expose major cloud providers’ services through Kubernetes CRDs.&lt;/li&gt;
&lt;li&gt;We build complete, API-first platforms — exposing your services via REST, gRPC, and multi-language SDKs — to unify access and accelerate adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What we offer is unique know-how to industrialize your cloud platforms: governance, security, and self-service at scale. This is exactly the kind of work behind our decade-long Kubernetes journey. If your ambition is a robust platform that aligns innovation, agility, and control, we have the building blocks and the experience to make it happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s talk about your advanced Kubernetes challenges
&lt;/h2&gt;

&lt;p&gt;Are you looking to automate operations, model your business processes, or industrialize deployments on Kubernetes? Let’s discuss your challenges and see how the API Machinery can bring you speed, reliability, and scalability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes FinOps: cutting cluster cost without breaking prod — the same platform, measured on spend.&lt;/li&gt;
&lt;li&gt;AI SRE agents for autonomous Kubernetes operations — the same platform, measured on reliability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frequently asked questions:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Is Terraform bad? Should we stop using it?
&lt;/h4&gt;

&lt;p&gt;No. Terraform is excellent for provisioning infrastructure occasionally and for one-shot changes. It falls short as the engine of a self-service platform because it needs a manual apply per change, exposes no native API, and doesn't continuously reconcile drift — the three things a platform control plane requires.&lt;/p&gt;

&lt;h4&gt;
  
  
  What is the Kubernetes Resource Model (KRM)?
&lt;/h4&gt;

&lt;p&gt;KRM is the declarative API pattern Kubernetes uses: you declare desired state in YAML, and controllers continuously reconcile reality to match. With Custom Resource Definitions (CRDs), KRM extends beyond containers to databases, buckets, and any cloud service — making Kubernetes a universal control plane.&lt;/p&gt;

&lt;h4&gt;
  
  
  How do Kubernetes and CRDs enable self-service infrastructure?
&lt;/h4&gt;

&lt;p&gt;CRDs let platform teams expose cloud resources as simple YAML APIs. A developer applies a manifest for a database or cache, and a controller (via Crossplane, ACK, or Config Connector) provisions and reconciles it automatically — no Jira ticket, no manual Terraform run, with RBAC and policy enforced centrally.&lt;/p&gt;

&lt;h4&gt;
  
  
  What is TicketOps and why is it a problem?
&lt;/h4&gt;

&lt;p&gt;TicketOps is the anti-pattern where developers must open a ticket to provision any infrastructure, then wait for another team to fulfill it. It breaks the 'you build it, you run it' principle, creates bottlenecks and silos, and slows delivery. Self-service platforms on Kubernetes eliminate it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can I expose Kubernetes infrastructure as a REST or gRPC API?
&lt;/h4&gt;

&lt;p&gt;Yes. Because CRDs are API definitions, you can generate protobuf from them and expose REST, gRPC, or WebSocket endpoints, plus multi-language SDKs (Go, Python, JavaScript, Java). Developers consume the platform through a single API — or tools like Backstage — instead of writing YAML.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>platformengineering</category>
      <category>terraform</category>
      <category>devops</category>
    </item>
    <item>
      <title>Crossplane and OVHcloud: A provider-ovh Step-by-Step Guide</title>
      <dc:creator>Aroua KABOUBI</dc:creator>
      <pubDate>Thu, 06 Aug 2026 13:46:11 +0000</pubDate>
      <link>https://dev.to/aroua_kaboubi_82466ca9a52/crossplane-and-ovhcloud-a-provider-ovh-step-by-step-guide-53dm</link>
      <guid>https://dev.to/aroua_kaboubi_82466ca9a52/crossplane-and-ovhcloud-a-provider-ovh-step-by-step-guide-53dm</guid>
      <description>&lt;h3&gt;
  
  
  Key takeaways:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Crossplane&lt;/strong&gt; turns your Kubernetes cluster into a control plane that provisions cloud infrastructure through custom resources — no terraform apply, just YAML that a controller reconciles continuously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;provider-ovh&lt;/strong&gt; is an open-source Crossplane provider built by &lt;strong&gt;Edixos&lt;/strong&gt;, generated with &lt;strong&gt;Upjet&lt;/strong&gt; on top of the official OVHcloud Terraform provider. It exposes &lt;strong&gt;135+ OVHcloud resources&lt;/strong&gt; as CRDs and is published on the Upbound Marketplace&lt;/p&gt;

&lt;p&gt;This guide is &lt;strong&gt;end to end&lt;/strong&gt;: a kind cluster, Crossplane, the provider, credential wiring, and a real managed Kubernetes cluster provisioned on OVHcloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Most teams still provision OVHcloud the imperative way: a Terraform run here, a console click there, a script nobody wants to touch. It works until you need self-service, drift correction, and RBAC — the things a platform team actually has to deliver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crossplane&lt;/strong&gt; flips the model. Your Kubernetes cluster becomes the control plane, and infrastructure becomes a set of custom resources that a controller keeps reconciled. At Edixos we built &lt;strong&gt;provider-ovh&lt;/strong&gt; to bring that model to OVHcloud, and this article walks through it from an empty machine to a running managed Kubernetes cluster on OVH.&lt;/p&gt;

&lt;p&gt;If you have used Crossplane with AWS or GCP, this will feel familiar. If you have not, you will have a working control plane in about fifteen minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Crossplane?
&lt;/h3&gt;

&lt;p&gt;Crossplane is a CNCF open-source control plane that extends Kubernetes so it can provision and manage external infrastructure. You install a provider, which registers Custom Resource Definitions (CRDs) for a cloud’s resources, and from then on you declare that infrastructure as Kubernetes objects. A controller reconciles each object against the provider’s API, correcting drift and cleaning up on delete.&lt;/p&gt;

&lt;p&gt;The payoff is that infrastructure inherits everything Kubernetes already gives you: declarative YAML, RBAC, GitOps, admission control, and a single API surface across clouds. Instead of teams filing tickets, they apply a manifest — and the platform enforces the guardrails.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is provider-ovh?
&lt;/h3&gt;

&lt;p&gt;provider-ovh is the Crossplane provider for OVHcloud, built and maintained by Edixos. It exposes OVHcloud services — public cloud projects, managed Kubernetes, databases, private networks, IAM, object storage, and more — as Kubernetes managed resources. It is available on the Upbound Marketplace and the source lives on GitHub.&lt;/p&gt;

&lt;p&gt;The story behind it is worth telling, because it explains why the project exists at all. When we first looked, there was no official or community Crossplane provider for OVHcloud. We built the first one and offered to donate it — the response at the time was that community providers could not be considered official, and it would not be maintained internally. Facing other commitments, the project went dormant for nearly a year.&lt;/p&gt;

&lt;p&gt;Then three engineers — Nicolas, Kevin, and Ferréol from Theseus — got in touch. They were already running the provider in production, powering a Database-as-a-Service offering for the French public sector. Shortly after, Fabien opened a pull request bumping the provider to Crossplane 2.0. That was the catalyst. The provider was reborn as v2.9.0, with Endre Karlson and Alegrowin joining as co-maintainers, and it is now an actively maintained community project covering 135+ OVH resources and 90%+ of the Terraform provider surface, on both Crossplane 1.x and 2.x.&lt;/p&gt;

&lt;p&gt;The lesson we keep repeating: real users in production are what keep infrastructure projects alive.&lt;/p&gt;

&lt;h3&gt;
  
  
  How provider-ovh is built?
&lt;/h3&gt;

&lt;p&gt;provider-ovh is generated, not hand-written. It uses Upjet, the Crossplane code-generation toolkit, on top of the official OVHcloud Terraform provider — pinned in this release to version 2.13.1. Upjet reads the Terraform provider’s schema and generates XRM-conformant managed resources: Go API types, deepcopy functions, controllers, and CRD manifests.&lt;/p&gt;

&lt;p&gt;That approach is why coverage is so broad. Instead of implementing every OVH endpoint by hand, we regenerate the provider whenever OVHcloud ships a new Terraform version, and the new resources come along for free. The current release ships 281 CRD manifests — the 135+ resources appear in two flavors, cluster-scoped and namespaced, thanks to Crossplane v2 (more on that below). Bumping the underlying Terraform provider is a documented, four-command routine: update the Makefile and go.mod, run make generate, and commit the regenerated schema, types, and CRDs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you start, install the following tools locally. Everything runs on your machine except the OVHcloud API calls, which need a real account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt; (or another container runtime kind supports)&lt;br&gt;
&lt;strong&gt;kind&lt;/strong&gt; — to run a throwaway Kubernetes cluster&lt;br&gt;
&lt;strong&gt;kubectl&lt;/strong&gt; — to talk to the cluster&lt;br&gt;
&lt;strong&gt;Helm&lt;/strong&gt; — to install Crossplane&lt;br&gt;
An OVHcloud account with API credentials (we generate them in Step 5)&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Create a local kind cluster
&lt;/h3&gt;

&lt;p&gt;Crossplane is a lightweight control plane, so a single-node kind cluster is plenty for this walkthrough. Create one:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fshgt9lugt4nxsyzpledk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fshgt9lugt4nxsyzpledk.png" alt="Terminal showing the kind create cluster --name crossplane-ovh command to create a local Kubernetes cluster, followed by verification with kubectl cluster-info" width="800" height="65"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confirm the cluster is up and kubectl points at it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftpoo75xnmeh6amnetbjy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftpoo75xnmeh6amnetbjy.png" alt="Terminal showing kubectl cluster-info --context kind-crossplane-ovh output confirming the kind cluster is running" width="800" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This cluster never runs your OVH workloads — it only hosts the Crossplane control plane that provisions them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Install Crossplane
&lt;/h3&gt;

&lt;p&gt;Install Crossplane with its official Helm chart into a dedicated crossplane-system namespace. This deploys the core Crossplane controllers and the package manager that installs providers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foslj3lwc17q9mpxgo72b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foslj3lwc17q9mpxgo72b.png" alt="Terminal showing helm repo add and helm install commands to install Crossplane into the crossplane-system namespace" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait for the pods to become ready, then verify the installation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7c3pb4x1osrmepirbkz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7c3pb4x1osrmepirbkz7.png" alt="Terminal showing kubectl get pods -n crossplane-system output with crossplane and crossplane-rbac-manager pods running" width="800" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see the crossplane and crossplane-rbac-manager pods running. Crossplane has also registered its own core CRDs — providers, configurations, providerconfigs — which the next step builds on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Install provider-ovh
&lt;/h3&gt;

&lt;p&gt;Installing a provider is itself a Kubernetes resource: you apply a Provider object pointing at the package image, and Crossplane’s package manager pulls it and registers its CRDs. Apply provider-ovh from the Upbound registry:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxa85ouytau4h6gblhww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsxa85ouytau4h6gblhww.png" alt="Terminal showing kubectl apply of a Provider manifest pointing to the provider-ovh package image from the Upbound registry" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pin an explicit version tag in production — check the Marketplace for the latest release rather than using :latest. Watch the provider become healthy:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5bzjzw5vi2zkxxo6w98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5bzjzw5vi2zkxxo6w98.png" alt="Terminal showing kubectl get providers output with the provider-ovh INSTALLED and HEALTHY columns set to True" width="796" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the INSTALLED and HEALTHY columns both read True, the provider’s controllers are running and every OVH CRD is registered in your cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Discover the managed resources
&lt;/h3&gt;

&lt;p&gt;Because the provider registers its resources as standard CRDs, you explore them with plain kubectl — no special tooling. This is one of the quiet advantages of the Crossplane model: your infrastructure catalog is queryable from the same API as everything else.&lt;/p&gt;

&lt;p&gt;List the OVH resource types the provider added:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq00j8yd0ldgeoeiwgpud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq00j8yd0ldgeoeiwgpud.png" alt="Terminal showing kubectl get crds output filtered by ovh.edixos.io, listing resource types grouped by service like kube, network, cloud, databases, and iam" width="800" height="69"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see resources grouped by service — kube.ovh.edixos.io, network.ovh.edixos.io, cloud.ovh.edixos.io, databases.ovh.edixos.io, iam.ovh.edixos.io, and more. To inspect the fields of any resource, use kubectl explain:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbac5tqjx3dtlnak059hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbac5tqjx3dtlnak059hk.png" alt="Terminal showing kubectl explain cluster.kube.ovh.edixos.io --recursive output with the full forProvider spec fields for a managed OVHcloud Kubernetes cluster" width="800" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That prints the full spec for a managed OVHcloud Kubernetes cluster — every forProvider field you can set — straight from the CRD’s OpenAPI schema. The complete API reference is also published at doc.crds.dev.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Configure OVHcloud credentials
&lt;/h3&gt;

&lt;p&gt;The provider needs OVHcloud API credentials to reconcile anything real. You supply them through a Kubernetes Secret, then point a ProviderConfig at that Secret. First, generate an application key, application secret, and consumer key from the OVH API console, granting the API rights your resources require.&lt;/p&gt;

&lt;p&gt;Create the Secret in the crossplane-system namespace:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvh8u4qhxhm8cvahtmt6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvh8u4qhxhm8cvahtmt6.png" alt="Terminal showing kubectl apply of a Secret manifest containing OVHcloud endpoint, application_key, application_secret, and consumer_key credentials" width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now create a ProviderConfig named default that tells the provider where to read those credentials:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3jey3xm0m0ok1ox5tx6t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3jey3xm0m0ok1ox5tx6t.png" alt="Terminal showing kubectl apply of a ProviderConfig manifest named default referencing the provider-ovh Secret" width="799" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Never commit real credentials to Git. In production, source the Secret from an external secret store — provider-ovh supports Crossplane’s external-secret-store integration for exactly this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Provision your first OVHcloud resources
&lt;/h3&gt;

&lt;p&gt;With credentials wired up, provisioning is now a kubectl apply. Let’s build a real stack: a private network, a subnet inside it, and a managed Kubernetes cluster attached to both. This is the same flow that I walk through in the Platform Engineering with Crossplane &amp;amp; OVHcloud talk. Each manifest references the default ProviderConfig from the previous step.&lt;/p&gt;

&lt;p&gt;Start with a private network. Replace serviceName with your OVH public cloud project ID:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzy397rvyy1gvh6tj0022.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzy397rvyy1gvh6tj0022.png" alt="YAML manifest for a PrivateNetwork resource named sample-1 with serviceName and regions DE1" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add a subnet inside that network — this is where your cluster’s nodes get their IP addresses. It references the private network by name with networkIdRef, so Crossplane waits for the network and wires the ID in for you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7vomyrlyry06r4f64n8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7vomyrlyry06r4f64n8l.png" alt="YAML manifest for a Subnet resource named subnet-1 referencing the private network with networkIdRef and defining an IP range" width="800" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now a managed Kubernetes cluster that references both the network and the subnet by name — Crossplane resolves each reference and injects the resulting IDs automatically:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0whqmcm5022sl5qyxlc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi0whqmcm5022sl5qyxlc.png" alt="YAML manifest for a Cluster resource named hello-edixos referencing privateNetworkIdRef and nodesSubnetIdRef" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apply them and watch Crossplane reconcile against the OVHcloud API:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkkz8kos8urfo9k9a7xs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkkz8kos8urfo9k9a7xs.png" alt="Terminal showing kubectl apply of the private network, subnet, and cluster manifests followed by kubectl get managed output" width="798" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The kubectl get managed command lists every external resource Crossplane is tracking, with READY and SYNCED columns. When both read True, your cluster exists on OVHcloud — provisioned entirely through the Kubernetes API. Add a NodePool the same way, referencing the cluster with kubeIdRef, and you have a complete managed Kubernetes environment described as YAML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cluster-scoped vs namespaced resources
&lt;/h2&gt;

&lt;p&gt;provider-ovh ships every resource in two variants because it targets Crossplane 2.x. Cluster-scoped resources use the classic network.ovh.edixos.io group; namespaced resources use the *.m.ovh.edixos.io groups (the m marks the modern, namespaced API). Namespaced resources let you scope OVH infrastructure to a Kubernetes namespace, which is the foundation for safe multi-tenancy — each team gets its own namespace, its own RBAC, and its own slice of infrastructure. That doubling is why the release contains 281 CRD manifests for roughly 135 logical resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond raw resources: Compositions
&lt;/h2&gt;

&lt;p&gt;Applying individual managed resources is powerful, but it is not yet a platform. The real leverage comes from Compositions: you define a Composite Resource Definition (an XRD) that presents a simple, opinionated API — say, EdixosCluster — and a Composition that expands it into the private network, subnet, cluster, and node pool underneath. Developers request one high-level resource; the platform assembles the details with your standards baked in.&lt;/p&gt;

&lt;p&gt;The provider-ovh repository ships a complete Composition example that does exactly this. This is where Crossplane stops being a Terraform replacement and becomes a self-service platform — the pattern we build for clients at Edixos every week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;When a resource will not become ready, the reconcile loop tells you why. Describe the managed resource and read its conditions and events:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ctp43hppb4wl92uxx56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ctp43hppb4wl92uxx56.png" alt="Terminal showing kubectl describe cluster.kube.ovh.edixos.io output with conditions and events explaining reconciliation status" width="800" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most failures fall into three buckets: credential errors (the Secret JSON is malformed, or the OVH token lacks the required API rights), reference errors (a *Ref points at a resource that does not exist or is not yet ready), and quota or region errors returned straight from the OVHcloud API. For controller-level issues, install the provider with the --debug flag via a DeploymentRuntimeConfig and check the provider pod logs in crossplane-system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You now have the full loop: a kind cluster running Crossplane, provider-ovh installed and healthy, credentials wired through a ProviderConfig, and real OVHcloud infrastructure provisioned as Kubernetes resources. The same manifests drop straight into a Git repository and a GitOps pipeline — which is the whole point.&lt;/p&gt;

&lt;p&gt;provider-ovh started as a project OVHcloud declined to adopt and survived because engineers ran it in production and pushed it forward. It is open source, community-maintained, and built for teams who want OVHcloud to behave like every other cloud in a Crossplane control plane. Star it on GitHub, try it on your own project, and open an issue if something is missing — that feedback is exactly what keeps it moving.&lt;/p&gt;

&lt;p&gt;Crossplane and provider-ovh are one piece of a larger platform-engineering practice. For the wider context, read why Kubernetes beats Terraform for platform engineering and our field-tested blueprint for building Kubernetes as a Service — both grounded in the decade of production Kubernetes behind this provider.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let’s talk about your Crossplane platform
&lt;/h3&gt;

&lt;p&gt;Do you want to expose OVHcloud — or any cloud — as self-service infrastructure your teams consume through the Kubernetes API? Let’s discuss your platform goals and see how a custom Crossplane control plane can bring you speed, governance, and scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Frequently asked questions:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What is provider-ovh&lt;/strong&gt;?&lt;br&gt;
provider-ovh is a Crossplane provider built by Edixos that exposes OVHcloud resources as Kubernetes custom resources. It is generated with Upjet on top of the official OVHcloud Terraform provider, covers 135+ resources, and is published on the Upbound Marketplace under edixos/provider-ovh for Crossplane 1.x and 2.x.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need OVHcloud API credentials to use provider-ovh&lt;/strong&gt;?&lt;br&gt;
Yes. The provider authenticates to the OVHcloud API using an application key, application secret, and consumer key. You generate these tokens from the OVH API console, store them in a Kubernetes Secret, and reference that Secret from a ProviderConfig so Crossplane can reconcile your resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run Crossplane and provider-ovh on a local kind cluster&lt;/strong&gt;?&lt;br&gt;
Yes. Crossplane is a lightweight control plane and runs fine on a local kind cluster for learning and development. It only provisions real OVHcloud infrastructure once you supply valid API credentials through a ProviderConfig, so the control plane itself has no special hosting requirement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is provider-ovh different from the OVHcloud Terraform provider&lt;/strong&gt;?&lt;br&gt;
provider-ovh reuses the OVHcloud Terraform provider's schema under the hood but exposes it as Kubernetes CRDs reconciled continuously by Crossplane. Instead of running terraform apply, you declare resources as YAML and a controller keeps live infrastructure matching that declared state, with RBAC and GitOps built in.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>crossplane</category>
      <category>ovhcloud</category>
      <category>platformengineering</category>
    </item>
    <item>
      <title>Our Kubernetes Journey: 10 Years Building Cloud-Native Platforms</title>
      <dc:creator>Aroua KABOUBI</dc:creator>
      <pubDate>Mon, 27 Jul 2026 18:21:28 +0000</pubDate>
      <link>https://dev.to/aroua_kaboubi_82466ca9a52/our-kubernetes-journey-10-years-building-cloud-native-platforms-58a7</link>
      <guid>https://dev.to/aroua_kaboubi_82466ca9a52/our-kubernetes-journey-10-years-building-cloud-native-platforms-58a7</guid>
      <description>&lt;h2&gt;
  
  
  Key takeaways:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Edixos ran &lt;strong&gt;Kubernetes 1.2 in production in 2015&lt;/strong&gt;, using Third Party Resources — the predecessors of today’s CRDs — well before managed Kubernetes was mainstream.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Our edge is the &lt;strong&gt;platform layer&lt;/strong&gt;: custom Go controllers, GitOps, and Crossplane that turn Kubernetes into an API-driven, self-service control plane.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real production systems, not slideware: &lt;strong&gt;1,000+ apps migrated&lt;/strong&gt; for an automotive leader, &lt;strong&gt;150+ custom CRDs&lt;/strong&gt; for a bespoke PaaS, plus smart-city and utility platforms.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;Some tools permanently change how you design infrastructure. For Edixos, that tool is &lt;strong&gt;Kubernetes&lt;/strong&gt; — and our story with it started in &lt;strong&gt;2015&lt;/strong&gt;, when container orchestration was still in its infancy. A decade of trials, failures, and shipped production systems laid the foundation for the company we are today.&lt;/p&gt;

&lt;p&gt;We are not another consulting firm renting out slides. We are practitioners who have run Kubernetes in production since version 1.2, written the controllers, and operated the clusters at 3 a.m. This article takes you behind the scenes: from our first master node to the platforms that now run thousands of applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did Edixos start with Kubernetes?
&lt;/h2&gt;

&lt;p&gt;It started in 2015 with kubeup.sh and &lt;strong&gt;Kubernetes 1.2 in production&lt;/strong&gt; — a bold bet at a time when almost no one ran containers at scale. We used Third Party Resources (TPR), the ancestors of CRDs, installed clusters on AWS with kops, and migrated a SaaS platform onto this new architecture.&lt;/p&gt;

&lt;p&gt;I still remember launching the kubeup.sh script and watching our first master node appear. It was more than a technical success — it was a defining moment.&lt;/p&gt;

&lt;p&gt;To automate environment creation, we even wrote our own &lt;strong&gt;Kubernetes controller in Python&lt;/strong&gt;. It was demanding, hand-crafted work, but incredibly formative. In 2016 I moved into Kubernetes consulting, helping major companies across France — from bare-metal setups to managed services. Every mission widened the expertise Edixos is built on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes Edixos different?
&lt;/h2&gt;

&lt;p&gt;We don’t just promise excellence — we build it daily, line by line, cluster by cluster. What sets us apart is turning complex problems into elegant, durable solutions: automating Kubernetes environments, designing custom controllers, and industrializing GitOps practices with a relentless focus on impact.&lt;/p&gt;

&lt;p&gt;Working with Edixos means partnering with seasoned practitioners who are genuinely passionate about cloud-native best practices — engineers who write production code, not PowerPoints, and who level up your teams as they go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real projects, not PowerPoints :
&lt;/h2&gt;

&lt;p&gt;At Edixos we write code, Kubernetes manifests, robust APIs, and custom controllers — not slides. Every mission is a real technical challenge and a complex business problem. Here are a few of the adventures that forged our reputation.&lt;/p&gt;

&lt;p&gt;🚗&lt;strong&gt;Cloud transformation for a French automotive leader&lt;/strong&gt;&lt;br&gt;
For a major French car manufacturer, we orchestrated the migration of more &lt;strong&gt;than 1,000 applications&lt;/strong&gt; to the public cloud. Kubernetes became the backbone, with a centralized control plane built on &lt;strong&gt;Crossplane and KRM&lt;/strong&gt; and multi-tenant custom controllers written by our team. The result: teams now consume infrastructure as a service through CRDs — with traceability, RBAC, and governance built in, and zero friction.&lt;/p&gt;

&lt;p&gt;🌐&lt;strong&gt;A Kubernetes-first Platform-as-a-Service&lt;/strong&gt;&lt;br&gt;
Inspired by KRM and GitOps, we designed a bespoke PaaS on Kubernetes for a client. Key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A self-service &lt;strong&gt;REST and gRPC API&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Over 150 custom CRDs&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In-house &lt;strong&gt;Go controllers&lt;/strong&gt; automating the creation of clusters, workloads, and managed services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in automatic reporting, policy enforcement, and &lt;strong&gt;FinOps&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not an off-the-shelf product. It’s a living platform, engineered for scalability, control, and team autonomy.&lt;/p&gt;

&lt;p&gt;🏙️&lt;strong&gt;Kubernetes serving smart cities&lt;/strong&gt;&lt;br&gt;
For a public-sector organization, we built a Kubernetes platform hosting critical components: web services, databases, Kafka brokers, and urban data collectors. Every microservice and every real-time pipeline is orchestrated resiliently. It was never just a “cluster” — it was a digital city operated continuously.&lt;/p&gt;

&lt;p&gt;💧&lt;strong&gt;Innovation flowing like water&lt;/strong&gt;&lt;br&gt;
Using Kubernetes and Kafka, we built a real-time water-consumption monitoring solution for a local operator: leak detection, live dashboards, and optimized storage. Proof that cloud-native and sustainability can go hand in hand.&lt;/p&gt;

&lt;p&gt;These projects show that at Edixos we build cloud-native platforms to engineering standards. If you’re looking for a partner who truly knows API Machinery, controllers, and GitOps — and speaks YAML and Go better than PowerPoint — you’re in the right place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;Cloud-native is a field of execution, not theory. At Edixos we don’t sell promises; we ship architectures that run, pipelines that deploy, platforms that evolve, and APIs that simplify. What we build is designed to last, to scale, and to serve your teams.&lt;/p&gt;

&lt;p&gt;And when the official documentation isn’t enough, that usually means we need to write it ourselves — in Go, with tests, and a solid controller-runtime. Whether you want to industrialize GitOps, create custom CRDs, stand up an enterprise PaaS, or adopt Crossplane for infrastructure as code, our engineers have already been there. And they still are.&lt;/p&gt;

&lt;p&gt;Curious how these platforms actually work under the hood? Read why Terraform falls short for Platform Engineering and how Kubernetes + CRDs deliver true self-service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let’s talk about your advanced Kubernetes challenges:
&lt;/h2&gt;

&lt;p&gt;Are you looking to automate operations, model your business processes, or industrialize deployments on Kubernetes? Let’s discuss your challenges and see how the API Machinery can bring you speed, reliability, and scalability.&lt;/p&gt;

&lt;p&gt;Straight answers:&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  When did Edixos start working with Kubernetes?
&lt;/h3&gt;

&lt;p&gt;Edixos' founder ran Kubernetes 1.2 in production in 2015, using Third Party Resources (the ancestors of CRDs) and installing clusters on AWS with kops. That decade of hands-on experience predates most managed Kubernetes offerings and shaped the company's platform-engineering practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a Kubernetes custom controller and why does it matter?
&lt;/h3&gt;

&lt;p&gt;A custom controller is code that watches Custom Resources and continuously reconciles real infrastructure to match a declared state. It matters because it turns Kubernetes into an API-driven platform: teams request databases, clusters, or workloads through YAML instead of tickets, with RBAC and governance built in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Edixos only deploy Kubernetes clusters, or build platforms on top?
&lt;/h3&gt;

&lt;p&gt;Both, but the value is in the platform layer. Edixos writes custom controllers, integrates Crossplane and Config Connector, and exposes infrastructure as self-service APIs (REST, gRPC, SDKs) — so internal teams provision what they need without friction while SRE and security keep central governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  What industries has Edixos built Kubernetes platforms for?
&lt;/h3&gt;

&lt;p&gt;Edixos has delivered cloud-native platforms across automotive (migrating 1,000+ applications to public cloud), the public sector (smart-city services on Kubernetes), and utilities (real-time water-consumption monitoring with Kafka), among others — each a production system, not a proof of concept.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
