<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Λ\: Laurent Noireterre</title>
    <description>The latest articles on DEV Community by Λ\: Laurent Noireterre (@launoirt).</description>
    <link>https://dev.to/launoirt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F404187%2F67eac92f-62c5-41af-b988-03e2b9c4cc0d.jpg</url>
      <title>DEV Community: Λ\: Laurent Noireterre</title>
      <link>https://dev.to/launoirt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/launoirt"/>
    <language>en</language>
    <item>
      <title>Cloud : un peu d’ARM avec votre cluster Kubernetes ?</title>
      <dc:creator>Λ\: Laurent Noireterre</dc:creator>
      <pubDate>Mon, 06 May 2024 12:10:04 +0000</pubDate>
      <link>https://dev.to/stack-labs/cloud-un-peu-darm-avec-votre-cluster-kubernetes--36aa</link>
      <guid>https://dev.to/stack-labs/cloud-un-peu-darm-avec-votre-cluster-kubernetes--36aa</guid>
      <description>&lt;p&gt;La majorité des clouds providers proposent des solutions basées sur des architectures processeurs &lt;strong&gt;ARM&lt;/strong&gt;, tel que &lt;strong&gt;Graviton&lt;/strong&gt; chez AWS ou &lt;strong&gt;Tau T2A&lt;/strong&gt; chez GCP. Les avantages de tels processeurs sont multiples : efficacité énergétique, couts réduits, performances… Ils sont de plus tout à fait adaptés aux environnements conteneurisés.&lt;/p&gt;

&lt;p&gt;Exécuter vos workloads &lt;strong&gt;Kubernetes&lt;/strong&gt; sur des processeurs ARM parait donc être un bonne idée. Cela rentre aussi dans une approche &lt;strong&gt;FinOps&lt;/strong&gt;, car l’utilisation de processeurs arm en lieu et place de processeurs x86 va permettre des réductions de coûts non négligeables (de l’ordre de 20% avec des processeurs Graviton) à performances égales voire supérieures. &lt;/p&gt;

&lt;p&gt;Si la mise en place d’une architecture arm peut paraitre assez simple sur de nouveaux clusters, qu’en est-il de la migration d’une architecture existante amd64 vers une architecture arm64 ? &lt;/p&gt;

&lt;h2&gt;
  
  
  Considérations
&lt;/h2&gt;

&lt;p&gt;Avant de se lancer dans la migration vers une architecture arm, quelques considérations sont à prendre en compte vis-à-vis des applications qui tournent sur votre cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langages et librairies
&lt;/h3&gt;

&lt;p&gt;La majorité des langages supportent maintenant des architectures ARM. Les langages interprétés (NodeJS, Python…) ou byte-code compilés (Java, .Net) devraient fonctionner sans modifications majeures. Attention cependant si vous utilisez des librairies ou fragments de codes natifs (JNI), une recompilation sera necessaire.&lt;/p&gt;

&lt;p&gt;Les langages compilés (C/C++, Go…) supportent pour la plus grande majorité les architectures ARM mais ils devront être recompilés.&lt;/p&gt;

&lt;h3&gt;
  
  
  Images Docker
&lt;/h3&gt;

&lt;p&gt;De manière générale nos applications packagées pour s’executer dans des conteneurs utilisent une image de base (le &lt;strong&gt;FROM&lt;/strong&gt; du Dockerfile). Attention à bien vérifier que cette image aussi supporte ARM. C’est le cas de la majorité des standards et cela peut se vérifier rapidement en se connectant sur le registry depuis lequel elles sont tirées. Par exemple pour l’image officielle OpenJDK sur Dockerhub, on remarque que les 2 types d’architectures sont bien supportées :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8fi4wv0uo9wz70y4jg5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8fi4wv0uo9wz70y4jg5.png" alt="Image description" width="800" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Services tiers
&lt;/h3&gt;

&lt;p&gt;Des services tiers tels que Prometheus ou ArgoCD peuvent aussi tourner sur nos cluster Kubernetes afin d’assurer diverses taches (observabilité, déploiement, sécurité…). Il faudra donc s’assurer là aussi que ces services sont déployables sur une architecture ARM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Système d’exploitation
&lt;/h3&gt;

&lt;p&gt;Si vous utilisez des services cloud entièrement managés tel que &lt;strong&gt;EKS Fargate&lt;/strong&gt; ou &lt;strong&gt;GKE Autopilot&lt;/strong&gt; il n’y aura aucun impact. Par contre si vous avez des noeuds que vous managez vous-même, une migration du système d’exploitation sera nécessaire. &lt;/p&gt;

&lt;h2&gt;
  
  
  Construction : Docker multi-architecture
&lt;/h2&gt;

&lt;p&gt;Maintenant que vous vous êtes assuré que vos applications sont bien éligibles à une plateforme arm, il s’agit de les reconstruire afin qu’elles puissent tourner sur ce type d’architecture. &lt;/p&gt;

&lt;h3&gt;
  
  
  Principe
&lt;/h3&gt;

&lt;p&gt;La meilleure solution pour pouvoir instancier vos conteneurs sur une architecture ARM n’est pas d’effectuer un build de vos images pour ce type d’architecture spécifiquement, mais plutôt d’utiliser une méthode de build &lt;strong&gt;multi-architecture&lt;/strong&gt;. Votre image sera alors construite en même temps et à partir de la même source (DockerFile) pour une liste d’architecture que vous aurez prédéfinie.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17q049m1rluqkb1ra10k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17q049m1rluqkb1ra10k.png" alt="Image description" width="341" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cela permettra de déployer ces nouvelles images sur vos clusters nouvellement configurés avec des noeuds arm, mais aussi de pouvoir lancer indifféremment vos containers sur des architectures plus classiques type amd64 pour du développement ou des tests par exemple.&lt;/p&gt;

&lt;p&gt;Ce sera le runtime de conteneur qui, au moment du pull, récupérera les layers de l’image correspondant au type d’architecture sur lequel il tourne : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftadeyrq9mbtg592hqf3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftadeyrq9mbtg592hqf3j.png" alt="Image description" width="644" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Mise en place
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Solution 1 : Docker buildx
&lt;/h3&gt;

