
Cette nuit un autre lancement de Kubernetes â . ConformĂ©ment Ă la tradition de notre blog, nous allons vous parler des changements clĂ©s dans cette nouvelle version de ce merveilleux produit Open Source.
Les informations utilisées pour préparer ce matériel proviennent de , et des problÚmes, demandes de tirage, Propositions d'Amélioration Kubernetes (KEP) associées.
Commençons par une introduction importante de SIG cluster-lifecycle : des clusters hautement disponibles et dynamiques Kubernetes (ou, pour ĂȘtre plus prĂ©cis, les dĂ©ploiements HA auto-hĂ©bergĂ©s) peuvent maintenant Ă l'aide des commandes familiĂšres (dans le contexte des clusters Ă un seul nĆud) kubeadm (init et joindre). En rĂ©sumĂ©, pour ce faire :
- les certificats utilisés par le cluster sont transférés dans des secrets ;
- afin de permettre l'utilisation d'etcd à l'intérieur du cluster K8s (c'est-à -dire de se débarrasser de la dépendance externe qui existait), ;
- les paramÚtres recommandés pour le répartiteur de charge externe, garantissant une configuration hautement disponible, sont documentés (il est prévu de pouvoir également se passer de cette dépendance plus tard, mais pas à ce stade).

L'architecture du cluster Kubernetes HA, créée avec kubeadm
Pour plus de dĂ©tails sur la mise en Ćuvre, vous pouvez consulter . Cette fonctionnalitĂ© Ă©tait trĂšs attendue : la version alpha Ă©tait attendue dĂ©jĂ dans K8s 1.9, mais n'est arrivĂ©e qu'Ă prĂ©sent.
API
Commande appliquer et en gĂ©nĂ©ral la gestion dĂ©clarative des objets de kubectl dans apiserver. Les dĂ©veloppeurs eux-mĂȘmes expliquent briĂšvement leur dĂ©cision en disant que kubectl apply est une partie fondamentale du travail avec les configurations dans Kubernetes, mais qu'elle "est pleine de bogues et difficile Ă corriger", c'est pourquoi cette fonctionnalitĂ© doit ĂȘtre mise en conformitĂ© et dĂ©placĂ©e dans le plan de contrĂŽle. Des exemples simples et Ă©vidents des problĂšmes existants aujourd'hui :

