Who are we? Introducing myself and introducing OVH OVHcloud
Slide 3
Horacio Gonzalez @LostInBrittany Spaniard lost in Brittany, developer, dreamer and all-around geek
Flutter
Slide 4
OVHcloud: A global leader Web Cloud & Telcom
30 Data Centers in 12 locations
1 Million+ Servers produced since 1999
Private Cloud
34 Points of Presence on a 20 TBPS Bandwidth Network
1.5 Million Customers across 132 countries
Public Cloud
2200 Employees worldwide
3.8 Million Websites hosting
Storage
115K Private Cloud VMS running
1.5 Billion Euros Invested since 2016
300K Public Cloud instances running
P.U.E. 1.09 Energy efficiency indicator
380K Physical Servers running in our data centers
20 Years in Business Disrupting since 1999
Network & Security
Slide 5
OVHcloud Managed Kubernetes You use it, we operate it
Slide 6
Built over our Openstack based Public Cloud
Slide 7
Some interesting features
Slide 8
Operating Kubernetes Easier said than done
Slide 9
Operating microservices?
Are you sure you want to operate them by hand?
Slide 10
Taming microservices with Kubernetes
Slide 11
Declarative infrastructure
Slide 12
Desired State Management
Slide 13
Beyond a simple deployment
Everything is good now, isn’t it?
Slide 14
Complex deployments
Slide 15
Complex deployments
Slide 16
Helm Charts are configuration
Operating is more than installs & upgrades
Slide 17
Kubernetes is about automation
How about automating human operators?
Slide 18
Kubernetes Operators
A Kubernetes version of the human operator
Slide 19
Building operators
Basic K8s elements: Controllers and Custom Resources
Slide 20
Kubernetes Controllers Keeping an eye on the resources
Slide 21
A control loop
They watch the state of the cluster, and make or request changes where needed
Slide 22
A reconcile loop
Strives to reconcile current state and desired state
Slide 23
Custom Resource Definitions Extending Kubernetes API
Slide 24
Extending Kubernetes API
By defining new types of resources
Slide 25
Kubernetes Operator Automating operations
Slide 26
What’s a Kubernetes Operator?
Slide 27
Example: databases
Things like adding an instance to a pool, doing a backup, sharding…
Slide 28
Knowledge encoded in CRDs and Controllers
Slide 29
Custom Controllers for Custom Resources
Operators implement and manage Custom Resources using custom reconciliation logic
Slide 30
Operator Capability Model
Gauging the operator maturity
Slide 31
How to write an Operator
Slide 32
Kubebuilder
SDK for building Kubernetes APIs using CRDs
Slide 33
The Operator Framework
Open source framework to accelerate the development of an Operator
Slide 34
Operator SDK
Three different ways to build an Operator
Slide 35
Operator SDK and Capability Model
Slide 36
Operator Lifecycle Manager
Slide 37
OperatorHub.io
Slide 38
Harbor Operator Managing private registries at scale
Slide 39
We wanted to build a new product
OVHcloud Managed Private Registry
Slide 40
Looking at the Open Source world
Two main alternatives around Docker Registry
Slide 41
Harbor has more community traction
Two main alternatives
Slide 42
Harbor has lots of components
Slide 43
But it has a Helm Chart It should be easy to install, isn’t it? $ helm install harbor What about configuration? Installing a 200 GB K8s volume? Nginx pods for routing requests? One DB instance per customer? Managing pods all around the cluster?
Slide 44
We wanted a Managed Private Registry
Slide 45
Using the platform
Kubernetes tooling to the rescue
Slide 46
Let’s automate it
We needed an operator… and there wasn’t any
Slide 47
Working with the community
Harbor community also needed the operator
Slide 48
The challenge: reconciliation loop
Slide 49
The Harbor Operator
Slide 50
It’s Open Source
https://github.com/goharbor/harbor-operator
Slide 51
LoadBalancer Operator A managed LoadBalancer at scale
Slide 52
Load Balancer: a critical cog
Cornerstone of any Cloud Provider’s infrastructure
Slide 53
Our legacy Load Balancer stack ● Excellent performances ○ ○
Built on bare metal servers + BGP Custom made servers tuned for network traffic
● Carry the TLS termination ○
SSL / LetsEncrypt
● Not cloud ready ○ ○
Piloted by configuration files Long configuration loading time
● Custom made hardware ○ ○
Slower to build Needs to be deployed on 30 datacenters
Slide 54
Our needs for a new Load Balancer ● Supporting mass update ● Quickly reconfigurable ● Available anywhere quickly ● Easily operable ● Integrated into our Public Cloud
Slide 55
Building it on Kubernetes
Slide 56
A Load Balancer in a pod
Slide 57
Orchestrating one million LBs…
kubectl apply -f lb
is not an option!
Adding network interfaces on the fly
Using annotations to add interfaces to pod
Slide 61
Config management Using Config Map How to detect a change on Config Map files? Watch + Trigger? More information on Config Map working martensson.io/go-fsnotify-and-kubernetes-configmaps
Slide 62
A Controller to watch and trigger
Slide 63
Observability
Tried Prometheus Operator, limited to one container per pod Switched to Warp 10 with Beamium Operator