&lt;p&gt;Une approche courante pour construire des images Docker multi-architecture consiste à utiliser le plugin docker &lt;strong&gt;buildx&lt;/strong&gt; (&lt;a href="https://docs.docker.com/build/architecture/#buildx" rel="noopener noreferrer"&gt;https://docs.docker.com/build/architecture/#buildx&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;Ce plugin se base sur &lt;strong&gt;QEMU&lt;/strong&gt; (Quick Emulator) pour construire des images multi-architectures. QEMU est un émulateur de processeur qui permet d'exécuter du code destiné à une architecture spécifique depuis un autre type d’architecture. Cela va permettre de construire des images Docker pour des architectures différentes de celle de l'hôte.&lt;/p&gt;

&lt;p&gt;Concrètement, tout ce que vous aurez à faire est d’installer le plugin docker buildx (vérifier la compatibilité avec votre version de docker), et de lancer un build en listant les plateformes cibles :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker buildx create &lt;span class="nt"&gt;--use&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; mybuild node-amd64
mybuild
docker buildx create &lt;span class="nt"&gt;--append&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; mybuild node-arm64
docker buildx build &lt;span class="nt"&gt;--platform&lt;/span&gt; linux/amd64,linux/arm64 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le build et le push de l’image peuvent se faire avec une seule et même instruction :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker buildx build &lt;span class="nt"&gt;--tag&lt;/span&gt; my-user/my-image &lt;span class="nt"&gt;--platform&lt;/span&gt; linux/arm64/v8,linux/amd64 &lt;span class="nt"&gt;--push&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour plus de détails vous pouvez vous référer à la procédure Docker: &lt;a href="https://docs.docker.com/build/building/multi-platform/" rel="noopener noreferrer"&gt;https://docs.docker.com/build/building/multi-platform/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution 2 : Manisfest
&lt;/h3&gt;

&lt;p&gt;Une seconde solution, plus complexe, est la méthode “Do It Yourself”. Elle consiste à une création manuelle du manifest d'image après avoir effectué 2 builds, un pour chaque type d’architecture.&lt;/p&gt;

&lt;p&gt;Elle fait aussi intervenir 3 registres d’images, car chacune des images construites doit être poussée dans son propre registre avant d’être poussée une 3ème fois dans un registre multi-architecture.&lt;/p&gt;

&lt;p&gt;Donc pour résumer :&lt;/p&gt;

&lt;p&gt;1 - On construit et on pousse une image pour chaque architecture&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# AMD64&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; my-user/my-image-amd64 &lt;span class="nt"&gt;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64/ &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;docker push my-user/my-image-amd64

&lt;span class="c"&gt;# ARM64V8&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; my-user/my-image-arm &lt;span class="nt"&gt;--build-arg&lt;/span&gt; &lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;arm64v8/ &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;docker push my-user/my-image-arm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2 - On créé un manifeste à partir de chacune des images&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker manifest create &lt;span class="se"&gt;\&lt;/span&gt;
my-user/my-image &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--amend&lt;/span&gt; my-user/my-image-amd64 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--amend&lt;/span&gt; my-user/my-image-arm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3 - On pousse le nouveau manifest&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker manifest push my-user/my-image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Remarque&lt;/em&gt; : il est aussi possible de jouer sur les tags des différentes images pour n’utiliser qu’un seul registry&lt;/p&gt;

&lt;p&gt;Cette solution peut être utile si vous construisez vos images avec un autre outils que Docker, tels que Kaniko ou Buildah. &lt;/p&gt;

&lt;p&gt;Un post sur le blog de Docker détaille ces 2 méthodes: &lt;a href="https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/" rel="noopener noreferrer"&gt;https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosting : Cluster Kubernetes Hybride
&lt;/h2&gt;

&lt;p&gt;Vous avez maintenant des images Docker multi-architectures capable de tourner indifféremment sur de l’amd64 ou de l’arm. Mais il est possible que pour une raison ou une autre, certaines de vos applications n’aient pas pu être construites pour architecture arm et que vous deviez donc conserver des noeuds type amd64 pour celles-ci.&lt;/p&gt;

&lt;p&gt;Dans ce cas pas de panique, vous pouvez jouer sur les teintes et node selector (ou node affinity) de Kubernetes. &lt;/p&gt;

&lt;p&gt;Je m’explique. Les clusters Kubernetes managés sont capables de gérer plusieurs groupes de noeuds, chacun de ces groupes pouvant s’appuyer sur des propriétés différentes (type d’instance, nombre d’instances…). Il est alors tout à fait possible de créer 2 groupes de noeuds distincts, l’un comportant des machines de type amd64 et l’autre de type arm. Pour garder la maitrise sur les workloads qui vont être déployés par la suite sur l’un ou l’autre groupe de noeuds, on appliquera une teinte sur l’un des groupes :&lt;/p&gt;

&lt;p&gt;(Si vous n’êtes pas familier avec la notion de teinte et de node selector je vous invite à consulter à la documentation Kubernetes &lt;a href="https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/" rel="noopener noreferrer"&gt;https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/&lt;/a&gt; et &lt;a href="https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/" rel="noopener noreferrer"&gt;https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7nvrvr5r7nic0d81a4zk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7nvrvr5r7nic0d81a4zk.png" alt="Image description" width="800" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Par défaut tous nos pods seront ainsi déployés sur le node group arm. On utilisera alors un node selector ainsi qu’une tolération au niveau des pods que l’on souhaite assigner à un type d’architecture amd64.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tolerations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;effect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NoSchedule&lt;/span&gt;
  &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-arch-type&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;amd64&lt;/span&gt;
&lt;span class="na"&gt;nodeSelector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;kubernetes.io/arch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;amd64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cela permet de continuer de faire tourner sans risque vos applications nos compatibles arm sur des noeuds amd64.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remarque&lt;/em&gt;: on peut tout à fait envisager le mécanisme inverse, à savoir un déploiement par défaut sur des noeuds type amd64 (non teintés) et prévoir une sélection d’applications à déployer sur des noeuds type arm (grâce aux teintes et node selectors). Cela permet dans un cluster existant amd64, d’envisager une stratégie de migration de vos applications par lot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Félicitations !&lt;/strong&gt; Vous avez maintenant un cluster Kubernetes capable d’héberger plusieurs types d’architectures, et des applications pouvant se déployer indifféremment sur l’une ou l’autre tout en gérant vous même cette répartition.&lt;/p&gt;

&lt;p&gt;Ce type d'architecture de plus en plus répandu mérite vraiment de s'y intéresser, surtout dans le cas de la mise en place d'une nouvelle plateforme. &lt;/p&gt;

&lt;p&gt;Pour ce qui est de la migration d'une plateforme existante, le ROI est de manière générale très intéressant mais une stratégie de migration doit impérativement être mise en place. &lt;/p&gt;

</description>
      <category>cloud</category>
      <category>kubernetes</category>
      <category>arm</category>
      <category>docker</category>
    </item>
    <item>
      <title>AWS Summit Paris 2024</title>
      <dc:creator>Λ\: Laurent Noireterre</dc:creator>
      <pubDate>Fri, 12 Apr 2024 10:21:24 +0000</pubDate>
      <link>https://dev.to/stack-labs/aws-summit-paris-2024-458a</link>
      <guid>https://dev.to/stack-labs/aws-summit-paris-2024-458a</guid>
      <description>&lt;p&gt;&lt;em&gt;Article co-écrit avec Hicham Yahiaoui (Cloud Architect @Stack-Labs) et Yoann Metenier (Cloud Architect @Stack-Labs)&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Keynote
&lt;/h2&gt;

&lt;h3&gt;
  
  
  La GenAI c’est génIAl
&lt;/h3&gt;

&lt;p&gt;L'AWS Summit Paris 2024 s’est déroulée au palais des congrès. Le lieu était plus que nécessaire au vu du nombre de personnes présentes à cet évènement. Dès notre arrivée, et après avoir récupéré nos cartes d’accès, nous nous sommes installés dans le grand amphithéâtre afin d’assister à la Keynote d’ouverture.&lt;/p&gt;

&lt;p&gt;Julien Groues (General Manager - Europe South, AWS) a effectué quelques présentations sur AWS en début de keynote pour ensuite laisser la main à Mai-Lan Tomsen-Bukovec (VP of Technology, AWS) qui est venu pour discuter des nouveautés 2024 AWS : &lt;strong&gt;la GenAI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tout au long de cette keynote de 1h30 plusieurs intervenants sont montés sur scène afin de présenter leurs besoins et utilisations de la GenAI sur AWS. Cependant, une annonce surprise a été effectuée en début de session : &lt;strong&gt;AWS x Mistal AI&lt;/strong&gt;.&lt;br&gt;
En effet le premier intervenant sur scène n’est autre que Arthur Mensch CEO de Mistral AI. Il est venu pour confirmer son partenariat avec AWS permettant aux utilisateurs de disposer de Mistral AI dans AWS Bedrock pour la région Europe ! Les versions disponibles sont : Mistral Large, Mistral 7B et Mistral 8x7B.&lt;br&gt;
A la suite de cette annonce forte excitante, les intervenants suivants sont venu présenter leurs utilisation du cloud AWS pour dynamiser leur activité et enrichir l'expérience de leurs clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fabien Mangeant (Chief Data and AI Officer, Air Liquide)&lt;/li&gt;
&lt;li&gt;Thomas Wolf (Co-Founder, Hugging Face)&lt;/li&gt;
&lt;li&gt;Raphaëlle Deflesselle (CTO, Groupe TF1)&lt;/li&gt;
&lt;li&gt;Tom Brown (Co-Founder, Anthropic)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A la fin de la keynote, nous avons poursuivi notre périple AWS en participant à quelques conférences parmi les 175 disponibles et en discutant sur les stands des  partenaires afin de découvrir des projets et utilisations de diverses solutions sur AWS. Nous avons choisi de vous présenter dans la suite de cet article 3 conférences auxquelles nous avons assisté.&lt;/p&gt;




&lt;h2&gt;
  
  
  Multi-régions Zéro latence avec Kubernetes, Couchbase &amp;amp; Qovery
&lt;/h2&gt;

&lt;p&gt;Laurent Doguin (Developer Advocate Couchbase) et Romaric Philogène (CEO Qovery) nous ont fait le plaisir d’effectuer une présentation de l’intégration entre Couchbase et Qovery permettant de réduire et stabiliser une connexion BDD – Kubernetes dans un environnement multi-région sur AWS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Un peu de contexte
&lt;/h3&gt;

&lt;p&gt;Le temps d’attente de réponse d’une application peut provoquer une lassitude des utilisateurs d’autant plus à notre époque où nous sommes habitués à des services qui répondent rapidement. Nos interlocuteurs nous présentent les résultats d’une étude AWS qui dit :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100 ms de latence sur la page amazon.com = 1% de baisse des ventes&lt;/li&gt;
&lt;li&gt;De manière générale : 

&lt;ul&gt;
&lt;li&gt;2 secondes de chargement pour un site internet = 9% des utilisateurs abandonneront la navigation,&lt;/li&gt;
&lt;li&gt;5 secondes de chargement pour un site internet = 38% des utilisateurs,&lt;/li&gt;
&lt;li&gt;3 secondes de chargement via smartphone = 53% des utilisateurs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Le problème posé
&lt;/h3&gt;

&lt;p&gt;Dans une architecture multi-région comment puis-je faire pour disposer d’un temps de lecture/écriture acceptable pour n’importe quel client indépendamment de sa localisation géographique ?&lt;br&gt;
Nous pouvons représenter ce problème avec le schéma suivant :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbtej1o7wv7vp5afyi1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbtej1o7wv7vp5afyi1c.png" alt="Image description" width="538" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nous pouvons voir que dans cette situation les client aux Etats-Unis et en Asie dispose d’un temps de lecture et écriture nettement supérieur à ceux en Europe. Comme expliqué dans notre contexte, ce délai supplémentaire peut provoquer de la frustration et donc amener à une perte d’utilisateurs sur ces régions.&lt;/p&gt;

&lt;p&gt;A la suite de cette mise en contexte, Laurent et Romaric ont proposé une solution de base souvent utilisée, appelée « active/passive ». Cette méthode consiste à déployer plusieurs instances d’application dans les différentes régions et d’utiliser des read réplicas pour les base de données (schéma ci-dessous).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa17kf29v910r8xzhz3un.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa17kf29v910r8xzhz3un.png" alt="Image description" width="591" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Via cette solution nous constatons une nette amélioration concernant la lecture du contenu en base. Si la lecture représente la plus grande partie des actions  réalisées par les clients, alors cette solution est viable. Mais quid de la situation où l'écriture est aussi un aspect important pour les clients ? Dans ce cas la solution basique devient non valide car nous disposons toujours d’un temps d’écriture très élevé pour les deux régions éloignées.&lt;/p&gt;

&lt;p&gt;Plusieurs solutions se présentent alors :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;     Retravailler le modèle de données pour séparer les régions entre-elles et que chacune repose sur sa propre base de données (beaucoup de travail à faire et peut-être pas possible en fonction du modèle de données)&lt;/li&gt;
&lt;li&gt;     Utiliser un schéma plus horizontale avec la possibilité d’écrire/lire les données de chaque base de données correspondant à sa région et gérer un système de réplication de données (complexe à mettre en œuvre et gestion des conflits sur les données à gérer soi-même)&lt;/li&gt;
&lt;li&gt;     Utiliser la solution « active/active » proposé par Couchbase et Qovery afin de permettre à la fois de disposer de bases de données par région et synchronisées entre elles de manière efficace via Couchbase, mais également de disposer du gestionnaire de déploiement serverless des ressources et plateformes centralisé, Qovery, connecté aux instances Couchbase&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Les présentateurs ont conclu leur conférence par la présentation de la solution (vous l’aurez deviné) N°3 : l’utilisation de Couchbase (Capella) et Qovery (schéma ci-dessous). Dans cette dernière, les utilisateurs de n’importe quelle région disposent tous du même temps de lecture et écriture sur l’application tout en bénéficiant d’une synchronisation des données avec latence faible complètement gérée par Couchbase. &lt;br&gt;
A noter également que la solution proposée par Couchbase permet de disposer des données de manière active/active tout en gérant l’aspect conformité de ces dernières (via l’utilisation de filtres) vis à vis des lois en vigueurs dans les régions et pays de déploiements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fst929tk1634sa4p8efzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fst929tk1634sa4p8efzl.png" alt="Image description" width="616" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  En conclusion
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Couchbase x Qovery&lt;/strong&gt; est un couple prometteur. En effet, la solution exige un coût supplémentaire par rapport à une solution gérée par le client lui-même. Cependant, aujourd’hui de nombreux clients souhaitent réduire l’aspect maintenance et opérabilité de leurs infrastructures sur le Cloud.&lt;br&gt;
Avec des interfaces claires et faciles d’utilisation (qui changent grandement de l’interface console AWS) la solution proposée peut être une alternative intéressante pour des clients avec un besoin spécifique et rapide avec une infrastructure simple.&lt;/p&gt;

&lt;p&gt;Vous pouvez retrouver une démo ici : &lt;a href="https://www.youtube.com/watch?v=nza3ldlPI7w" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=nza3ldlPI7w&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Optimisez les coûts et la mise à l'échelle d'EKS avec Karpenter
&lt;/h2&gt;

&lt;p&gt;Imane Zeroual (AWS), Sebastien Allamand (AWS) et Martinho Moreira (Voodoo) nous présente le projet &lt;strong&gt;Karpenter&lt;/strong&gt;, sa mise en place dans un cluster EKS et un retour d'expérience sur les bénéfices apportés par cette solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maximiser l'Efficacité des Clusters Kubernetes avec Karpenter
&lt;/h3&gt;

&lt;p&gt;Kubernetes s'est imposé comme l'une des solutions les plus populaires pour la gestion des applications conteneurisées à grande échelle. Cependant, malgré ses avantages indéniables, Kubernetes peut présenter des défis en matière de gestion des ressources et d'optimisation des clusters. C'est là que Karpenter entre en jeu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qu'est-ce que Karpenter ?
&lt;/h3&gt;

&lt;p&gt;Karpenter est un projet open-source développé par AWS qui vise à optimiser les clusters Kubernetes en automatisant le dimensionnement des nœuds. Son objectif principal est de garantir que les ressources sont utilisées de manière efficace tout en maintenant les performances et la disponibilité des applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comment fonctionne Karpenter ?
&lt;/h3&gt;

&lt;p&gt;Karpenter s’installe dans le cluster Kubernetes en tant qu’opérateur et va remplacer le mécanisme d’autoscaling d’AWS pour provisionner les nœuds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbz2fru37hmt82otcgatt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbz2fru37hmt82otcgatt.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Karpenter analyse les demandes de ressources des pods et les regroupe en fonction de leurs caractéristiques. En utilisant ces informations, il peut déterminer la meilleure façon de répartir les charges de travail sur les nœuds disponibles, et ainsi réduire le nombre de nœuds nécessaires.&lt;/p&gt;

&lt;p&gt;Par exemple, il peut regrouper plusieurs pods légers sur un seul nœud pour libérer des ressources sur d'autres nœuds et ainsi les supprimer du cluster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd802gaxksgr3zpybqnn5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd802gaxksgr3zpybqnn5.jpg" alt="Image description" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffolu9auln3ztz142kdle.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffolu9auln3ztz142kdle.jpg" alt="Image description" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Karpenter peut également s'intégrer avec des services cloud tels qu'AWS Spot Instances ou des instances de type Graviton, ce qui permet d'optimiser les coûts tout en maintenant les performances des applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo5rrulrh0m1ay3pecb3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo5rrulrh0m1ay3pecb3.jpg" alt="Image description" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvcyiwq658brps52fpl9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvcyiwq658brps52fpl9.jpg" alt="Image description" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Afin de paramétrer et utiliser au mieux Karpenter, Sébastien Allamand nous présente ensuite quelques outils et méthodes tels que les détections de Drift du dataplane ou l’analyse approfondie de la perturbation des nœuds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5qzspb68p0zkh9y7n3i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5qzspb68p0zkh9y7n3i.jpg" alt="Image description" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm33u17alzmrasxntj8k.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm33u17alzmrasxntj8k.jpg" alt="Image description" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Retour d'expérience
&lt;/h3&gt;

&lt;p&gt;Pour finir cette session, Martinho Moreira de chez Voodoo nous fait un retour d'expérience sur leur mise en place de Karpenter, l’architecture et les points de vigilance qu’ils en ont retiré.&lt;/p&gt;

&lt;p&gt;Les slides parlent d’eux même :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9qro9vnnftcuuay5mtm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9qro9vnnftcuuay5mtm.jpg" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyatot34wfi1hzjtqvoj1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyatot34wfi1hzjtqvoj1.jpg" alt="Image description" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2For3o630axlahl4la1ybx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2For3o630axlahl4la1ybx.jpg" alt="Image description" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  En conclusion
&lt;/h3&gt;

&lt;p&gt;Cette conférence fut très intéressante pour une découverte de cet outil de plus en plus utilisé dans le cadre d’optimisations FinOps.&lt;br&gt;
La présentation a été accompagnée d’une démo qui nous a permis de rendre concret certains use cases, et de constater en live le fonctionnement de l’outil et les optimisations réalisées par Karpenter.&lt;br&gt;
La 2ème partie de la conférence a bien complété ce talk avec un retour d'expérience concret de la part de Voodoo. Ils ont ainsi pu nous partager factuellement les retombées en termes de bénéfice de l’outil, les étapes de migration et les pièges à éviter lors de la mise en place de Karpenter.&lt;/p&gt;




&lt;h2&gt;
  
  
  Accelerate Gen AI with Amazon Bedrock and Snowflake:
&lt;/h2&gt;

&lt;p&gt;Nadir Djadi de Snowflake a présenté une approche accélérée de l'intelligence artificielle générative en utilisant Amazon Bedrock et Snowflake.&lt;br&gt;
Après une brève introduction sur le rôle de Snowflake, il a présenté une vue d'ensemble de la plateforme en mettant en avant trois points clés : L'IA accessible au quotidien sans expertise, le déploiement rapide d'applications avec personnalisation, la sécurité et la gouvernance des données garanties.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fweewnjeva7kpronx3whd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fweewnjeva7kpronx3whd.png" alt="Image description" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ensuite, nous avons exploré certaines fonctionnalités offertes par Snowflake avant de nous concentrer sur la partie Amazon Bedrock. Cette dernière offre une intégration transparente des modèles fondamentaux (FMs) de divers fournisseurs pour des applications d'intelligence artificielle générative évolutive, avec des options de personnalisation privées.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwy88871p25xhb209md6h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwy88871p25xhb209md6h.png" alt="Image description" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nous avons ensuite passé en revue les FM disponibles sur Amazon Bedrock, en notant que Mistral n'a pas été inclus dans la liste puisqu'il a été annoncé le jour même. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymf5uz2ey4scba5yoqa0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymf5uz2ey4scba5yoqa0.png" alt="Image description" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enfin, il a conclu en montrant comment Snowflake peut interagir avec Amazon Bedrock via Snowpark External Access, qui repose sur des identifiants temporaires de AWS Security Token Service (STS) pour authentifier et accéder aux endpoint des modèles Amazon Bedrock.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3iyt7jcky5h1xd4aht0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3iyt7jcky5h1xd4aht0.png" alt="Image description" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En conclusion&lt;/strong&gt;, je trouve la solution présentée par Nadir Djadi très intéressante, surtout pour son aspect permettant une utilisation rapide de l'IA sans nécessiter une expertise préalable. Cela me donne vraiment envie d'expérimenter Amazon Bedrock dans mes projets futurs.&lt;/p&gt;




&lt;h3&gt;
  
  
  Alors l’AWS Summit Paris c’est génIAl?
&lt;/h3&gt;

&lt;p&gt;Cette année encore AWS nous gratifie d’un show à la taille de son investissement en France. En effet, l’acteur n°1 du cloud public a réussi à nous faire sentir à l’étroit sur les 3 étages du Palais des congrès de Paris. Nous avons pu profiter un maximum, même si pour certaines conférences il était difficile d’avoir une place.&lt;/p&gt;

&lt;p&gt;Cette année s’annonce très intéressante sur le secteur de la GenAI. AWS compte bien rattraper son retard sur les aspects data et IA, en consacrant une attention particulière dans l’accompagnement de ses partenaires et clients voulant explorer ces solutions.&lt;/p&gt;

&lt;p&gt;Nous resterons bien sûr à l’écoute des nouveautés qu’AWS pourraient annoncer dans les mois à venir, et nous n'hésiterons pas à vous les partager sur notre blog.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>summit</category>
      <category>genai</category>
    </item>
    <item>
      <title>KubeCon 2022 - Jour 3</title>
      <dc:creator>Λ\: Laurent Noireterre</dc:creator>
      <pubDate>Fri, 20 May 2022 17:50:41 +0000</pubDate>
      <link>https://dev.to/stack-labs/kubecon-2022-jour-3-274</link>
      <guid>https://dev.to/stack-labs/kubecon-2022-jour-3-274</guid>
      <description>&lt;p&gt;Clap de fin pour la KubeCon 2022. Cette troisième et dernière journée a elle aussi été riche en thématiques et découvertes. En voici un condensé.&lt;/p&gt;

&lt;p&gt;Par &lt;a class="mentioned-user" href="https://dev.to/vixsty"&gt;@vixsty&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/eisenkremer"&gt;@eisenkremer&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/aimbot31"&gt;@aimbot31&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/psclgllt"&gt;@psclgllt&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/launoirt"&gt;@launoirt&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Kubernetes Everywhere: Lessons Learned From Going Multi-Cloud - Niko Smeds, Grafana Labs
&lt;/h3&gt;

&lt;p&gt;Niko Smeds de chez Grafana nous fait un retour d'expérience de leur infrastructure multi-cloud, les raisons d’utiliser plusieurs provider cloud et les leçons apprises.&lt;/p&gt;

&lt;p&gt;Niko nous énumère tout d’abord les raisons pour lesquelles une organisation devrait considérer le multi-cloud selon lui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;augmenter les régions disponibles&lt;/li&gt;
&lt;li&gt;réduire le vendor lock-in&lt;/li&gt;
&lt;li&gt;des raisons plus orientés préférences utilisateurs (par exemple la souveraineté des données)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voici le découpage des briques communes à chaque cloud provider chez Grafana:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjdd2l9weixsgjelv6cy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjdd2l9weixsgjelv6cy.png" alt="Image description" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cette structure permet d’avoir une gouvernance commune entre chaque cloud provider, mais les équipes de Grafana sont confrontés à plusieurs problématiques d’implémentation dûes aux spécificités de chaque provider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Réseau:

&lt;ul&gt;
&lt;li&gt;sur GCP les VPC sont globaux, sur AWS ils sont régionaux&lt;/li&gt;
&lt;li&gt;les CIDR ranges supportés sont différents entre GCP et AWS (GCP supporte le range /28 -&amp;gt; /8, AWS supporte /28 -&amp;gt; /16)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Différences dans les services managés (Load Balancers, Volumes, Object Storage)&lt;/li&gt;

&lt;li&gt;Gestion des credentials applicatifs (GCP Service Account vs AWS IAM Roles)&lt;/li&gt;

&lt;li&gt;Performances des disques : mauvaise performance de la classe de stockage par défaut sur Azure AKS&lt;/li&gt;

&lt;li&gt;Docker Hub rate limit: problème de performance lors du démarrage des pods sur AWS à cause du pull des images Docker depuis une même adresse IP de la NAT Gateway, alors que GCP propose par défaut un cache des images&lt;/li&gt;

&lt;li&gt;Différences de quotas des services pour chaque cloud provider&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Voici en conclusion de ce talk les leçons apprises par les équipes de Grafana lors de leur mise en place et utilisation multi-cloud:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqk98chxg7luxbeu32so.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqk98chxg7luxbeu32so.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Logs Told Us It Was DNS, It Felt Like DNS, It Had To Be DNS, It Wasn’t DNS - Laurent Bernaille &amp;amp; Elijah Andrews, Datadog
&lt;/h3&gt;

&lt;p&gt;Nous retrouvons Laurent Bernaille et Elijah Andrews, respectivement Staff Engineer et Senior Software Engineer chez Datadog, qui nous présente l'investigation qu'ils ont mené autour d'un problème survenant à chaque redéploiement du service "Metrics service".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxczs4jm4lbvfxqcggpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxczs4jm4lbvfxqcggpv.png" alt="Image description" width="800" height="448"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Nous avons trouvé cette présentation tellement intéressante que nous préférons ne pas en dire trop. À la place nous préférons vous encourager à visionner cette présentation lorsqu'elle sera accessible.&lt;br&gt;
Ils y détaillent chaques étapes de leurs réflexions et chaques pistes explorées pour comprendre la cause du problème, en passant par les raisons de son apparition et sa résolution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better Bandwidth Management with eBPF - Daniel Borkmann &amp;amp; Christopher M. Luciano, Isovalent
&lt;/h3&gt;

&lt;p&gt;Dans cette présentation, Isovalent, société à l'origine de Cilium, soulève les problèmes et les limites dans la gestion réseau d'aujourd'hui et comment Cilium choisi et implémente des techniques pour y remédier.&lt;/p&gt;

&lt;p&gt;Deux techniques nous sont particulièrement présentées :&lt;br&gt;&lt;br&gt;
Le changement vers un modèle EDT dont vous pouvez retrouver la &lt;a href="https://research.google/pubs/pub46460/" rel="noopener noreferrer"&gt;publication google&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2i4gygd6437bjgkofez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2i4gygd6437bjgkofez.png" alt="Image description" width="800" height="448"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Ce modèle consiste à améliorer la vitesse à laquelle une trame va se retrouver dans la queue de la carte réseau.&lt;/p&gt;

&lt;p&gt;Le 2nd point est l'évolution du TCP vers TCP BBR qui permet pour vulgariser d'adapter le TCP à la performance des réseaux de nos jours&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9t0abrnw54r3v0gepqi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9t0abrnw54r3v0gepqi.png" alt="Image description" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ici, on met en évidence que le TCP est un protocole créé pour des réseaux des années 1980 et que depuis nos réseaux ont bien changé.&lt;/p&gt;

&lt;p&gt;C'est au travers d'une démonstration de streaming vidéo que l'on a pu voir de façon flagrante la différence entre sans et avec ces techniques.&lt;br&gt;
L'ensemble permettant d'améliorer les capacités du réseau de façon très impressionnante.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Treasure Map of Hacking (and Defending) Kubernetes
&lt;/h3&gt;

&lt;p&gt;Andrew Martin qui a écrit le livre “Hacking Kubernetes” (et qui est disponible en téléchargement ici) nous a présenté les grandes étapes qui mènent à la compromission d’un cluster Kubernetes.&lt;br&gt;
Voici une cartographie de toutes les potentielles vulnérabilités qui peuvent affecter un workload :&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3klne3bth6q6hy68qd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3klne3bth6q6hy68qd5.png" alt="Image description" width="797" height="848"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le point d'entrée pris pour exemple ici est une attaque de plus en plus courante de nos jours : la supply chain attack. L’exemple le plus connu de supply chain attaque est la compromission du logiciel Solar Wind.&lt;br&gt;
Via cette supply chain attaque, il obtient un reverse shell dans le contexte du pod. Nous voici en position d’exécuter des commandes et du code sur le container.&lt;/p&gt;

&lt;p&gt;Ensuite plusieurs possibilités : lancer un autre pod malveillant ou s’évader du container.&lt;/p&gt;

&lt;p&gt;La liste suivante des CVE résume bien l’état de sécurité de l’isolation des containers dans cette liste compilée par @Krisnova :&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy222zb8uiapdglqoj02g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy222zb8uiapdglqoj02g.png" alt="Image description" width="522" height="597"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;En exploitant la vulnérabilité Dirty Pipe (CVE-2022-0847), il s’évade du container et est maintenant root sur le node kubernetes.&lt;/p&gt;

&lt;p&gt;Il a ensuite énuméré les secrets kubernetes qui sont accessibles depuis l’hôte et pris l’exemple d’une access key AWS, avec un petit twist car il s’agissait en réalité d’un honeypot.&lt;/p&gt;

&lt;p&gt;C’est en effet une bonne idée de laisser des access key liées à un compte sans droit et de monitorer toute action réalisée par ce compte. Si la clé est utilisée on sait que l’on a été compromis et on peut prendre les actions nécessaires pour identifier et bloquer l’attaque rapidement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observing Fastly's network at scale thanks to k8s and the Strimzi operator
&lt;/h3&gt;

&lt;p&gt;Daniel Caballero Rodriguez (Principal Engineer) &amp;amp; Fernando Crespo Gravalos (Staff Engineer) @ Fastly nous parlent de l’arrivé de kubernetes à Fastly ainsi que de leur système “Autopilot” sur kube qui permet d’optimiser la gestion du traffic sortant. Dans cet article, nous allons nous intéresser à la première partie afin de rester concis.&lt;/p&gt;

&lt;p&gt;Au commencement de kubernetes à Fastly, les équipes lançaient des clusters kubernetes dans tous les sens. Fastly a observé que beaucoup de clusters étaient utilisés pour seulement une application, les besoins étaient souvent les mêmes et les bonnes pratiques pas toujours respectées.&lt;/p&gt;

&lt;p&gt;De ce constat, Fastly a décidé de lancer le plan “Elevation”. La première itération “d’elevation” consistait à mutualiser les clusters avec une gestion par un équipe de SRE. 1 cluster de dev/staging/prod ainsi qu’une seule région. Un autre point important était l’agnosticité afin de ne pas dépendre d’un cloud provider dans le futur. Pour ce faire, Fastly a adopté les modalités suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth avec IdP, afin de ne pas dépendre du Cloud IAM&lt;/li&gt;
&lt;li&gt;Harbor comme Container/Helm Charts registry&lt;/li&gt;
&lt;li&gt;Vault pour la gestion des secrets&lt;/li&gt;
&lt;li&gt;Nginx Ingress&lt;/li&gt;
&lt;li&gt;Cert-Manager pour la génération des certificats https avec Lets Encrypt&lt;/li&gt;
&lt;li&gt;Observability: Prometheus/Grafana, FluentD/Splunk&lt;/li&gt;
&lt;li&gt;Service Mesh with Linkerd&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;De cette V1.0 les feedbacks suivant sont ressortis :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plus de régions, plus de cloud providers, possibilité d’avoir des clusters baremetal&lt;/li&gt;
&lt;li&gt;Réduire le ticket d’entrée pour utiliser kube&lt;/li&gt;
&lt;li&gt;Prise en charge de Kafka en cluster&lt;/li&gt;
&lt;li&gt;Courbe d'apprentissage abrupte&lt;/li&gt;
&lt;li&gt;Améliorer l'observabilité du maillage des services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Afin de prendre en compte les améliorations de la version 1.0, Fastly à lancé la V2.0 en prenant en compte les retours :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilisation des ClusterPolicy avec kyverno pour la gestion des secrets&lt;/li&gt;
&lt;li&gt;Utilisation d’opérateur pour certains besoin d’automatisation&lt;/li&gt;
&lt;li&gt;Ajouts de plusieurs régions/cloud providers&lt;/li&gt;
&lt;li&gt;De l’abstraction avec la possiblité de décrire l’application en 10 lignes de YAML afin qu’elle soit déployée avec un chart Helm standard maintenu par l’équipe SRE&lt;/li&gt;
&lt;li&gt;Ajout de dashboards standardisés maintenu par l’équipe SRE afin d’avoir les informations sur chaque application pour chaque équipe déployant sur le cluster&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A Guided Tour of Cilium Service Mesh - Liz Rice, Isovalent
&lt;/h3&gt;

&lt;p&gt;Une autre présentation autour de Cilium mais cette foi dans une utilisation en tant que Service Mesh. Liz Rice revient sur les différentes formes qu'a pu prendre le service mesh jusqu'à une nouvelle hypothèse, et si le service mesh était inclus au niveau du Kernel ?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fli9capduxoe98y2mgdse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fli9capduxoe98y2mgdse.png" alt="Image description" width="800" height="446"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Mais le problème, et pas des moindre, est qu'au niveau du kernel, la couche TCP 7, pour laquelle le service mesh intervient, n'est pas visible. Donc eBPF et Cilium ne peuvent pas intervenir directement.&lt;/p&gt;

&lt;p&gt;Dans son architecture du service mesh, Cilium propose donc la mise en place d'un reverse proxy Envoy sur la machine afin de pouvoir gérer cette couche TCP 7.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfxyjvoqmmlz5zdf55sh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfxyjvoqmmlz5zdf55sh.png" alt="Image description" width="800" height="446"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Cette approche permet d'éviter le "sidecar" à chaque pods mais impose un "sidecar" par node. Cela nous pose immédiatement des questions tant qu'à la scalabilité qu'à la gestion des exclusions. Envoy étant sur les nodes et les nodes exécutant des pods de divers namespaces.&lt;/p&gt;

&lt;p&gt;S'enchaine des démonstrations, des commentaires de bêta testeurs et des benchmarks face à Istio. Globalement les chiffres sont intéressants et les commentaires confirment que la communauté espère plus. &lt;/p&gt;

&lt;p&gt;On fini avec la gestion des contrôles planes. On peut choisir, mais l'intégration n'est pas native et il vous faudra gérer et maintenir cette intégration.&lt;/p&gt;

</description>
      <category>kubecon</category>
      <category>cncf</category>
      <category>kubernetes</category>
      <category>opensource</category>
    </item>
    <item>
      <title>KubeCon 2022 - Jour 2</title>
      <dc:creator>Λ\: Laurent Noireterre</dc:creator>
      <pubDate>Thu, 19 May 2022 21:16:17 +0000</pubDate>
      <link>https://dev.to/stack-labs/kubecon-2022-jour-2-gn7</link>
      <guid>https://dev.to/stack-labs/kubecon-2022-jour-2-gn7</guid>
      <description>&lt;p&gt;Deuxième jour de la KubeCon 2022, voici notre sélection de talks !&lt;/p&gt;

&lt;p&gt;Par &lt;a class="mentioned-user" href="https://dev.to/vixsty"&gt;@vixsty&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/eisenkremer"&gt;@eisenkremer&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/aimbot31"&gt;@aimbot31&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/psclgllt"&gt;@psclgllt&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/launoirt"&gt;@launoirt&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Keynotes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kubernetes Project Updates - Jasmine James, Senior Engineering Manager-Developer Experience; Ricardo Rocha, Computing Engineer, CERN; Emily Fox, Security Engineer, Apple
&lt;/h3&gt;

&lt;p&gt;La keynote de ce second jour de KubeCon débute avec une présentation des nouveautés de Kubernetes 1.24. Nous vous avons détaillé ces nouveautés dans un article complet &lt;a href="https://dev.to/stack-labs/kubecon-2022-nouveautes-dans-kubernetes-v124-3ob8"&gt;ici&lt;/a&gt;    &lt;/p&gt;

&lt;h2&gt;
  
  
  Conférences
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Case Study: Bringing Chaos Engineering to the Cloud Native Developers - Uma Mukkara, ChaosNative &amp;amp; Ramiro Berrelleza, Okteto
&lt;/h3&gt;

&lt;p&gt;Après une petite introduction au bien fait du chaos engineering dans un monde de micro services et de pratique DevOps en constante évolution: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6v05gyxot0hp7ykonsqz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6v05gyxot0hp7ykonsqz.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;S'ensuit une démo nous expliquant pourquoi et comment rendre ça accessible dès le développement.&lt;/p&gt;

&lt;p&gt;La démo s'appuie sur 2 outils, &lt;a href="https://litmuschaos.io/" rel="noopener noreferrer"&gt;Litmus Chaos&lt;/a&gt; qui est une plateforme open source de "Chaos Engineering" et &lt;a href="https://www.okteto.com/" rel="noopener noreferrer"&gt;Okteto&lt;/a&gt; qui est un outil permettant de créer rapidement un nouvel environnement pré-configuré.&lt;/p&gt;

&lt;p&gt;L'ensemble permettant de réaliser des workflows de chaos testing dès la phase de développement et de pouvoir corriger directement les problèmes identifiés durant les tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Soul of a New Command: Adding ‘Events’ to kubectl - Bryan Boreham, Grafana Labs
&lt;/h3&gt;

&lt;p&gt;Bryan Boreham nous explique ici les limitations de la commande &lt;code&gt;kubectl get events&lt;/code&gt; avec les issues remontées par la communauté:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get events doesn't sort events by last seen time kubernetes#29838 opened 1 Aug 2016

Improve watch behavior for events kubernetes#65646, kubectl#793

Improve events printing kubectl#704, kubectl#151

kubectl get events should give a timeline of events kubernetes#36304 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour palier à ça, Bryan ouvre une PR avec la création d’une nouvelle API ainsi que la commande &lt;code&gt;kubectl events&lt;/code&gt; correspondante.&lt;/p&gt;

&lt;p&gt;Une explication du process de validation des demandes de nouvelles fonctionnalités &lt;code&gt;Kubernetes Enhancement Process&lt;/code&gt; (ou &lt;code&gt;KEP&lt;/code&gt;) nous est alors détaillé:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2x6qi8gbeue2wpm2doi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2x6qi8gbeue2wpm2doi.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Le KEP-1440 est alors ouvert pour demander l’ajout de l’api &lt;code&gt;events&lt;/code&gt; et sera implémenté le 29 octobre 2021 et intégré à la version alpha 1.23 de Kubernetes.&lt;/p&gt;

&lt;p&gt;La nouvelle commande &lt;code&gt;kubectl events&lt;/code&gt; couvre tous les problèmes remontés par la communauté, notamment le tri des événements dans l’ordre chronologique.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementing Cert-Manager in K8s
&lt;/h3&gt;

&lt;p&gt;Jose Manuel Ortega nous a présenté comment mettre en place cert manager dans un cluster k8s afin d'automatiser la génération de certificats pour les services avec Let's encrypt ou Hashicorp Vault.&lt;/p&gt;

&lt;p&gt;Il nous a également présenté les autres fonctionnalités de Cert-manager comme la vérification de validité de certificats sur les différents environnements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better Reliability Through Observability and Experimentation - Julie Gunderson, Gremlin &amp;amp; Kerim Satirli, HashiCorp
&lt;/h3&gt;

&lt;p&gt;Kerim Satirli, Sr. Developer Advocate, HashiCorp&lt;br&gt;
Julie Gunderson, Sr. Reliability Advocate, Gremlin&lt;/p&gt;

&lt;p&gt;Disclaimer: Si vous vous attendez à une conférence très technique, n’allez pas plus loin.&lt;/p&gt;

&lt;p&gt;Dans cette conférence, Julie et Kerim vont essayer de démystifier l’observabilité dans nos systèmes informatiques. Cette dernière, comme dit plus haut, ne traitera pas le sujet de façon technique mais viendra vous aider à porter une réflexion sur certaines pratiques, notamment le Chaos Engineering. &lt;/p&gt;

&lt;p&gt;Pour aborder ce point nous nous mettons dans un cas d’usage non technique; vous êtes le pilote d’un avion et vous perdez la connexion avec la tour de contrôle. &lt;br&gt;
Que va-t-il se passer?  Quel problème êtes vous en train de rencontrer?...&lt;/p&gt;

&lt;p&gt;Tout d’abord, les piliers de l’observabilité :&lt;/p&gt;

&lt;p&gt;Les logs: &lt;br&gt;
si vous n’avez pas de log; vous ne pouvez pas investiguer&lt;br&gt;
Les traces&lt;br&gt;
si vous n’avez pas de trace, vous ne pouvez pas debugger&lt;br&gt;
Les mesures&lt;br&gt;
si vous n’avez pas de mesures, vous ne pouvez pas comprendre&lt;/p&gt;

&lt;p&gt;Le but principal de l’observabilité est de réduire le temps de détection d’une erreur et si possible de la détecter avant le client.&lt;/p&gt;

&lt;p&gt;Les techniques de Chaos Engineering permettent de valoriser ces piliers mais attention à bien avoir des backups et qu’ils soient fonctionnels; sinon ne faites pas ça !&lt;/p&gt;

&lt;p&gt;Il peut être simple de faire des tests afin de trouver un point de rupture de votre application ou de votre architecture de façon relativement simple. Ci dessous quelques exemples de simulation que vous pouvez effectuer:&lt;/p&gt;

&lt;p&gt;Engendrer de la latence&lt;br&gt;
Créer volontairement des erreurs&lt;br&gt;
Créer un goulet d'étranglement sur le réseau&lt;br&gt;
Saturer et stresser l’application ou l’architecture&lt;/p&gt;

&lt;p&gt;Tout cela permet de valider le point de rupture de votre application / architecture et de vous démontrer, si cela se présente, comment elle réagit à ce genre de problématique.&lt;/p&gt;

&lt;p&gt;En conclusion, pour effectuer ces tests il existe plusieurs technologies et toutes ont leur intérêt mais assurez-vous de bien comprendre leurs fonctionnements et leurs retours. Enfin documentez tout ce que vous pouvez afin de réduire le temps de résolution.&lt;/p&gt;

</description>
      <category>kubecon</category>
      <category>cncf</category>
      <category>kubernetes</category>
      <category>opensource</category>
    </item>
    <item>
      <title>KubeCon 2022 - Jour 1</title>
      <dc:creator>Λ\: Laurent Noireterre</dc:creator>
      <pubDate>Wed, 18 May 2022 23:15:35 +0000</pubDate>
      <link>https://dev.to/stack-labs/kubecon-2022-jour-1-2nca</link>
      <guid>https://dev.to/stack-labs/kubecon-2022-jour-1-2nca</guid>
      <description>&lt;p&gt;Aujourd'hui mercredi 18 mai avait lieu l'ouverture de la KubeCon 2022 ! Voici ce que les Stackers sur place ont retenu de cette première journée. &lt;/p&gt;

&lt;p&gt;Par &lt;a class="mentioned-user" href="https://dev.to/vixsty"&gt;@vixsty&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/eisenkremer"&gt;@eisenkremer&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/aimbot31"&gt;@aimbot31&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/psclgllt"&gt;@psclgllt&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/launoirt"&gt;@launoirt&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Keynote
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Finding Your Power to Accelerate to a Sustainable Future
&lt;/h3&gt;

&lt;p&gt;Une des keynotes d'ouverture de la KubeCon 2022, présentée par Kate Mulhall &amp;amp; Emma Collins d'Intel, adresse la nécessité de renforcer l'efficacité énergétique des data centers.  À titre d'exemple, les data centers consomment aujourd'hui 2% de l'électricité produite mondialement, 8% d'ici 2030. Les CPUs sont utilisés entre 20 et 40% de leur capacité seulement. Les présentatrices rappellent aussi le désormais célèbre classement des langages de programmation par efficacité énergétique: des plus sobres C et Rust,... jusqu'à Perl, le plus énergivore.&lt;br&gt;
En partant du hardware, et en passant par une meilleure conception des charges de travail et leur orchestration plus intelligente, il est possible de réduire la consommation d'énergie et par conséquent réduire notre empreinte carbone. La collecte des données d'observabilité (télémétrie) et leur analyse, et l'apprentissage machine jouent un rôle important pour y parvenir.  Les optimisations peuvent être faites à tous les niveaux compute, réseau et stockage.&lt;br&gt;
Intel aspire à être un leader mondial en matière de développement durable (voir &lt;a href="https://www.intel.com/content/www/us/en/environment/intel-and-the-environment.html" rel="noopener noreferrer"&gt;https://www.intel.com/content/www/us/en/environment/intel-and-the-environment.html&lt;/a&gt;).&lt;br&gt;
Au delà du discours, cette présentation nous rappelle que la responsabilité écologique et ses solutions se trouvent d'abord entre les mains des développeurs.&lt;/p&gt;

&lt;p&gt;La présentation "working your K8s cluster: smarter scheduling decisions for your workloads" qui suit l'après-midi, toujours par Intel, rentre dans le vif du sujet et aborde des solutions concrètes. Voir &lt;a href="https://github.com/intel/platform-aware-scheduling" rel="noopener noreferrer"&gt;https://github.com/intel/platform-aware-scheduling&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Incremental Deep Learning for Satellites with KubeEdge and MindSpore
&lt;/h3&gt;

&lt;p&gt;Zhipeng Huang, Director, AI Open Source, Huawei&lt;br&gt;
Xiaoman Hu, Community Operation Director, Huawei&lt;br&gt;
Yue Bao, Software Engineer, Huawei&lt;/p&gt;

&lt;p&gt;Dans cette keynote, Huawei, nous démontre une nouvelle façon de gérer la communication avec des satellites, en étendant votre cluster Kubernetes jusque dans vos satellites. Cela permet d’uniformiser vos déploiements de bout en bout. &lt;br&gt;
KubeEdge propose de manager vos satellites en déployant vos workload de la meme façon que sur un worker node classique.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3l2tecn7hyb8msc6tea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb3l2tecn7hyb8msc6tea.png" alt="Image description" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le son de cette keynote, enregistrée au préalable étant de très mauvaise qualité, nous vous conseillons de retrouver les slides de présentation dans le programme de la KubeCon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conférences
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bypassing Falco: How to Compromise a Cluster without Tripping the SOC - Shay Berkovich, BlackBerry
&lt;/h3&gt;

&lt;p&gt;Falco est un outil de détection d'évènements pour Kubernetes. Il permet de lever une alerte en cas de détection d'activité suspecte comme une connexion SSH sur un pod.&lt;/p&gt;

&lt;p&gt;Dans cette présentation Shay Berkovich nous explique comment compromettre un cluster sans déclencher d'alerte sur Falco.&lt;/p&gt;

&lt;p&gt;Il a présenté plusieurs types de méthodes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chemin relatif sur un lien symbolique&lt;/li&gt;
&lt;li&gt;Utiliser une implémentation différente d'un exploit de CVE&lt;/li&gt;
&lt;li&gt;Renommer les exécutables&lt;/li&gt;
&lt;li&gt;Lien symbolique d'un exécutable&lt;/li&gt;
&lt;li&gt;Exécution de script au lieu de commande&lt;/li&gt;
&lt;li&gt;Utilisation de mknod et mkfifo pour un reverse shell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il a publié une image contenant tous les outils pour tester ces techniques d'évasion.&lt;/p&gt;

&lt;p&gt;Vous pouvez la trouver ici :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hub.docker.com/r/sshayb/fuber" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Il a conclu sa présentation avec les recommandations suivantes pour la création de règles Falco :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bien choisir les hooking points pour augmenter la fiabilité des règles&lt;/li&gt;
&lt;li&gt;Éviter d'utiliser des règles basées sur proc.name / proc.aname et filename car elles sont faciles à contourner&lt;/li&gt;
&lt;li&gt;Ne pas introduire d'exception “and not” car cela crée une porte d'entrée pour les attaquants&lt;/li&gt;
&lt;li&gt;Réévaluer la priorité des règles dans le contexte d'une évasion de règles&lt;/li&gt;
&lt;li&gt;Faire une veille régulière des exploits publics&lt;/li&gt;
&lt;li&gt;Développer ses propres règles privées pour que l'attaquant ne sache pas ce qui est surveillé et comment contourner les règles&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Effective Disaster Recovery: The Day We Deleted Production - Rick Spencer &amp;amp; Wojciech Kocjan, InfluxData
&lt;/h3&gt;

&lt;p&gt;InfluxData nous fait ici un retour d'expérience suite à la perte accidentelle de tout un cluster de production.&lt;/p&gt;

&lt;p&gt;Voici le dur réveil du VP Engineer en ce vendredi de septembre :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr24w3snhanakshxwfscq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr24w3snhanakshxwfscq.jpg" alt="Image description" width="800" height="1647"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;L'incident a débuté suite au merge d'une PR qui paraissait anodine, mais qui a mené à une collision de noms d'applications dans ArgoCD et ainsi à la destruction du cluster Kubernetes. &lt;/p&gt;

&lt;p&gt;Trois minutes après le merge de la PR, leur système de monitoring InfluxData commence à lever des alertes. &lt;/p&gt;

&lt;p&gt;Quinze minutes plus tard, la support team commence à répondre aux premiers incidents clients.&lt;/p&gt;

&lt;p&gt;S'en suit un revert de la PR et le début du process de recovery.&lt;/p&gt;

&lt;p&gt;Cinq heure trente après le début de l'incident, le cluster est de nouveau opérationnel. &lt;/p&gt;

&lt;p&gt;Sans rentrer dans le long détail de ce process, voici ce que InfluxData en a retiré.&lt;/p&gt;

&lt;p&gt;Tout d'abord ce qui a bien fonctionné :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;L'effort des différentes équipes pour remonter l'environnement&lt;/li&gt;
&lt;li&gt;Application indisponible (downtime) mais aucune perte de données&lt;/li&gt;
&lt;li&gt;Les équipes ont évité de céder à la panique, arrêté les tentatives infructueuses de rollback rapide et mis en place un plan d'action&lt;/li&gt;
&lt;li&gt;Les backups de données ont bien fonctionnés&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce qui n'a pas marché :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leur chaîne de déploiement et d'automatisation n'a pas empêché la catastrophe&lt;/li&gt;
&lt;li&gt;Premiers rollback sous-optimaux&lt;/li&gt;
&lt;li&gt;Aucune procédure de reconstruction d'un cluster n'avait été écrite jusque là &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les équipes ont par la suite mis en place toute une série de règles et process pour éviter que cela ne se reproduise, notamment avec une meilleure revue des PR et l'amélioration de la configuration d’ArgoCD. &lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-cluster Failover Using Linkerd - Charles Pretzer, Buoyant, Inc.
&lt;/h3&gt;

&lt;p&gt;Charles Pretzer, field engineer at Buoyant, nous parle du produit linkerd, plus particulièrement comment faire du failover entre plusieurs clusters avec linkerd.&lt;/p&gt;

&lt;p&gt;Dans ce talk, le speaker se sert « d’emojivoto »comme application d’exemple, cette appli génère du traffic avec 1/4 d’error rate.&lt;/p&gt;

&lt;p&gt;Linkerd propose une fonctionnalité « multicluster » qui va nous permettre plusieurs choses :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;chiffrement du traffic entre les différents clusters&lt;/li&gt;
&lt;li&gt;Création de « services mirror »&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cette dernière fonctionnalité va être très intéressante pour contacter un service présent sur l’autre cluster afin de répartir la charge ou ségrégué le traffic en fonction de certains critères (localisation notamment). Un nouveau service va être créé sur l’autre cluster portant le même nom avec le nom du context de l’autre cluster à la fin.&lt;/p&gt;

&lt;p&gt;Au niveau sécurité, les communications via les « services mirror » sont chiffrées via mTLS comme les communications dans le cluster.&lt;/p&gt;

&lt;p&gt;Nous pouvons aussi nous servir de la spec &lt;a href="https://smi-spec.io/" rel="noopener noreferrer"&gt;SMI (ServiceMeshInterface)&lt;/a&gt; afin de spliter le traffic a travers les différents clusters de manière transparente pour les applications (sans changements dans l’application).&lt;/p&gt;

&lt;p&gt;Les communications entre clusters peuvent-être unidirectionnelles ou bi-directionnelles. Une communication bi-directionnelle peut entraîner des checks circulaires, par chance, linkerd embarque une protection contre ce problème.&lt;/p&gt;

&lt;p&gt;Plus d’informations : &lt;a href="https://linkerd.io/2.10/features/multicluster/" rel="noopener noreferrer"&gt;https://linkerd.io/2.10/features/multicluster/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How Lombard Odier Deployed VPA to Increase Resource Usage Efficiency - Vincent Sevel, Lombard Odier SA
&lt;/h3&gt;

&lt;p&gt;Vincent Sevel, Architect / Platform Ops&lt;/p&gt;

&lt;p&gt;Vincent nous propose d’essayer de répondre à la problématique suivante : “0/27 nodes are available: 19 Insufficient cpu”&lt;br&gt;
Cette dernière est souvent induite par une mauvaise configuration des “requests”  et “limits” de nos pods.&lt;/p&gt;

&lt;p&gt;Le but:&lt;/p&gt;

&lt;p&gt;Optimiser le placement &lt;br&gt;
Ajuster les ressources des worker nodes &lt;br&gt;
Économiser de l’argent&lt;/p&gt;

&lt;p&gt;Pour répondre à cela nous allons essayer de récupérer dynamiquement les informations de consommation de nos pods afin de pouvoir les ajuster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz6u2cathb48cf7hp5p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz6u2cathb48cf7hp5p3.png" alt="Image description" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le scale vertical de pod permet de :&lt;br&gt;
Down-scale or Up-scale&lt;br&gt;
Memory &amp;amp; CPU&lt;br&gt;
Apply the recommendation (Opt)&lt;br&gt;
React to OOM&lt;br&gt;
Tous cela intégré dans des manifests Kubernetes&lt;/p&gt;

&lt;p&gt;Ci dessous les ressource “économiser” grâce à ce set up:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vfgi96mrkcnq2xodzlq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vfgi96mrkcnq2xodzlq.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La gestion de la mémoire est toujours en développement mais le projet est prometteur et réponds à un besoin de plus en plus présent.&lt;/p&gt;

&lt;p&gt;Dans le futur :&lt;br&gt;
Assess Memory/Initial&lt;br&gt;
Densify&lt;br&gt;
Bare Metal&lt;br&gt;
Mix VPA with HPA/serverless&lt;br&gt;
Expand VPA to Third Party packages&lt;/p&gt;

&lt;p&gt;Si le sujet vous intéresse, vous pouvez lire cette article : &lt;a href="https://povilasv.me/vertical-pod-autoscaling-the-definitive-guide/" rel="noopener noreferrer"&gt;https://povilasv.me/vertical-pod-autoscaling-the-definitive-guide/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Working your Cluster: Smarter Scheduling Decisions for Your Workloads - Madalina Lazar &amp;amp; Denisio Togashi, Intel
&lt;/h3&gt;

&lt;p&gt;C’est ici une présentation des capacités de &lt;a href="https://github.com/intel/platform-aware-scheduling" rel="noopener noreferrer"&gt;Platrorm Aware Scheduling&lt;/a&gt; et des problématiques que ce Kubernetes Scheduler Extenders tente de résoudre.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8zl254zt0nl4y5jzfzo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8zl254zt0nl4y5jzfzo.jpg" alt="Image description" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;À savoir, permettre à nos exécutables d’avoir les ressources dont ils ont besoin en évitant de sur allouer. Avoir un Scheduling des pods plus intelligents que la simple utilisation de « resources request » permet d’y répondre. C’est rendu possible en permettant notamment l’utilisation de metrics externes et des stratégies plus évoluées.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykgv1o71r1v1w83rznpi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fykgv1o71r1v1w83rznpi.jpg" alt="Image description" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nous avons apprécié cette présentation qui tente d’apporter une réponse aux problématiques de sous consommation et de surcharge rencontré mais de notre première compréhension nous avons le sentiment que cela nécessitera du temps pour gérer une véritable stratégie. On rajoutera une petite attention particulière sur la gestion de deschedule qui peut être source de « flapping »&lt;/p&gt;

</description>
      <category>kubecon</category>
      <category>kubernetes</category>
      <category>cncf</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to switch container runtime in a Kubernetes cluster</title>
      <dc:creator>Λ\: Laurent Noireterre</dc:creator>
      <pubDate>Tue, 02 Mar 2021 09:20:27 +0000</pubDate>
      <link>https://dev.to/stack-labs/how-to-switch-container-runtime-in-a-kubernetes-cluster-1628</link>
      <guid>https://dev.to/stack-labs/how-to-switch-container-runtime-in-a-kubernetes-cluster-1628</guid>
      <description>&lt;p&gt;As you might know, &lt;strong&gt;Kubernetes&lt;/strong&gt; has deprecated &lt;strong&gt;Docker&lt;/strong&gt; as container runtime, and Docker support will be removed in next versions (currently planned for the 1.22 release in late 2021).&lt;/p&gt;

&lt;p&gt;If you are using a managed Kubernetes cluster (like GKE, EKS, AKS) you shouldn't have a lot to handle and it should be pretty straight forward for you. But if you are managing a cluster by yourself (with &lt;strong&gt;kubeadm&lt;/strong&gt; for example) and use Docker as container runtime, you will have to handle that runtime switch soon or later to keep enjoying Kubernetes updates.&lt;/p&gt;

&lt;p&gt;The aim of this post is not to deep dive into the reasons of that change introduced by Kubernetes, or deep dive into container runtime behaviour in a Kubernetes cluster, but to &lt;strong&gt;step by step&lt;/strong&gt; describe how to switch your container runtime from Docker to any runtime that implements &lt;strong&gt;Container Runtime Interface&lt;/strong&gt; (&lt;a href="https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/" rel="noopener noreferrer"&gt;CRI&lt;/a&gt;). If you need more details on the reasons which lead to Docker deprecation, you can read Kubernetes Blog post &lt;a href="https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/" rel="noopener noreferrer"&gt;Don't Panic: Kubernetes and Docker&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What to check in the first place
&lt;/h1&gt;

&lt;p&gt;Appart from the changes linked to Kubernetes installation itself, the impacts on the workloads running in your cluster should be limited, if not non-existent. One of the only thing you have to care about is if you are using &lt;strong&gt;Docker-in-Docker&lt;/strong&gt; in any of your container workload by mounting the &lt;strong&gt;Docker socket&lt;/strong&gt; &lt;code&gt;/var/run/docker.sock&lt;/code&gt;. In that case you will have to find an alternative (&lt;a href="https://github.com/GoogleContainerTools/kaniko" rel="noopener noreferrer"&gt;Kaniko&lt;/a&gt; for example) before switching from Docker to your new container runtime.&lt;/p&gt;

&lt;p&gt;It's also warmly advised to &lt;strong&gt;backup&lt;/strong&gt; your data before proceeding with the container runtime switch!&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's proceed with the changes !
&lt;/h1&gt;

&lt;p&gt;Ok now that you are ready to apply the container runtime switch, let's proceed with the changes. I will use &lt;a href="https://containerd.io/" rel="noopener noreferrer"&gt;containerd&lt;/a&gt; as container runtime in this post but the steps below can be adapted to any container runtime (like &lt;a href="https://cri-o.io/" rel="noopener noreferrer"&gt;CRI-O&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;We will first start by impacting all &lt;strong&gt;worker nodes&lt;/strong&gt;, and then finish by the &lt;strong&gt;control plane&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worker nodes
&lt;/h2&gt;

&lt;p&gt;The steps below have to be applied on &lt;strong&gt;each&lt;/strong&gt; worker node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; First we will &lt;strong&gt;cordon&lt;/strong&gt; and &lt;strong&gt;drain&lt;/strong&gt; the node so that no more workload will be scheduled and executed on the node during the procedure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl cordon &amp;lt;node_name&amp;gt;
kubectl drain &amp;lt;node_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Remark&lt;/em&gt;: if you have &lt;strong&gt;DaemonSets&lt;/strong&gt; running on the node, you can use the flag &lt;code&gt;--ignore-daemonsets&lt;/code&gt; to proceed with the drain without evicting the pods linked to your DaemonSet (which is by the way impossible with the &lt;code&gt;drain&lt;/code&gt; command). Don't worry, these pods will be automatically restarted by &lt;code&gt;kubelet&lt;/code&gt; at the end of the procedure with the &lt;strong&gt;new&lt;/strong&gt; container runtime. If you have critical workload linked to the DaemonSets and don't want to let them run during the process, you can either specify a &lt;code&gt;nodeSelector&lt;/code&gt; on your DaemonSet or completely uninstall and reinstall them at the end of the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Once the node is drained, &lt;strong&gt;stop&lt;/strong&gt; the &lt;code&gt;kubelet&lt;/code&gt; service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl stop kubelet
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status kubelet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Uninstall Docker.&lt;br&gt;
I will not detail the commands here as it depends on your Linux distribution and the way you have installed Docker. Just be carefull if you want completely clean Docker artifacts, you might have to manually remove some files (for example &lt;code&gt;/var/lib/docker&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;You can check &lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;Docker documentation&lt;/a&gt; to help you uninstalling the engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Install &lt;code&gt;containerd&lt;/code&gt; (same here, I let you choose your favorite way to install it following &lt;a href="https://containerd.io/docs/getting-started/" rel="noopener noreferrer"&gt;containerd documentation&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; &lt;strong&gt;Enable&lt;/strong&gt; and &lt;strong&gt;Start&lt;/strong&gt; containerd service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;containerd
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start containerd
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status containerd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Kubernetes communicates with the container runtime through the &lt;strong&gt;CRI plugin&lt;/strong&gt;. Be sure this plugin is not disabled in your containerd installation by editing the config file &lt;code&gt;/etc/containerd/config.toml&lt;/code&gt; and check the &lt;code&gt;disabled_plugins&lt;/code&gt; list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;disabled_plugins = [""]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;strong&gt;restart&lt;/strong&gt; containerd service if needed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart containerd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; Edit &lt;strong&gt;kubelet&lt;/strong&gt; configuration file &lt;code&gt;/var/lib/kubelet/kubeadm-flags.env&lt;/code&gt; to add the following flags to &lt;code&gt;KUBELET_KUBEADM_ARGS&lt;/code&gt; variable (adapt container-runtime-endpoint path if needed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--container-runtime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;remote &lt;span class="nt"&gt;--container-runtime-endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/containerd/containerd.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;8.&lt;/strong&gt; &lt;strong&gt;Start&lt;/strong&gt; &lt;code&gt;kubelet&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start kubelet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;9.&lt;/strong&gt; Check if the new runtime has been correctly taken into account on the node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl describe node &amp;lt;node_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the container runtime version and name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;System Info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Machine ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;                 &lt;span class="s"&gt;21a5dd31f86c4&lt;/span&gt;
  &lt;span class="na"&gt;System UUID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;                &lt;span class="s"&gt;4227EF55-BA3BCCB57BCE&lt;/span&gt;
  &lt;span class="na"&gt;Boot ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;                    &lt;span class="s"&gt;77229747-9ea581ec6773&lt;/span&gt;
  &lt;span class="na"&gt;Kernel Version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;             &lt;span class="s"&gt;3.10.0-1127.10.1.el7.x86_64&lt;/span&gt;
  &lt;span class="na"&gt;OS Image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;                   &lt;span class="s"&gt;Red Hat Enterprise Linux Server 7.8 (Maipo)&lt;/span&gt;
  &lt;span class="na"&gt;Operating System&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;           &lt;span class="s"&gt;linux&lt;/span&gt;
  &lt;span class="na"&gt;Architecture&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;               &lt;span class="s"&gt;amd64&lt;/span&gt;
  &lt;span class="na"&gt;Container Runtime Version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="s"&gt;containerd://1.4.3&lt;/span&gt;
  &lt;span class="na"&gt;Kubelet Version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;            &lt;span class="s"&gt;v1.20.2&lt;/span&gt;
  &lt;span class="na"&gt;Kube-Proxy Version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;         &lt;span class="s"&gt;v1.20.2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;10.&lt;/strong&gt; &lt;strong&gt;Uncordon&lt;/strong&gt; the node to mark it as schedulable and check your pods running status&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl uncordon &amp;lt;node_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it, once all your pods have been restarted you can proceed with the &lt;strong&gt;next&lt;/strong&gt; worker node !&lt;/p&gt;

&lt;h2&gt;
  
  
  Control Plane
&lt;/h2&gt;

&lt;p&gt;The procedure to upgrade the container runtime on &lt;strong&gt;master&lt;/strong&gt; nodes is exactly the same than on the worker node. However you have to be careful if you are on a &lt;strong&gt;single&lt;/strong&gt; master node configuration. Indeed, while the new container runtime will pull kube-apiserver, etcd and coredns images and then create corresponding containers, the cluster will be &lt;strong&gt;unavailable&lt;/strong&gt;. You shouldn't also be able to run &lt;code&gt;kubectl&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Here are some tips to help you follow the new container runtime start and troubleshoot potential problems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Use &lt;strong&gt;journalctl&lt;/strong&gt; to follow kubelet logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; kubelet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; As well watch &lt;strong&gt;containerd&lt;/strong&gt; logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; containerd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Use &lt;a href="https://kubernetes.io/docs/tasks/debug-application-cluster/crictl/" rel="noopener noreferrer"&gt;crictl&lt;/a&gt; command to follow container deployments&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crictl &lt;span class="nt"&gt;--runtime-endpoint&lt;/span&gt; /run/containerd/containerd.sock ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Check at the end of the upgrade that you are well using the new &lt;strong&gt;container runtime&lt;/strong&gt; by executing a &lt;strong&gt;describe&lt;/strong&gt; command on your master nodes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl describe node &amp;lt;master_node_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Congratulations!&lt;/strong&gt; You are now running a Kubernetes cluster without Docker and are now ready to receive future releases!&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>devops</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