Les dĂ©tails de la mise en Ćuvre â dans . L'Ă©tat actuel â version alpha (la promotion vers la bĂȘta est prĂ©vue pour la prochaine version de Kubernetes).
Dans la version alpha, il est devenu possible d'utiliser le schĂ©ma OpenAPI v3 pour crĂ©er et publier de la documentation OpenAPI sur les CustomResources (CR), utilisĂ©s pour valider (cĂŽtĂ© serveur) les ressources K8s dĂ©finies par l'utilisateur (CustomResourceDefinition, CRD). La publication d'OpenAPI pour les CRD permet aux clients (par exemple, kubectl) d'effectuer une validation de leur cĂŽtĂ© (dans le cadre de kubectl create et kubectl apply) et de gĂ©nĂ©rer de la documentation sur le schĂ©ma (kubectl explain). Les dĂ©tails â dans .
Les journaux précédemment existants avec le drapeau O_APPEND (et non pas O_TRUNC) afin d'éviter la perte de journaux dans certaines situations et pour faciliter la troncature des journaux par des utilitaires externes pour la rotation.
Dans le contexte de l'API Kubernetes, il est Ă©galement important de noter que dans PodSandbox et PodSandboxStatus le champ runtime_handler pour prendre en compte les informations concernant RuntimeClass dans le pod (pour en savoir plus, lisez le texte sur , oĂč cette classe est apparue en tant que version alpha), et dans Admission Webhooks la possibilitĂ© de dĂ©finir quelles versions AdmissionReview elles supportent. Enfin, dans les rĂšgles d'Admission Webhooks, il est dĂ©sormais possible de limiter Les stockages
, qui avaient le statut de version bĂȘta depuis la version
K8s 1.10 , stables (GA) : ce gate de fonctionnalité ne sera plus désactivé et sera supprimé dans Kubernetes 1.17.
l'utilisation de variables d'environnement appelĂ©es (par exemple, le nom du pod) pour les noms des rĂ©pertoires montĂ©s comme , a Ă©voluĂ© â via un nouveau champ subPathExpr, qui dĂ©termine dĂ©sormais le nom requis du rĂ©pertoire. Ă l'origine, cette fonctionnalitĂ© est apparue dans Kubernetes 1.11, mais elle est restĂ©e en version alpha pour 1.14.
Comme dans la précédente version de Kubernetes, de nombreux changements significatifs ont été apportés au CSI (Container Storage Interface) en pleine évolution :
CSI
La possibilitĂ© de redimensionner les volumes CSI est devenue disponible (dans le cadre de la version alpha) . Pour l'utiliser, il sera nĂ©cessaire d'activer le gate de fonctionnalitĂ© appelĂ©ExpandCSIVolumes , ainsi que d'avoir le support de cette opĂ©ration dans le driver CSI spĂ©cifique.Une autre fonctionnalitĂ© pour le CSI en version alpha â
citer directement (c'est-Ă -dire sans utiliser de PV/PVC) des volumes CSI dans la spĂ©cification des pods. Cela supprime la restriction sur l'utilisation de CSI comme uniquement des solutions de stockage de donnĂ©es distantes , ouvrant ainsi pour eux les portes du mondedes volumes Ă©phĂ©mĂšres locaux. ) vous devez activerle gate de fonctionnalitĂ© CSIInlineVolume. Des progrĂšs ont Ă©galement Ă©tĂ© rĂ©alisĂ©s dans les âintĂ©rieursâ de Kubernetes liĂ©s au CSI, qui ne sont pas trĂšs visibles pour les utilisateurs finaux (administrateurs systĂšme)... Actuellement, les dĂ©veloppeurs doivent maintenir deux versions de chaque plugin de stockage : l'une â 'Ă l'ancienne', dans la base de code K8s (in-tree), et l'autre â dans le cadre du nouveau CSI
(pour en savoir plus, lisez par exemple, dans . Cela engendre des dĂ©sagrĂ©ments comprĂ©hensibles qui doivent ĂȘtre rĂ©solus Ă mesure que le CSI se stabilise en tant que tel. Il n'est pas possible de simplement dĂ©clarer obsolĂštes (deprecated) les API des plugins internes (in-tree) en raison de ). Cela entraĂźne des inconvĂ©nients comprĂ©hensibles qui doivent ĂȘtre corrigĂ©s Ă mesure que le CSI en tant que tel se stabilise. Il n'est pas possible de dĂ©clarer simplement les API des plugins internes (in-tree) obsolĂštes (deprecated) en raison de .
Tout cela a conduit Ă ce que les versions alpha atteignent du code interne des plugins, mis en Ćuvre sous forme d'in-tree, dans les plugins CSI, ce qui signifie que les prĂ©occupations des dĂ©veloppeurs seront rĂ©duites Ă la prise en charge d'une seule version de leurs plugins, tout en maintenant la compatibilitĂ© avec les anciennes API, qui pourront ĂȘtre dĂ©clarĂ©es obsolĂštes selon le scĂ©nario habituel. La migration de tous les plugins des fournisseurs de cloud devrait ĂȘtre rĂ©alisĂ©e d'ici la prochaine version de Kubernetes (1.15), cette mise en Ćuvre obtiendra le statut bĂȘta et sera activĂ©e par dĂ©faut dans les installations K8s. Plus de dĂ©tails peuvent ĂȘtre trouvĂ©s dans . L'une des consĂ©quences de cette migration a Ă©galement Ă©tĂ© la levĂ©e des restrictions sur les volumes dĂ©terminĂ©s par des fournisseurs cloud spĂ©cifiques (AWS, Azure, GCE, Cinder).
De plus, le support des dispositifs de blocs avec CSI (CSIBlockVolume) Ă la version bĂȘta.
NĆuds / Kubelet
Une version alpha de dans Kubelet, destinée à fournir des métriques sur les ressources principales. En général, alors qu'auparavant Kubelet obtenait des statistiques d'utilisation des conteneurs à partir de cAdvisor, ces données proviennent maintenant de l'environnement d'exécution du conteneur via le CRI (Container Runtime Interface), bien que la compatibilité avec les anciennes versions de Docker soit maintenue. Auparavant, les statistiques collectées dans Kubelet étaient fournies via l'API REST, tandis qu'à présent, un point de terminaison est utilisé pour cela, situé à l'adresse /metrics/resource/v1alpha1. La stratégie à long terme des développeurs à minimiser l'ensemble des métriques fournies par Kubelet. à propos, ces métriques non pas «métriques de base», mais «métriques de ressources», et décrivent des «ressources de premiÚre classe, telles que le CPU et la mémoire».
Un point trÚs intéressant : malgré l'avantage évident en termes de performances du point de terminaison gRPC par rapport à divers cas d'utilisation du format Prometheus (le résultat de l'un des benchmarks est ci-dessous), les auteurs ont préféré le format texte de Prometheus en raison du leadership évident de ce systÚme de surveillance dans la communauté.
«gRPC n'est pas compatible avec les pipelines de surveillance principaux. Le point de terminaison ne sera utile que pour la livraison de métriques au Metrics Server ou aux composants de surveillance qui s'intÚgrent directement avec lui. Lors de l'utilisation du cache dans le Metrics Server, les performances du format texte de Prometheus sont plutÎt bonnes. pour nous, il est préférable de choisir Prometheus plutÎt que gRPC, compte tenu de la large adoption de Prometheus dans la communauté. Lorsque le format OpenMetrics sera plus stable, nous pourrons atteindre des performances similaires à celles de gRPC grùce à un format basé sur proto.

L'un des tests comparatifs de performances utilisant les formats gRPC et Prometheus dans le nouveau point de terminaison Kubelet pour les mĂ©triques. Plus de graphiques et d'autres dĂ©tails peuvent ĂȘtre trouvĂ©s dans .
Parmi d'autres changements :
- Kubelet essaie maintenant (une seule fois) les conteneurs dans un état inconnu (unknown) avant les opérations de redémarrage et de suppression.
- Lorsque vous utilisez est maintenant ajouté à l'init-container a commencé à utiliser
- Kubelet
du fournisseur de statistiques CRI, et pour les nĆuds et conteneurs sous Windowsles statistiques rĂ©seau. Les informations sur le systĂšme d'exploitation et l'architecture sont dĂ©sormais enregistrĂ©es dans les labels - kubernetes.io/os
kubernetes.io/archetdes objets Node (transfĂ©rĂ© de la bĂȘta en GA).La possibilitĂ© de spĂ©cifier un groupe d'utilisateurs systĂšme spĂ©cifique pour les conteneurs dans un pod ( - RunAsGroup
) est apparue dansK8s 1.11 ) du et find, utilisés dans cAdvisor, - ont été remplacés Dans cli-runtime et kubectl
CLI
le drapeau -k pour l'intégration avec (d'ailleurs, son développement est maintenant réalisé dans un référentiel séparé), c'est-à -dire pour le traitement de fichiers YAML supplémentaires à partir de répertoires de kustomization spéciaux (voir les détails de leur utilisation Exemple d'utilisation simple d'un fichier ):

