Kubernetes Basics
Bases de Kubernetes
L'auteur original de cette page est Jorge (lisez son post original ici)
Architecture et bases
Que fait Kubernetes ?
Permet l'exécution de conteneurs dans un moteur de conteneurs.
La planification permet une mission efficace des conteneurs.
Garde les conteneurs en vie.
Permet les communications entre conteneurs.
Permet les techniques de déploiement.
Gère les volumes d'informations.
Architecture
Node: système d'exploitation avec pod ou des pods.
Pod: Enveloppe autour d'un conteneur ou de plusieurs conteneurs. Un pod ne doit contenir qu'une seule application (donc généralement, un pod exécute seulement 1 conteneur). Le pod est la façon dont Kubernetes abstrait la technologie de conteneur en cours d'exécution.
Service: Chaque pod a 1 adresse IP interne de la plage interne du nœud. Cependant, il peut également être exposé via un service. Le service a également une adresse IP et son objectif est de maintenir la communication entre les pods afin que si l'un meurt, le nouveau remplacement (avec une adresse IP interne différente) sera accessible exposé dans la même adresse IP du service. Il peut être configuré en interne ou en externe. Le service agit également comme un équilibreur de charge lorsque 2 pods sont connectés au même service. Lorsqu'un service est créé, vous pouvez trouver les points de terminaison de chaque service en exécutant
kubectl get endpoints
Kubelet: Agent principal du nœud. Le composant qui établit la communication entre le nœud et kubectl, et ne peut exécuter que des pods (via le serveur API). Le kubelet ne gère pas les conteneurs qui n'ont pas été créés par Kubernetes.
Kube-proxy: est le service chargé des communications (services) entre l'apiserver et le nœud. La base est un IPtables pour les nœuds. Les utilisateurs les plus expérimentés peuvent installer d'autres kube-proxies provenant d'autres fournisseurs.
Conteneur Sidecar: Les conteneurs Sidecar sont les conteneurs qui doivent s'exécuter avec le conteneur principal dans le pod. Ce modèle de conteneur étend et améliore les fonctionnalités des conteneurs actuels sans les modifier. De nos jours, nous savons que nous utilisons la technologie de conteneur pour envelopper toutes les dépendances nécessaires à l'exécution de l'application n'importe où. Un conteneur ne fait qu'une seule chose et le fait très bien.
Processus principal :
Serveur API : C'est la façon dont les utilisateurs et les pods communiquent avec le processus principal. Seules les demandes authentifiées doivent être autorisées.
Planificateur : La planification consiste à s'assurer que les pods sont associés aux nœuds afin que Kubelet puisse les exécuter. Il a suffisamment d'intelligence pour décider quel nœud a plus de ressources disponibles pour attribuer le nouveau pod. Notez que le planificateur ne démarre pas de nouveaux pods, il communique simplement avec le processus Kubelet en cours d'exécution à l'intérieur du nœud, qui lancera le nouveau pod.
Gestionnaire de contrôleur Kube : Il vérifie les ressources telles que les ensembles de réplicas ou les déploiements pour vérifier si, par exemple, le nombre correct de pods ou de nœuds est en cours d'exécution. Dans le cas où un pod est manquant, il communiquera avec le planificateur pour en démarrer un nouveau. Il contrôle la réplication, les jetons et les services de compte vers l'API.
etcd : Stockage de données, persistant, cohérent et distribué. C'est la base de données de Kubernetes et le stockage clé-valeur où il conserve l'état complet des clusters (chaque changement est enregistré ici). Des composants tels que le planificateur ou le gestionnaire de contrôleur dépendent de cette date pour savoir quels changements ont eu lieu (ressources disponibles des nœuds, nombre de pods en cours d'exécution...)
Gestionnaire de contrôleur Cloud : C'est le contrôleur spécifique pour les contrôles de flux et les applications, c'est-à-dire : si vous avez des clusters dans AWS ou OpenStack.
Notez qu'il peut y avoir plusieurs nœuds (exécutant plusieurs pods), il peut également y avoir plusieurs processus principaux dont l'accès au serveur API est équilibré et leur etcd synchronisé.
Volumes :
Lorsqu'un pod crée des données qui ne doivent pas être perdues lorsque le pod disparaît, elles doivent être stockées dans un volume physique. Kubernetes permet de joindre un volume à un pod pour persister les données. Le volume peut être sur la machine locale ou dans un stockage distant. Si vous exécutez des pods sur différents nœuds physiques, vous devez utiliser un stockage distant pour que tous les pods puissent y accéder.
Autres configurations :
ConfigMap : Vous pouvez configurer des URL pour accéder aux services. Le pod obtiendra des données d'ici pour savoir comment communiquer avec le reste des services (pods). Notez que ce n'est pas l'endroit recommandé pour enregistrer les informations d'identification !
Secret : C'est l'endroit pour stocker des données secrètes comme des mots de passe, des clés API... encodées en B64. Le pod pourra accéder à ces données pour utiliser les informations d'identification requises.
Déploiements : C'est là que les composants à exécuter par Kubernetes sont indiqués. Un utilisateur ne travaillera généralement pas directement avec des pods, les pods sont abstraits dans les ReplicaSets (nombre de mêmes pods répliqués), qui sont exécutés via des déploiements. Notez que les déploiements sont destinés aux applications sans état. La configuration minimale pour un déploiement est le nom et l'image à exécuter.
StatefulSet : Ce composant est spécifiquement destiné aux applications comme les bases de données qui ont besoin d'accéder au même stockage.
Ingress : C'est la configuration qui est utilisée pour exposer l'application publiquement avec une URL. Notez que cela peut également être fait en utilisant des services externes, mais c'est la bonne façon d'exposer l'application.
Si vous implémentez un Ingress, vous devrez créer des contrôleurs Ingress. Le contrôleur Ingress est un pod qui sera le point de terminaison qui recevra les demandes et vérifiera et les équilibrera vers les services. le contrôleur Ingress enverra la demande en fonction des règles d'entrée configurées. Notez que les règles d'entrée peuvent pointer vers différents chemins ou même sous-domaines vers différents services internes de Kubernetes.
Une meilleure pratique de sécurité serait d'utiliser un équilibreur de charge cloud ou un serveur proxy comme point d'entrée pour ne pas avoir de partie du cluster Kubernetes exposée.
Lorsqu'une demande qui ne correspond à aucune règle d'entrée est reçue, le contrôleur Ingress la dirigera vers le "Backend par défaut". Vous pouvez
describe
le contrôleur Ingress pour obtenir l'adresse de ce paramètre.minikube addons enable ingress
Infrastructure PKI - Autorité de certification CA :
CA est
Actions de base
Minikube
Minikube peut être utilisé pour effectuer des tests rapides sur Kubernetes sans avoir besoin de déployer tout un environnement Kubernetes. Il exécutera les processus de maître et de nœud sur une seule machine. Minikube utilisera virtualbox pour exécuter le nœud. Voir ici comment l'installer.
Kubectl Basics
Kubectl
est l'outil en ligne de commande pour les clusters Kubernetes. Il communique avec le serveur API du processus maître pour effectuer des actions dans Kubernetes ou pour demander des données.
Tableau de bord Minikube
Le tableau de bord vous permet de voir plus facilement ce que Minikube exécute, vous pouvez trouver l'URL pour y accéder dans :
Exemples de fichiers de configuration YAML
Chaque fichier de configuration a 3 parties : metadata, specification (ce qui doit être lancé), status (état souhaité). À l'intérieur de la spécification du fichier de configuration de déploiement, vous pouvez trouver le modèle défini avec une nouvelle structure de configuration définissant l'image à exécuter :
Exemple de déploiement + service déclaré dans le même fichier de configuration (à partir de ici)
Comme un service est généralement lié à un déploiement, il est possible de déclarer les deux dans le même fichier de configuration (le service déclaré dans cette configuration n'est accessible qu'en interne) :
helm search <mot-clé>
Secrets dans etcd
etcd est un magasin de clés-valeurs cohérent et hautement disponible utilisé comme stockage de sauvegarde Kubernetes pour toutes les données de cluster. Accédons aux secrets stockés dans etcd :
Vous verrez que les certificats, les clés et les URL sont situés dans le FS. Une fois que vous l'avez, vous pourrez vous connecter à etcd.
Une fois que vous avez établi la communication, vous pourrez obtenir les secrets :
Ajout de chiffrement à l'ETCD
Par défaut, tous les secrets sont stockés en clair dans etcd à moins que vous n'appliquiez une couche de chiffrement. L'exemple suivant est basé sur https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
```yaml apiVersion: apiserver.config.k8s.io/v1 kind: EncryptionConfiguration resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: cjjPMcWpTPKhAdieVtd+
Dernière mise à jour