CNCF: Cloud Native Computer Foundation
Redis | BDD clef-valeur |
ElasticSearch | NOSQL / moteur de recherche |
Postgresql | base de données SQL |
RabbitMQ | agent de message |
Kafka | agent de message / événements |
Vault | BDD sécurisés |
Mongo | BDD NOSQL |
Nginx | serveur web |
Consul | gestion de réseau |
MySql | BDD SQL |
Le plus connu et utilisé, objet de ce cours
Proposé par Hashicorp, solution d'orchestration hybride entre conteneurs, machines virtuelles et machines physiques.
Proposé par Docker, solution plus simple mais qui ne permet pas une utilisation aussi avancée.
Une surcouche à Kubernetes qui permet de simplifier son utilisation à grande échelle.
Il reste encore une multitudes de concepts et de termes propres à Kubernetes. Je vous invite donc à consulter cette page: https://kubernetes.io/fr/docs/concepts/.
etcd
kubectl
.Cela se fait avec la commande
kubectl apply -f <fichier.yaml>
Syntaxe:
kubectl get <ressource>
❯ kubectl get pods
NAME READY STATUS RESTARTS AGE
profiles-app 3/3 Running 0 22s
❯ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
profiles-app-svc LoadBalancer 10.97.188.25 <pending> 8000:30487/TCP,8001:32451/TCP 5s
Syntaxe:
kubectl logs <nom ressource>
❯ kubectl logs profiles-app
...
Syntaxe:
kubectl delete <type ressource> <nom ressource>
ou
kubectl delete -f <fichier.yaml>
❯ kubectl delete pods profiles-app
pod "profiles-app" deleted
Syntaxe:
kubectl describe <type ressource> <nom ressource>
❯ kubectl -n profiles-app describe pod profiles-app
Name: profiles-app
Namespace: profiles-app
Priority: 0
Service Account: default
Node: minikube/192.168.49.2
Start Time: Thu, 09 May 2024 17:35:54 +0200
Labels: run=profiles-app
Annotations: <none>
Status: Running
IP: 10.244.0.7
...
Dans K8S les ressources se créent depuis des fichiers YAML décrivant la ressource en question et ses paramètres.
Le language YAML est un language de sérialisation semblale à JSON.
L'extension de fichier est .yaml
ou .yml
.
Exemple de fichier YAML:
---
clef: valeur
liste_de_nombres:
- 1
- 2
- 3
liste_de_clefs_valeurs:
- titre: blade_runner
note: 10
---
apiVersion: v1 # nécessaire pour que K8S comprenne
kind: Namespace # le type de ressource
metadata: # les informations de la ressource
name: profiles-app # ici, son nom
---
apiVersion: v1
kind: Pod # ici le type est "pod"
metadata:
namespace: profiles-app-ns # on choisi le namespace
name: profiles-app # le nom du pod
spec: # puis ses spécifications
containers: # il contient des conteneurs
- name: database # nom du conteneur
image: image:latest # l'image à utiliser
env: # variables d'environnement
- name: COULEUR # avec un nom
value: "rouge" # et une valeur
apiVersion: apps/v1
kind: Deployment # un nouveau type, "Deployment"
metadata:
name: nginx-deployment # on lui met un nom
labels: # et des labels
app: nginx
spec:
replicas: 3 # le nombre de réplications voulues
selector:
matchLabels:
app: nginx
template: # champs qui seront appliqués aux pods
metadata:
labels:
app: nginx
spec:
containers: # on spécifie les conteneurs
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service # ici le type est "service"
metadata:
namespace: profiles-app-ns # on choisi le namespace
name: my-service # on choisi un nom pour le service
spec:
selector: # règles pour sélectionner le pod
app.kubernetes.io/name: profiles-app # selection par nom
ports: # on choisi les ports à exposer
- protocol: TCP # le protocole
port: 80 # le port *CIBLE*
targetPort: 9376 # le port *DU POD*