You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Rémy-Christophe Schermesser 813a7787c1
chore: lint yaml (#19)
5 years ago
05-pods chore: lint yaml (#19) 5 years ago
06-label-annotation chore: lint yaml (#19) 5 years ago
07-deployment chore: lint yaml (#19) 5 years ago
08-service chore: lint yaml (#19) 5 years ago
09-cronjob chore: lint yaml (#19) 5 years ago
10-secrets chore: lint yaml (#19) 5 years ago
11-probes chore: lint yaml (#19) 5 years ago
12-resources feat: add some links for further readings 5 years ago
13-affinity-anti-affinity chore: lint yaml (#19) 5 years ago
14-pdb chore: lint yaml (#19) 5 years ago
15-hpa-vpa chore: lint yaml (#19) 5 years ago
16-sidecar-containers chore: lint yaml (#19) 5 years ago
17-volumes chore: lint yaml (#19) 5 years ago
18-stateful-set chore: lint yaml (#19) 5 years ago
19-controllers chore: reorder the sections 5 years ago
20-operators chore: reorder the sections 5 years ago
21-rbac chore: reorder the sections 5 years ago
99-good-practices chore: lint yaml (#19) 5 years ago
.markdownlint.yml chore: lint yaml (#19) 5 years ago
.yamllint chore: lint yaml (#19) 5 years ago
LICENSE feat: add license 5 years ago
README.md chore: add MD linter (#18) 5 years ago

README.md

Kubernetes Hands on

  1. Prerequisites
  2. What it is not
  3. What is kubernetes? What is it used for?
  4. Glossary
  5. The base building block: pod
  6. Naming things: label and annotation
  7. Deploying my first application: deployment
  8. Accessing my first application: service
  9. Running a background process: cronjob
  10. Secrets
  11. Liveness and readiness probes, and how it impacts your pods
  12. Resources, and how it impacts the scheduling
  13. Improve the availability of your application: affinity and anti-affinity
  14. Improve the availability of your application: pod disruptions budget
  15. Improve the elasticiy of your applications: HPA, VPA
  16. Sidecar containers: what, why, and how
  17. Running a stateful application: volumes
  18. Running a stateful application: stateful-sets
  19. Controllers: what, why, and how
  20. Operators and CRDs: what, why, and how
  21. RBAC
  22. Good practices
  23. Links

License

This hands-on in under the CC BY-NC-SA license.

CC BY-NC-SA

Prerequisites

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
open https://download.docker.com/mac/stable/Docker.dmg
$ brew cask install minikube

$ minikube start
[...]
🏄  Done! Thank you for using minikube!

$ minikube addons enable ingress
✅  ingress was successfully enabled

$ kubectl config current-context
minikube

(Optional) If you feel adventurous, only for macOS

You can try another lighter VM layer than Virtualbox

brew install docker-machine-driver-hyperkit

And start minikube with

minikube start --vm-driver=hyperkit

If you have any issues:

rm -rf ~/.minikube/

And start minikube without hyperkit

minikube start

Completion

If you are using zsh, you can add to your .zshrc file this to have autocomplete of kubectl:

if [ $commands[kubectl] ]; then
  source <(kubectl completion zsh)
fi

What this is and what this is not

What this is

This is a hands on to start with using kubernetes (k8s). It starts from the basics and moves up in complexity. At the end of this hands on you should be able to deploy an API in k8s that is accessible from the outside.

What this is not

This is not a hands on on how to install/manage/deploy a k8s cluster. This is neither a hands on to understand how k8s is working internally. If this topic interests you, see Kubernetes the hard way.

What is k8s? What is it used for

k8s is an open source system for managing containerized applications across multiple hosts, providing basic mechanisms for deployment, maintenance, and scaling of applications.

k8s has a number of features. It can be thought of as:

  • a container platform,
  • a microservices platform,
  • a portable cloud platform and a lot more.

k8s provides a container-centric management environment. It orchestrates computing, networking, and storage infrastructure on behalf of user workloads. This provides much of the simplicity of Platform as a Service (PaaS) with the flexibility of Infrastructure as a Service (IaaS), and enables portability across infrastructure providers.

Glossary

  • yml/yaml

A markup language that relies on spaces & tabulation. All k8s configuration is written using yaml.

You will feel the pain of missing tabs & spaces. Feel free to use a linter, http://www.yamllint.com/.

  • container

Containers are an abstraction at the app layer that packages code and dependencies together.

  • (container) image

A lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.

  • docker

A software technology providing operating-system-level virtualization also known as containers.

Docker uses the resource isolation features of the Linux kernel such as cgroups and kernel namespaces, and a union-capable file system such as OverlayFS and others to allow independent “containers” to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines (VMs).

  • kubectl

The standard cli to interact with k8s, we will use it a lot.

  • minikube

A local k8s, useful for testing. We will use it during this hands on.

  • manifest

k8s configuration files are called manifest. In reference to the manifest of a ship: A list or invoice of the passengers or goods being carried by a commercial vehicle or ship (from wiktionary).

  • (k8s) objects

k8s contains a number of abstractions that represent the state of your system: deployed containerized applications and workloads, their associated network and disk resources, and other information about what your cluster is doing. These abstractions are called objects and represented by a kind in the k8s API.

  • (k8s) cluster

A set of machines, called nodes, that run containerized applications managed by k8s.

A cluster has several worker nodes and at least one master node.

  • (k8s) master

The Master is responsible for managing the cluster. The master coordinates all activities in your cluster, such as scheduling applications, maintaining applications desired state, scaling applications, and rolling out new updates.

k8s master automatically handles scheduling your services across the Nodes in the cluster. The Masters automatic scheduling takes into account the available resources on each Node.

  • (k8s) node

A node is a worker machine in k8s.

A worker machine may be a VM or physical machine, depending on the cluster. It has the Services necessary to run the services and is managed by the master components. The Services on a node include Docker, kubelet and kube-proxy.

The base building block: pod

See the dedicated README.

Naming things: label and annotation

See the dedicated README.

Deploying my first application: deployment

See the dedicated README.

Accessing my first application: service

See the dedicated README.

Running a background process: cronjob

See the dedicated README.

Secrets

See the dedicated README.

Liveness and readiness probes, and how it impacts your pods

See the dedicated README.

Resources, and how it impacts the scheduling

See the dedicated README.

Affinity and anti-affinity

See the dedicated README.

PDB

See the dedicated README.

HPA, VPA

See the dedicated README.

Sidecar containers: what, why, and how

See the dedicated README.

Running a stateful application: volumes

See the dedicated README.

Running a stateful application: stateful sets

See the dedicated README.

Controllers: what, why, and how

See the dedicated README.

Operators and CRDs: what, why, and how

See the dedicated README.

RBAC

See the dedicated README.

Good practices

See the dedicated README.