{"id":78469,"date":"2021-07-04T19:01:50","date_gmt":"2021-07-04T17:01:50","guid":{"rendered":"https:\/\/jfrog.com\/?p=78469"},"modified":"2021-07-04T19:06:15","modified_gmt":"2021-07-04T17:06:15","slug":"helm-charts-best-practices","status":"publish","type":"post","link":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/","title":{"rendered":"Tenir le Cap avec les Meilleures Pratiques pour les Charts Helm"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone wp-image-44949 size-full\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131058\/Helm-Chart-Best-Practices_862%C3%97%E2%80%8A300.png\" alt=\"\" width=\"863\" height=\"301\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131058\/Helm-Chart-Best-Practices_862%C3%97%E2%80%8A300.png?speedsize=w_863 863w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131058\/Helm-Chart-Best-Practices_862%C3%97%E2%80%8A300.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131058\/Helm-Chart-Best-Practices_862%C3%97%E2%80%8A300.png?speedsize=w_768 768w\" sizes=\"(max-width: 863px) 100vw, 863px\" \/><\/p>\n<p><a href=\"https:\/\/kubernetes.io\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Kubernetes<\/span><\/a><span style=\"font-weight: 400\">, le c\u00e9l\u00e8bre outil d\u2019orchestration pour les applications de conteneurs, tire son nom du mot grec pour \u00ab\u00a0pilote\u00a0\u00bb, ou celui qui gouverne le navire. Mais comme dans tout voyage, le succ\u00e8s du navigateur d\u00e9pend de la carte dont il dispose.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Le chart <\/span><a href=\"https:\/\/helm.sh\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Helm<\/span><\/a><span style=\"font-weight: 400\"> d\u2019une application est cette carte. Une collection de fichiers qui peuvent \u00eatre d\u00e9ploy\u00e9s \u00e0 partir d\u2019un <\/span><a href=\"https:\/\/jfrog.com\/fr\/integration\/helm-repository\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">d\u00e9p\u00f4t de charts Helm<\/span><\/a><span style=\"font-weight: 400\"> qui d\u00e9crivent un ensemble connexe de ressources K8s. La confection la plus efficace possible de vos charts Helm permet \u00e0 Kubernetes de naviguer entre les \u00e9cueils lors du d\u00e9ploiement des conteneurs dans votre environnement de production.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Mais il existe d&apos;autres fa\u00e7ons de partir \u00e0 la d\u00e9rive, comme je l&apos;ai constat\u00e9 en d\u00e9veloppant des charts K8s accessibles au public pour d\u00e9ployer des produits. Avec chaque demande d&apos;extraction, les commentaires de la communaut\u00e9 Helm m&apos;ont aid\u00e9 \u00e0 m&apos;orienter vers les <a href=\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\">meilleures pratiques des charts Helm<\/a> qui offraient les meilleurs r\u00e9sultats pour l&apos;exploitation et la mise \u00e0 jour des conteneurs.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Voici quelques \u00e9l\u00e9ments \u00e0 prendre en compte lors de l&apos;\u00e9criture de charts K8s qui seront utilis\u00e9s par la communaut\u00e9 ou les clients en production. Les questions \u00e0 se poser sont notamment les suivantes\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quelles d\u00e9pendances devez-vous d\u00e9finir\u00a0?<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Votre application aura-t-elle besoin d\u2019un \u00e9tat persistant pour fonctionner\u00a0?<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Comment allez-vous g\u00e9rer la s\u00e9curit\u00e9 via les secrets et les autorisations\u00a0?<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Comment allez-vous contr\u00f4ler l\u2019ex\u00e9cution des conteneurs kubelet\u00a0?<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Comment vous assurer que vos applications sont en cours d\u2019ex\u00e9cution et en mesure de recevoir des appels\u00a0?<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Comment allez-vous pr\u00e9senter au monde les services de l\u2019application\u00a0?<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Comment allez-vous tester votre chart\u00a0?<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Ce guide propose quelques bonnes pratiques pour structurer et sp\u00e9cifier vos charts Helm qui aideront K8s \u00e0 faire accoster d\u00e9licatement vos applications conteneuris\u00e9es.<\/span><\/p>\n<h1><span style=\"font-weight: 400\">D\u00e9marrer<\/span><\/h1>\n<p><span style=\"font-weight: 400\">Avant de commencer, assurez-vous que vous \u00eates familiaris\u00e9 avec les proc\u00e9dures essentielles pour le <\/span><a href=\"https:\/\/docs.helm.sh\/developing_charts\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">d\u00e9veloppement de charts Helm<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Dans ce guide, nous allons cr\u00e9er un chart Helm selon les meilleures pratiques que nous recommandons pour d\u00e9ployer une application de<\/span> <span style=\"font-weight: 400\">cr\u00e9ation, lecture, mise \u00e0 jour et suppression (<\/span><span style=\"font-weight: 400\">CRUD) \u00e0 deux niveaux pour la base de donn\u00e9es Mongo \u00e0 l\u2019aide d\u2019Express.js. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Vous trouverez le code source de notre exemple d\u2019application dans <\/span><a href=\"https:\/\/github.com\/jainishshah17\/express-mongo-crud\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">express-crud dans GitHub<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<h1><span style=\"font-weight: 400\">Cr\u00e9ation et remplissage du chart Helm<\/span><\/h1>\n<p><span style=\"font-weight: 400\">Cr\u00e9ons notre mod\u00e8le de chart Helm \u00e0 l\u2019aide de la <\/span><a href=\"https:\/\/docs.helm.sh\/helm\/#helm-create\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">commande de cr\u00e9ation<\/span><\/a><span style=\"font-weight: 400\">du client Helm\u00a0:<\/span><\/p>\n<pre style=\"background: #e0e0e0;padding-left: 20px\">$ helm create express-crud<\/pre>\n<p><span style=\"font-weight: 400\">Nous cr\u00e9erons ainsi une structure de r\u00e9pertoires pour un chart Helm <\/span><i><span style=\"font-weight: 400\">express-crud<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Pour commencer, mettez \u00e0 jour les m\u00e9tadonn\u00e9es du chart dans le fichier <\/span><i><span style=\"font-weight: 400\">Chart.yaml<\/span><\/i><span style=\"font-weight: 400\"> qui vient d\u2019\u00eatre cr\u00e9\u00e9. Veillez \u00e0 ajouter des informations appropri\u00e9es pour l&apos;<\/span><i><span style=\"font-weight: 400\">appVersion <\/span><\/i><span style=\"font-weight: 400\">(la version de l\u2019application \u00e0 utiliser comme balise d&apos;image docker), la <\/span><i><span style=\"font-weight: 400\">description<\/span><\/i><span style=\"font-weight: 400\">, la<\/span> <i><span style=\"font-weight: 400\">version <\/span><\/i><span style=\"font-weight: 400\">(une cha\u00eene de version <\/span><a href=\"https:\/\/semver.org\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">SemVer 2<\/span><\/a><span style=\"font-weight: 400\">), les <\/span><i><span style=\"font-weight: 400\">sources<\/span><\/i><span style=\"font-weight: 400\">, les <\/span><i><span style=\"font-weight: 400\">responsables <\/span><\/i><span style=\"font-weight: 400\">et l&apos;<\/span><i><span style=\"font-weight: 400\">ic\u00f4ne<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">apiVersion: v1\r\nappVersion: &quot;1.0.0&quot;\r\ndescription: Un chart Helm pour une application express-crud\r\nname: express-crud\r\nversion: 0.1.0\r\nsources:\r\n- https:\/\/github.com\/jainishshah17\/express-mongo-crud\r\nmaintainers:\r\n- name: myaccount\r\n email: myacount@mycompany.com\r\nicon: https:\/\/github.com\/mycompany17\/mycompany.com\/blob\/master\/app\/public\/images\/logo.jpg\r\nhome: https:\/\/mycompany.com\/<\/span><\/pre>\n<\/div>\n<h2><span style=\"font-weight: 400\">D\u00e9finition des D\u00e9pendances<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Si votre application a des <\/span><a href=\"https:\/\/docs.helm.sh\/helm\/#helm-dependency\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">d\u00e9pendances<\/span><\/a><span style=\"font-weight: 400\">, vous devez cr\u00e9er un fichier <\/span><i><span style=\"font-weight: 400\">requirements.yaml<\/span><\/i><span style=\"font-weight: 400\"> dans la structure de r\u00e9pertoires du chart Helm qui les sp\u00e9cifie. \u00c9tant donn\u00e9 que notre application a besoin de la base de donn\u00e9es <\/span><i><span style=\"font-weight: 400\">mongodb<\/span><\/i><span style=\"font-weight: 400\">, nous devons le sp\u00e9cifier dans la liste des <\/span><i><span style=\"font-weight: 400\">d\u00e9pendances<\/span><\/i><span style=\"font-weight: 400\"> du fichier <\/span><i><span style=\"font-weight: 400\">requirements.yaml<\/span><\/i><span style=\"font-weight: 400\"> que nous cr\u00e9ons.<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">Un fichier <\/span><i><span style=\"font-weight: 400\">requirements.yaml <\/span><\/i><span style=\"font-weight: 400\">pour cet exemple contient<\/span><span style=\"font-weight: 400\">\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">dependencies:\r\n- name: mongodb\r\n version: 3.0.4\r\n repository: https:\/\/kubernetes-charts.storage.googleapis.com\/\r\n condition: mongodb.enabled\r\n<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Une fois qu\u2019un fichier <\/span><i><span style=\"font-weight: 400\">requirements.yaml<\/span><\/i><span style=\"font-weight: 400\"> est cr\u00e9\u00e9, vous devez ex\u00e9cuter la commande de <\/span><a href=\"https:\/\/docs.helm.sh\/helm\/#helm-dependency-update\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">mise \u00e0 jour des d\u00e9pendances<\/span><\/a><span style=\"font-weight: 400\">\u00a0dans le client Helm\u00a0:<\/span><\/p>\n<pre style=\"background: #e0e0e0;padding-left: 20px\">$ helm dep update<\/pre>\n<h1><span style=\"font-weight: 400\">Cr\u00e9ation de fichiers de d\u00e9ploiement<\/span><\/h1>\n<p><span style=\"font-weight: 400\">Les fichiers de d\u00e9ploiement de votre chart Helm r\u00e9sident dans le sous-r\u00e9pertoire <\/span><i><span style=\"font-weight: 400\">\\templates<\/span><\/i><span style=\"font-weight: 400\"> et sp\u00e9cifient la fa\u00e7on dont K8s d\u00e9ploiera l\u2019application conteneur.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Le d\u00e9veloppement de vos fichiers de d\u00e9ploiement implique la prise de certaines d\u00e9cisions cl\u00e9s.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Objet de D\u00e9ploiement ou Objet StatefulSet <\/span><\/h2>\n<p><span style=\"font-weight: 400\">Le fichier de d\u00e9ploiement que vous cr\u00e9ez d\u00e9pendra du fait que l&apos;application n\u00e9cessite que K8s la g\u00e8re comme un Objet de D\u00e9ploiement ou un <\/span><a href=\"https:\/\/kubernetes.io\/docs\/tutorials\/stateful-application\/basic-stateful-set\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Objet StatefulSet<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Un Objet de D\u00e9ploiement est une application sans \u00e9tat qui est d\u00e9clar\u00e9e dans le fichier <\/span><i><span style=\"font-weight: 400\">deployment.yaml<\/span><\/i><span style=\"font-weight: 400\"> et sp\u00e9cifie le param\u00e8tre <\/span><i><span style=\"font-weight: 400\">kind<\/span><\/i><span style=\"font-weight: 400\"> comme <\/span><b>deployment<\/b><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Un Objet Stateful est destin\u00e9 aux applications avec \u00e9tat et utilis\u00e9es avec des syst\u00e8mes distribu\u00e9s. Ils sont d\u00e9clar\u00e9s dans le fichier <\/span><i><span style=\"font-weight: 400\">stateless.yaml<\/span><\/i><span style=\"font-weight: 400\"> et sp\u00e9cifient le param\u00e8tre <\/span><i><span style=\"font-weight: 400\">kind <\/span><\/i><span style=\"font-weight: 400\">comme <\/span><b>stateful<\/b><span style=\"font-weight: 400\">.<\/span><\/p>\n<table>\n<tbody>\n<tr bgcolor=\"#e0e0e0\">\n<td><b>Deployment<\/b><\/td>\n<td><b>StatefulSet<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"font-weight: 400\">Les Deployments sont destin\u00e9s \u00e0 une utilisation sans \u00e9tat et sont plut\u00f4t l\u00e9gers.\u00a0<\/span><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Les StatefulSets sont utilis\u00e9s lorsque l&apos;\u00e9tat doit \u00eatre rendu persistant. Par cons\u00e9quent, il utilise <\/span><span style=\"font-weight: 400\">volumeClaimTemplates<\/span><span style=\"font-weight: 400\"> sur les volumes persistants pour s\u2019assurer qu\u2019ils peuvent conserver l\u2019\u00e9tat entre les red\u00e9marrages des composants.<\/span><\/td>\n<\/tr>\n<tr bgcolor=\"#e0e0e0\">\n<td valign=\"top\"><span style=\"font-weight: 400\">Si votre application est sans \u00e9tat ou si l\u2019\u00e9tat peut \u00eatre cr\u00e9\u00e9 \u00e0 partir de syst\u00e8mes backend au d\u00e9marrage, utilisez Deployments.<\/span><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Si votre application est avec \u00e9tat ou si vous souhaitez d\u00e9ployer un stockage avec \u00e9tat en plus de Kubernetes, utilisez un StatefulSet.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Cette application n\u2019ayant pas besoin d\u2019\u00e9tat pour \u00eatre rendue persistante, j\u2019utilise un objet de d\u00e9ploiement.<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">Le fichier <\/span><i><span style=\"font-weight: 400\">deployment.yaml<\/span><\/i><span style=\"font-weight: 400\"> a d\u00e9j\u00e0 \u00e9t\u00e9 cr\u00e9\u00e9 par la commande <\/span><span style=\"font-weight: 400\">helm create<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Nous utiliserons AppVersion comme balise d\u2019image Docker pour notre application. Cela nous permet de mettre \u00e0 niveau le chart Helm avec la nouvelle version de l\u2019application en changeant simplement la valeur dans <\/span><i><span style=\"font-weight: 400\">Chart.yaml<\/span><\/i><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">image: &quot;{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}&quot;<\/span><\/pre>\n<\/div>\n<h2><span style=\"font-weight: 400\">Secret Ou ConfigMap <\/span><\/h2>\n<p><span style=\"font-weight: 400\">Vous devrez d\u00e9terminer quels sont les identifiants ou donn\u00e9es de configuration qu&apos;il convient de stocker en tant que <\/span><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/secret\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">secrets<\/span><\/a><span style=\"font-weight: 400\"> et celles qui peuvent se trouver dans une <\/span><a href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-pod-configmap\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\"><\/span><\/a><span style=\"font-weight: 400\">ConfigMap.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Les secrets sont destin\u00e9s aux informations sensibles telles que les mots de passe que K8s stockera dans un format crypt\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Une ConfigMap est un fichier qui contient des informations de configuration qui peuvent \u00eatre partag\u00e9es par les applications. Les informations contenues dans une ConfigMap ne sont pas chiffr\u00e9es, elle ne doit donc pas contenir d\u2019informations sensibles.<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Secret<\/b><\/td>\n<td><b>ConfigMap<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"font-weight: 400\">Le fait de placer ces informations dans un secret est plus s\u00fbr et plus souple que de les placer textuellement dans une d\u00e9finition de pod ou dans une image docker<\/span>\u00a0;<\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Une ConfigMap vous permet de d\u00e9coupler les artefacts de configuration du contenu de l&apos;image afin de conserver les applications conteneuris\u00e9es portables<\/span><\/td>\n<\/tr>\n<tr bgcolor=\"#e0e0e0\">\n<td valign=\"top\"><span style=\"font-weight: 400\">Utilisation pour les donn\u00e9es confidentielles<\/span><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Utilisation pour les donn\u00e9es non confidentielles<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"font-weight: 400\">Exemples d&apos;utilisation\u00a0: Cl\u00e9s API, mot de passe, jetons et cl\u00e9s ssh<\/span><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Exemples d&apos;utilisation\u00a0: Rotateurs de journaux, Configuration sans donn\u00e9es confidentielles<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Dans cet exemple, nous allons autoriser Helm \u00e0 extraire des images docker \u00e0 partir de <a href=\"https:\/\/jfrog.com\/fr\/integration\/docker-registry\/\" target=\"_blank\" rel=\"noopener noreferrer\">registres docker priv\u00e9s<\/a> \u00e0 l\u2019aide de secrets d\u2019extraction d\u2019images.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Cette proc\u00e9dure s&apos;appuie sur le fait que le cluster Kubernetes dispose d&apos;un secret qui sp\u00e9cifie les informations d&apos;identification du gestionnaire de d\u00e9p\u00f4ts. Ce secret peut \u00eatre cr\u00e9\u00e9 par une ligne de commande kubectl telle que\u00a0: <\/span><\/p>\n<pre style=\"background: #e0e0e0;padding-left: 20px\">$ kubectl create secret docker-registry regsecret --docker-server=$DOCKER_REGISTRY_RUL --docker-username=$USERNAME --docker-password=$PASSWORD --docker-email=$EMAIL<\/pre>\n<p><span style=\"font-weight: 400\">Dans le fichier <\/span><i><span style=\"font-weight: 400\">values.yaml<\/span><\/i><span style=\"font-weight: 400\"> de votre chart Helm, vous pouvez ensuite passer le nom du secret \u00e0 une valeur\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">imagePullSecrets: regsecret<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Vous pouvez ensuite utiliser le secret pour permettre \u00e0 Helm d\u2019acc\u00e9der au registre docker via ces lignes dans <\/span><i><span style=\"font-weight: 400\">deployment.yaml<\/span><\/i><span style=\"font-weight: 400\">\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">{{- if .Values.imagePullSecrets }}\r\n imagePullSecrets:\r\n - name: {{ .Values.imagePullSecrets }}\r\n{{- end }}<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Pour les secrets disponibles pour l\u2019application, vous devez ajouter ces informations directement \u00e0 <\/span><i><span style=\"font-weight: 400\">values.yaml<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Par exemple, pour configurer notre application pour acc\u00e9der \u00e0 mongodb avec un utilisateur et une base de donn\u00e9es pr\u00e9-cr\u00e9\u00e9s, ajoutez ces informations dans <\/span><i><span style=\"font-weight: 400\">values.yaml<\/span><\/i><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">mongodb:\r\n enabled: true\r\n mongodbRootPassword:\r\n mongodbUsername: admin\r\n mongodbPassword: \r\n mongodbDatabase: test<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Notez qu\u2019ici, nous ne codons pas en dur les identifiants par d\u00e9faut dans notre chart Helm. Au lieu de cela, nous utilisons une logique pour g\u00e9n\u00e9rer al\u00e9atoirement le mot de passe quand il n&apos;est pas fourni via &#8211;set flag ou <\/span><i><span style=\"font-weight: 400\">values.yaml<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">Nous utiliserons un secret pour transmettre les identifiants mongodb \u00e0 notre application, via ces lignes dans <\/span><i><span style=\"font-weight: 400\">deployment.yaml<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">env:\r\n- name: DATABASE_PASSWORD\r\n  valueFrom:\r\n    secretKeyRef:\r\n      name: {{ .Release.Name }}-mongodb\r\n      key: mongodb-password<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Vous pouvez contr\u00f4ler l\u2019ex\u00e9cution des conteneurs kubelet via des <\/span><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/init-containers\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Init Containers<\/span><\/a><span style=\"font-weight: 400\"> sp\u00e9cialis\u00e9s ou des <\/span><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/containers\/container-lifecycle-hooks\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Container Lifecycle Hooks<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td><b>InitContainers<\/b><\/td>\n<td><b>Conteneur Lifecycle Hooks<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"font-weight: 400\"><b>Les InitContainers<\/b> sont des conteneurs sp\u00e9cialis\u00e9s qui s\u2019ex\u00e9cutent avant les conteneurs d\u2019application et peuvent contenir des utilitaires ou des scripts de configuration qui ne sont pas pr\u00e9sents dans une image d\u2019application.<\/span><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Les conteneurs peuvent utiliser le framework Container lifecycle hook pour ex\u00e9cuter du code d\u00e9clench\u00e9 par des \u00e9v\u00e9nements pendant leur cycle de vie de gestion.<\/span><\/td>\n<\/tr>\n<tr bgcolor=\"#e0e0e0\">\n<td valign=\"top\"><span style=\"font-weight: 400\">Un Pod peut avoir un ou plusieurs Init Containers, qui sont ex\u00e9cut\u00e9s avant le d\u00e9marrage des conteneurs d&apos;applications.<\/span><\/p>\n<p>&nbsp;<\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Un Pod ne peut avoir qu\u2019un seul hook <\/span><b>PostStart<\/b><span style=\"font-weight: 400\"> ou <\/span><b>PreStop<\/b><span style=\"font-weight: 400\"><\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><\/td>\n<td valign=\"top\">Le hook <span style=\"font-weight: 400\"><b>PostStart<\/b> s\u2019ex\u00e9cute imm\u00e9diatement apr\u00e8s la cr\u00e9ation d\u2019un conteneur. Toutefois, il n\u2019y a aucune garantie que le hook s\u2019ex\u00e9cutera avant l&apos;ENTRYPOINT du conteneur. Aucun param\u00e8tre n&apos;est pass\u00e9 au handler.<\/span><br \/>\n<span style=\"font-weight: 400\">par ex., d\u00e9placement de fichiers mont\u00e9s \u00e0 l\u2019aide de ConfigMap\/Secrets vers un emplacement diff\u00e9rent.<\/span><\/td>\n<\/tr>\n<tr bgcolor=\"#e0e0e0\">\n<td valign=\"top\"><\/td>\n<td valign=\"top\">Le hook <span style=\"font-weight: 400\"><b>PreStop<\/b> est appel\u00e9 imm\u00e9diatement avant qu&apos;un conteneur se termine. Il est bloquant, ce qui veut dire qu&apos;il est synchrone, et doit donc se terminer avant que l&apos;appel pour supprimer le conteneur soit envoy\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400\">ex., Arr\u00eat progressif de l&apos;application<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><span style=\"font-weight: 400\">Vous pouvez utiliser des <\/span><b>initContainers<\/b><span style=\"font-weight: 400\"> pour ajouter des attentes, afin de v\u00e9rifier que les microservices d\u00e9pendants sont fonctionnels avant de continuer.<\/span><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Vous pouvez utiliser le hook <\/span><b>PostStart <\/b><span style=\"font-weight: 400\">pour mettre \u00e0 jour le fichier dans le m\u00eame pod, par exemple pour mettre \u00e0 jour les fichiers de configuration avec l&apos;<\/span><b>IP Service<\/b><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Dans notre exemple, ajoutez ces sp\u00e9cifications <\/span><b>initContainers <\/b><span style=\"font-weight: 400\">au fichier <\/span><i><span style=\"font-weight: 400\">deployments.yaml<\/span><\/i><span style=\"font-weight: 400\"> pour suspendre le d\u00e9marrage de notre application jusqu\u2019\u00e0 ce que la base de donn\u00e9es soit op\u00e9rationnelle. <\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">initContainers:\r\n- name: wait-for-db\r\n image: &quot;{{ .Values.initContainerImage }}&quot;\r\n command:\r\n - &apos;sh&apos;\r\n - &apos;-c&apos;\r\n - &gt;\r\n   until nc -z -w 2 {{ .Release.Name }}-mongodb 27017 &amp;&amp; echo mongodb ok;\r\n     do sleep 2;\r\n   done<\/span><\/pre>\n<\/div>\n<h2><span style=\"font-weight: 400\">Ajout de sondes de disponibilit\u00e9 et d&apos;activit\u00e9 (Readiness et Liveness)<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Il est souvent utile d&apos;ajouter une sonde de disponibilit\u00e9 et une sonde d&apos;activit\u00e9 pour v\u00e9rifier la sant\u00e9 de l&apos;application. Si vous ne le faites pas, l&apos;application peut \u00e9chouer de telle sorte qu&apos;elle semble fonctionner, mais ne r\u00e9pond pas aux appels ou aux requ\u00eates.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Ces lignes dans le fichier <\/span><i><span style=\"font-weight: 400\">deployment.yaml<\/span><\/i><span style=\"font-weight: 400\"> ajouteront ces sondes pour effectuer des v\u00e9rifications p\u00e9riodiques\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">livenessProbe:\r\n httpGet:\r\n   path: &apos;\/health&apos;\r\n   port: http\r\n initialDelaySeconds: 60\r\n periodSeconds: 10\r\n failureThreshold: 10\r\nreadinessProbe:\r\n httpGet:\r\n   path: &apos;\/health&apos;\r\n   port: http\r\n initialDelaySeconds: 60\r\n periodSeconds: 10\r\n failureThreshold: 10<\/span><\/pre>\n<\/div>\n<h2><span style=\"font-weight: 400\">Ajout de la prise en charge d&apos;un RBAC <\/span><\/h2>\n<p><span style=\"font-weight: 400\">Ces proc\u00e9dures ajouteront la prise en charge d&apos;un <\/span><a href=\"https:\/\/kubernetes.io\/docs\/reference\/access-authn-authz\/rbac\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">contr\u00f4le d\u2019acc\u00e8s bas\u00e9 sur les r\u00f4les (RBAC)<\/span><\/a> <span style=\"font-weight: 400\">\u00a0\u00e0 notre chart, lorsqu\u2019une application l\u2019exige.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\u00c9tape\u00a01\u00a0: Cr\u00e9ez un <\/span><i><span style=\"font-weight: 400\">R\u00f4le en <\/span><\/i><span style=\"font-weight: 400\">ajoutant le contenu suivant dans un fichier <\/span><i><span style=\"font-weight: 400\">role.yaml<\/span><\/i><span style=\"font-weight: 400\">\u00a0: <\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">Un r\u00f4le peut uniquement \u00eatre utilis\u00e9 pour accorder l\u2019acc\u00e8s aux ressources dans un espace de noms unique.<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">{{- if .Values.rbac.create }}\r\napiVersion: rbac.authorization.k8s.io\/v1\r\nkind: Role\r\nmetadata:\r\n labels:\r\n   app: {{ template &quot;express-crud.name&quot; . }}\r\n   chart: {{ template &quot;express-crud.chart&quot; . }}\r\n   heritage: {{ .Release.Service }}\r\n   release: {{ .Release.Name }}\r\n name: {{ template &quot;express-crud.fullname&quot; . }}\r\nrules:\r\n{{ toYaml .Values.rbac.role.rules }}\r\n{{- end }}<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">\u00c9tape\u00a02\u00a0: Cr\u00e9ez un <\/span><i><span style=\"font-weight: 400\">RoleBinding <\/span><\/i><span style=\"font-weight: 400\">en ajoutant le contenu suivant dans un fichier <\/span><i><span style=\"font-weight: 400\">rolebinding.yaml<\/span><\/i><span style=\"font-weight: 400\"><\/span><span style=\"font-weight: 400\">\u00a0:<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">Un ClusterRole peut \u00eatre utilis\u00e9 pour accorder les m\u00eames autorisations qu&apos;un R\u00f4le, mais \u00e9tant \u00e0 l&apos;\u00e9chelle du cluster, ils peuvent \u00e9galement \u00eatre utilis\u00e9s pour accorder l&apos;acc\u00e8s \u00e0\u00a0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ressources \u00e0 l&apos;\u00e9chelle du cluster (comme des n\u0153uds)<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">points de terminaison hors ressources (comme &quot;\/healthz&quot;)<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ressources avec espace de noms (comme des pods) dans tous les espaces de noms<\/span><\/li>\n<\/ul>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">{{- if .Values.rbac.create }}\r\napiVersion: rbac.authorization.k8s.io\/v1\r\nkind: RoleBinding\r\nmetadata:\r\n labels:\r\n   app: {{ template &quot;express-crud.name&quot; . }}\r\n   chart: {{ template &quot;express-crud.chart&quot; . }}\r\n   heritage: {{ .Release.Service }}\r\n   release: {{ .Release.Name }}\r\n name: {{ template &quot;express-crud.fullname&quot; . }}\r\nsubjects:\r\n- kind: ServiceAccount\r\n name: {{ template &quot;express-crud.serviceAccountName&quot; . }}\r\nroleRef:\r\n kind: Role\r\n apiGroup: rbac.authorization.k8s.io\r\n name: {{ template &quot;express-crud.fullname&quot; . }}\r\n{{- end }}<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">\u00c9tape\u00a03\u00a0: Cr\u00e9ez un <\/span><i><span style=\"font-weight: 400\">ServiceAccount <\/span><\/i><span style=\"font-weight: 400\">en <\/span><span style=\"font-weight: 400\">ajoutant le contenu suivant dans un fichier <\/span><i><span style=\"font-weight: 400\">serviceaccount.yaml<\/span><\/i><span style=\"font-weight: 400\"><\/span><span style=\"font-weight: 400\">\u00a0:<\/span><\/p>\n<p><span style=\"font-weight: 400\">Un compte de service fournit une identit\u00e9 pour les processus qui s&apos;ex\u00e9cutent dans un Pod.<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">{{- if .Values.serviceAccount.create }}\r\napiVersion: v1\r\nkind: ServiceAccount\r\nmetadata:\r\n labels:\r\n   app: {{ template &quot;express-crud.name&quot; . }}\r\n   chart: {{ template &quot;express-crud.chart&quot; . }}\r\n   heritage: {{ .Release.Service }}\r\n   release: {{ .Release.Name }}\r\n name: {{ template &quot;express-crud.serviceAccountName&quot; . }}\r\n{{- end }}<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">\u00c9tape\u00a04\u00a0: Utilisez le mod\u00e8le d\u2019assistance pour d\u00e9finir le nom du ServiceAccount.<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">Pour ce faire, ajoutez le contenu suivant dans le fichier <\/span><i><span style=\"font-weight: 400\">_helpers.tpl<\/span><\/i><span style=\"font-weight: 400\"><\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">{{\/*\r\nCr\u00e9ez le nom du compte de service \u00e0 utiliser\r\n*\/}}\r\n{{- define &quot;express-crud.serviceAccountName&quot; -}}\r\n{{- if .Values.serviceAccount.create -}}\r\n{{ default (include &quot;express-crud.fullname&quot; .) .Values.serviceAccount.name }}\r\n{{- else -}}\r\n{{ default &quot;default&quot; .Values.serviceAccount.name }}\r\n{{- end -}}\r\n{{- end -}}<\/span><\/pre>\n<\/div>\n<h2><span style=\"font-weight: 400\">Ajout d\u2019un service <\/span><\/h2>\n<p><span style=\"font-weight: 400\">Il est maintenant temps de pr\u00e9senter notre application au monde <\/span><a href=\"https:\/\/kubernetes.io\/docs\/tutorials\/kubernetes-basics\/expose\/expose-intro\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">\u00e0 travers un service<\/span><\/a><span style=\"font-weight: 400\">. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Un service permet \u00e0 votre application de recevoir du trafic via une adresse IP. Les services peuvent \u00eatre pr\u00e9sent\u00e9s de diff\u00e9rentes mani\u00e8res en sp\u00e9cifiant un <\/span><i><span style=\"font-weight: 400\">type<\/span><\/i><span style=\"font-weight: 400\">\u00a0:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td valign=\"top\"><b>ClusterIP<\/b><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Le service est uniquement accessible par une adresse IP interne depuis le cluster.<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><b>NodePort<\/b><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Le service est accessible depuis l\u2019ext\u00e9rieur du cluster via NodeIP et NodePort.<\/span><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><b>LoadBalancer<\/b><\/td>\n<td valign=\"top\"><span style=\"font-weight: 400\">Le service est accessible depuis l\u2019ext\u00e9rieur du cluster via un \u00e9quilibreur de charge externe. Peut <\/span><a href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/ingress\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">Entrer <\/span><\/a><span style=\"font-weight: 400\">dans l\u2019application..<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">Pour ce faire, ajouter le contenu suivant \u00e0 <\/span><i><span style=\"font-weight: 400\">service.yaml<\/span><\/i><span style=\"font-weight: 400\">\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">apiVersion: v1\r\nkind: Service\r\nmetadata:\r\n name: {{ template &quot;express-crud.fullname&quot; . }}\r\n labels:\r\n   app: {{ template &quot;express-crud.name&quot; . }}\r\n   chart: {{ template &quot;express-crud.chart&quot; . }}\r\n   release: {{ .Release.Name }}\r\n   heritage: {{ .Release.Service }}\r\nspec:\r\n type: {{ .Values.service.type }}\r\n ports:\r\n   - port: {{ .Values.service.externalPort }}\r\n     targetPort: http\r\n     protocol: TCP\r\n     name: http\r\n selector:\r\n   app: {{ template &quot;express-crud.name&quot; . }}\r\n   release: {{ .Release.Name }}<\/span><\/pre>\n<\/div>\n<p><span style=\"font-weight: 400\">Il convient de noter que dans ce qui pr\u00e9c\u00e8de, pour notre <\/span><i><span style=\"font-weight: 400\">type<\/span><\/i><span style=\"font-weight: 400\"> de service nous faisons r\u00e9f\u00e9rence \u00e0 un param\u00e8tre dans notre <\/span><i><span style=\"font-weight: 400\">values.yaml<\/span><\/i><span style=\"font-weight: 400\">:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\">service:\r\n  type: LoadBalancer\r\n  internalPort: 3000\r\n  externalPort: 80\r\n<\/span><\/pre>\n<\/div>\n<h1><span style=\"font-weight: 400\">R\u00e9sum\u00e9 Values.yaml <\/span><\/h1>\n<p><span style=\"font-weight: 400\">La d\u00e9finition d&apos;un grand nombre de nos param\u00e8tres dans un fichier <\/span><i><span style=\"font-weight: 400\">values.yaml <\/span><\/i><span style=\"font-weight: 400\">\u00a0est une bonne pratique pour aider \u00e0 maintenir vos charts Helm.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Voici comment le fichier <\/span><i><span style=\"font-weight: 400\">values.yaml<\/span><\/i><span style=\"font-weight: 400\"> de notre exemple s&apos;affiche, montrant la vari\u00e9t\u00e9 des param\u00e8tres que nous d\u00e9finissons pour de nombreuses fonctionnalit\u00e9s d\u00e9crites ci-dessus\u00a0:<\/span><\/p>\n<div style=\"background: #272b33;overflow: auto;width: auto;border: solid gray;border-width: .1em .1em .1em .8em;padding: .2em .6em\">\n<pre style=\"margin: 0;line-height: 125%\"><span style=\"color: #999999\"># Valeurs par d\u00e9faut pour express-mongo-crud.\r\n# Il s\u2019agit d\u2019un fichier au format YAML.\r\n# D\u00e9clarez les variables \u00e0 passer dans vos mod\u00e8les.\r\n\r\n## Contr\u00f4le d\u2019acc\u00e8s bas\u00e9 sur un r\u00f4le\r\n## R\u00e9f\u00a0: https:\/\/kubernetes.io\/docs\/admin\/authorization\/rbac\/\r\nrbac:\r\n create: true\r\n role:\r\n   ## R\u00e8gles \u00e0 cr\u00e9er. Selon la sp\u00e9cification de r\u00f4le\r\n   rules:\r\n   - apiGroups:\r\n     - &apos;&apos;\r\n     resources:\r\n     - services\r\n     - endpoints\r\n     - pods\r\n     verbs:\r\n     - get\r\n     - watch\r\n     - list\r\n\r\n## Compte de service\r\n## R\u00e9f\u00a0: https:\/\/kubernetes.io\/docs\/admin\/service-accounts-admin\/\r\n##\r\nserviceAccount:\r\n create: true\r\n ## Nom du ServiceAccount \u00e0 utiliser.\r\n ## Si non d\u00e9fini et que la valeur de create est true, un nom est g\u00e9n\u00e9r\u00e9 \u00e0 l\u2019aide du mod\u00e8le fullname\r\n name:\r\n\r\n## Valeurs de configuration pour la d\u00e9pendance mongodb\r\n## r\u00e9f.\u00a0: https:\/\/github.com\/kubernetes\/charts\/blob\/master\/stable\/mongodb\/README.md\r\n##\r\nmongodb:\r\n enabled: true\r\n image:\r\n   tag: 3.6.3\r\n   pullPolicy: IfNotPresent\r\n persistence:\r\n   size: 50Gi\r\n # resources:\r\n #  requests:\r\n #    memory: &quot;12Gi&quot;\r\n #    cpu: &quot;200m&quot;\r\n #  limits:\r\n #    memory: &quot;12Gi&quot;\r\n #    cpu: &quot;2&quot;\r\n ## Assurez-vous que la valeur de --wiredTigerCacheSizeGB n\u2019est pas sup\u00e9rieure \u00e0 la moiti\u00e9 de la limite de m\u00e9moire\u00a0!\r\n ## C\u2019est essentiel pour se prot\u00e9ger contre OOMKill par Kubernetes\u00a0!\r\n mongodbExtraFlags:\r\n - &quot;--wiredTigerCacheSizeGB=1&quot;\r\n mongodbRootPassword:\r\n mongodbUsername: admin\r\n mongodbPassword:\r\n mongodbDatabase: test\r\n#  livenessProbe:\r\n#    initialDelaySeconds: 60\r\n#    periodSeconds: 10\r\n#  readinessProbe:\r\n#    initialDelaySeconds: 30\r\n#    periodSeconds: 30\r\n\r\ningress:\r\n enabled: faux\r\n annotations: {}\r\n   # kubernetes.io\/ingress.class: nginx\r\n   # kubernetes.io\/tls-acme: &quot;true&quot;\r\n path: \/\r\n hosts:\r\n   - chart-example.local\r\n tls: []\r\n #  - secretName: chart-example-tls\r\n #    hosts:\r\n #      - chart-example.local\r\n\r\ninitContainerImage: &quot;alpine:3.6&quot;\r\nimagePullSecrets:\r\nreplicaCount: 1\r\n\r\nimage:\r\n repository: jainishshah17\/express-mongo-crud\r\n # tag: 1.0.1\r\n pullPolicy: IfNotPresent\r\n\r\nservice:\r\n type: LoadBalancer\r\n internalPort: 3000\r\n externalPort: 80\r\n\r\nresources: {}\r\n # Nous recommandons g\u00e9n\u00e9ralement de ne pas sp\u00e9cifier les ressources par d\u00e9faut et de laisser cela comme un\r\n # choix conscient de l\u2019utilisateur. Cela augmente \u00e9galement les chances que les charts s\u2019ex\u00e9cutent dans des environnements avec peu\r\n # de ressources, par ex. Minikube. Si vous souhaitez sp\u00e9cifier des ressources, d\u00e9commentez les\r\n # lignes suivantes, modifiez-les si n\u00e9cessaire, et supprimez les accolades apr\u00e8s &apos;resources:&apos;.\r\n # limits:\r\n #  cpu: 100m\r\n #  memory: 128Mi\r\n # requests:\r\n #  cpu: 100m\r\n #  memory: 128Mi\r\n\r\nnodeSelector: {}\r\n\r\ntolerations: []\r\n\r\naffinity: {}<\/span><\/pre>\n<\/div>\n<h1><span style=\"font-weight: 400\">Tests et installations du chart Helm<\/span><\/h1>\n<p><span style=\"font-weight: 400\">Il est essentiel de tester notre chart Helm, ce que nous ferons avec la commande <\/span><span style=\"font-weight: 400\">helm lint<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<pre style=\"background: #e0e0e0;padding-left: 20px\">$ helm lint .\/\r\n\r\n## Output\r\n==&gt; Linting .\/\r\nLint OK\r\n\r\n1\u00a0chart test\u00e9, pas d\u2019\u00e9checs<\/pre>\n<p><span style=\"font-weight: 400\">Utilisez la commande <\/span><span style=\"font-weight: 400\">helm <em>install<\/em><\/span><span style=\"font-weight: 400\"> pour d\u00e9ployer notre application \u00e0 l&apos;aide d&apos;un chart helm sur Kubernetes.<\/span><\/p>\n<pre style=\"background: #e0e0e0;padding-left: 20px\">$ helm install --name test1 .\/ \r\n\r\n## Output\r\nNAME:   test1\r\nLAST DEPLOYED: Sat Sep 15 09:36:23 2018\r\nNAMESPACE: default\r\nSTATUS: DEPLOYED\r\n\r\nRESOURCES:\r\n==&gt; v1beta1\/Deployment\r\nNAME           DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE\r\ntest1-mongodb  1        1        1           0          0s\r\n\r\n==&gt; v1beta2\/Deployment\r\ntest1-express-crud  1  1  1  0  0s\r\n\r\n==&gt; v1\/Secret\r\nNAME           TYPE    DATA  AGE\r\ntest1-mongodb  Opaque  2     0s\r\n\r\n==&gt; v1\/PersistentVolumeClaim\r\nNAME           STATUS   VOLUME    CAPACITY  ACCESS MODES  STORAGECLASS  AGE\r\ntest1-mongodb  Pending  standard  0s\r\n\r\n==&gt; v1\/ServiceAccount\r\nNAME                SECRETS  AGE\r\ntest1-express-crud  1        0s\r\n\r\n==&gt; v1\/Service\r\nNAME                TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)       AGE\r\ntest1-mongodb       ClusterIP     10.19.248.205         27017\/TCP     0s\r\ntest1-express-crud  LoadBalancer  10.19.254.169      80:31994\/TCP  0s\r\n\r\n==&gt; v1\/Role\r\nNAME                AGE\r\ntest1-express-crud  0s\r\n\r\n==&gt; v1\/RoleBinding\r\nNAME                AGE\r\ntest1-express-crud  0s\r\n\r\n==&gt; v1\/Pod(related)\r\nNAME                                READY  STATUS    RESTARTS  AGE\r\ntest1-mongodb-67b6697449-tppk5      0\/1    Pending   0         0s\r\ntest1-express-crud-dfdbd55dc-rdk2c  0\/1    Init:0\/1  0         0s\r\n\r\n\r\nNOTES:\r\n1. Get the application URL by running these commands:\r\n     NOTE: It may take a few minutes for the LoadBalancer IP to be available.\r\n           You can watch the status of by running &apos;kubectl get svc -w test1-express-crud&apos;\r\n  export SERVICE_IP=$(kubectl get svc --namespace default test1-express-crud -o jsonpath=&apos;{.status.loadBalancer.ingress[0].ip}&apos;)\r\n  echo https:\/\/$SERVICE_IP:80<\/pre>\n<p><span style=\"font-weight: 400\">L\u2019ex\u00e9cution de la commande helm install ci-dessus produira une IP_Externe pour l\u2019\u00e9quilibreur de charge. Vous pouvez utiliser cette adresse IP pour ex\u00e9cuter l\u2019application.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Voici comment notre application appara\u00eet lors de l\u2019ex\u00e9cution\u00a0:<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-44890 size-large\" src=\"https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131059\/Helm-BP-Result-1024x588.png\" alt=\"Result\" width=\"1024\" height=\"588\" srcset=\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131059\/Helm-BP-Result.png?speedsize=w_1024 1024w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131059\/Helm-BP-Result.png?speedsize=w_300 300w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131059\/Helm-BP-Result.png?speedsize=w_768 768w, https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20131059\/Helm-BP-Result.png?speedsize=w_1600 1600w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h1><span style=\"font-weight: 400\">Conclusion<\/span><\/h1>\n<p><span style=\"font-weight: 400\">Comme vous pouvez le voir dans cet exemple, Helm est un syst\u00e8me extr\u00eamement polyvalent qui vous offre une grande flexibilit\u00e9 dans la mani\u00e8re de structurer et de d\u00e9velopper un chart. En proc\u00e9dant conform\u00e9ment aux conventions de la communaut\u00e9 Helm vous pourrez soumettre plus facilement vos charts Helm pour une utilisation publique, et vous pourrez les g\u00e9rer beaucoup plus facilement lors de la mise \u00e0 jour de votre application.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Les charts Helm achev\u00e9s pour cet exemple de projet se trouvent dans le d\u00e9p\u00f4t <\/span><a href=\"https:\/\/github.com\/jainishshah17\/express-mongo-crud\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">express-crud<\/span><\/a><span style=\"font-weight: 400\"> sur GitHub, et vous pouvez examiner ces fichiers fonctionnels pour vous aider \u00e0 mieux comprendre leur structure.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Pour explorer d\u2019autres exemples, vous pouvez consulter mon d\u00e9p\u00f4t d&apos;exemples de <\/span><a href=\"https:\/\/github.com\/jfrog\/charts\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400\">charts Helm<\/span><\/a><span style=\"font-weight: 400\"> pour le d\u00e9veloppement de produits sur Kubernetes.<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes, le c\u00e9l\u00e8bre outil d\u2019orchestration pour les applications de conteneurs, tire son nom du mot grec pour \u00ab\u00a0pilote\u00a0\u00bb, ou celui qui gouverne le navire. Mais comme dans tout voyage, le succ\u00e8s du navigateur d\u00e9pend de la carte dont il dispose. Le chart Helm d\u2019une application est cette carte. Une collection de fichiers qui peuvent \u00eatre &hellip;<\/p>\n","protected":false},"author":140,"featured_media":53290,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[9370,9212],"tags":[9371,9372,9373],"class_list":["post-78469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artifactory-fr","category-non-classifiee","tag-meilleures-pratiques","tag-helm-fr","tag-charts-helm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.6 (Yoast SEO v22.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Meilleures Pratiques Charts Helm | JFrog Artifactory<\/title>\n<meta name=\"description\" content=\"Pour la cr\u00e9ation de votre d\u00e9p\u00f4t de charts Helm, voici quelques bonnes pratiques \u00e0 appliquer pour guider votre d\u00e9ploiement Kubernetes et prendre les d\u00e9cisions appropri\u00e9es.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/78469\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Diff\u00e9rentes Fa\u00e7on de Tenir le Cap avec vos Charts Helm\" \/>\n<meta property=\"og:description\" content=\"L&amp;apos;expert en charts Helm de JFrog partage les meilleures pratiques qu&amp;apos;il a apprises en explorant les nombreux choix d&amp;apos;automatisation de K8s pour l&amp;apos;exploitation et la mise \u00e0 jour des conteneurs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\" \/>\n<meta property=\"og:site_name\" content=\"JFrog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/artifrog\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-04T17:01:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-04T17:06:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/speedmedia.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png\" \/>\n\t<meta property=\"og:image:width\" content=\"203\" \/>\n\t<meta property=\"og:image:height\" content=\"148\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"giannit\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Diff\u00e9rentes Fa\u00e7on de Tenir le Cap avec vos Charts Helm\" \/>\n<meta name=\"twitter:description\" content=\"L&amp;apos;expert en charts Helm de JFrog partage les meilleures pratiques qu&amp;apos;il a apprises en explorant les nombreux choix d&amp;apos;automatisation de K8s pour l&amp;apos;exploitation et la mise \u00e0 jour des conteneurs.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/jfrog.com\/wp-content\/uploads\/2019\/03\/Helm-Chart-Best-Practices_1200628-2.png\" \/>\n<meta name=\"twitter:creator\" content=\"@jfrog\" \/>\n<meta name=\"twitter:site\" content=\"@jfrog\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"giannit\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\"},\"author\":{\"name\":\"giannit\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\"},\"headline\":\"Tenir le Cap avec les Meilleures Pratiques pour les Charts Helm\",\"datePublished\":\"2021-07-04T17:01:50+00:00\",\"dateModified\":\"2021-07-04T17:06:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\"},\"wordCount\":2407,\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png\",\"keywords\":[\"Meilleures Pratiques\",\"helm\",\"charts Helm\"],\"articleSection\":[\"Artifactory\",\"Non classifi\u00e9(e)\"],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\",\"url\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\",\"name\":\"Meilleures Pratiques Charts Helm | JFrog Artifactory\",\"isPartOf\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png\",\"datePublished\":\"2021-07-04T17:01:50+00:00\",\"dateModified\":\"2021-07-04T17:06:15+00:00\",\"description\":\"Pour la cr\u00e9ation de votre d\u00e9p\u00f4t de charts Helm, voici quelques bonnes pratiques \u00e0 appliquer pour guider votre d\u00e9ploiement Kubernetes et prendre les d\u00e9cisions appropri\u00e9es.\",\"breadcrumb\":{\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png\",\"width\":203,\"height\":148,\"caption\":\"Helm\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jfrog.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tenir le Cap avec les Meilleures Pratiques pour les Charts Helm\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jfrog.com\/fr\/#website\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"name\":\"JFrog\",\"description\":\"Deliver Trusted Software Releases at Speed and Scale\",\"publisher\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jfrog.com\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jfrog.com\/fr\/#organization\",\"name\":\"JFrog\",\"url\":\"https:\/\/jfrog.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"contentUrl\":\"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg\",\"width\":74,\"height\":73,\"caption\":\"JFrog\"},\"image\":{\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/artifrog\",\"https:\/\/x.com\/jfrog\",\"https:\/\/www.linkedin.com\/company\/455737\",\"https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg\",\"https:\/\/www.wikidata.org\/wiki\/Q98608948\"],\"description\":\"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.\",\"legalName\":\"Jfrog, Inc.\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"1001\",\"maxValue\":\"5000\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af\",\"name\":\"giannit\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/jfrog.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g\",\"caption\":\"giannit\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Meilleures Pratiques Charts Helm | JFrog Artifactory","description":"Pour la cr\u00e9ation de votre d\u00e9p\u00f4t de charts Helm, voici quelques bonnes pratiques \u00e0 appliquer pour guider votre d\u00e9ploiement Kubernetes et prendre les d\u00e9cisions appropri\u00e9es.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/78469","og_locale":"fr_FR","og_type":"article","og_title":"Diff\u00e9rentes Fa\u00e7on de Tenir le Cap avec vos Charts Helm","og_description":"L&apos;expert en charts Helm de JFrog partage les meilleures pratiques qu&apos;il a apprises en explorant les nombreux choix d&apos;automatisation de K8s pour l&apos;exploitation et la mise \u00e0 jour des conteneurs.","og_url":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/","og_site_name":"JFrog","article_publisher":"https:\/\/www.facebook.com\/artifrog","article_published_time":"2021-07-04T17:01:50+00:00","article_modified_time":"2021-07-04T17:06:15+00:00","og_image":[{"width":203,"height":148,"url":"https:\/\/speedmedia.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/https:\/\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png","type":"image\/png"}],"author":"giannit","twitter_card":"summary_large_image","twitter_title":"Diff\u00e9rentes Fa\u00e7on de Tenir le Cap avec vos Charts Helm","twitter_description":"L&apos;expert en charts Helm de JFrog partage les meilleures pratiques qu&apos;il a apprises en explorant les nombreux choix d&apos;automatisation de K8s pour l&apos;exploitation et la mise \u00e0 jour des conteneurs.","twitter_image":"https:\/\/jfrog.com\/wp-content\/uploads\/2019\/03\/Helm-Chart-Best-Practices_1200628-2.png","twitter_creator":"@jfrog","twitter_site":"@jfrog","twitter_misc":{"Written by":"giannit","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#article","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/"},"author":{"name":"giannit","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af"},"headline":"Tenir le Cap avec les Meilleures Pratiques pour les Charts Helm","datePublished":"2021-07-04T17:01:50+00:00","dateModified":"2021-07-04T17:06:15+00:00","mainEntityOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/"},"wordCount":2407,"publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png","keywords":["Meilleures Pratiques","helm","charts Helm"],"articleSection":["Artifactory","Non classifi\u00e9(e)"],"inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/","url":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/","name":"Meilleures Pratiques Charts Helm | JFrog Artifactory","isPartOf":{"@id":"https:\/\/jfrog.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage"},"image":{"@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png","datePublished":"2021-07-04T17:01:50+00:00","dateModified":"2021-07-04T17:06:15+00:00","description":"Pour la cr\u00e9ation de votre d\u00e9p\u00f4t de charts Helm, voici quelques bonnes pratiques \u00e0 appliquer pour guider votre d\u00e9ploiement Kubernetes et prendre les d\u00e9cisions appropri\u00e9es.","breadcrumb":{"@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#primaryimage","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2019\/03\/20125926\/HELM-203X148.png","width":203,"height":148,"caption":"Helm"},{"@type":"BreadcrumbList","@id":"https:\/\/jfrog.com\/fr\/blog\/helm-charts-best-practices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jfrog.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Tenir le Cap avec les Meilleures Pratiques pour les Charts Helm"}]},{"@type":"WebSite","@id":"https:\/\/jfrog.com\/fr\/#website","url":"https:\/\/jfrog.com\/fr\/","name":"JFrog","description":"Deliver Trusted Software Releases at Speed and Scale","publisher":{"@id":"https:\/\/jfrog.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jfrog.com\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/jfrog.com\/fr\/#organization","name":"JFrog","url":"https:\/\/jfrog.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","contentUrl":"https:\/\/speedmedia2.jfrog.com\/08612fe1-9391-4cf3-ac1a-6dd49c36b276\/media.jfrog.com\/wp-content\/uploads\/2025\/05\/27095207\/Logo.svg","width":74,"height":73,"caption":"JFrog"},"image":{"@id":"https:\/\/jfrog.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/artifrog","https:\/\/x.com\/jfrog","https:\/\/www.linkedin.com\/company\/455737","https:\/\/www.youtube.com\/channel\/UCh2hNg76zo3d1qQqTWIQxDg","https:\/\/www.wikidata.org\/wiki\/Q98608948"],"description":"We set out on our Liquid Software journey in 2008, with the mission to transform the way enterprises manage and release software updates. The world expects software to update continuously, securely, non-intrusively and without user intervention. This hyper-connected experience can only be enabled by automation with an end-to-end DevOps platform and a binary-centric focus. With this in mind, we\u2019ve developed the JFrog Platform, ushering in a new era of DevOps and DevSecOps standards that power continuous updates. More than a decade after our founding, with thousands of customers and millions of users globally, JFrog has become the \u201cDatabase of DevOps\u201d and the de-facto standard in release and update management.","legalName":"Jfrog, Inc.","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"1001","maxValue":"5000"}},{"@type":"Person","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/b554ace14b37da5eed75bbfc7dd1c1af","name":"giannit","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/jfrog.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fca3c188acf34ea94b72429eb16d496a8d0b50af476289bb5f51c8283e5c5b1c?s=96&d=mm&r=g","caption":"giannit"}}]}},"_links":{"self":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/78469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/users\/140"}],"replies":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/comments?post=78469"}],"version-history":[{"count":2,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/78469\/revisions"}],"predecessor-version":[{"id":78471,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/posts\/78469\/revisions\/78471"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media\/53290"}],"wp:attachment":[{"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/media?parent=78469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/categories?post=78469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jfrog.com\/fr\/wp-json\/wp\/v2\/tags?post=78469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}