diff --git a/slides/_redirects b/slides/_redirects index 91b4dbcb..5fa9a11d 100644 --- a/slides/_redirects +++ b/slides/_redirects @@ -2,6 +2,7 @@ #/ /kube-halfday.yml.html 200! #/ /kube-fullday.yml.html 200! #/ /kube-twodays.yml.html 200! +/ /kube.yml.html 200! # And this allows to do "git clone https://container.training". /info/refs service=git-upload-pack https://github.com/jpetazzo/container.training/info/refs?service=git-upload-pack diff --git a/slides/exercises/polykuberbac-brief.md b/slides/exercises/polykuberbac-brief.md index 42d3e66c..d57e099f 100644 --- a/slides/exercises/polykuberbac-brief.md +++ b/slides/exercises/polykuberbac-brief.md @@ -1,4 +1,4 @@ -## Exercise — Enable RBAC +## Exercise — Enable RBAC on our custom cluster - Enable RBAC on a manually-deployed control plane diff --git a/slides/exercises/polykuberbac-details.md b/slides/exercises/polykuberbac-details.md index 602f92b3..2113fab8 100644 --- a/slides/exercises/polykuberbac-details.md +++ b/slides/exercises/polykuberbac-details.md @@ -1,4 +1,4 @@ -# Exercise — Enable RBAC +# Exercise — Enable RBAC on our custom cluster - We want to enable RBAC on the "polykube" cluster diff --git a/slides/exercises/sealed-secrets-details.md b/slides/exercises/sealed-secrets-details.md index 4ba7b2f1..b39ad5c6 100644 --- a/slides/exercises/sealed-secrets-details.md +++ b/slides/exercises/sealed-secrets-details.md @@ -1,4 +1,4 @@ -# Exercise — Sealed Secrets +# Exercise — Sealed Secrets (and more RBAC!) This is a "combo exercise" to practice the following concepts: diff --git a/slides/intro-fullday.yml b/slides/intro-fullday.yml deleted file mode 100644 index 7d78c850..00000000 --- a/slides/intro-fullday.yml +++ /dev/null @@ -1,72 +0,0 @@ -title: | - Introduction - to Containers - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced - -content: -- shared/title.md -- logistics.md -- containers/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - #- containers/Docker_Overview.md - #- containers/Docker_History.md - - containers/Training_Environment.md - #- containers/Installing_Docker.md - - containers/First_Containers.md - - containers/Background_Containers.md - #- containers/Start_And_Attach.md - - containers/Naming_And_Inspecting.md - #- containers/Labels.md - - containers/Getting_Inside.md - - containers/Initial_Images.md -- - - containers/Building_Images_Interactively.md - - containers/Building_Images_With_Dockerfiles.md - - containers/Cmd_And_Entrypoint.md - - containers/Copying_Files_During_Build.md - - containers/Exercise_Dockerfile_Basic.md -- - - containers/Container_Networking_Basics.md - #- containers/Network_Drivers.md - - containers/Local_Development_Workflow.md - - containers/Container_Network_Model.md - - shared/yaml.md - - containers/Compose_For_Dev_Stacks.md - - containers/Exercise_Composefile.md -- - - containers/Multi_Stage_Builds.md - #- containers/Publishing_To_Docker_Hub.md - - containers/Dockerfile_Tips.md - - containers/Exercise_Dockerfile_Advanced.md - #- containers/Docker_Machine.md - #- containers/Advanced_Dockerfiles.md - #- containers/Buildkit.md - #- containers/Init_Systems.md - #- containers/Application_Configuration.md - #- containers/Logging.md - #- containers/Namespaces_Cgroups.md - #- containers/Copy_On_Write.md - #- containers/Containers_From_Scratch.md - #- containers/Container_Engines.md - #- containers/Pods_Anatomy.md - #- containers/Ecosystem.md - #- containers/Orchestration_Overview.md - - shared/thankyou.md - - containers/links.md diff --git a/slides/intro-selfpaced.yml b/slides/intro-selfpaced.yml deleted file mode 100644 index d2f0b65c..00000000 --- a/slides/intro-selfpaced.yml +++ /dev/null @@ -1,73 +0,0 @@ -title: | - Introduction - to Containers - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- in-person - -content: -- shared/title.md -# - shared/logistics.md -- containers/intro.md -- shared/about-slides.md -#- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - containers/Docker_Overview.md - - containers/Docker_History.md - - containers/Training_Environment.md - - containers/Installing_Docker.md - - containers/First_Containers.md - - containers/Background_Containers.md - - containers/Start_And_Attach.md -- - containers/Initial_Images.md - - containers/Building_Images_Interactively.md - - containers/Building_Images_With_Dockerfiles.md - - containers/Cmd_And_Entrypoint.md - - containers/Copying_Files_During_Build.md - - containers/Exercise_Dockerfile_Basic.md -- - containers/Multi_Stage_Builds.md - - containers/Publishing_To_Docker_Hub.md - - containers/Dockerfile_Tips.md - - containers/Exercise_Dockerfile_Advanced.md -- - containers/Naming_And_Inspecting.md - - containers/Labels.md - - containers/Getting_Inside.md -- - containers/Container_Networking_Basics.md - - containers/Network_Drivers.md - - containers/Container_Network_Model.md - #- containers/Connecting_Containers_With_Links.md - - containers/Ambassadors.md -- - containers/Local_Development_Workflow.md - - containers/Windows_Containers.md - - containers/Working_With_Volumes.md - - shared/yaml.md - - containers/Compose_For_Dev_Stacks.md - - containers/Exercise_Composefile.md - - containers/Docker_Machine.md -- - containers/Advanced_Dockerfiles.md - - containers/Buildkit.md - - containers/Init_Systems.md - - containers/Application_Configuration.md - - containers/Logging.md - - containers/Resource_Limits.md -- - containers/Namespaces_Cgroups.md - - containers/Copy_On_Write.md - #- containers/Containers_From_Scratch.md -- - containers/Container_Engines.md - - containers/Pods_Anatomy.md - - containers/Ecosystem.md - - containers/Orchestration_Overview.md - - shared/thankyou.md - - containers/links.md diff --git a/slides/intro-twodays.yml b/slides/intro-twodays.yml deleted file mode 100644 index 5391283b..00000000 --- a/slides/intro-twodays.yml +++ /dev/null @@ -1,81 +0,0 @@ -title: | - Introduction - to Containers - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced - -content: -- shared/title.md -- logistics.md -- containers/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- # DAY 1 - - containers/Docker_Overview.md - #- containers/Docker_History.md - - containers/Training_Environment.md - - containers/First_Containers.md - - containers/Background_Containers.md - - containers/Initial_Images.md -- - - containers/Building_Images_Interactively.md - - containers/Building_Images_With_Dockerfiles.md - - containers/Cmd_And_Entrypoint.md - - containers/Copying_Files_During_Build.md - - containers/Exercise_Dockerfile_Basic.md -- - - containers/Dockerfile_Tips.md - - containers/Multi_Stage_Builds.md - - containers/Publishing_To_Docker_Hub.md - - containers/Exercise_Dockerfile_Advanced.md -- - - containers/Naming_And_Inspecting.md - - containers/Labels.md - - containers/Start_And_Attach.md - - containers/Getting_Inside.md - - containers/Resource_Limits.md -- # DAY 2 - - containers/Container_Networking_Basics.md - - containers/Network_Drivers.md - - containers/Container_Network_Model.md -- - - containers/Local_Development_Workflow.md - - containers/Working_With_Volumes.md - - shared/yaml.md - - containers/Compose_For_Dev_Stacks.md - - containers/Exercise_Composefile.md -- - - containers/Installing_Docker.md - - containers/Container_Engines.md - - containers/Init_Systems.md - - containers/Advanced_Dockerfiles.md - - containers/Buildkit.md -- - - containers/Application_Configuration.md - - containers/Logging.md - - containers/Orchestration_Overview.md -- - - shared/thankyou.md - - containers/links.md -#- - #- containers/Docker_Machine.md - #- containers/Ambassadors.md - #- containers/Namespaces_Cgroups.md - #- containers/Copy_On_Write.md - #- containers/Containers_From_Scratch.md - #- containers/Pods_Anatomy.md - #- containers/Ecosystem.md diff --git a/slides/k8s/architecture.md b/slides/k8s/architecture.md index 6a3f7c09..28be877a 100644 --- a/slides/k8s/architecture.md +++ b/slides/k8s/architecture.md @@ -203,12 +203,10 @@ What does that mean? ## Let's experiment a bit! -- For this section, connect to the first node of the `test` cluster +- For this section, we can use any Kubernetes environment (including KinD, minikube...) .lab[ -- SSH to the first node of the test cluster - - Check that the cluster is operational: ```bash kubectl get nodes diff --git a/slides/k8s/demo-apps.md b/slides/k8s/demo-apps.md index 4f1a6e05..40b16ed4 100644 --- a/slides/k8s/demo-apps.md +++ b/slides/k8s/demo-apps.md @@ -1,4 +1,4 @@ -# Our demo apps +## Our demo apps - We are going to use a few demo apps for demos and labs diff --git a/slides/k8s/hpa-v2-keda.md b/slides/k8s/hpa-v2-keda.md new file mode 100644 index 00000000..55a9964c --- /dev/null +++ b/slides/k8s/hpa-v2-keda.md @@ -0,0 +1,314 @@ +# Scaling with custom metrics + +- The HorizontalPodAutoscaler v1 can only scale on Pod CPU usage + +- Sometimes, we need to scale using other metrics: + + - memory + + - requests per second + + - latency + + - active sessions + + - items in a work queue + + - ... + +- The HorizontalPodAutoscaler v2 can do it! + +--- + +## Requirements + +⚠️ Autoscaling on custom metrics is fairly complex! + +- We need some metrics system + + (Prometheus is a popular option, but others are possible too) + +- We need our metrics (latency, traffic...) to be fed in the system + + (with Prometheus, this might require a custom exporter) + +- We need to expose these metrics to Kubernetes + + (Kubernetes doesn't "speak" the Prometheus API) + +- Then we can set up autoscaling! + +--- + +## The plan + +- We will deploy the DockerCoins demo app + + (one of its components has a bottleneck; its latency will increase under load) + +- We will use Prometheus to collect and store metrics + +- We will deploy a tiny HTTP latency monitor (a Prometheus *exporter*) + +- We will then use KEDA with a "Prometheus Scaler" + +--- + +## Deploying DockerCoins + +- That's the easy part! + +.lab[ + +- Create a new namespace and switch to it: + ```bash + kubectl create namespace customscaling + kns customscaling + ``` + +- Deploy DockerCoins, and scale up the `worker` Deployment: + ```bash + kubectl apply -f ~/container.training/k8s/dockercoins.yaml + kubectl scale deployment worker --replicas=10 + ``` + +] + +--- + +## Current state of affairs + +- The `rng` service is a bottleneck + + (it cannot handle more than 10 requests/second) + +- With enough traffic, its latency increases + + (by about 100ms per `worker` Pod after the 3rd worker) + +.lab[ + +- Check the `webui` port and open it in your browser: + ```bash + kubectl get service webui + ``` + +- Check the `rng` ClusterIP and test it with e.g. `httping`: + ```bash + kubectl get service rng + ``` + +] + +--- + +## Measuring latency + +- We will use a tiny custom Prometheus exporter, [httplat](https://github.com/jpetazzo/httplat) + +- `httplat` exposes Prometheus metrics on port 9080 (by default) + +- It monitors exactly one URL, that must be passed as a command-line argument + +.lab[ + +- Deploy `httplat`: + ```bash + kubectl create deployment httplat --image=jpetazzo/httplat -- httplat http://rng/ + ``` + +- Expose it: + ```bash + kubectl expose deployment httplat --port=9080 + ``` + +] + +--- + +class: extra-details + +## Measuring latency in the real world + +- We are using this tiny custom exporter for simplicity + +- A more common method to collect latency is to use a service mesh + +- A service mesh can usually collect latency for *all* services automatically + +--- + +## Install Prometheus + +- We will use the Prometheus community Helm chart + + (because we can configure it dynamically with annotations) + +.lab[ + +- If it's not installed yet on the cluster, install Prometheus: + ```bash + helm upgrade --install prometheus prometheus \ + --repo https://prometheus-community.github.io/helm-charts \ + --namespace prometheus --create-namespace \ + --set server.service.type=NodePort \ + --set server.service.nodePort=30090 \ + --set server.persistentVolume.enabled=false \ + --set alertmanager.enabled=false + ``` + +] + +--- + +## Configure Prometheus + +- We can use annotations to tell Prometheus to collect the metrics + +.lab[ + +- Tell Prometheus to "scrape" our latency exporter: + ```bash + kubectl annotate service httplat \ + prometheus.io/scrape=true \ + prometheus.io/port=9080 \ + prometheus.io/path=/metrics + ``` + +] + +If you deployed Prometheus differently, you might have to configure it manually. + +You'll need to instruct it to scrape http://httplat.customscaling.svc:9080/metrics. + +--- + +## Make sure that metrics get collected + +- Before moving on, confirm that Prometheus has our metrics + +.lab[ + +- Connect to Prometheus + + (if you installed it like instructed above, it is exposed as a NodePort on port 30090) + +- Check that `httplat` metrics are available + +- You can try to graph the following PromQL expression: + ``` + rate(httplat_latency_seconds_sum[2m])/rate(httplat_latency_seconds_count[2m]) + ``` + +] + +--- + +## Troubleshooting + +- Make sure that the exporter works: + + - get the ClusterIP of the exporter with `kubectl get svc httplat` + + - `curl http://:9080/metrics` + + - check that the result includes the `httplat` histogram + +- Make sure that Prometheus is scraping the exporter: + + - go to `Status` / `Targets` in Prometheus + + - make sure that `httplat` shows up in there + +--- + +## Installing KEDA + +- Multiple possibilities, as explained in the [documentation](https://keda.sh/docs/2.12/deploy/) + +- For simplicity we can use the YAML version with admission webhooks + +--- + +## Creating a "Scaler" + +- With KEDA, instead of creating an HPA policy directly, we create a "Scaled Object" + +- The "Scaled Object" will take care of: + + - registering and exposing our custom metric in KEDA'a aggregation layer + + - creating the HPA policy that consumes that metric + +- See the [Prometheus Scaler documentation](https://keda.sh/docs/2.12/scalers/prometheus/) + +--- + +## Witness the marvel of custom autoscaling + +(Sort of) + +- After a short while, the `rng` Deployment will scale up + +- It should scale up until the latency drops below 100ms + + (and continue to scale up a little bit more after that) + +- Then, since the latency will be well below 100ms, it will scale down + +- ... and back up again, etc. + +(See pictures on next slides!) + +--- + +class: pic + +![Latency over time](images/hpa-v2-pa-latency.png) + +--- + +class: pic + +![Number of pods over time](images/hpa-v2-pa-pods.png) + +--- + +## What's going on? + +- The autoscaler's information is slightly out of date + + (not by much; probably between 1 and 2 minute) + +- It's enough to cause the oscillations to happen + +- One possible fix is to tell the autoscaler to wait a bit after each action + +- It will reduce oscillations, but will also slow down its reaction time + + (and therefore, how fast it reacts to a peak of traffic) + +--- + +## What's going on? Take 2 + +- As soon as the measured latency is *significantly* below our target (100ms) ... + + the autoscaler tries to scale down + +- If the latency is measured at 20ms ... + + the autoscaler will try to *divide the number of pods by five!* + +- One possible solution: apply a formula to the measured latency, + so that values between e.g. 10 and 100ms get very close to 100ms. + +- Another solution: instead of targetting for a specific latency, + target a 95th percentile latency or something similar, using + a more advanced PromQL expression (and leveraging the fact that + we have histograms instead of raw values). + +??? + +:EN:- Autoscaling with custom metrics +:FR:- Suivi de charge avancé (HPAv2) diff --git a/slides/k8s/resource-limits.md b/slides/k8s/resource-limits.md index 0ff0de59..54559ff5 100644 --- a/slides/k8s/resource-limits.md +++ b/slides/k8s/resource-limits.md @@ -533,193 +533,6 @@ This set of resources makes sure that this service won't be killed (as long as i --- -# Defining min, max, and default resources - -- We can create LimitRange objects to indicate any combination of: - - - min and/or max resources allowed per pod - - - default resource *limits* - - - default resource *requests* - - - maximal burst ratio (*limit/request*) - -- LimitRange objects are namespaced - -- They apply to their namespace only - ---- - -## LimitRange example - -```yaml -apiVersion: v1 -kind: LimitRange -metadata: - name: my-very-detailed-limitrange -spec: - limits: - - type: Container - min: - cpu: "100m" - max: - cpu: "2000m" - memory: "1Gi" - default: - cpu: "500m" - memory: "250Mi" - defaultRequest: - cpu: "500m" -``` - ---- - -## Example explanation - -The YAML on the previous slide shows an example LimitRange object specifying very detailed limits on CPU usage, -and providing defaults on RAM usage. - -Note the `type: Container` line: in the future, -it might also be possible to specify limits -per Pod, but it's not [officially documented yet](https://github.com/kubernetes/website/issues/9585). - ---- - -## LimitRange details - -- LimitRange restrictions are enforced only when a Pod is created - - (they don't apply retroactively) - -- They don't prevent creation of e.g. an invalid Deployment or DaemonSet - - (but the pods will not be created as long as the LimitRange is in effect) - -- If there are multiple LimitRange restrictions, they all apply together - - (which means that it's possible to specify conflicting LimitRanges, -
preventing any Pod from being created) - -- If a LimitRange specifies a `max` for a resource but no `default`, -
that `max` value becomes the `default` limit too - ---- - -# Namespace quotas - -- We can also set quotas per namespace - -- Quotas apply to the total usage in a namespace - - (e.g. total CPU limits of all pods in a given namespace) - -- Quotas can apply to resource limits and/or requests - - (like the CPU and memory limits that we saw earlier) - -- Quotas can also apply to other resources: - - - "extended" resources (like GPUs) - - - storage size - - - number of objects (number of pods, services...) - ---- - -## Creating a quota for a namespace - -- Quotas are enforced by creating a ResourceQuota object - -- ResourceQuota objects are namespaced, and apply to their namespace only - -- We can have multiple ResourceQuota objects in the same namespace - -- The most restrictive values are used - ---- - -## Limiting total CPU/memory usage - -- The following YAML specifies an upper bound for *limits* and *requests*: - ```yaml - apiVersion: v1 - kind: ResourceQuota - metadata: - name: a-little-bit-of-compute - spec: - hard: - requests.cpu: "10" - requests.memory: 10Gi - limits.cpu: "20" - limits.memory: 20Gi - ``` - -These quotas will apply to the namespace where the ResourceQuota is created. - ---- - -## Limiting number of objects - -- The following YAML specifies how many objects of specific types can be created: - ```yaml - apiVersion: v1 - kind: ResourceQuota - metadata: - name: quota-for-objects - spec: - hard: - pods: 100 - services: 10 - secrets: 10 - configmaps: 10 - persistentvolumeclaims: 20 - services.nodeports: 0 - services.loadbalancers: 0 - count/roles.rbac.authorization.k8s.io: 10 - ``` - -(The `count/` syntax allows limiting arbitrary objects, including CRDs.) - ---- - -## YAML vs CLI - -- Quotas can be created with a YAML definition - -- ...Or with the `kubectl create quota` command - -- Example: - ```bash - kubectl create quota my-resource-quota --hard=pods=300,limits.memory=300Gi - ``` - -- With both YAML and CLI form, the values are always under the `hard` section - - (there is no `soft` quota) - ---- - -## Viewing current usage - -When a ResourceQuota is created, we can see how much of it is used: - -``` -kubectl describe resourcequota my-resource-quota - -Name: my-resource-quota -Namespace: default -Resource Used Hard --------- ---- ---- -pods 12 100 -services 1 5 -services.loadbalancers 0 0 -services.nodeports 0 0 -``` - ---- - ## Advanced quotas and PriorityClass - Pods can have a *priority* @@ -754,130 +567,6 @@ services.nodeports 0 0 --- -class: extra-details - -## PriorityClass and ResourceQuotas - -- A ResourceQuota can include a list of *scopes* or a *scope selector* - -- In that case, the quota will only apply to the scoped resources - -- Example: limit the resources allocated to "high priority" Pods - -- In that case, make sure that the quota is created in every Namespace - - (or use *admission configuration* to enforce it) - -- See the [resource quotas documentation][quotadocs] for details - -[quotadocs]: https://kubernetes.io/docs/concepts/policy/resource-quotas/#resource-quota-per-priorityclass - ---- - -# Limiting resources in practice - -- We have at least three mechanisms: - - - requests and limits per Pod - - - LimitRange per namespace - - - ResourceQuota per namespace - -- Let's see one possible strategy to get started with resource limits - ---- - -## Set a LimitRange - -- In each namespace, create a LimitRange object - -- Set a small default CPU request and CPU limit - - (e.g. "100m") - -- Set a default memory request and limit depending on your most common workload - - - for Java, Ruby: start with "1G" - - - for Go, Python, PHP, Node: start with "250M" - -- Set upper bounds slightly below your expected node size - - (80-90% of your node size, with at least a 500M memory buffer) - ---- - -## Set a ResourceQuota - -- In each namespace, create a ResourceQuota object - -- Set generous CPU and memory limits - - (e.g. half the cluster size if the cluster hosts multiple apps) - -- Set generous objects limits - - - these limits should not be here to constrain your users - - - they should catch a runaway process creating many resources - - - example: a custom controller creating many pods - ---- - -## Observe, refine, iterate - -- Observe the resource usage of your pods - - (we will see how in the next chapter) - -- Adjust individual pod limits - -- If you see trends: adjust the LimitRange - - (rather than adjusting every individual set of pod limits) - -- Observe the resource usage of your namespaces - - (with `kubectl describe resourcequota ...`) - -- Rinse and repeat regularly - ---- - -## Underutilization - -- Remember: when assigning a pod to a node, the scheduler looks at *requests* - - (not at current utilization on the node) - -- If pods request resources but don't use them, this can lead to underutilization - - (because the scheduler will consider that the node is full and can't fit new pods) - ---- - -## Viewing a namespace limits and quotas - -- `kubectl describe namespace` will display resource limits and quotas - -.lab[ - -- Try it out: - ```bash - kubectl describe namespace default - ``` - -- View limits and quotas for *all* namespaces: - ```bash - kubectl describe namespace - ``` - -] - ---- - ## Additional resources - [A Practical Guide to Setting Kubernetes Requests and Limits](http://blog.kubecost.com/blog/requests-and-limits/) diff --git a/slides/kadm-fullday.yml b/slides/kadm-fullday.yml deleted file mode 100644 index b4f3c193..00000000 --- a/slides/kadm-fullday.yml +++ /dev/null @@ -1,65 +0,0 @@ -title: | - Kubernetes - for Admins and Ops - -#chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" -chat: "In person!" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced -- static-pods-exercise - -content: -- shared/title.md -- logistics.md -- k8s/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - - k8s/prereqs-advanced.md - - shared/handson.md - - k8s/architecture.md - #- k8s/internal-apis.md - - k8s/deploymentslideshow.md - - k8s/dmuc-easy.md -- - - k8s/dmuc-medium.md - - k8s/dmuc-hard.md - #- k8s/multinode.md - #- k8s/cni.md - - k8s/cni-internals.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 - - k8s/cluster-backup.md - - k8s/staticpods.md -- - #- k8s/cloud-controller-manager.md - #- k8s/bootstrap.md - - k8s/control-plane-auth.md - - k8s/pod-security-intro.md - - k8s/pod-security-policies.md - - k8s/pod-security-admission.md - - k8s/user-cert.md - - k8s/csr-api.md - - k8s/openid-connect.md -- - #- k8s/lastwords-admin.md - - k8s/links.md - - shared/thankyou.md diff --git a/slides/kadm-twodays.yml b/slides/kadm-twodays.yml deleted file mode 100644 index 345407da..00000000 --- a/slides/kadm-twodays.yml +++ /dev/null @@ -1,96 +0,0 @@ -title: | - Kubernetes - for administrators - and operators - -#chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" -chat: "In person!" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced - -content: -- shared/title.md -- logistics.md -- k8s/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -# DAY 1 -- - k8s/prereqs-advanced.md - - shared/handson.md - - k8s/architecture.md - - k8s/internal-apis.md - - k8s/deploymentslideshow.md - - k8s/dmuc-easy.md -- - k8s/dmuc-medium.md - - k8s/dmuc-hard.md - #- k8s/multinode.md - #- k8s/cni.md - - k8s/cni-internals.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 - - k8s/staticpods.md -- - k8s/cluster-backup.md - - k8s/cloud-controller-manager.md - - k8s/healthchecks.md - - k8s/healthchecks-more.md -# DAY 2 -- - k8s/kubercoins.md - - k8s/logs-cli.md - - k8s/logs-centralized.md - - k8s/authn-authz.md - - k8s/user-cert.md - - k8s/csr-api.md -- - k8s/openid-connect.md - - k8s/control-plane-auth.md - ###- k8s/bootstrap.md - - k8s/netpol.md - - k8s/pod-security-intro.md - - k8s/pod-security-policies.md - - k8s/pod-security-admission.md -- - k8s/resource-limits.md - - k8s/metrics-server.md - - k8s/cluster-sizing.md - - k8s/disruptions.md - - k8s/horizontal-pod-autoscaler.md -- - k8s/prometheus.md - #- k8s/prometheus-stack.md - - k8s/extending-api.md - - k8s/crd.md - - k8s/operators.md - - k8s/eck.md - ###- k8s/operators-design.md - ###- k8s/operators-example.md -# CONCLUSION -- - k8s/lastwords.md - - k8s/links.md - - shared/thankyou.md - - | - # (All content after this slide is bonus material) -# EXTRA -- - k8s/volumes.md - - k8s/configuration.md - - k8s/secrets.md - - k8s/statefulsets.md - - k8s/consul.md - - k8s/pv-pvc-sc.md - - k8s/volume-claim-templates.md - #- k8s/portworx.md - - k8s/openebs.md - - k8s/stateful-failover.md diff --git a/slides/kube-fullday.yml b/slides/kube-fullday.yml deleted file mode 100644 index 04eda83d..00000000 --- a/slides/kube-fullday.yml +++ /dev/null @@ -1,136 +0,0 @@ -title: | - Deploying and Scaling Microservices - with Kubernetes - -#chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" -chat: "In person!" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced - -content: -- shared/title.md -- logistics.md -- k8s/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - - shared/prereqs.md - - shared/handson.md - #- shared/webssh.md - - shared/connecting.md - #- k8s/versions-k8s.md - - shared/sampleapp.md - #- shared/composescale.md - #- shared/hastyconclusions.md - - shared/composedown.md - - k8s/concepts-k8s.md - - k8s/kubectlget.md -- - - k8s/kubectl-run.md - #- k8s/batch-jobs.md - - shared/declarative.md - - k8s/declarative.md - - k8s/deploymentslideshow.md - - k8s/kubectlexpose.md - - k8s/service-types.md - - k8s/kubenet.md - - k8s/shippingimages.md - #- k8s/buildshiprun-selfhosted.md - - k8s/buildshiprun-dockerhub.md - - k8s/ourapponkube.md - #- k8s/exercise-wordsmith.md -- - - k8s/labels-annotations.md - - k8s/kubectl-logs.md - - k8s/logs-cli.md - - k8s/yamldeploy.md - - k8s/namespaces.md - - k8s/setup-overview.md - - k8s/setup-devel.md - #- k8s/setup-managed.md - #- k8s/setup-selfhosted.md -- - - k8s/dashboard.md - - k8s/rollout.md - - k8s/healthchecks.md - - k8s/ingress.md - #- k8s/volumes.md - - k8s/configuration.md - - k8s/secrets.md - - k8s/openebs.md - #- k8s/k9s.md - #- k8s/tilt.md - #- k8s/kubectlscale.md - #- k8s/scalingdockercoins.md - #- shared/hastyconclusions.md - #- k8s/daemonset.md - #- shared/yaml.md - #- k8s/exercise-yaml.md - #- k8s/localkubeconfig.md - #- k8s/access-eks-cluster.md - #- k8s/accessinternal.md - #- k8s/kubectlproxy.md - #- k8s/healthchecks-more.md - #- k8s/record.md - #- k8s/ingress-tls.md - #- k8s/kustomize.md - #- k8s/helm-intro.md - #- k8s/helm-chart-format.md - #- k8s/helm-create-basic-chart.md - #- k8s/helm-create-better-chart.md - #- k8s/helm-dependencies.md - #- k8s/helm-values-schema-validation.md - #- k8s/helm-secrets.md - #- k8s/exercise-helm.md - #- k8s/ytt.md - #- k8s/gitlab.md - #- k8s/create-chart.md - #- k8s/create-more-charts.md - #- k8s/netpol.md - #- k8s/authn-authz.md - #- k8s/user-cert.md - #- k8s/csr-api.md - #- k8s/openid-connect.md - #- k8s/pod-security-intro.md - #- k8s/pod-security-policies.md - #- k8s/pod-security-admission.md - #- k8s/exercise-configmap.md - #- k8s/build-with-docker.md - #- k8s/build-with-kaniko.md - #- k8s/logs-centralized.md - #- k8s/prometheus.md - #- k8s/prometheus-stack.md - #- k8s/statefulsets.md - #- k8s/consul.md - #- k8s/pv-pvc-sc.md - #- k8s/volume-claim-templates.md - #- k8s/portworx.md - #- k8s/openebs.md - #- k8s/stateful-failover.md - #- k8s/extending-api.md - #- k8s/crd.md - #- k8s/admission.md - #- k8s/operators.md - #- k8s/operators-design.md - #- k8s/operators-example.md - #- k8s/staticpods.md - #- k8s/finalizers.md - #- k8s/owners-and-dependents.md - #- k8s/gitworkflows.md -- - #- k8s/whatsnext.md - - k8s/lastwords.md - #- k8s/links.md - - shared/thankyou.md diff --git a/slides/kube-halfday.yml b/slides/kube-halfday.yml deleted file mode 100644 index b22a1f99..00000000 --- a/slides/kube-halfday.yml +++ /dev/null @@ -1,91 +0,0 @@ -title: | - Kubernetes 101 - - -#chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/training-20180413-paris)" -chat: "In person!" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced - -content: -- shared/title.md -#- logistics.md -# Bridget-specific; others use logistics.md -- logistics-bridget.md -- k8s/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - shared/prereqs.md - - shared/handson.md - #- shared/webssh.md - - shared/connecting.md - - k8s/versions-k8s.md - - shared/sampleapp.md -# Bridget doesn't go into as much depth with compose - #- shared/composescale.md - #- shared/hastyconclusions.md - - shared/composedown.md - - k8s/concepts-k8s.md - - shared/declarative.md - - k8s/declarative.md - #- k8s/kubenet.md - - k8s/kubectlget.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 - - k8s/kubectl-logs.md - - k8s/deploymentslideshow.md - - k8s/kubectlexpose.md - #- k8s/service-types.md - - k8s/shippingimages.md - #- k8s/buildshiprun-selfhosted.md - - k8s/buildshiprun-dockerhub.md - - k8s/ourapponkube.md - #- k8s/localkubeconfig.md - #- k8s/access-eks-cluster.md - #- k8s/accessinternal.md - #- k8s/kubectlproxy.md -- - k8s/dashboard.md - #- k8s/k9s.md - #- k8s/tilt.md - #- k8s/kubectlscale.md - - k8s/scalingdockercoins.md - - shared/hastyconclusions.md - - k8s/daemonset.md - - k8s/rollout.md - #- k8s/record.md -- - k8s/logs-cli.md -# Bridget hasn't added EFK yet - #- k8s/logs-centralized.md - - k8s/namespaces.md - - k8s/helm-intro.md - #- k8s/helm-chart-format.md - - k8s/helm-create-basic-chart.md - #- k8s/helm-create-better-chart.md - #- k8s/helm-dependencies.md - #- k8s/helm-values-schema-validation.md - #- k8s/helm-secrets.md - #- k8s/kustomize.md - #- k8s/ytt.md - #- k8s/netpol.md - - k8s/whatsnext.md -# - k8s/links.md -# Bridget-specific - - k8s/links-bridget.md - - shared/thankyou.md diff --git a/slides/kube-selfpaced.yml b/slides/kube-selfpaced.yml deleted file mode 100644 index 3da8be0f..00000000 --- a/slides/kube-selfpaced.yml +++ /dev/null @@ -1,171 +0,0 @@ -title: | - Deploying and Scaling Microservices - with Docker and Kubernetes - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" - - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- in-person - -content: -- shared/title.md -#- logistics.md -- k8s/intro.md -- shared/about-slides.md -#- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - - shared/prereqs.md - - shared/handson.md - #- shared/webssh.md - - shared/connecting.md - - k8s/versions-k8s.md - - shared/sampleapp.md - #- shared/composescale.md - #- shared/hastyconclusions.md - - shared/composedown.md - - k8s/concepts-k8s.md -- - - k8s/kubectlget.md - - k8s/kubectl-run.md - - k8s/batch-jobs.md - - k8s/labels-annotations.md - - k8s/kubectl-logs.md - - k8s/logs-cli.md - - shared/declarative.md - - k8s/declarative.md - - k8s/deploymentslideshow.md -- - - k8s/kubectlexpose.md - - k8s/service-types.md - - k8s/kubenet.md - - k8s/shippingimages.md - - k8s/buildshiprun-selfhosted.md - - k8s/buildshiprun-dockerhub.md - - k8s/ourapponkube.md - #- k8s/exercise-wordsmith.md - - shared/yaml.md - - k8s/yamldeploy.md - - k8s/namespaces.md -- - - k8s/setup-overview.md - - k8s/setup-devel.md - - k8s/setup-managed.md - - k8s/setup-selfhosted.md - - k8s/dashboard.md - - k8s/k9s.md - - k8s/tilt.md - #- k8s/kubectlscale.md - - k8s/scalingdockercoins.md - - shared/hastyconclusions.md - - k8s/daemonset.md - #- k8s/exercise-yaml.md -- - - k8s/rollout.md - - k8s/healthchecks.md - - k8s/healthchecks-more.md - - k8s/record.md -- - - k8s/localkubeconfig.md - #- k8s/access-eks-cluster.md - - k8s/accessinternal.md - - k8s/kubectlproxy.md -- - - k8s/ingress.md - - k8s/ingress-advanced.md - #- k8s/ingress-canary.md - - k8s/ingress-tls.md - - k8s/cert-manager.md - - k8s/cainjector.md - - k8s/kustomize.md - - k8s/helm-intro.md - - k8s/helm-chart-format.md - - k8s/helm-create-basic-chart.md - - k8s/helm-create-better-chart.md - - k8s/helm-dependencies.md - - k8s/helm-values-schema-validation.md - - k8s/helm-secrets.md - #- k8s/exercise-helm.md - - k8s/gitlab.md - - k8s/ytt.md -- - - k8s/netpol.md - - k8s/authn-authz.md - - k8s/pod-security-intro.md - - k8s/pod-security-policies.md - - k8s/pod-security-admission.md - - k8s/user-cert.md - - k8s/csr-api.md - - k8s/openid-connect.md - - k8s/control-plane-auth.md -- - - k8s/volumes.md - #- k8s/exercise-configmap.md - - k8s/build-with-docker.md - - k8s/build-with-kaniko.md -- - - k8s/configuration.md - - k8s/secrets.md - - k8s/statefulsets.md - - k8s/consul.md - - k8s/pv-pvc-sc.md - - k8s/volume-claim-templates.md - - k8s/portworx.md - - k8s/openebs.md - - k8s/stateful-failover.md -- - - k8s/logs-centralized.md - - k8s/prometheus.md - - k8s/prometheus-stack.md - - k8s/resource-limits.md - - k8s/metrics-server.md - - k8s/cluster-sizing.md - - k8s/disruptions.md - - k8s/cluster-autoscaler.md - - k8s/horizontal-pod-autoscaler.md - - k8s/hpa-v2.md -- - - k8s/extending-api.md - - k8s/apiserver-deepdive.md - - k8s/crd.md - - k8s/aggregation-layer.md - - k8s/admission.md - - k8s/operators.md - - k8s/operators-design.md - - k8s/operators-example.md - - k8s/kubebuilder.md - - k8s/sealed-secrets.md - - k8s/kyverno.md - - k8s/eck.md - - k8s/finalizers.md - - k8s/owners-and-dependents.md - - k8s/events.md -- - - k8s/dmuc-easy.md - - k8s/dmuc-medium.md - - k8s/dmuc-hard.md - #- k8s/multinode.md - #- k8s/cni.md - - k8s/cni-internals.md - - k8s/apilb.md - - k8s/staticpods.md -- - - k8s/cluster-upgrade.md - - k8s/cluster-backup.md - - k8s/cloud-controller-manager.md - - k8s/gitworkflows.md -- - - k8s/lastwords.md - - k8s/links.md - - shared/thankyou.md diff --git a/slides/kube-twodays.yml b/slides/kube-twodays.yml deleted file mode 100644 index 53a39e51..00000000 --- a/slides/kube-twodays.yml +++ /dev/null @@ -1,136 +0,0 @@ -title: | - Deploying and Scaling Microservices - with Kubernetes - -#chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" -chat: "In person!" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced - -content: -- shared/title.md -- logistics.md -- k8s/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - - shared/prereqs.md - - shared/handson.md - #- shared/webssh.md - - shared/connecting.md - #- k8s/versions-k8s.md - - shared/sampleapp.md - #- shared/composescale.md - #- shared/hastyconclusions.md - - shared/composedown.md - - k8s/concepts-k8s.md - - k8s/kubectlget.md -- - - k8s/kubectl-run.md - - k8s/batch-jobs.md - - k8s/labels-annotations.md - - k8s/kubectl-logs.md - - k8s/logs-cli.md - - shared/declarative.md - - k8s/declarative.md - - k8s/deploymentslideshow.md - - k8s/kubectlexpose.md - - k8s/service-types.md - - k8s/kubenet.md - - k8s/shippingimages.md - #- k8s/buildshiprun-selfhosted.md - - k8s/buildshiprun-dockerhub.md - - k8s/ourapponkube.md - #- k8s/exercise-wordsmith.md -- - - k8s/yamldeploy.md - - k8s/setup-overview.md - - k8s/setup-devel.md - #- k8s/setup-managed.md - #- k8s/setup-selfhosted.md - - k8s/dashboard.md - - k8s/k9s.md - #- k8s/tilt.md - #- k8s/kubectlscale.md - - k8s/scalingdockercoins.md - - shared/hastyconclusions.md - - k8s/daemonset.md - - shared/yaml.md - #- k8s/exercise-yaml.md -- - - k8s/localkubeconfig.md - #- k8s/access-eks-cluster.md - - k8s/accessinternal.md - #- k8s/kubectlproxy.md - - k8s/rollout.md - - k8s/healthchecks.md - #- k8s/healthchecks-more.md - - k8s/record.md -- - - k8s/namespaces.md - - k8s/ingress.md - #- k8s/ingress-advanced.md - #- k8s/ingress-canary.md - #- k8s/ingress-tls.md - - k8s/kustomize.md - - k8s/helm-intro.md - - k8s/helm-chart-format.md - - k8s/helm-create-basic-chart.md - - k8s/helm-create-better-chart.md - - k8s/helm-dependencies.md - - k8s/helm-values-schema-validation.md - - k8s/helm-secrets.md - #- k8s/exercise-helm.md - #- k8s/ytt.md - - k8s/gitlab.md -- - - k8s/netpol.md - - k8s/authn-authz.md - #- k8s/csr-api.md - #- k8s/openid-connect.md - #- k8s/pod-security-intro.md - #- k8s/pod-security-policies.md - #- k8s/pod-security-admission.md -- - - k8s/volumes.md - #- k8s/exercise-configmap.md - #- k8s/build-with-docker.md - #- k8s/build-with-kaniko.md - - k8s/configuration.md - - k8s/secrets.md - - k8s/logs-centralized.md - #- k8s/prometheus.md - #- k8s/prometheus-stack.md -- - - k8s/statefulsets.md - - k8s/consul.md - - k8s/pv-pvc-sc.md - - k8s/volume-claim-templates.md - #- k8s/portworx.md - - k8s/openebs.md - - k8s/stateful-failover.md - #- k8s/extending-api.md - #- k8s/admission.md - #- k8s/operators.md - #- k8s/operators-design.md - #- k8s/operators-example.md - #- k8s/staticpods.md - #- k8s/owners-and-dependents.md - #- k8s/gitworkflows.md -- - - k8s/whatsnext.md - - k8s/lastwords.md - - k8s/links.md - - shared/thankyou.md diff --git a/slides/kube-adv.yml b/slides/kube.yml similarity index 56% rename from slides/kube-adv.yml rename to slides/kube.yml index 627d71bc..2056caa5 100644 --- a/slides/kube-adv.yml +++ b/slides/kube.yml @@ -1,13 +1,13 @@ title: | - Advanced - Kubernetes + Advanced Kubernetes -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" +#chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" #chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" +chat: "[`#kubernetes-training` on Slack](https://abk.enterprise.slack.com/archives/C88FPJY23)" gitrepo: github.com/jpetazzo/container.training -slides: https://container.training/ +slides: https://2024-02-demonware.container.training/ #slidenumberprefix: "#SomeHashTag — " @@ -23,71 +23,54 @@ content: #- shared/chat-room-slack.md #- shared/chat-room-zoom-meeting.md #- shared/chat-room-zoom-webinar.md +- shared/prereqs.md +- shared/handson.md +#- shared/webssh.md +- shared/connecting.md +#- k8s/versions-k8s.md +- k8s/demo-apps.md - shared/toc.md -- #1 - - k8s/prereqs-advanced.md - - shared/handson.md +- - k8s/architecture.md - - k8s/internal-apis.md - k8s/deploymentslideshow.md - k8s/dmuc-easy.md -- #2 - k8s/dmuc-medium.md - k8s/dmuc-hard.md #- k8s/multinode.md #- k8s/cni.md - #- k8s/interco.md - - k8s/cni-internals.md -- #3 - k8s/apilb.md + - k8s/cni-internals.md - k8s/control-plane-auth.md - - | - # (Extra content) + - k8s/internal-apis.md - k8s/staticpods.md - - k8s/cluster-upgrade.md -- #4 - - k8s/kustomize.md - - k8s/helm-intro.md - - k8s/helm-chart-format.md - - k8s/helm-create-basic-chart.md - - | - # (Extra content) - - k8s/helm-create-better-chart.md - - k8s/helm-dependencies.md - - k8s/helm-values-schema-validation.md - - k8s/helm-secrets.md - - k8s/ytt.md -- #5 - - k8s/extending-api.md - - k8s/operators.md +- + - k8s/authn-authz.md - k8s/sealed-secrets.md + - k8s/extending-api.md - k8s/crd.md -- #6 - - k8s/ingress-tls.md - - k8s/ingress-advanced.md - #- k8s/ingress-canary.md + - k8s/operators.md - k8s/cert-manager.md - - k8s/cainjector.md - - k8s/eck.md -- #7 + - exercises/rbac-details.md + - exercises/sealed-secrets-details.md +- + - k8s/owners-and-dependents.md - k8s/admission.md + - k8s/cainjector.md - k8s/kyverno.md -- #8 - - k8s/aggregation-layer.md - k8s/metrics-server.md - - k8s/prometheus.md - - k8s/prometheus-stack.md - - k8s/hpa-v2.md -- #9 + - k8s/aggregation-layer.md + - k8s/finalizers.md + - k8s/events.md + - exercises/kyverno-ingress-domain-name-details.md +- + - k8s/resource-limits.md + - k8s/horizontal-pod-autoscaler.md + - k8s/hpa-v2-keda.md + - k8s/cluster-sizing.md + - k8s/cluster-autoscaler.md + - k8s/disruptions.md - k8s/operators-design.md - k8s/operators-example.md - - k8s/kubebuilder.md - - k8s/events.md - - k8s/finalizers.md - - | - # (Extra content) - - k8s/owners-and-dependents.md - - k8s/apiserver-deepdive.md - #- k8s/record.md - shared/thankyou.md - + #- k8s/cluster-upgrade.md + #- exercises/polykuberbac-details.md diff --git a/slides/logistics-template.md b/slides/logistics-template.md index fe7d8986..314e54b6 100644 --- a/slides/logistics-template.md +++ b/slides/logistics-template.md @@ -1,42 +1,10 @@ ## Introductions -⚠️ This slide should be customized by the tutorial instructor(s). +- Hello! I'm Jérôme Petazzoni ([@jpetazzo], [@jpetazzo@hachyderm.io], Ardan Labs) - - - - - - - - - - [@alexbuisine]: https://twitter.com/alexbuisine @@ -67,9 +23,23 @@ --- +## Scheduling + +- The training has 4 parts + + (1 part = 1 day) + +- Part 1 will be taught twice: + + - Monday evening (Vancouver time) / **Tuesday morning (Shanghai time)** + + - **Friday evening (Vancouver time)** / Saturday morning (Shanghai time) + +--- + ## Exercises -- At the end of each day, there is a series of exercises +- Some days, there will be exercises (at the end of the day) - To make the most out of the training, please try the exercises! diff --git a/slides/shared/prereqs.md b/slides/shared/prereqs.md index e04f29c3..42eedbad 100644 --- a/slides/shared/prereqs.md +++ b/slides/shared/prereqs.md @@ -1,4 +1,4 @@ -# Pre-requirements +## Pre-requirements - Be comfortable with the UNIX command line diff --git a/slides/swarm-fullday.yml b/slides/swarm-fullday.yml deleted file mode 100644 index 8477e36d..00000000 --- a/slides/swarm-fullday.yml +++ /dev/null @@ -1,72 +0,0 @@ -title: | - Container Orchestration - with Docker and Swarm - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced -- snap -- btp-auto -- benchmarking -- elk-manual -- prom-manual - -content: -- shared/title.md -- logistics.md -- swarm/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - shared/prereqs.md - - shared/handson.md - - shared/connecting.md - - swarm/versions.md - - shared/sampleapp.md - - shared/composescale.md - - shared/hastyconclusions.md - - shared/composedown.md - - swarm/swarmkit.md - - shared/declarative.md - - swarm/swarmmode.md - - swarm/creatingswarm.md - #- swarm/machine.md - - swarm/morenodes.md -- - swarm/firstservice.md - - swarm/ourapponswarm.md - - swarm/hostingregistry.md - - swarm/testingregistry.md - - swarm/btp-manual.md - - swarm/swarmready.md - - swarm/stacks.md - - swarm/cicd.md - - swarm/updatingservices.md - - swarm/rollingupdates.md - - swarm/healthchecks.md -- - swarm/operatingswarm.md - - swarm/netshoot.md - - swarm/ipsec.md - - swarm/swarmtools.md - - swarm/security.md - - swarm/secrets.md - - swarm/encryptionatrest.md - - swarm/leastprivilege.md - - swarm/apiscope.md -- - swarm/logging.md - - swarm/metrics.md - - swarm/gui.md - - swarm/stateful.md - - swarm/extratips.md - - shared/thankyou.md - - swarm/links.md diff --git a/slides/swarm-halfday.yml b/slides/swarm-halfday.yml deleted file mode 100644 index 926d4867..00000000 --- a/slides/swarm-halfday.yml +++ /dev/null @@ -1,71 +0,0 @@ -title: | - Container Orchestration - with Docker and Swarm - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" -#chat: "[Gitter](https://gitter.im/jpetazzo/workshop-yyyymmdd-city)" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- self-paced -- snap -- btp-manual -- benchmarking -- elk-manual -- prom-manual - -content: -- shared/title.md -- logistics.md -- swarm/intro.md -- shared/about-slides.md -- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - shared/prereqs.md - - shared/handson.md - - shared/connecting.md - - swarm/versions.md - - shared/sampleapp.md - - shared/composescale.md - - shared/hastyconclusions.md - - shared/composedown.md - - swarm/swarmkit.md - - shared/declarative.md - - swarm/swarmmode.md - - swarm/creatingswarm.md - #- swarm/machine.md - - swarm/morenodes.md -- - swarm/firstservice.md - - swarm/ourapponswarm.md - #- swarm/hostingregistry.md - #- swarm/testingregistry.md - #- swarm/btp-manual.md - #- swarm/swarmready.md - - swarm/stacks.md - - swarm/cicd.md - - swarm/updatingservices.md - #- swarm/rollingupdates.md - #- swarm/healthchecks.md -- - swarm/operatingswarm.md - #- swarm/netshoot.md - #- swarm/ipsec.md - #- swarm/swarmtools.md - - swarm/security.md - #- swarm/secrets.md - #- swarm/encryptionatrest.md - - swarm/leastprivilege.md - - swarm/apiscope.md - - swarm/logging.md - - swarm/metrics.md - #- swarm/stateful.md - #- swarm/extratips.md - - shared/thankyou.md - - swarm/links.md diff --git a/slides/swarm-selfpaced.yml b/slides/swarm-selfpaced.yml deleted file mode 100644 index 0bd815d9..00000000 --- a/slides/swarm-selfpaced.yml +++ /dev/null @@ -1,80 +0,0 @@ -title: | - Container Orchestration - with Docker and Swarm - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- in-person -- btp-auto - -content: -- shared/title.md -#- shared/logistics.md -- swarm/intro.md -- shared/about-slides.md -#- shared/chat-room-im.md -#- shared/chat-room-slack.md -#- shared/chat-room-zoom-meeting.md -#- shared/chat-room-zoom-webinar.md -- shared/toc.md -- - shared/prereqs.md - - shared/handson.md - - shared/connecting.md - - swarm/versions.md - - | - name: part-1 - - class: title, self-paced - - Part 1 - - shared/sampleapp.md - - shared/composescale.md - - shared/hastyconclusions.md - - shared/composedown.md - - swarm/swarmkit.md - - shared/declarative.md - - swarm/swarmmode.md - - swarm/creatingswarm.md - #- swarm/machine.md - - swarm/morenodes.md -- - swarm/firstservice.md - - swarm/ourapponswarm.md - - swarm/hostingregistry.md - - swarm/testingregistry.md - - swarm/btp-manual.md - - swarm/swarmready.md - - swarm/stacks.md - - swarm/cicd.md - - | - name: part-2 - - class: title, self-paced - - Part 2 -- - swarm/operatingswarm.md - - swarm/netshoot.md - - swarm/swarmnbt.md - - swarm/ipsec.md - - swarm/updatingservices.md - - swarm/rollingupdates.md - - swarm/healthchecks.md - - swarm/nodeinfo.md - - swarm/swarmtools.md -- - swarm/security.md - - swarm/secrets.md - - swarm/encryptionatrest.md - - swarm/leastprivilege.md - - swarm/apiscope.md - - swarm/logging.md - - swarm/metrics.md - - swarm/stateful.md - - swarm/extratips.md - - shared/thankyou.md - - swarm/links.md diff --git a/slides/swarm-video.yml b/slides/swarm-video.yml deleted file mode 100644 index 9c34166a..00000000 --- a/slides/swarm-video.yml +++ /dev/null @@ -1,75 +0,0 @@ -title: | - Container Orchestration - with Docker and Swarm - -chat: "[Slack](https://dockercommunity.slack.com/messages/C7GKACWDV)" - -gitrepo: github.com/jpetazzo/container.training - -slides: https://container.training/ - -#slidenumberprefix: "#SomeHashTag — " - -exclude: -- in-person -- btp-auto - -content: -- shared/title.md -#- shared/logistics.md -- swarm/intro.md -- shared/about-slides.md -- shared/toc.md -- - shared/prereqs.md - - shared/handson.md - - shared/connecting.md - - swarm/versions.md - - | - name: part-1 - - class: title, self-paced - - Part 1 - - shared/sampleapp.md - - shared/composescale.md - - shared/hastyconclusions.md - - shared/composedown.md - - swarm/swarmkit.md - - shared/declarative.md - - swarm/swarmmode.md - - swarm/creatingswarm.md - #- swarm/machine.md - - swarm/morenodes.md -- - swarm/firstservice.md - - swarm/ourapponswarm.md - - swarm/hostingregistry.md - - swarm/testingregistry.md - - swarm/btp-manual.md - - swarm/swarmready.md - - swarm/stacks.md - - | - name: part-2 - - class: title, self-paced - - Part 2 -- - swarm/operatingswarm.md - #- swarm/netshoot.md - #- swarm/swarmnbt.md - - swarm/ipsec.md - - swarm/updatingservices.md - - swarm/rollingupdates.md - #- swarm/healthchecks.md - - swarm/nodeinfo.md - - swarm/swarmtools.md -- - swarm/security.md - - swarm/secrets.md - - swarm/encryptionatrest.md - - swarm/leastprivilege.md - - swarm/apiscope.md - #- swarm/logging.md - #- swarm/metrics.md - - swarm/stateful.md - - swarm/extratips.md - - shared/thankyou.md - - swarm/links.md