kustomization overlays )
En outre :
- kubectl create cronjob
, dont le nom parle de lui-mĂȘme.combinent - Dans
kubectl logsest maintenant possible drapeaux-f(pour le streaming des logs) et--selector-l(pour la requĂȘte des labels).ont Ă©tĂ© apprises - kubectl Dans la commande
- kubectl wait
--alldrapeaupour sélectionner toutes les ressources du type de ressource spécifié dans l'espace de noms.Les fonctionnalités suivantes ont obtenu un statut stable (GA) :
Autres
ReadinessGate
- Prise en charge des grandes pages (feature gate intitulé
- HugePages );
- ;
- Pod Priority & Preemption .
La stratégie RBAC par défaut ne donne plus accÚs à l'API
- discovery
access-reviewetaux utilisateurs sans authentification(unauthenticated) Le support officiel de CoreDNS. - est assurĂ©. uniquement pour Linux, donc lors de l'utilisation de kubeadm pour son dĂ©ploiement (CoreDNS) dans le cluster, les nĆuds doivent fonctionner uniquement sous Linux (des nodeSelectors sont utilisĂ©s pour cette restriction).
- La configuration par dĂ©faut de CoreDNS est maintenant au lieu de proxy. De plus, dans CoreDNS readinessProbe, empĂȘchant l'Ă©quilibrage de charge sur les pod concernĂ©s (non prĂȘts Ă ĂȘtre servis).
- Dans kubeadm, aux étapes
initouupload-certs, de tĂ©lĂ©charger les certificats nĂ©cessaires pour connecter un nouveau control-plane au secret kubeadm-certs (le drapeau est utilisĂ©--experimental-upload-certs). - Pour les installations Windows, une version alpha est apparue gMSA (Group Managed Service Account) â des comptes spĂ©ciaux dans Active Directory, qui peuvent ĂȘtre utilisĂ©s par les conteneurs.
- Pour GCE Mises à jour des logiciels utilisés/dépendants : Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, prise en charge de Docker 18.09 dans kubeadm, et la version minimale prise en charge de l'API Docker est devenue 1.26.
- Kubernetes 1.11 : aperçu des principales nouveautés
P.S.
Lisez aussi dans notre blog :
- «»;
- «»;
- «»;
- «».
Source : habr.com
