AKS : Azure Kubernetes Services
Définition
Blocks de kubernetes
Un Node c’est une VM
Un Node pool c’est plusieurs vm avec la même configuration. On peut avoir plusieurs nodes pool dans un cluster
Un cluster c’est un ensemble de l’ensemble de node pool
**Le pod ** c’est l’encapsulation d’un container
un namespace c’est un segmentation logique dans lequel on a des pods
Composants
Dans kubernetes il y a plusieurs composants :
- Kublet : software qu’on installe dans le nœud (Microsoft l’installe) récupérer les demande du contrôleur
- Api server : API REST pour piloter les pods et tout
- ETCD : C’est une base de données clef valeur (= stocker l’état du serveur)
- Scheduler : distribuer les nœuds à travers les VM
- Contrôleur : orchestrateur (redémarre blablabla)
- Container runtime : l’exécution du container (ex : pour docker)
Technologies :
Mini Kube : permet de faire des test avec kubernetes (et c’est gratuit !)
Installation de minikube
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/
minikube
Installation de docker
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker omer
Pour le lancer
minikube start
Rajouter l’alias
# minikube
alias kubectl='minikube kubectl --'
Commandes
Les commandes kube fonctionne de cette manière :
kubectl [action] [element] [nom] (-o [ouput])
Actions :
- get : afficher les infos
- edit : editer le yaml à chaud
- describe : information
Elements
- svc : services
- pod : les pods
- ns: namespace
- no : un noeud
output
- wide : donne plus d’information
- yaml : exporte la config en yaml
Exemple :
Information sur un nœud
kubectl get no
OU
kubectl describe no minikube
Vous pouvez créer différents élément soit en ligne de commande soit à l’aide d’un fichier yaml.
Créer un namespace :
lister les namespaces :
kubectl get no
Créer un namespace
kubectl create ns [mon-namespace]
Delete un namespace
kubectl delete ns [mon-namespace]
manifest (namespace.yaml)
apiVersion: V1
kind: Namespace
metadata:
name: omer
methadata : information possible utilie
kind : ce qu’on veut déployer
kubectl apply -f namespace.yaml
Supprimer le pod
kubectl delete pod <nom_pod> -n<namesapce>
Info
kubectl get pods -n [namespace] -o wide
OU
kubectl describe pod nginx-medium -n omer
Logs
kubectl logs [pod] -n [namespace]
Entrer dans le pod :
kubectl exec -it nginx-medium -n omer -- bash
Deployement
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-medium
namespace: omer
spec:
template:
metadata:
labels:
app: nginx-medium
spec:
containers:
- name: echoserver
image: nginx
ports:
- containerPort: 80
selector:
matchLabels:
app: nginx-medium
replicas: 3
ya 3 pods normalement :
kubectl get pods -n omer -o wide
On peut supprimer un pod et ça le recrée automatiquement
kubectl destroy pod nginx-medium-657564c779-78fcz -n omer
Pour voir le deployement
kubectl get deployment -n omer
Services
Il y a 2 types de service :
- cluster ip (DNS interne) –> Nous on va faire ça
apiVersion: v1
kind: Service
metadata:
name: nginx-medium
namespace: omer
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx-medium
- node port (expose un port sur le noeud)
Example que j’ai pas utilisé
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
On peut curl notre nginx en passant par le service. Pour l’instant ce n’est pas dispo de l’exterieur mais que du réseau cube : Rentrez dans un pod (même d’un autre namespace) et faites un curl sur nginx-medium.omer.svc.cluster.local
curl nginx-medium.arkalo.svc.cluster.local
Ingress
Associer un service à un hostname il faut ajouter une entrée avec le node-master dans le /etc/hosts
(pour minikube)
192.168.49.2 nginx-medium.arkalo.sbx.teams.internal.fd-pf.cloud