# Episode 26 - Extending Kubernetes with Interfaces (CxI) ## Tagline: ## Tweatable quotes: ## Hosts - Michael Gasch - Duffie Cooley - Bryan Liles - Patrick Barker ## Topic > **Please note: this show has been submited as "clean", and so we must keep our language.** One of the main benefits and, without any doubt, reason for its success is its support for different infrastructure platforms and cloud environments. This has been achieved by making certain (core) components, like container runtimes, networking, storage, etc. pluggable. As with any successful and quickly growing project, this hasn't been the case since its inception though. It took time to remove hard-coded dependencies, e.g. the Docker container runtime, from the core code base by prodividing extensible plugin mechanisms. Today, these integration points are known as interfaces, such as the Container Runtime Interface (CRI), Container Network Interface (CNI) and Container Storage Interface (CSI). In this episode we'll explore the history and reasons why these interfaces were neccessary for Kubernetes' success. We will discuss some of the major interfaces defined, how to use them, explore other (perhaps lesser known) extension points and discuss potential limitations and drawbacks of the extensibility model in Kubernetes. ### Introduction Hello, hello, hello and welcome back to another episode of The Podlets, your favorite Cloud Native Podcast. I am Michael Gasch and I am honored to be your host on this episode. We have a wonderful panel today, so let me briefly introduce our guests... ### Outline 1) What do we mean by "Extending Kubernetes"? 2) Why do we need that? 3) How does the community reach consensus on whether an interface is required/how it should be defined? 4) Let's explore some popular interfaces - CRI - CNI - CSI - CPI (Cloud Provider Interface) 5) Are there any other, perhaps lesser known, interfaces and extension points? - kubectl - API (Server) Extension - CRDs - Webhooks - Custom API Server - Custom storage - Scheduler Extension - Device Plugin - Custom Controllers/Operators - Virtual Kubelet? 6) How does Cluster API fit into that picture? 7) What are the limits in k8s? 8) Useful resources to dig deeper (explore, develop) 9) Summary and closing ## References - [Extending Kubernetes](https://kubernetes.io/docs/concepts/extend-kubernetes/extend-cluster/) - [Introducing Container Runtime Interface (CRI) in Kubernetes](https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/) - [Container runtimes (K8s docs)](https://kubernetes.io/docs/setup/production-environment/container-runtimes/) - [Let's Try Every CRI Runtime Available for Kubernetes](https://www.youtube.com/watch?v=FKoVztEQHss) - [Cloud Provider Interface](https://cloud-provider-vsphere.sigs.k8s.io/cloud_provider_interface.html) - [Container Storage Interface](https://cloud-provider-vsphere.sigs.k8s.io/container_storage_interface.html) - [Container Network Interface](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) - [Device Plugins](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) - [Virtual Kubelet](https://virtual-kubelet.io/)