Concepts de base

SRC-fr: https://kubernetes.io/fr/docs/concepts/

API kube fournit des objets (ressources) pour décrire l’état souhaité du cluster. Interaction avec API : le plus simple c’est de passer par kubectl

=> control plane : assure que l’état souhaité est l’état réelle du cluster correspond

Control plane

Actor

  • master les 3 processus présents:
    • kube-apiserver
    • kube-controler-manager
    • kube-scheduler
  • worker : 2 processus qui vont interagir avec le master
    • kubelet (port 10250) : communique avec le master ;
    • kube-proxy : gérer la partie réseau au sein du cluster, travaille sur plusieurs ports les loopback ou open

Actions:

  • conservation de l’état des ressources demandées (stocker dans etcd, ou autres solution de stockage)
  • boucle de contrôle régulière pour comparer l’état des ressources dans le cluster et l’état souhaité soit les mêmes.

POD connecter sur la pile réseau de l’hôte:

  • calico-kube-controllers
  • calico-nodes (un pod par nodes)
  • kube-apiserver-master
  • kube-controler-manager-master
  • kube-proxy (un pod par nodes)
  • kube-scheduler-master
  • nginx-proxy-worker (un pod par worker)

Ressources

On distingue :

  • objet de base :
    • pod
    • service
    • volume
    • namespaces
  • controleur, avec niveau d’abstraction supérieur qui vont gérer des objets pour nous :
    • replicaset
    • deployment
    • statefullset
    • daemonset
    • job

Manage ressources

Pod Preset

SRC https://kubernetes.io/docs/concepts/workloads/pods/podpreset/ SRC use https://kubernetes.io/docs/tasks/inject-data-application/podpreset/

=> object qui injecte des informations de configuration dans un pod au moment de la création: secrets, volumes, volumes mount (token), environment variabel.

  • utilisation des label-selector pour un pod-preset sur un ensemble de pod

Principe :

  • recherche de tous les pod-preset et sélection en fonction label-selector ;

    • identification de 0 ou plusieurs pod-preset à appliquer pour la création du pod
  • à la création du pod merge de la définition du pod-preset avec la définition du yaml ;

  • ajout d’une annotation dans le pod pour donner le nom du pod-preset utilisé ;

Il est possible d’ignorer les pod-preset défini, grâce à une annotation :

IMP : en cas d’erreur : message dans les évents et création d’un pod sans les informations du pod-preset.

Cluster: configuration pour utiliser les pod-preset

  • ajouter une configuration pour y avoir accès :

    • pour API : pour settings.k8s.io/v1alpha1/podpreset , configure le runtime-config avec settings.k8s.io/v1alpha1=true

In minikube add this flag

--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true

Utilisation

Commandes utiles

kubectl port-forward

Exemple avec Redis : - run déploy - svc

kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-deployment.yaml

kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-service.yaml

Connaitre le port d’écoute dans le pod

kubectl get pods redis-master-765d459796-258hz --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'

Forwarder le port d’écoute du pod vers un port de l’hote Possibilité d’utiliser plusieurs resources comme source : pod, deploy, rs, svc

kubectl port-forward redis-master-765d459796-258hz 7000:6379
kubectl port-forward deployment/redis-master 7000:6379
kubectl port-forward rs/redis-master 7000:6379
kubectl port-forward svc/redis-master 7000:6379