Namespace
Role
On peut voir les namespaces comme un moyen de classer et compartimenter au sein d’un K8S. On va souvent créer un namespace par produit installé. On peut également appliquer des règles de sécurités au sein d’un namespace et ainsi permettre une isolation entre plusieurs projets.
Toutes les resources Kubernetes n’appartiennent pas à des namespaces. Certaines sont liées au Cluster.
Il existe des namespaces spécifiques :
- default (celui où vous vos objects kubernetes iront si vous ne spécifiez pas de namespace et si vous ne l’avez pas changé via votre contexte)
- kube-system (celui utilisé pour les composants system)
- kube-public (ns visible par tous)
On ne peut pas déplacer un objet kubernetes d’un namespace vers un autre namespace.
Structure
apiVersion: v1
kind: Namespace
metadata:
name: monnamespace
Commandes utiles
Création d’un namespace
kubectl create ns <mon_namespace>
Voir le yaml décrivant votre namespace
kubectl get ns <mon_namespace> -o yaml
Lister les namespaces
kubectl get ns
Supprimer un namespace
kubectl delete ns <mon_namespace>
Namespace bloqué en mode Terminating
Il arrive que lors d’une suppression de namespace celui-ci reste bloqué en mode Terminating
cela peut être dû à plusieurs causes.
- une api de service est cassée (comme toutes les api de service vont être sollicitées lors de la destruction, si une dysfonctionne cela bloque la destruction)
=> vérifier l’état de vos apikubectl get apiservice
- un pod reste bloqué en destruction
=>
kubectl delete pod NOMDUPOD -n NAMESPACE --force
- une resource custom est présente et n’est pas détruite => trouver la racine du problème et la supprimer
- Seulement en dernier recours supprimer le finalizer du namespace
Exercice:
- Essayer de créer un namespace “TEST-NOM-PRENOM” pourquoi K8S ne l’accepte t il pas ?
- Création d’un namespace “test-nom-prenom”
- Création d’un deuxième namespace “nom-prenom”
- Affichage du yaml de votre namespace
- Lister les namespaces
- Modifier votre contexte (cf KubeConfig) pour prendre comme namespace par défaut votre namespace “nom-prenom”