|
| 1 | +--- |
| 2 | +docType: "Course" |
| 3 | +title: "Concepts" |
| 4 | +description: "Kubernetes Basic Concepts" |
| 5 | +lectures: 1 |
| 6 | +courseTitle: "Concepts" |
| 7 | +themeColor: "#00B39F" |
| 8 | +weight: 1 |
| 9 | +order: 1 |
| 10 | +cardImage: "" |
| 11 | +--- |
| 12 | + |
| 13 | +{{< chapterstyle >}} |
| 14 | + |
| 15 | + |
| 16 | +## History |
| 17 | + |
| 18 | +Kubernetes also called *k8s* (a "k" followed by 8 chars and a "s") or simply *kube* means "Helmsman" in Greek. It is a container orchestrator inspired by Google Borg System which were orchestrating billions of containers on Google infrastructure. |
| 19 | + |
| 20 | +Version *v1.0.0* of Kubernetes was released in July 2015, the last version as of today (October 2024) is *v1.31.1*. The release cycle is quite fast with 3 minor releases per year. |
| 21 | + |
| 22 | +## Main functionalities |
| 23 | + |
| 24 | +Kubernetes is a container orchestrator offering main functionalities, such as: |
| 25 | + |
| 26 | +- Management of applications running in containers |
| 27 | +- Self-healing |
| 28 | +- Service discovery |
| 29 | +- Usage of Secrets and Configurations |
| 30 | +- Long-running process and batch jobs |
| 31 | +- Role Based Access Control (RBAC) |
| 32 | +- Storage Orchestration |
| 33 | + |
| 34 | +## Manages applications in production |
| 35 | + |
| 36 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/environments.png" align="center" width="100%" alt="environments" >}} |
| 37 | + |
| 38 | +## Major project in the open-source ecosystem |
| 39 | + |
| 40 | +Kubernetes is the first graduated project within the [CNCF](https://cncf.io/projects), it was followed by major players like [etcd](https://etcd.io) and [Prometheus](https://prometheus.io/) |
| 41 | + |
| 42 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/cncf.png" align="center" width="100%" alt="CNCF" >}} |
| 43 | + |
| 44 | +## What is a Kubernetes cluster made of ? |
| 45 | + |
| 46 | +A Kubernetes cluster is composed of nodes, where a node is either a virtual machine or a bare metal server. A node can belong to the Control Plane which run processes in charge of managing the cluster and the applications running on it. Or, a node can be a Worker dedicated to run Pods, a group of containers sharing a network stack and storage. |
| 47 | + |
| 48 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/cluster.png" align="center" width="100%" alt="cluster" >}} |
| 49 | + |
| 50 | +## How to access a cluster |
| 51 | + |
| 52 | +A cluster usually comes with a kubeconfig file which contains all the information to communicate with the cluster API Server. This file can be used to configure the standard *kubectl* binary to manage the cluster. The kubeconfig file can also be used with tools like [k9s](https://k9scli.io/), [Mirantis Lens](https://k8slens.dev/), ... which give a higher level view of the cluster. |
| 53 | + |
| 54 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/access.png" align="center" width="100%" alt="access" >}} |
| 55 | + |
| 56 | +## Various workload resources for different use cases |
| 57 | + |
| 58 | +To run a Pod we often rely on a higher level resource, instead of running it directly. The workload resources are: |
| 59 | + |
| 60 | +- Deployment : web server |
| 61 | +- DaemonSet : one agent per node |
| 62 | +- Job / CronJob : batch |
| 63 | +- StatefulSet : stateful application |
| 64 | + |
| 65 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/workloads.png" align="center" width="100%" alt="workload resources" >}} |
| 66 | + |
| 67 | +A request that reaches a Service is load-balanced between the exposed Pods |
| 68 | + |
| 69 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/service.png" align="center" width="100%" alt="service" >}} |
| 70 | + |
| 71 | + |
| 72 | +A Pod can use several resources |
| 73 | + |
| 74 | +- ConfigMap : contains configuration data |
| 75 | +- Secret : contains sensitive data |
| 76 | +- PersistentVolumeClaim / PersistentVolume : storage management |
| 77 | + |
| 78 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/pod-resources.png" align="center" width="100%" alt="pod resources" >}} |
| 79 | + |
| 80 | + |
| 81 | +## Several types of resources |
| 82 | + |
| 83 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/summary.png" align="center" width="100%" alt="Summary" >}} |
| 84 | + |
| 85 | +## An application runs in a Namespace |
| 86 | + |
| 87 | + |
| 88 | +{{< image src="/images/learning-path/intro-kubernetes/concepts/namespace.png" align="center" width="100%" alt="Namespace" >}} |
| 89 | + |
| 90 | +## Resource creation |
| 91 | + |
| 92 | +Each resource is defined in a YAML specification which is sent to the API Server using the kubectl binary. |
| 93 | + |
| 94 | +```yaml |
| 95 | +apiVersion: v1 |
| 96 | +kind: Pod |
| 97 | +metadata: |
| 98 | + name: www |
| 99 | +spec: |
| 100 | + containers: |
| 101 | + - name: www |
| 102 | + image: nginx:1.24 |
| 103 | +``` |
| 104 | +
|
| 105 | +```bash |
| 106 | +kubectl apply -f www.yaml |
| 107 | +``` |
| 108 | + |
| 109 | + |
| 110 | + |
| 111 | +{{< /chapterstyle >}} |
0 commit comments