20/03/2021

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 :

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 :

Elements

output

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 :

apiVersion: v1
kind: Service
metadata:
  name: nginx-medium
  namespace: omer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx-medium

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