diff --git a/slides/k8s/setup-devel.md b/slides/k8s/setup-devel.md
new file mode 100644
index 00000000..8d31f295
--- /dev/null
+++ b/slides/k8s/setup-devel.md
@@ -0,0 +1,145 @@
+# Running a local development cluster
+
+- Let's review some options to run Kubernetes locally
+
+- There is no "best option", it depends what you value:
+
+ - ability to run on all platforms (Linux, Mac, Windows, other?)
+
+ - ability to run clusters with multiple nodes
+
+ - ability to run multiple clusters side by side
+
+ - ability to run recent (or even, unreleased) versions of Kubernetes
+
+ - availability of plugins
+
+ - etc.
+
+---
+
+## Docker Desktop
+
+- Available on Mac and Windows
+
+- Gives you one cluster with one node
+
+- Rather old version of Kubernetes
+
+- Very easy to use if you are already using Docker Desktop:
+
+ go to Docker Desktop preferences and enable Kubernetes
+
+- Ideal for Docker users who need good integration between both platforms
+
+---
+
+## [k3d](https://k3d.io/)
+
+- Based on [K3s](https://k3s.io/) by Rancher Labs
+
+- Requires Docker
+
+- Runs Kubernetes nodes in Docker containers
+
+- Can deploy multiple clusters, with multiple nodes, and multiple master nodes
+
+- As of June 2020, two versions co-exist: stable (1.7) and beta (3.0)
+
+- They have different syntax and options, this can be confusing
+
+ (but don't let that stop you!)
+
+---
+
+## k3d in action
+
+- Get `k3d` beta 3 binary on https://github.com/rancher/k3d/releases
+
+- Create a simple cluster:
+ ```bash
+ k3d create cluster petitcluster --update-kubeconfig
+ ```
+
+- Use it:
+ ```bash
+ kubectl config use-context k3d-petitcluster
+ ```
+
+- Create a more complex cluster with a custom version:
+ ```bash
+ k3d create cluster groscluster --update-kubeconfig \
+ --image rancher/k3s:v1.18.3-k3s1 --masters 3 --workers 5 --api-port 6444
+ ```
+
+ (note: API port seems to be necessary when running multiple clusters)
+
+---
+
+## [KinD](https://kind.sigs.k8s.io/)
+
+- Kubernetes-in-Docker
+
+- Requires Docker (obviously!)
+
+- Deploying a single node cluster using the latest version is simple:
+ ```bash
+ kind create cluster
+ ```
+
+- More advanced scenarios require writing a short [config file](https://kind.sigs.k8s.io/docs/user/quick-start#configuring-your-kind-cluster)
+
+ (to define multiple nodes, multiple master nodes, set Kubernetes versions ...)
+
+- Can deploy multiple clusters
+
+---
+
+## [Minikube](https://minikube.sigs.k8s.io/docs/)
+
+- The "legacy" option!
+
+ (note: this is not a bad thing, it means that it's very stable, has lots of plugins, etc.)
+
+- Supports many [drivers](https://minikube.sigs.k8s.io/docs/drivers/)
+
+ (HyperKit, Hyper-V, KVM, VirtualBox, but also Docker and many others)
+
+- Can deploy a single cluster; recent versions can deploy multiple nodes
+
+- Great option if you want a "Kubernetes first" experience
+
+ (i.e. if you don't already have Docker and/or don't want/need it)
+
+---
+
+## [MicroK8s](https://microk8s.io/)
+
+- Available on Linux, and since recently, on Mac and Windows as well
+
+- The Linux version is installed through Snap
+
+ (which is pre-installed on all recent versions of Ubuntu)
+
+- Also supports clustering (as in, multiple machines running MicroK8s)
+
+- DNS is not enabled by default; enable it with `microk8s enable dns`
+
+---
+
+## VM with custom install
+
+- Choose your own adventure!
+
+- Pick any Linux distribution!
+
+- Build your cluster from scratch or use a Kubernetes installer!
+
+- Discover exotic CNI plugins and container runtimes!
+
+- The only limit is yourself, and the time you are willing to sink in!
+
+???
+
+:EN:- Kubernetes options for local development
+:FR:- Installation de Kubernetes pour travailler en local
diff --git a/slides/k8s/setup-k8s.md b/slides/k8s/setup-k8s.md
deleted file mode 100644
index 55b8748b..00000000
--- a/slides/k8s/setup-k8s.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# Setting up Kubernetes
-
-- How did we set up these Kubernetes clusters that we're using?
-
---
-
-
-
-- We used `kubeadm` on freshly installed VM instances running Ubuntu LTS
-
- 1. Install Docker
-
- 2. Install Kubernetes packages
-
- 3. Run `kubeadm init` on the first node (it deploys the control plane on that node)
-
- 4. Set up Weave (the overlay network)
-
- (that step is just one `kubectl apply` command; discussed later)
-
- 5. Run `kubeadm join` on the other nodes (with the token produced by `kubeadm init`)
-
- 6. Copy the configuration file generated by `kubeadm init`
-
-- Check the [prepare VMs README](https://@@GITREPO@@/blob/master/prepare-vms/README.md) for more details
-
----
-
-## `kubeadm` drawbacks
-
-- Doesn't set up Docker or any other container engine
-
-- Doesn't set up the overlay network
-
-- [Some extra steps](https://kubernetes.io/docs/setup/independent/high-availability/) to support HA control plane
-
---
-
-- "It's still twice as many steps as setting up a Swarm cluster 😕" -- Jérôme
-
----
-
-## Managed options
-
-- On AWS: [EKS](https://aws.amazon.com/eks/),
- [eksctl](https://eksctl.io/)
-
-- On Azure: [AKS](https://azure.microsoft.com/services/kubernetes-service/)
-
-- On DigitalOcean: [DOK](https://www.digitalocean.com/products/kubernetes/)
-
-- On Google Cloud: [GKE](https://cloud.google.com/kubernetes-engine/)
-
-- On Linode: [LKE](https://www.linode.com/products/kubernetes/)
-
-- On OVHcloud: [Managed Kubernetes Service](https://www.ovhcloud.com/en/public-cloud/kubernetes/)
-
-- On Scaleway: [Kapsule](https://www.scaleway.com/en/kubernetes-kapsule/)
-
-- and much more!
-
----
-
-## Other deployment options
-
-- [kops](https://github.com/kubernetes/kops):
- customizable deployments on AWS, Digital Ocean, GCE (beta), vSphere (alpha)
-
-- [minikube](https://kubernetes.io/docs/setup/minikube/),
- [kubespawn](https://github.com/kinvolk/kube-spawn),
- [Docker Desktop](https://docs.docker.com/docker-for-mac/kubernetes/),
- [kind](https://kind.sigs.k8s.io):
- for local development
-
-- [kubicorn](https://github.com/kubicorn/kubicorn),
- the [Cluster API](https://blogs.vmware.com/cloudnative/2019/03/14/what-and-why-of-cluster-api/):
- deploy your clusters declaratively, "the Kubernetes way"
-
----
-
-## Even more deployment options
-
-- If you like Ansible:
- [kubespray](https://github.com/kubernetes-incubator/kubespray)
-
-- If you like Terraform:
- [typhoon](https://github.com/poseidon/typhoon)
-
-- If you like Terraform and Puppet:
- [tarmak](https://github.com/jetstack/tarmak)
-
-- You can also learn how to install every component manually, with
- the excellent tutorial [Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way)
-
- *Kubernetes The Hard Way is optimized for learning, which means taking the long route to ensure you understand each task required to bootstrap a Kubernetes cluster.*
-
-- There are also many commercial options available!
-
-- For a longer list, check the Kubernetes documentation:
-
- it has a great guide to [pick the right solution](https://kubernetes.io/docs/setup/#production-environment) to set up Kubernetes.
-
-???
-
-:EN:- Overview of the kubeadm installer
-:FR:- Survol de kubeadm
diff --git a/slides/k8s/setup-managed.md b/slides/k8s/setup-managed.md
index 38e852c5..6f8e3356 100644
--- a/slides/k8s/setup-managed.md
+++ b/slides/k8s/setup-managed.md
@@ -1,4 +1,4 @@
-# Installing a managed cluster
+# Deploying a managed cluster
*"The easiest way to install Kubernetes is to get someone
else to do it for you."
@@ -317,7 +317,26 @@ with a cloud provider
default-pool-config.node-type=DEV1-M default-pool-config.size=3
```
-- Get cluster ID:
+- After less than 5 minutes, cluster state will be `ready`
+
+ (check cluster status with e.g. `scw k8s cluster list` on a wide terminal
+)
+
+- Add connection information to your `.kube/config` file:
+ ```bash
+ scw k8s kubeconfig install `CLUSTERID`
+ ```
+
+ (the cluster ID is shown by `scw k8s cluster list`)
+
+---
+
+class: extra-details
+
+## Scaleway (automation)
+
+- If you want to obtain the cluster ID programmatically, this will do it:
+
```bash
scw k8s cluster list
# or
@@ -325,15 +344,6 @@ with a cloud provider
jq -r '.[] | select(.name="my-kapsule-cluster") | .id')
```
-- Check cluster status with e.g. `scw k8s cluster list` on a wide terminal
-
-- After less than 5 minutes, status should be `ready`
-
-- Add connection information to your `.kube/config` file:
- ```bash
- scw k8s kubeconfig install $CLUSTERID
- ```
-
---
## Scaleway (cleanup)
@@ -376,7 +386,9 @@ https://www.scaleway.com/en/pricing/)
- [IBM Cloud](https://console.bluemix.net/docs/containers/cs_cli_install.html#cs_cli_install)
-- OVH
+- [Linode Kubernetes Engine (LKE)](https://www.linode.com/products/kubernetes/)
+
+- OVHcloud [Managed Kubernetes Service](https://www.ovhcloud.com/en/public-cloud/kubernetes/)
- ...
diff --git a/slides/k8s/setup-overview.md b/slides/k8s/setup-overview.md
new file mode 100644
index 00000000..e6cff5bc
--- /dev/null
+++ b/slides/k8s/setup-overview.md
@@ -0,0 +1,192 @@
+# Setting up Kubernetes
+
+- Kubernetes is made of many components that require careful configuration
+
+- Secure operation typically requires TLS certificates and a local CA
+
+ (certificate authority)
+
+- Setting up everything manually is possible, but rarely done
+
+ (except for learning purposes)
+
+- Let's do a quick overview of available options!
+
+---
+
+## Local development
+
+- Are you writing code that will eventually run on Kubernetes?
+
+- Then it's a good idea to have a development cluster!
+
+- Development clusters only need one node
+
+- This simplifies their setup a lot:
+
+ - pod networking doesn't even need CNI plugins, overlay networks, etc.
+
+ - they can be fully contained (no pun intended) in an easy-to-ship VM image
+
+ - some of the security aspects may be simplified (different threat model)
+
+- Examples: Docker Desktop, k3d, KinD, MicroK8s, Minikube
+
+ (some of these also support clusters with multiple nodes)
+
+---
+
+## Managed clusters
+
+- Many cloud providers and hosting providers offer "managed Kubernetes"
+
+- The deployment and maintenance of the cluster is entirely managed by the provider
+
+ (ideally, clusters can be spun up automatically through an API, CLI, or web interface)
+
+- Given the complexity of Kubernetes, this approach is *strongly recommended*
+
+ (at least for your first production clusters)
+
+- After working for a while with Kubernetes, you will be better equipped to decide:
+
+ - whether to operate it yourself or use a managed offering
+
+ - which offering or which distribution works best for you and your needs
+
+---
+
+## Managed clusters details
+
+- Pricing models differ from one provider to another
+
+ - nodes are generally charged at their usual price
+
+ - control plane may be free or incur a small nominal fee
+
+- Beyond pricing, there are *huge* differences in features between providers
+
+- The "major" providers are not always the best ones!
+
+---
+
+## Managed clusters differences
+
+- Most providers let you pick which Kubernetes version you want
+
+ - some providers offer up-to-date versions
+
+ - others lag significantly (sometimes by 2 or 3 minor versions)
+
+- Some providers offer multiple networking or storage options
+
+- Others will only support one, tied to their infrastructure
+
+ (changing that is in theory possible, but might be complex or unsupported)
+
+- Some providers let you configure or customize the control plane
+
+ (generally through Kubernetes "feature gates")
+
+---
+
+## Kubernetes distributions and installers
+
+- If you want to run Kubernetes yourselves, there are many options
+
+ (free, commercial, proprietary, open source ...)
+
+- Some of them are installers, while some are complete platforms
+
+- Some of them leverage other well-known deployment tools
+
+ (like Puppet, Terraform ...)
+
+- A good starting point to explore these options is this [guide](https://v1-16.docs.kubernetes.io/docs/setup/#production-environment)
+
+ (it defines categories like "managed", "turnkey" ...)
+
+---
+
+## kubeadm
+
+- kubeadm is a tool part of Kubernetes to facilitate cluster setup
+
+- Many other installers and distributions use it (but not all of them)
+
+- It can also be used by itself
+
+- Excellent starting point to install Kubernetes on your own machines
+
+ (virtual, physical, it doesn't matter)
+
+- It even supports highly available control planes, or "multi-master"
+
+ (this is more complex, though, because it introduces the need for an API load balancer)
+
+---
+
+## Manual setup
+
+- The resources below are mainly for educational purposes!
+
+- [Kubernetes The Hard Way](https://github.com/kelseyhightower/kubernetes-the-hard-way) by Kelsey Hightower
+
+ - step by step guide to install Kubernetes on Google Cloud
+
+ - covers certificates, high availability ...
+
+ - *“Kubernetes The Hard Way is optimized for learning, which means taking the long route to ensure you understand each task required to bootstrap a Kubernetes cluster.”*
+
+- [Deep Dive into Kubernetes Internals for Builders and Operators](https://www.youtube.com/watch?v=3KtEAa7_duA)
+
+ - conference presentation showing step-by-step control plane setup
+
+ - emphasis on simplicity, not on security and availability
+
+---
+
+## About our training clusters
+
+- How did we set up these Kubernetes clusters that we're using?
+
+--
+
+- We used `kubeadm` on freshly installed VM instances running Ubuntu LTS
+
+ 1. Install Docker
+
+ 2. Install Kubernetes packages
+
+ 3. Run `kubeadm init` on the first node (it deploys the control plane on that node)
+
+ 4. Set up Weave (the overlay network) with a single `kubectl apply` command
+
+ 5. Run `kubeadm join` on the other nodes (with the token produced by `kubeadm init`)
+
+ 6. Copy the configuration file generated by `kubeadm init`
+
+- Check the [prepare VMs README](https://@@GITREPO@@/blob/master/prepare-vms/README.md) for more details
+
+---
+
+## `kubeadm` "drawbacks"
+
+- Doesn't set up Docker or any other container engine
+
+ (this is by design, to give us choice)
+
+- Doesn't set up the overlay network
+
+ (this is also by design, for the same reasons)
+
+- HA control plane requires [some extra steps](https://kubernetes.io/docs/setup/independent/high-availability/)
+
+- Note that HA control plane also requires setting up a specific API load balancer
+
+ (which is beyond the scope of kubeadm)
+
+???
+
+:EN:- Various ways to install Kubernetes
+:FR:- Survol des techniques d'installation de Kubernetes
diff --git a/slides/k8s/setup-selfhosted.md b/slides/k8s/setup-selfhosted.md
index 66b7073d..11ee661e 100644
--- a/slides/k8s/setup-selfhosted.md
+++ b/slides/k8s/setup-selfhosted.md
@@ -18,7 +18,7 @@
---
-## kops
+## [kops](https://github.com/kubernetes/kops)
- Deploys Kubernetes using cloud infrastructure
@@ -42,7 +42,7 @@
---
-## Kubespray
+## [kubespray](https://github.com/kubernetes-incubator/kubespray)
- Based on Ansible
@@ -92,13 +92,17 @@
- Docker Enterprise Edition
+- [Lokomotive](https://github.com/kinvolk/lokomotive), leveraging Terraform and [Flatcar Linux](https://www.flatcar-linux.org/)
+
- Pivotal Container Service (PKS)
+- [Tarmak](https://github.com/jetstack/tarmak), leveraging Puppet and Terraform
+
- Tectonic by CoreOS (now being integrated into Red Hat OpenShift)
-- VMware Tanzu Kubernetes Grid (TKG)
+- [Typhoon](https://typhoon.psdn.io/), leveraging Terraform
-- etc.
+- VMware Tanzu Kubernetes Grid (TKG)
---
@@ -123,5 +127,5 @@
???
-:EN:- Various ways to set up Kubernetes
-:FR:- Différentes méthodes pour installer Kubernetes
+:EN:- Kubernetes distributions and installers
+:FR:- L'offre Kubernetes "on premises"
diff --git a/slides/kadm-fullday.yml b/slides/kadm-fullday.yml
index 4e99906c..8ccebabf 100644
--- a/slides/kadm-fullday.yml
+++ b/slides/kadm-fullday.yml
@@ -36,6 +36,8 @@ content:
- k8s/interco.md
-
- k8s/apilb.md
+ #- k8s/setup-overview.md
+ #- k8s/setup-devel.md
#- k8s/setup-managed.md
#- k8s/setup-selfhosted.md
- k8s/cluster-upgrade.md
diff --git a/slides/kadm-twodays.yml b/slides/kadm-twodays.yml
index 699a8eb3..62f33dd1 100644
--- a/slides/kadm-twodays.yml
+++ b/slides/kadm-twodays.yml
@@ -34,6 +34,8 @@ content:
- k8s/cni.md
- k8s/interco.md
- - k8s/apilb.md
+ - k8s/setup-overview.md
+ #- k8s/setup-devel.md
- k8s/setup-managed.md
- k8s/setup-selfhosted.md
- k8s/cluster-upgrade.md
diff --git a/slides/kube-fullday.yml b/slides/kube-fullday.yml
index a4eb6917..3c663dac 100644
--- a/slides/kube-fullday.yml
+++ b/slides/kube-fullday.yml
@@ -53,7 +53,10 @@ content:
#- k8s/exercise-wordsmith.md
-
- k8s/yamldeploy.md
- - k8s/setup-k8s.md
+ - k8s/setup-overview.md
+ #- k8s/setup-devel.md
+ #- k8s/setup-managed.md
+ #- k8s/setup-selfhosted.md
#- k8s/dashboard.md
#- k8s/kubectlscale.md
- k8s/scalingdockercoins.md
diff --git a/slides/kube-halfday.yml b/slides/kube-halfday.yml
index 0752d87b..0aaea969 100644
--- a/slides/kube-halfday.yml
+++ b/slides/kube-halfday.yml
@@ -40,7 +40,10 @@ content:
- k8s/declarative.md
- k8s/kubenet.md
- k8s/kubectlget.md
- - k8s/setup-k8s.md
+ - k8s/setup-overview.md
+ #- k8s/setup-devel.md
+ #- k8s/setup-managed.md
+ #- k8s/setup-selfhosted.md
- - k8s/kubectl-run.md
#- k8s/batch-jobs.md
#- k8s/labels-annotations.md
diff --git a/slides/kube-selfpaced.yml b/slides/kube-selfpaced.yml
index 9eec5b79..aa5a2a2b 100644
--- a/slides/kube-selfpaced.yml
+++ b/slides/kube-selfpaced.yml
@@ -54,7 +54,10 @@ content:
#- k8s/exercise-wordsmith.md
- k8s/yamldeploy.md
-
- - k8s/setup-k8s.md
+ - k8s/setup-overview.md
+ - k8s/setup-devel.md
+ - k8s/setup-managed.md
+ - k8s/setup-selfhosted.md
- k8s/dashboard.md
#- k8s/kubectlscale.md
- k8s/scalingdockercoins.md
diff --git a/slides/kube-twodays.yml b/slides/kube-twodays.yml
index a3e9a824..fec866fe 100644
--- a/slides/kube-twodays.yml
+++ b/slides/kube-twodays.yml
@@ -53,7 +53,10 @@ content:
#- k8s/exercise-wordsmith.md
-
- k8s/yamldeploy.md
- #- k8s/setup-k8s.md
+ - k8s/setup-overview.md
+ - k8s/setup-devel.md
+ #- k8s/setup-managed.md
+ #- k8s/setup-selfhosted.md
- k8s/dashboard.md
#- k8s/kubectlscale.md
- k8s/scalingdockercoins.md