Kubernetes 1.13 : aperçu des principales nouveautés

Kubernetes 1.13 : aperçu des principales nouveautés

Cette nuit aura lieu un autre lancement de Kubernetes — 1.14. 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 la table de suivi des améliorations de Kubernetes, CHANGELOG-1.14 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 ĂȘtre créés Ă  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), un etcd-operator;
  • 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).

Kubernetes 1.13 : aperçu des principales nouveautés
L'architecture du cluster Kubernetes HA, créée avec kubeadm

Pour plus de dĂ©tails sur la mise en Ɠuvre, vous pouvez consulter la proposition de design. 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 a Ă©tĂ© dĂ©placĂ©e 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 :

Kubernetes 1.13 : aperçu des principales nouveautés

Les dĂ©tails de la mise en Ɠuvre — dans KEP. 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 la possibilitĂ© 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 KEP.

Les journaux précédemment existants sont désormais disponibles 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 ajoutĂ© le champ runtime_handler pour prendre en compte les informations concernant RuntimeClass dans le pod (pour en savoir plus, lisez le texte sur la version 1.12 de Kubernetes, oĂč cette classe est apparue en tant que version alpha), et dans Admission Webhooks rĂ©alisĂ©e 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 l'ampleur de leur application aux namespaces et aux limites du cluster. Les stockages

, qui avaient le statut de version bĂȘta depuis la version

PersistentLocalVolumesK8s 1.10 sont maintenant, déclarés stables (GA) : ce gate de fonctionnalité ne sera plus désactivé et sera supprimé dans Kubernetes 1.17.

PossibilitĂ© l'utilisation de variables d'environnement appelĂ©es Downward API (par exemple, le nom du pod) pour les noms des rĂ©pertoires montĂ©s comme subPath, 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) la prise en charge . 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 la possibilitĂ© 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. Pour l'utiliser () vous devez activerexemple de la documentationle 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 ici). 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 la politique correspondante de Kubernetes.

Tout cela a conduit Ă  ce que les versions alpha atteignent le processus de migration 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 la proposition de design. L'une des consĂ©quences de cette migration a Ă©galement Ă©tĂ© la suppression 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) rĂ©duit Ă  la version bĂȘta.

NƓuds / Kubelet

Une version alpha de nouveau point de terminaison 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 vise Ă  minimiser l'ensemble des mĂ©triques fournies par Kubelet. À propos, ces mĂ©triques sont dĂ©sormais appelĂ©es 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.

Kubernetes 1.13 : aperçu des principales nouveautés
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 KEP.

Parmi d'autres changements :

  • Kubelet essaie maintenant (une seule fois) d'arrĂȘter les conteneurs dans un Ă©tat inconnu (unknown) avant les opĂ©rations de redĂ©marrage et de suppression.
  • Lorsque vous utilisez PodPresets est maintenant ajoutĂ© Ă  l'init-container la mĂȘme information que pour le conteneur ordinaire. a commencĂ© Ă  utiliser
  • Kubelet usageNanoCores du fournisseur de statistiques CRI, et pour les nƓuds et conteneurs sous Windows les statistiques rĂ©seau. ajoutĂ© Les informations sur le systĂšme d'exploitation et l'architecture sont dĂ©sormais enregistrĂ©es dans les labels
  • kubernetes.io/os kubernetes.io/arch et des 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 est passĂ©) en version bĂȘta (activĂ© par dĂ©faut). du et find, utilisĂ©s dans cAdvisor,
  • ont Ă©tĂ© remplacĂ©s par des implĂ©mentations en Go. Dans cli-runtime et kubectl

CLI

le drapeau -k pour l'intégration avec ajouté (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 kustomize Exemple d'utilisation simple d'un fichier KEP):

Kubernetes 1.13 : aperçu des principales nouveautés
kustomization (une application potentiellement plus complexe de kustomize dans le cadre de overlays la nouvelle commande)

En outre :

Autres

ReadinessGate

La stratégie RBAC par défaut ne donne plus accÚs à l'API

  • discovery access-review et aux utilisateurs sans authentification (unauthenticated) Le support officiel de CoreDNS.
  • est assurĂ©. est fourni 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 utilise le plugin forward au lieu de proxy. De plus, dans CoreDNS ajoutĂ© readinessProbe, empĂȘchant l'Ă©quilibrage de charge sur les pod concernĂ©s (non prĂȘts Ă  ĂȘtre servis).
  • Dans kubeadm, aux Ă©tapes init ou upload-certs, il est devenu possible 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 le support gMSA (Group Managed Service Account) — des comptes spĂ©ciaux dans Active Directory, qui peuvent ĂȘtre utilisĂ©s par les conteneurs.
  • Pour GCE mTLS-cryptage entre etcd et kube-apiserver a Ă©tĂ© activĂ©. 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

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster