<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>kcp.io – Blog</title><link>https://kcp.io/blog/</link><description>Recent content in Blog on kcp.io</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://kcp.io/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Blog: Get Ready for kcp ContribFest at KubeCon Europe 2026!</title><link>https://kcp.io/blog/2026/03/17/kcp-contribfest-kubecon-eu-2026-guide/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2026/03/17/kcp-contribfest-kubecon-eu-2026-guide/</guid><description>&lt;p>Pack your laptop and mark your calendar! kcp is hosting a &lt;a href="https://kccnceu2026.sched.com/event/2EMwW/contribfest-kcp-from-zero-to-your-first-pull-request-karol-szwaj-kubermatic-nelo-t-wallus-sap">ContribFest session&lt;/a> at &lt;strong>KubeCon + CloudNativeCon Europe 2026&lt;/strong> in Amsterdam on &lt;strong>Thursday, March 26, from 11:00 to 12:15 CET in room G106&lt;/strong>. Read on to get yourself prepared beforehand and make the most out of the session!&lt;/p>
&lt;h2 id="what-is-contribfest">What is ContribFest?&lt;/h2>
&lt;p>ContribFest is a track at KubeCon where CNCF projects host hands-on sessions working with their communities on real contributions. You don&amp;rsquo;t need to be an existing contributor — &lt;strong>new community members are especially encouraged to join!&lt;/strong>&lt;/p>
&lt;p>Our session, &lt;em>kcp: From Zero To Your First Pull Request&lt;/em>, is a 75-minute guided workshop where you&amp;rsquo;ll explore the kcp architecture, set up a local dev environment, and submit your very first pull request — all with personal guidance from maintainers. Just bring some familiarity with Kubernetes and general development practices.&lt;/p>
&lt;h2 id="what-to-prepare-before-you-get-there">What to prepare before you get there&lt;/h2>
&lt;p>To maximize your time during the session, we recommend completing these preparation steps beforehand.&lt;/p>
&lt;h3 id="1-learn-about-kcp">1. Learn about kcp&lt;/h3>
&lt;p>While smaller issues don&amp;rsquo;t require a deep knowledge of kcp, knowing the rough terminology, concepts, and architecture is a good starting point:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.kcp.io/kcp/main/concepts/terminology/">Terminology&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.kcp.io/kcp/main/setup/production/overview/">Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.kcp.io/kcp/main/concepts/quickstart-tenancy-and-apis/">Tenancy&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="2-fork-the-repos">2. Fork the repos&lt;/h3>
&lt;p>You&amp;rsquo;ll have the option to contribute to several kcp ecosystem repositories. To get started, follow the GitHub &lt;a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo#forking-a-repository">&amp;ldquo;Forking a repository&amp;rdquo;&lt;/a> guide and fork the ones you&amp;rsquo;re interested in:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/kcp-dev/kcp">kcp&lt;/a> — the core project&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/api-syncagent">api-syncagent&lt;/a> — synchronization agent for APIs&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/multicluster-provider">multicluster-provider&lt;/a> — multi-cluster provider for controller-runtime&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/kcp-operator">kcp-operator&lt;/a> — Kubernetes operator for deploying kcp&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/helm-charts">helm-charts&lt;/a> — Helm charts for kcp&lt;/li>
&lt;/ul>
&lt;h3 id="3-set-up-your-local-environment">3. Set up your local environment&lt;/h3>
&lt;p>kcp is written in Go — you&amp;rsquo;ll need a working Go toolchain installed. We have a few ways to run a local environment:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Single shard&lt;/strong> (recommended for most development): In most cases it is enough to &lt;code>go run&lt;/code> the kcp binary to run a single root shard with no proxy. Follow the &lt;a href="https://docs.kcp.io/kcp/main/setup/quickstart/">quickstart guide&lt;/a> to get started.&lt;/li>
&lt;li>&lt;strong>Tilt multi-shard with front proxy&lt;/strong>: For testing cross-shard features, you can use the &lt;a href="https://github.com/kcp-dev/kcp/blob/301a8f749e7b99a0c81f43b37aa5b5e5ff0fc0b4/Makefile#L459-L460">Tilt-based multi-shard setup&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Sharded test server&lt;/strong>: Another option for sharded testing is the &lt;a href="https://docs.kcp.io/kcp/main/developers/running-sharded/">sharded-test-server&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>The components don&amp;rsquo;t necessarily require a running kcp instance to develop — some have enough options for unit and e2e tests that usually include running kcp in some form.&lt;/p>
&lt;h3 id="4-test-your-setup">4. Test your setup&lt;/h3>
&lt;p>Let&amp;rsquo;s do a quick test to confirm everything is working:&lt;/p>
&lt;ol>
&lt;li>Navigate to your cloned fork of the kcp repo&lt;/li>
&lt;li>From the root, run &lt;code>make build&lt;/code>&lt;/li>
&lt;li>Then start a local kcp instance: &lt;code>./bin/kcp start&lt;/code>&lt;/li>
&lt;li>If kcp starts and you can connect with &lt;code>kubectl --kubeconfig .kcp/admin.kubeconfig&lt;/code>, you&amp;rsquo;re all set!&lt;/li>
&lt;/ol>
&lt;h3 id="5-find-something-to-work-on">5. Find something to work on&lt;/h3>
&lt;p>We label issues that should be a good entry point for new contributors as &lt;strong>&amp;ldquo;good first issue&amp;rdquo;&lt;/strong>. Browse the curated lists below to find something that interests you — and feel free to claim one ahead of time! Of course, if you feel brave, you can also tackle other issues.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/kcp-dev/kcp/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">kcp&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/api-syncagent/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">api-syncagent&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/multicluster-provider/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">multicluster-provider&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/kcp-operator/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">kcp-operator&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/kcp-dev/helm-charts/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">helm-charts&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="bonus-check-out-the-contribution-guides">Bonus: Check out the contribution guides&lt;/h3>
&lt;p>Take some time to read through the contribution guides to get familiar with the overall process:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/kcp-dev/kcp/blob/main/CONTRIBUTING.md">kcp Contributing Guide&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="getting-help">Getting help&lt;/h2>
&lt;p>Development topics are discussed mostly in our channel &lt;a href="https://kubernetes.slack.com/archives/C09C7UP1VLM">&lt;code>#kcp-dev&lt;/code>&lt;/a> on the Kubernetes Slack. If you don&amp;rsquo;t have a Kubernetes Slack account yet, get your invite here: &lt;a href="https://slack.kubernetes.io/">https://slack.kubernetes.io/&lt;/a>&lt;/p>
&lt;p>Don&amp;rsquo;t hesitate to reach out before, during, or after the session — we&amp;rsquo;re always happy to see new contributors to kcp!&lt;/p>
&lt;h2 id="-see-you-in-amsterdam">👋 See you in Amsterdam!&lt;/h2>
&lt;p>On behalf of the ContribFest co-hosts, thanks for following along! We look forward to meeting you in Amsterdam and working together on your first (or next!) kcp contribution. Make sure to say hello!&lt;/p></description></item><item><title>Blog: Our Schedule at KubeCon + CloudNativeCon Europe 2026</title><link>https://kcp.io/blog/2026/03/16/kcp-at-kubecon-cloudnativecon-eu-2026/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2026/03/16/kcp-at-kubecon-cloudnativecon-eu-2026/</guid><description>&lt;p>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/">KubeCon + CloudNativeCon Europe 2026&lt;/a> is just a &lt;strong>few days away&lt;/strong>! The major European cloud native conference kicks off on Monday, March 23rd in Amsterdam, Netherlands, and the kcp project will be there with exciting content and activities on every day!&lt;/p>
&lt;p>From talks to lightning sessions, there are plenty of opportunities to learn about kcp and connect with our maintainers. You can meet us at the &lt;strong>Project Pavilion&lt;/strong> on &lt;strong>Wednesday, March 25, from 14:00 to 17:00 CET at kiosk 18B&lt;/strong> — feel free to drop by to chat about kcp or just say hi. 👋&lt;/p>
&lt;p>We&amp;rsquo;re also running a hands-on &lt;a href="https://kccnceu2026.sched.com/event/2EMwW/contribfest-kcp-from-zero-to-your-first-pull-request-karol-szwaj-kubermatic-nelo-t-wallus-sap">Contribfest&lt;/a> on &lt;strong>Thursday, March 26, from 11:00 to 12:15 CET in room G106&lt;/strong>, where you can explore the kcp architecture, set up a local dev environment, and submit your very first pull request — all with personal guidance from maintainers. No deep prior experience required, just some familiarity with Kubernetes and general development practices. Don&amp;rsquo;t forget to bring your laptop!&lt;/p>
&lt;p>Here&amp;rsquo;s a full overview of all kcp activities at this year&amp;rsquo;s KubeCon and surrounding events:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Date &amp;amp; Time&lt;/th>
&lt;th>Title&lt;/th>
&lt;th>Speakers&lt;/th>
&lt;th>Location&lt;/th>
&lt;th>Link&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Sat, Mar 21, 2026 17:45-18:15 CET&lt;/td>
&lt;td>Cloud Native Rejekts: Achieving Platform Engineering Multi-Tenancy with kcp and Crossplane&lt;/td>
&lt;td>Simon Bein, Lovro Sviben&lt;/td>
&lt;td>Miro HQ Room 2&lt;/td>
&lt;td>&lt;a href="https://cloud-native-rejekts-eu-2026.sessionize.com/session/1106916">link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mon, Mar 23, 2026 13:40-13:45 CET&lt;/td>
&lt;td>Project Lightning Talk: kcp: Scaling The Kubernetes Control Plane For The Multi-Cluster Era&lt;/td>
&lt;td>Jan Willies&lt;/td>
&lt;td>Elicium 2&lt;/td>
&lt;td>&lt;a href="https://kccnceu2026.sched.com/event/2EFy8">link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Tue, Mar 24, 2026 17:00-17:30 CET&lt;/td>
&lt;td>When Multitenancy Goes Wrong: A Deep Dive Into Kcp&amp;rsquo;s First CVE&lt;/td>
&lt;td>Marko Mudrinić, Marvin Beckers&lt;/td>
&lt;td>Elicium 2&lt;/td>
&lt;td>&lt;a href="https://kccnceu2026.sched.com/event/2CW7x/when-multitenancy-goes-wrong-a-deep-dive-into-kcps-first-cve-marko-mudrinic-kubermatic-marvin-beckers-clickhouse">link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Wed, Mar 25, 2026 13:00-13:10 CET&lt;/td>
&lt;td>CNCF Platform Engineering Community: Why We Need a Universal Platform Engineering API-Layer and How kcp Unlocks It&lt;/td>
&lt;td>Simon Bein&lt;/td>
&lt;td>P-17B&lt;/td>
&lt;td>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/features-add-ons/project-engagement/#project-pavilion-directory">link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Wed, Mar 25, 2026 14:00-17:00 CET&lt;/td>
&lt;td>kcp Project Pavilion&lt;/td>
&lt;td>kcp contributors&lt;/td>
&lt;td>P-18B&lt;/td>
&lt;td>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/features-add-ons/project-engagement/#project-pavilion-directory">link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Wed, Mar 25, 2026 14:15-14:45 CET&lt;/td>
&lt;td>kcp Ecosystem: Platform Mesh: Breaking API Lock-In for True Multi-Cloud Service Portability&lt;/td>
&lt;td>Mirza Kopic, Mangirdas Judeikis&lt;/td>
&lt;td>Hall 8, Room G&lt;/td>
&lt;td>&lt;a href="https://kccnceu2026.sched.com/event/2CW2X/platform-mesh-breaking-api-lock-in-for-true-multi-cloud-service-portability-mirza-kopic-sap-mangirdas-judeikis-independent">link&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Thu, Mar 26, 2026 11:00-12:15 CET&lt;/td>
&lt;td>Contribfest: kcp: From Zero To Your First Pull Request&lt;/td>
&lt;td>Karol Szwaj, Nelo-T. Wallus&lt;/td>
&lt;td>G106&lt;/td>
&lt;td>&lt;a href="https://kccnceu2026.sched.com/event/2EMwW/contribfest-kcp-from-zero-to-your-first-pull-request-karol-szwaj-kubermatic-nelo-t-wallus-sap">link&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>We hope that you’re as thrilled for KubeCon as we are! See you there!&lt;/p></description></item><item><title>Blog: Our Schedule at KubeCon + CloudNativeCon Europe 2025</title><link>https://kcp.io/blog/2025/03/27/kcp-at-kubecon-cloudnativecon-eu-2025/</link><pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2025/03/27/kcp-at-kubecon-cloudnativecon-eu-2025/</guid><description>&lt;p>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/">KubeCon + CloudNativeCon Europe 2025&lt;/a> is just a &lt;strong>few days away&lt;/strong>! The major European cloud native conference is set to kick off on Tuesday, April 1 in London, England!&lt;/p>
&lt;p>The kcp project has prepared a lot of exiciting content and activites for this year&amp;rsquo;s KubeCon EU. Just like at KubeCon NA last year, you&amp;rsquo;ll have a chance to meet our maintainers at the &lt;strong>Project Pavilion&lt;/strong> on &lt;strong>Wednesday, April 2, from 15:30 to 19:45 BST at the Kiosk 5A&lt;/strong>. Feel free to drop by and talk anything about kcp or just say hi. 👋&lt;/p>
&lt;p>We&amp;rsquo;re very excited to present our &lt;a href="https://sched.co/1tx6b">first hands-on workshop&lt;/a> where attendees will have a chance to get familiar with multi-tenant Kubernetes APIs and controllers with kcp, while being guided by our maintainers and contributors. Join Robert Vasek, Nabarun Pal, Varsha Narsing, Marko Mudrinić, and Mangirdas Judeikis, on &lt;strong>Wednesday, April 2, at 11:15 BST&lt;/strong> for tons of learning and fun!&lt;/p>
&lt;p>But that&amp;rsquo;s not all, we&amp;rsquo;re having two more kcp talks at KubeCon:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://sched.co/1txAB">Thrusday, April 3, 11:00 - 11:30 BST: Extending Kubernetes Resource Model (KRM) Beyond Kubernetes Workloads&lt;/a> - Mangirdas Judeikis, Cast AI &amp;amp; Nabarun Pal, Independent&lt;/li>
&lt;li>&lt;a href="https://sched.co/1txFM">Thrusday, April 3, 15:00 - 15:30 BST: Dynamic Multi-Cluster Controllers With Controller-runtime&lt;/a> - Marvin Beckers, Kubermatic &amp;amp; Stefan Schimanski, NVIDIA&lt;/li>
&lt;/ul>
&lt;p>We hope that you’re as thrilled for KubeCon as we are! See you there!&lt;/p></description></item><item><title>Blog: Our Schedule at KubeCon + CloudNativeCon North America 2024</title><link>https://kcp.io/blog/2024/10/20/kcp-at-kubecon-cloudnativecon-na-2024/</link><pubDate>Sun, 20 Oct 2024 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2024/10/20/kcp-at-kubecon-cloudnativecon-na-2024/</guid><description>&lt;p>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/">KubeCon + CloudNativeCon North America 2024&lt;/a> will kick off in Salt Lake City on November 12, in less than a month.&lt;/p>
&lt;p>After a very successful KubeCon Europe in Paris, we&amp;rsquo;re happy to share that kcp maintainers will also be around in Salt Lake City. This time, kcp will also be at the &lt;strong>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/program/project-engagement/#project-pavilion">Project Pavilion&lt;/a>&lt;/strong> and maintainers will be around at a project kiosk on &lt;strong>Wednesday, November 13 from 3:15pm to 8:00pm&lt;/strong>. Feel free to drop by to chat about kcp, ask questions or just say hi!&lt;/p>
&lt;p>We are also excited to share the following sessions involving kcp. This time, we are happy to see talks coming from the wider community and utilizing kcp for their use cases.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Nov 13, 3:25pm&lt;/strong>: &lt;a href="https://sched.co/1i7lu">Deep Dive Into Generic Control Planes and kcp&lt;/a> at KubeCon + CloudNativeCon &amp;ndash; Stefan Schimanski (Upbound), Mangirdas Judeikis (Cast AI)&lt;/li>
&lt;li>&lt;strong>Nov 15, 4:55pm&lt;/strong>: &lt;a href="https://sched.co/1i7s5">Best of Both Worlds: Integrating Slurm with Kubernetes in a Kubernetes Native Way&lt;/a> at KubeCon + CloudNativeCon &amp;ndash; Eduardo Arango Gutierrez (NVIDIA), Angel Beltre (Sandia National Laboratories)&lt;/li>
&lt;/ul>
&lt;p>A special shoutout goes to the talk &lt;a href="https://sched.co/1i7nS">Kubernetes Workspaces: Enhancing Multi-Tenancy with Intelligent Apiserver Proxying&lt;/a> by James Munnelly and Andrea Tosatto (both Apple), which is not presenting kcp but leverages some of the language and concepts that originated in the kcp project. We&amp;rsquo;re excited to see what they&amp;rsquo;ve built!&lt;/p></description></item><item><title>Blog: Our Schedule at KubeCon + CloudNativeCon Europe 2024</title><link>https://kcp.io/blog/2024/03/06/kcp-at-kubecon-cloudnativecon-eu-2024/</link><pubDate>Wed, 06 Mar 2024 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2024/03/06/kcp-at-kubecon-cloudnativecon-eu-2024/</guid><description>&lt;p>&lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/">KubeCon + CloudNativeCon Europe 2024&lt;/a> is around the corner and we can&amp;rsquo;t wait to see you in Paris!&lt;/p>
&lt;p>We are happy to tell you that kcp and several of its maintainers will be present and hope to chat a lot about the project. This will be kcp&amp;rsquo;s first KubeCon + CloudNativeCon as &lt;a href="https://kcp.io/blog/2024/01/24/joining-the-cncf-sandbox/">CNCF Sandbox project&lt;/a> and we couldn&amp;rsquo;t be more excited about joining KubeCon + CloudNativeCon as a CNCF project.&lt;/p>
&lt;p>Currently, the following sessions will cover kcp (schedule might be subject to change):&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Mar 18, 5:40pm&lt;/strong>: &lt;a href="https://cfp.cloud-native.rejekts.io/cloud-native-rejekts-eu-paris-2024/talk/JUBTCX/">&lt;strong>Unlocking New Possibilities: Bridging Linux and Kubernetes&lt;/strong>&lt;/a> at &lt;a href="https://cloud-native.rejekts.io/">Cloud Native Rejekts&lt;/a> &amp;ndash; Mangirdas Judeikis&lt;/li>
&lt;li>&lt;strong>Mar 19, 11:05am&lt;/strong>: &lt;a href="https://colocatedeventseu2024.sched.com/event/1YFfY/building-a-platform-engineering-api-layer-with-kcp-marvin-beckers-kubermatic-gmbh">&lt;strong>Building a Platform Engineering API Layer with kcp&lt;/strong>&lt;/a> at CNCF-hosted co-located event &lt;a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/co-located-events/platform-engineering-day/">Platform Engineering Day&lt;/a> &amp;ndash; Marvin Beckers&lt;/li>
&lt;li>&lt;strong>Mar 19, 3:00pm&lt;/strong>: &lt;a href="https://kccnceu2024.sched.com/event/1aQhV">&lt;strong>Kubernetes-style APIs for SaaS-like Control Planes with kcp (Project Lightning Talk)&lt;/strong>&lt;/a> at KubeCon + CloudNativeCon &amp;ndash; Mangirdas Judeikis, Marvin Beckers&lt;/li>
&lt;li>&lt;strong>Mar 21, 3:25pm&lt;/strong>: &lt;a href="https://kccnceu2024.sched.com/event/1YePC">&lt;strong>Why Kubernetes Is Inappropriate for Platforms, and How to Make It Better.&lt;/strong>&lt;/a> at KubeCon + CloudNativeCon &amp;ndash; Stefan Schimanski, Mangirdas Judeikis, Sebastian Scheele&lt;/li>
&lt;/ul>
&lt;p>We hope to meet you all in Paris and discuss building the control plane of the future!&lt;/p></description></item><item><title>Blog: Joining the CNCF Sandbox</title><link>https://kcp.io/blog/2024/01/24/joining-the-cncf-sandbox/</link><pubDate>Wed, 24 Jan 2024 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2024/01/24/joining-the-cncf-sandbox/</guid><description>&lt;p>With the new year still fresh, we have big news to share. We are thrilled to announce that kcp has joined the CNCF and completed onboarding as a CNCF Sandbox project. A huge thanks to the sponsors of &lt;a href="https://github.com/cncf/sandbox/issues/47">our application&lt;/a>. It is an honor to be among the greatest open source projects that our ecosystem has to offer!&lt;/p>
&lt;p>If you haven&amp;rsquo;t checked in with the kcp project in a while, let us bring you up to speed on the last few months. In April this year, Red Hat &lt;a href="https://groups.google.com/g/kcp-users/c/yTe8RMcpxrg">announced&lt;/a> that kcp won&amp;rsquo;t have its immediate focus and extended an invitation to the community to take over the project.&lt;/p>
&lt;p>A group of committed organizations and individuals decided to respond to the call for action and established a &lt;a href="https://github.com/kcp-dev/kcp/blob/main/GOVERNANCE.md">new project governance&lt;/a> and bootstrapped a &lt;a href="https://github.com/kcp-dev/kcp/pull/2953">new list of maintainers&lt;/a> to lead kcp as a community project. Since then, more people have joined the list of maintainers to drive the kcp project forward. We relaunched &lt;a href="https://kcp.io">kcp.io&lt;/a> in a new design recently to commemorate the &amp;ldquo;new&amp;rdquo; kcp project.&lt;/p>
&lt;p>From the inception of the new project governance, it was clear that kcp does not exist in a vacuum. It is a citizen of the Kubernetes ecosystem and as such, joining the CNCF to formalize that citizenship was the obvious and natural road to take. Eventually, after evaluating our application, the &lt;a href="https://www.cncf.io/people/technical-oversight-committee/">Technical Oversight Committee (TOC)&lt;/a> decided to accept us into the CNCF Sandbox program.&lt;/p>
&lt;p>Obviously, we are beyond excited about this decision and about the amazing community of open source projects we are joining. It is incredibly humbling to become a part of the CNCF community - in a way, it feels like coming home.&lt;/p>
&lt;p>We have big plans for 2024, and for the time beyond. Adding functionality vital to the mission of kcp, improving the experience of running kcp on top of Kubernetes, spreading the word about building scalable control planes for SaaS-like services, growing the community - You name it. We hope to see you on our bi-weekly community meetings or on our GitHub repositories soon!&lt;/p></description></item><item><title>Blog: Launch of kcp.io – Talk to us at KubeCon!</title><link>https://kcp.io/blog/2022/10/20/launch-of-kcp.io-talk-to-us-at-kubecon/</link><pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2022/10/20/launch-of-kcp.io-talk-to-us-at-kubecon/</guid><description>&lt;p>Welcome to the website of the kcp project. We have come a long way from the
&lt;a href="https://github.com/kcp-dev/kcp/commit/01ff3300345f1094d1ce7ad4da323ccbba81ca3a">first commit
to the kcp project on July 7 2020&lt;/a>, to the project we see today. We started with an experiment
to add logical clusters to kube-apiserver, and we&amp;rsquo;ve evolved into a tool that enables
large scale multi-tenant services based on the Kubernetes API.&lt;/p>
&lt;p>Today we are proud to announce the kcp website:&lt;/p>
&lt;a href="https://kcp.io">
&lt;img src="https://kcp.io/images/kcp-io.png#center" alt="kcp – Simplifying building massively multi-tenant services. Together."/>
&lt;/a>
&lt;p>We love collaboration. Together, we can change the world.&lt;/p>
&lt;p>Join us at the KubeCon NA 2022 in Detroit. A number of people from the community will be there and we are happy to hear feedback or the next exciting idea kcp will enable. Here is a list of where you can find us:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Oct 25, 11am&lt;/strong> OpenShift Commons: &lt;a href="https://commons.openshift.org/gatherings/kubecon-22-oct-25/">&lt;strong>The Future of Kubernetes is Control Planes&lt;/strong>&lt;/a> – Andy Goldstein, Stefan Schimanski, Tushar Katarki&lt;/li>
&lt;li>&lt;strong>Oct 25, 1pm&lt;/strong> OpenShift Commons: &lt;a href="https://commons.openshift.org/gatherings/kubecon-22-oct-25/">&lt;strong>Multicluster OpenShift Community Meet-Up&lt;/strong>&lt;/a> – Andy Goldstein, Stefan Schimanski, Alberto Garcia Lamela, Tushar Katarki&lt;/li>
&lt;li>&lt;strong>Oct 26, 5:25pm&lt;/strong> KubeCon Talk: &lt;a href="https://kccncna2022.sched.com/event/182I7/kcp-towards-1000000-clusters-namewworkspaced-crds-stefan-schimanski-red-hat?iframe=no&amp;amp;w=100%25&amp;amp;sidebar=yes&amp;amp;bg=no">&lt;strong>KCP towards 1,000,000 clusters&lt;/strong>&lt;/a>, Stefan Schimanski&lt;/li>
&lt;li>&lt;strong>Oct 26, 5:25pm&lt;/strong> KubeCon Talk: &lt;a href="https://kccncna2022.sched.com/event/182Hj">&lt;strong>Like Peas And Carrots: Argo CD And Crossplane For Infrastructure Management&lt;/strong>&lt;/a> – Viktor Farcic, Jesse Suen&lt;/li>
&lt;li>&lt;strong>Oct 27, 11:55am&lt;/strong> KubeCon Talk: &lt;a href="https://kccncna2022.sched.com/event/182Hm/towards-something-better-than-crds-in-a-post-operator-world-stefan-schimanski-red-hat?iframe=no&amp;amp;w=100%25&amp;amp;sidebar=yes&amp;amp;bg=no">&lt;strong>Towards Something Better Than CRDs In a Post-Operator World&lt;/strong>&lt;/a> – Stefan Schimanski&lt;/li>
&lt;li>&lt;strong>Oct 27, 2:30pm&lt;/strong> Virtual KubeCon Red Hat Booth: &lt;a href="https://kubecon-cloudnativecon-na.com/login/?msg=501">&lt;strong>Virtual Office Hours: KCP&lt;/strong>&lt;/a> – Andy Goldstein, Nolan Brubaker, Steve Kuznetsov – Login to the KubeCon virtual platform and navigate to the Red Hat booth to join&lt;/li>
&lt;li>&lt;strong>Oct 28, 11am&lt;/strong> KubeCon Talk: &lt;a href="https://kccncna2022.sched.com/event/182Ow">&lt;strong>Crossplane Intro And Deep Dive - The Cloud Native Control Plane Framework&lt;/strong>&lt;/a> – Jared Watts, Matthias Luebken &amp;amp; Nic Cope, Upbound; Bob Haddleton, Nokia&lt;/li>
&lt;/ul>
&lt;p>For many more details about what kcp is and how we arrived where we are today, please enjoy reading the second blog post: &lt;a href="https://kcp.io/blog/2022/10/19/kcp-the-journey/">&lt;strong>kcp: the journey&lt;/strong>&lt;/a>.&lt;/p></description></item><item><title>Blog: kcp - the journey</title><link>https://kcp.io/blog/2022/10/19/kcp-the-journey/</link><pubDate>Wed, 19 Oct 2022 00:00:00 +0000</pubDate><guid>https://kcp.io/blog/2022/10/19/kcp-the-journey/</guid><description>&lt;p>One and a half years ago at KubeCon 2021 in Amsterdam, &lt;a href="https://www.youtube.com/watch?v=Xd0uzgZqYgk">Clayton Coleman sent us on a journey&lt;/a>:&lt;/p>
&lt;p>What if we took Kubernetes – as we had created it as a community over 7 years ago – and removed all Pod-related resources and everything that is not clearly of generic use, resulting in a generic control plane?&lt;/p>
&lt;p>What if we further split clusters hosting many applications into very small &lt;strong>logical clusters&lt;/strong> with one application each, and each application owner just chooses and picks the additional APIs necessary for that application? And what if a logical cluster is cheap, super cheap, and super quick to create, as cheap and quick as a namespace creation?&lt;/p>
&lt;p>These are two foundational and yet technically small changes in the architecture of Kubernetes. Today everybody takes for granted that Kubernetes is tightly coupled with a large number of built-in APIs, the API monolith we all know, and that clusters must be shared because of the large overhead of creating and running one more cluster, both in resource cost and management overhead.&lt;/p>
&lt;a href="https://www.youtube.com/watch?v=Xd0uzgZqYgk">
&lt;img src="https://kcp.io/images/keynote-clayton-2020.png#center" alt="Kubernetes as the Control Plane for the Hybrid Cloud"/>
&lt;/a>
&lt;p>While prototyping the system over the past 15 months, we quickly realized that the small size but the large number of
logical clusters opens up a green field for innovation: a logical cluster alone, even if we re-add the well-known workload APIs, is not a very exciting idea. Projects in the ecosystem like &lt;a href="https://k3s.io/">k3s&lt;/a>, &lt;a href="https://github.com/loft-sh/vcluster">vcluster&lt;/a> or service offerings like &lt;a href="https://civo.com">Civo&lt;/a> have pioneered small, personal clusters for years. With logical clusters we are trying to go farther by reducing the control plane cost by another magnitude or two, giving these companies a tool for optimizing their services even more. But the real value and the actual innovation happens when re-connecting those new logical clusters into something bigger.&lt;/p>
&lt;p>This &amp;ldquo;something bigger&amp;rdquo; can have different shapes. Let&amp;rsquo;s look at the use-cases we encountered.&lt;/p>
&lt;h1 id="hierarchies-and-other-relationships">Hierarchies and other Relationships&lt;/h1>
&lt;p>If we have hundreds or thousands of clusters as one company, we will start thinking about how to organize them. One model we explored early on is a logical cluster hierarchy, like a traditional file system with a directory tree, logical clusters organized in a tree. We call the logical clusters here workspaces, and workspaces are nested, as file system directories are nested.&lt;/p>
&lt;p>Similarly to file systems, the workspaces have no shared logic, other than the fact that workspace access somehow depends on access to a parent workspace. As outlined in Clayton&amp;rsquo;s original prototype, every workspace, nested or not, has an independent set of resources.&lt;/p>
&lt;p>Another option for logical cluster organization could be that established by Google with their Docs office suite, where a folder structure exists, but most users actually just share links to documents or invite collaborators to existing documents. With that model, documents are not much inter-connected in reality in an organized way, but rather form an organic web with references by global ID (URL). Even such a model is totally compatible with the logical cluster concept.&lt;/p>
&lt;h1 id="sharing-apis">Sharing APIs&lt;/h1>
&lt;p>With thousands of workspaces in a platform, each starting out with only a small set of generic APIs that are not very useful on their own, we realized that we need an easy mechanism for users to choose additional APIs and add them to their workspace.&lt;/p>
&lt;p>CustomResourceDefinitions are provided by Kubernetes and kcp supports them as well. We knew that managing CRDs can already become a nightmare with a few handful of Kubernetes clusters. With a number in the thousands that&amp;rsquo;s likely not a good approach. Hence, we started wondering whether there aren&amp;rsquo;t ways to share resources between workspaces. This sounds a lot like forcing workspaces and their owners to agree on APIs, i.e. the big inconvenience of big clusters that all users must agree on the operator versions or other extensions to the cluster.&lt;/p>
&lt;p>So what if we want shared APIs, but give a user still the choice which API version or service version to choose? What we have implemented is a model where APIs are published through an APIExport by a service provider in one workspace, and consumers may add the exported APIs to their workspaces through the creation of APIBindings pointing to the export.&lt;/p>
&lt;p>Some readers might be scared: &amp;ldquo;the kcp project is building proprietary APIs here and diverge from Kube&amp;rdquo;. We can assure: everything we are building with APIExports and APIBindings is heavily based on CRDs and all its technology and ecosystem around. APIExports and APIBindings are a higher level API that eventually, further down, creates (technically invisible) CRDs. All the features and the tooling of CRDs can be used. Existing CRDs can be exposed with APIExports.&lt;/p>
&lt;p>We like to say that Kubernetes is at the core of kcp. And this is the perfect example: APIExport/APIBinding-based resources are served through apiextension-apiserver and with that are 100% compatible to Kubernetes API conventions. That&amp;rsquo;s one of the rules we set in stone in the project:&lt;/p>
&lt;h1 id="a-workspace-is-kubernetes-no-compromises">A workspace is Kubernetes. No compromises.&lt;/h1>
&lt;p>with the nuance that we intentionally disable workload APIs to start fresh as a generic control plane.&lt;/p>
&lt;h1 id="towards-a-new-extension-model-for-service-providers">Towards a new Extension Model for Service Providers&lt;/h1>
&lt;p>We have mentioned one subtle, innocently looking detail where APIExports/APIBindings differ from normal CRDs, and this has a giant consequence for the philosophy of how people think of APIs in kcp:&lt;/p>
&lt;p>In a workspace that is bound to an API of e.g. widgets, provided by an API service provider in another workspace, the user can do &lt;code>kubectl get widgets&lt;/code> as expected, but a &lt;code>kubectl get crd widgets.group.com&lt;/code> will not show anything.&lt;/p>
&lt;p>This detail suggests that the CustomResourceDefinition, the life-cycle of it, is completely in the hands of the service provider. Classically in Kubernetes, a custom resource is defined by a CRD, and an operator both provides the CRD (= manages its life-cycle), and at the same time also runs controllers to implement the actual logic of the CustomResources, e.g. widgets in our example.&lt;/p>
&lt;p>And now the final technical step: if the CRD is managed by a service provider, why not let the service provider run the controllers too.&lt;/p>
&lt;p>&lt;strong>This is a powerful thought!&lt;/strong> It has the potential to disrupt how we think about custom resources in Kubernetes as a whole!&lt;/p>
&lt;p>Think about it: in this model the user, for the first time, can really pick &amp;amp; choose just the API. No thought about where it comes from, who operates it, which operator adds the logic and whether the operator is still maintained in a year from now, or whether there is even an operator involved to add behaviour to custom resources. The API, and only the API becomes the interface. Call it the contract between user and service provider. This is a change in philosophy.&lt;/p>
&lt;p>And there we are: we have built an extension mechanism for multi-tenant services. Workspaces give us isolation for logical clusters, i.e. multi-tenancy and APIExport+APIBinding allow a service provider to publish an API to many tenants and run controllers to act on the resource. This is a persona the Kubernetes ecosystem has not known.&lt;/p>
&lt;p>Of course, there are many more details about how a multi-tenant controller actually looks like. How can the service provider access tenant data both securely and efficiently? How does this scale? But this is a topic for another post.&lt;/p>
&lt;h1 id="massive-multi-tenancy">Massive Multi-Tenancy&lt;/h1>
&lt;p>Some readers at this point will argue that multi-tenancy on Kubernetes has been solved, even for operators and APIs. &lt;a href="https://olm.operatorframework.io/">Red Hat&amp;rsquo;s Operator Life-Cycle Operator (OLM)&lt;/a> for example allows to delegate operator installation to users and it explores ways for multi-tenant operators. Also OpenShift and others have implemented multi-tenancy on-top of Kubernetes for a long time.&lt;/p>
&lt;p>Furthermore, projects around the &lt;a href="https://www.vcluster.com/">vcluster&lt;/a> idea found other ways to implement multi-tenancy. In a vcluster setup users can even install their own CRDs.&lt;/p>
&lt;p>What all these approaches have in common is that they are somewhere on a spectrum between strength of isolation and being cheap. You cannot have both. Cheap here means the resource overhead (cpu &amp;amp; memory &amp;amp; administration) per tenant. Running multiple real Kubernetes clusters gives perfect isolation, but scores poorly on the cost and administrative complexity scale. vcluster gives pretty good isolation, but is still kind of heavy, and needs administrational tools to keep that part of the story under control. What these solutions do is that they do kube, more kube, sometimes many more kube. But they use kube mostly unmodified.&lt;/p>
&lt;p>Part of Clayton&amp;rsquo;s mandate was to think outside of the box, to question foundational choices we have made in kube 7 or 8 years ago.&lt;/p>
&lt;p>Already in Clayton&amp;rsquo;s original prototype, he had basically added namespacing to kube-apiserver, i.e. something similar to namespacing in the Linux kernel which eventually made Docker and containers per se possible. Technically, Clayton&amp;rsquo;s prototype did the same thing, to eventually allow it to serve isolated clusters under &lt;code>/clusters/user&lt;/code> through a shared kernel, the Kubernetes control plane.&lt;/p>
&lt;p>What if we build a system that can be deployed with many apiservers, all behind a load-balancer, and each serves a subset, a partition of the logical clusters under &lt;code>/clusters/&amp;lt;logical-cluster-name&amp;gt;&lt;/code>. Then we could scale up horizontally as much as we want.&lt;/p>
&lt;p>Well, of course there is lots more to think about here. But that thought fundamentally is correct. That&amp;rsquo;s what we have done. The complications here are that we are talking about cross-workspace logic like APIExports and APIBindings (and other APIs we are building). An apiserver (we call them shards) needs certain knowledge about the global state. In this case, every shard must know about APIExports, and a multi-tenant controller must know about APIBindings and how to access shards.&lt;/p>
&lt;p>So a large focus of the kcp project is to explore and implement API patterns that allow this horizontal scaling. An intentional trick here is that every logical cluster aka workspace is 100% Kubernetes API convention conformant. Cross-workspace we have more freedom. Clearly, this is a crucial insight to scale up horizontally without trying to solve the CAP theorem on that path.&lt;/p>
&lt;h1 id="what-have-we-built">What have we Built?&lt;/h1>
&lt;p>Very early on, we figured that&lt;/p>
&lt;pre>&lt;code>kcp is an ideal platform for massively multi-tenant service providers.
&lt;/code>&lt;/pre>
&lt;p>This eventually became the slogan on our website kcp.io. We have seen&lt;/p>
&lt;ol>
&lt;li>how APIExports and APIBindings allow a service provider extension model.&lt;/li>
&lt;li>how small, mostly independent clusters allow horizontal scaling.&lt;/li>
&lt;li>how the secret sauce (actually not so secret as everything we are doing here is open) is to combine (1) and (2) by coming up with API abstractions that don&amp;rsquo;t conflict with horizontal scaling, e.g. that can survive network splits and network latency across the globe.&lt;/li>
&lt;/ol>
&lt;p>On this road, we have repeatedly observed colleagues realizing the power of (1) and (2), switching their head from that of a product developer to that of a service provider developer, seeing people inspired by the power for a service provider platform for them.&lt;/p>
&lt;p>Our vision is that – with a globally running instance of kcp – &lt;strong>one engineer&lt;/strong> can bring a service idea from inception to billing the customers down from many many months of work to a few weeks at max. Empower the engineers.&lt;/p>
&lt;p>With Kubernetes, 7 or 8 years ago we got a multi-machine compute platform. It turned running workloads planet-scale from super complex into a commodity functionality of an open-source project. With kcp we aim at making building multi-tenant APIs boring. A next step on this journey. Multi-tenant APIs that can be shared. APIs that can be composed. APIs that are not caught in individual clusters. With that we hope to contribute to an ecosystem that can&lt;/p>
&lt;ul>
&lt;li>innovate faster,&lt;/li>
&lt;li>collaborate more,&lt;/li>
&lt;li>and most importantly: can bring value to our users in a shorter time.&lt;/li>
&lt;/ul></description></item></channel></rss>