From 2c77f8a690f61c51af2ee3a8a172468d3b5a4277 Mon Sep 17 00:00:00 2001 From: acarranoqovery Date: Wed, 10 Apr 2024 16:11:24 +0000 Subject: [PATCH] deploy: adda500e178586d29a8fde668f5a4467e1d55409 --- 02ec211a.2e4917a8.js | 2 + ...SE.txt => 02ec211a.2e4917a8.js.LICENSE.txt | 0 02ec211a.97310ecf.js | 2 - 404.html | 4 +- 4b542f80.cb6d204d.js | 2 - 4b542f80.cdcb3670.js | 2 + ...SE.txt => 4b542f80.cdcb3670.js.LICENSE.txt | 0 b479fc9a.a29edc02.js | 2 - b479fc9a.eb4bc907.js | 2 + ...SE.txt => b479fc9a.eb4bc907.js.LICENSE.txt | 0 b5eab6bb.06b51fa5.js | 2 + ...SE.txt => b5eab6bb.06b51fa5.js.LICENSE.txt | 0 b5eab6bb.3cd01eba.js | 2 - community/index.html | 4 +- components/index.html | 4 +- contact/index.html | 4 +- .../getting-started/basic-concepts/index.html | 4 +- docs/getting-started/deploy-my-app/index.html | 4 +- .../how-qovery-works/index.html | 4 +- docs/getting-started/index.html | 4 +- .../create-credentials/index.html | 4 +- .../cluster-managed-by-qovery/faq/index.html | 4 +- .../aws/cluster-managed-by-qovery/index.html | 4 +- .../infrastructure/index.html | 4 +- .../quickstart/index.html | 4 +- .../install-qovery/aws/index.html | 4 +- .../aws/self-managed-cluster/index.html | 4 +- .../cluster-managed-by-qovery/index.html | 4 +- .../quickstart/index.html | 4 +- .../install-qovery/azure/index.html | 4 +- .../azure/self-managed-cluster/index.html | 4 +- .../create-credentials/index.html | 4 +- .../gcp/cluster-managed-by-qovery/index.html | 4 +- .../quickstart/index.html | 4 +- .../install-qovery/gcp/index.html | 4 +- .../gcp/self-managed-cluster/index.html | 4 +- .../getting-started/install-qovery/index.html | 4 +- .../kubernetes/byok-config/index.html | 4 +- .../kubernetes/create-k8s-cluster/index.html | 4 +- .../install-qovery/kubernetes/faq/index.html | 4 +- .../install-qovery/kubernetes/index.html | 4 +- .../kubernetes/installation-aws/index.html | 4 +- .../kubernetes/quickstart/index.html | 4 +- .../kubernetes/requirements/index.html | 4 +- .../validate-installation/index.html | 4 +- .../create-credentials/index.html | 4 +- .../cluster-managed-by-qovery/faq/index.html | 4 +- .../cluster-managed-by-qovery/index.html | 4 +- .../quickstart/index.html | 4 +- .../install-qovery/scaleway/index.html | 4 +- .../scaleway/self-managed-cluster/index.html | 4 +- .../getting-started/what-is-qovery/index.html | 4 +- docs/getting-started/whats-next/index.html | 4 +- docs/index.html | 4 +- .../backup-and-restore/index.html | 4 +- .../encryption/index.html | 4 +- docs/security-and-compliance/gdpr/index.html | 4 +- docs/security-and-compliance/index.html | 4 +- docs/security-and-compliance/soc2/index.html | 4 +- docs/useful-resources/faq/index.html | 4 +- .../help-and-support/index.html | 4 +- docs/using-qovery/audit-logs/index.html | 4 +- .../advanced-settings/index.html | 4 +- .../application-health-checks/index.html | 4 +- .../configuration/application/index.html | 4 +- .../cloud-service-provider/index.html | 4 +- .../cluster-advanced-settings/index.html | 4 +- .../configuration/clusters/index.html | 4 +- .../configuration/cronjob/index.html | 4 +- .../configuration/database/index.html | 4 +- .../configuration/database/mongodb/index.html | 4 +- .../configuration/database/mysql/index.html | 4 +- .../database/postgresql/index.html | 4 +- .../configuration/database/redis/index.html | 4 +- .../configuration/deployment-rule/index.html | 4 +- .../environment-variable/index.html | 4 +- .../configuration/environment/index.html | 4 +- .../configuration/helm/index.html | 13 +- docs/using-qovery/configuration/index.html | 4 +- .../configuration/lifecycle-job/index.html | 4 +- .../configuration/object-storage/index.html | 4 +- .../organization/api-token/index.html | 4 +- .../container-registry/index.html | 4 +- .../git-repository-access/index.html | 4 +- .../organization/helm-repository/index.html | 4 +- .../configuration/organization/index.html | 4 +- .../organization/members-rbac/index.html | 4 +- .../configuration/project/index.html | 4 +- .../configuration/provider/index.html | 4 +- .../service-health-checks/index.html | 4 +- .../configuration/user-account/index.html | 4 +- .../deploying-with-auto-deploy/index.html | 4 +- .../deploying-with-ci-cd/index.html | 4 +- .../deployment/deployment-actions/index.html | 4 +- .../deployment/deployment-history/index.html | 4 +- .../deployment/deployment-pipeline/index.html | 4 +- .../deployment-strategies/index.html | 4 +- .../deployment/image-mirroring/index.html | 4 +- docs/using-qovery/deployment/index.html | 4 +- docs/using-qovery/deployment/logs/index.html | 4 +- .../index.html | 4 +- docs/using-qovery/index.html | 4 +- .../integration/api-integration/index.html | 4 +- .../integration/container-registry/index.html | 4 +- .../circle-ci/index.html | 4 +- .../github-actions/index.html | 4 +- .../gitlab-ci/index.html | 4 +- .../continuous-integration/index.html | 4 +- .../continuous-integration/jenkins/index.html | 4 +- .../integration/git-repository/index.html | 4 +- .../integration/helm-repository/index.html | 4 +- docs/using-qovery/integration/index.html | 4 +- .../integration/monitoring/datadog/index.html | 4 +- .../integration/monitoring/index.html | 4 +- .../monitoring/new-relic/index.html | 4 +- .../aws-secrets-manager/index.html | 4 +- .../secret-manager/doppler/index.html | 4 +- .../integration/secret-manager/index.html | 4 +- .../using-qovery/integration/slack/index.html | 4 +- .../integration/terraform/index.html | 4 +- .../integration/webhook/index.html | 4 +- docs/using-qovery/interface/cli/index.html | 4 +- docs/using-qovery/interface/index.html | 4 +- .../interface/rest-api/index.html | 4 +- .../interface/terraform-interface/index.html | 4 +- .../interface/web-interface/index.html | 4 +- docs/using-qovery/maintenance/index.html | 4 +- .../cluster-troubleshoot/index.html | 4 +- docs/using-qovery/troubleshoot/index.html | 4 +- .../index.html | 4 +- .../service-run-troubleshoot/index.html | 4 +- e1e1580b.5ec24049.js | 2 - e1e1580b.a32d0a8e.js | 2 + ...SE.txt => e1e1580b.a32d0a8e.js.LICENSE.txt | 0 .../continuous-integration/index.html | 4 +- guides/advanced/costs-control/index.html | 4 +- guides/advanced/deploy-api-gateway/index.html | 4 +- .../advanced/deploy-aws-services/index.html | 4 +- .../deploy-external-services/index.html | 4 +- guides/advanced/deploy-frontend/index.html | 4 +- guides/advanced/helm-chart/index.html | 4 +- guides/advanced/index.html | 4 +- guides/advanced/microservices/index.html | 4 +- guides/advanced/migration/index.html | 4 +- guides/advanced/monitoring/index.html | 4 +- guides/advanced/monorepository/index.html | 4 +- guides/advanced/production/index.html | 4 +- guides/advanced/seed-database/index.html | 4 +- guides/advanced/terraform/index.html | 4 +- .../use-preview-environments/index.html | 4 +- .../create-a-database/index.html | 4 +- guides/getting-started/debugging/index.html | 4 +- .../deploy-your-first-application/index.html | 4 +- guides/getting-started/index.html | 4 +- .../managing-environment-variables/index.html | 4 +- .../setting-custom-domain/index.html | 4 +- guides/index.html | 12 +- .../guide-amazon-web-services/index.html | 4 +- .../guide-google-cloud-platform/index.html | 4 +- .../guide-kubernetes/index.html | 4 +- .../guide-microsoft-azure/index.html | 4 +- .../guide-scaleway/index.html | 4 +- guides/installation-guide/index.html | 4 +- guides/tags/database-postgresql/index.html | 4 +- guides/tags/framework-rails/index.html | 4 +- guides/tags/index.html | 4 +- guides/tags/installation-guide-aws/index.html | 4 +- .../tags/installation-guide-azure/index.html | 4 +- guides/tags/installation-guide-gcp/index.html | 4 +- .../installation-guide-kubernetes/index.html | 4 +- .../installation-guide-scaleway/index.html | 4 +- guides/tags/language-javascript/index.html | 4 +- guides/tags/language-kotlin/index.html | 4 +- guides/tags/language-ruby/index.html | 4 +- guides/tags/language-rust/index.html | 4 +- guides/tags/technology-docker/index.html | 4 +- guides/tags/technology-github/index.html | 4 +- guides/tags/technology-helm/index.html | 4 +- guides/tags/technology-qovery/index.html | 12 +- guides/tags/technology-terraform/index.html | 4 +- guides/tags/type-guide/index.html | 4 +- guides/tags/type-tutorial/index.html | 12 +- .../aws-sqs-lambda-with-qovery/index.html | 4 +- .../aws-vpc-peering-with-qovery/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../cloudwatch-integration/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../data-seeding-in-postgres/index.html | 4 +- .../index.html | 4 +- .../deploy-temporal-on-kubernetes/index.html | 4 +- .../generate-qovery-api-client/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- guides/tutorial/grafana-install/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../how-to-write-a-dockerfile/index.html | 4 +- .../index.html | 4 +- guides/tutorial/index.html | 12 +- .../index.html | 16 +-- .../index.html | 4 +- .../index.html | 4 +- .../index.html | 11 +- .../index.html | 4 +- .../url-shortener-api-with-kotlin/index.html | 4 +- .../index.html | 4 +- .../use-aws-iam-roles-with-qovery/index.html | 4 +- .../working-with-git-submodules/index.html | 4 +- index.html | 4 +- mailing_list/index.html | 4 +- ...in.07b2f2dd.js => runtime~main.b87e637a.js | 2 +- server.bundle.js | 112 ++---------------- 227 files changed, 468 insertions(+), 566 deletions(-) create mode 100644 02ec211a.2e4917a8.js rename 02ec211a.97310ecf.js.LICENSE.txt => 02ec211a.2e4917a8.js.LICENSE.txt (100%) delete mode 100644 02ec211a.97310ecf.js delete mode 100644 4b542f80.cb6d204d.js create mode 100644 4b542f80.cdcb3670.js rename 4b542f80.cb6d204d.js.LICENSE.txt => 4b542f80.cdcb3670.js.LICENSE.txt (100%) delete mode 100644 b479fc9a.a29edc02.js create mode 100644 b479fc9a.eb4bc907.js rename b479fc9a.a29edc02.js.LICENSE.txt => b479fc9a.eb4bc907.js.LICENSE.txt (100%) create mode 100644 b5eab6bb.06b51fa5.js rename b5eab6bb.3cd01eba.js.LICENSE.txt => b5eab6bb.06b51fa5.js.LICENSE.txt (100%) delete mode 100644 b5eab6bb.3cd01eba.js delete mode 100644 e1e1580b.5ec24049.js create mode 100644 e1e1580b.a32d0a8e.js rename e1e1580b.5ec24049.js.LICENSE.txt => e1e1580b.a32d0a8e.js.LICENSE.txt (100%) rename runtime~main.07b2f2dd.js => runtime~main.b87e637a.js (98%) diff --git a/02ec211a.2e4917a8.js b/02ec211a.2e4917a8.js new file mode 100644 index 0000000000..6e88f50b3a --- /dev/null +++ b/02ec211a.2e4917a8.js @@ -0,0 +1,2 @@ +/*! For license information please see 02ec211a.2e4917a8.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{154:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return s})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return b})),n.d(t,"default",(function(){return m}));var o=n(1),a=n(9),i=(n(0),n(446)),r=n(453),l=(n(454),n(445)),c=n(450),s={last_modified_on:"2024-04-10",title:"Helm",description:"Learn how to configure your Helm on Qovery"},u={id:"using-qovery/configuration/helm",title:"Helm",description:"Learn how to configure your Helm on Qovery",source:"@site/docs/using-qovery/configuration/helm.md",permalink:"/docs/using-qovery/configuration/helm",sidebar:"docs",previous:{title:"Application",permalink:"/docs/using-qovery/configuration/application"},next:{title:"Databases",permalink:"/docs/using-qovery/configuration/database"}},b=[{value:"Deploying from a Git Repository",id:"deploying-from-a-git-repository",children:[]},{value:"Deploying from a Helm Repository",id:"deploying-from-a-helm-repository",children:[]},{value:"Create a Helm",id:"create-a-helm",children:[]},{value:"Deployment Management",id:"deployment-management",children:[]},{value:"Configuration",id:"configuration",children:[{value:"General",id:"general",children:[]},{value:"Values",id:"values",children:[]},{value:"Ports",id:"ports",children:[]},{value:"Domains",id:"domains",children:[]}]},{value:"Connecting from the internet",id:"connecting-from-the-internet",children:[{value:"Qovery provided domains",id:"qovery-provided-domains",children:[]},{value:"Custom domains",id:"custom-domains",children:[]}]},{value:"Logs",id:"logs",children:[]},{value:"Clone",id:"clone",children:[{value:"Advanced Settings",id:"advanced-settings",children:[]}]},{value:"Delete a Helm",id:"delete-a-helm",children:[]}],p={rightToc:b};function m(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(i.b)("wrapper",Object(o.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)(c.a,{name:"documentation",mdxType:"Assumptions"},Object(i.b)("p",null,"You have created an ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/"}),"Environment"),".")),Object(i.b)("p",null,"A ",Object(i.b)("strong",{parentName:"p"},"helm")," is one of the service types that can be deployed within an ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/"}),"Environment"),". Via the helm service you can deploy any helm chart from a git repository or helm repository directly on the kubernetes cluster."),Object(i.b)("p",null,"Qovery allows you to create and deploy helms from two different sources: Git Repository or Helm Repository"),Object(i.b)("h2",{id:"deploying-from-a-git-repository"},"Deploying from a Git Repository"),Object(i.b)("p",null,"In this configuration, Qovery will pull the chart from the chosen repository and install it on your kubernetes cluster."),Object(i.b)("h2",{id:"deploying-from-a-helm-repository"},"Deploying from a Helm Repository"),Object(i.b)("p",null,"In this configuration, Qovery will pull the chosen helm repository a chart and install it on your kubernetes cluster."),Object(i.b)("p",null,"To improve security and avoid deploying charts from non-authorized repositories, we have decided to restrict the list of Helm Repositories you can use during the setup process. Only an administrator with the right permissions can manage it from the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"Helm Repository Management page")),Object(i.b)("h2",{id:"create-a-helm"},"Create a Helm"),Object(i.b)(r.a,{headingDepth:3,mdxType:"Steps"},Object(i.b)("ol",null,Object(i.b)("li",null,Object(i.b)("p",null,'Go into the chosen environment and press the "New Service" button and then the "Create helm" button')),Object(i.b)("li",null,Object(i.b)("p",null,"Select the following fields:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Helm chart Name: give a name to your helm"),Object(i.b)("li",{parentName:"ul"},"Description (Optional): write a text to describe your helm service"),Object(i.b)("li",{parentName:"ul"},"Helm chart Source: Chose between Git Repository or Helm Repository, depending on the source location of your application")),Object(i.b)("p",null,"If you want to deploy a helm from a Git Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git Repository: Select the git provider and the git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Branch: Select branch that Qovery should use to deploy your helm"),Object(i.b)("li",{parentName:"ul"},"Root Helm Path: base folder in which the helm chart resides in your repository")),Object(i.b)("p",null,"If you want to deploy a helm from a Helm Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Helm repository: select the helm repository storing the helm chart. Note: only pre-configured registry are available in this list, check the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"Helm Repository Management page")," for more information.")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Chart name: the name of the helm to be deployed with this application (example: jenkins)")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Chart version: the version of the chart to be deployed with this application (example: 1.0.0). ")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Helm arguments: specify the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"https://helm.sh/docs/helm/helm_install/#options"}),"helm arguments")," to be used during the helm install/upgrade.")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Allow cluster-wide resources: Allow this chart to deploy resources outside of the environment namespace. You must have the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/members-rbac/"}),"full-access permissions")," on the cluster, the right is present by default in ",Object(i.b)("inlineCode",{parentName:"p"},"Admin"),", ",Object(i.b)("inlineCode",{parentName:"p"},"Devops")," and ",Object(i.b)("inlineCode",{parentName:"p"},"Owner")," roles. Example: if you want to create a new CRD or a new ClusterRole, check this flag."))),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Auto Deploy ")),Object(i.b)("p",null,"Available only if you have selected a git repository as helm source.\nSee the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),"Deploying with auto-deploy feature")," section.")),Object(i.b)("li",null,Object(i.b)("p",null,"By default, the ",Object(i.b)("inlineCode",{parentName:"p"},"values.yaml")," next to your ",Object(i.b)("inlineCode",{parentName:"p"},"chart.yaml")," is used to configure your helm chart but you can create an override in the next two sections."),Object(i.b)("p",null,"In the override as file section, define the location of the file containing the override you want to define for the values of this chart."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Git Repository ")),Object(i.b)("p",null,"If you want to override it from another already existing values file from a Git Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Branch: Select branch that Qovery should use to deploy your helm"),Object(i.b)("li",{parentName:"ul"},"Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Raw YAML ")),Object(i.b)("p",null,"If you want to override it with a raw yaml you will have to click on ",Object(i.b)("inlineCode",{parentName:"p"},"Create override"),". A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure."),Object(i.b)(l.a,{type:"warning",mdxType:"Alert"},Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git repository source is recommended as the raw yaml is not versioned."),Object(i.b)("li",{parentName:"ul"},"On both file types you can use your environment variables in your chart. Check ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),"the section below"),".")))),Object(i.b)("li",null,Object(i.b)("p",null,"if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the ",Object(i.b)("inlineCode",{parentName:"p"},"--set"),", ",Object(i.b)("inlineCode",{parentName:"p"},"--set-string")," or ",Object(i.b)("inlineCode",{parentName:"p"},"--set-json")," arguments."),Object(i.b)("p",null,"Add a new variable by declaring:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Variable: the variable name"),Object(i.b)("li",{parentName:"ul"},"Value type: ",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"Select ",Object(i.b)("inlineCode",{parentName:"li"},"Generic")," to pass configuration from the command line"),Object(i.b)("li",{parentName:"ul"},"Select ",Object(i.b)("inlineCode",{parentName:"li"},"String")," if you want to pass a string type (and avoid weird numeric conversions like 021341 interpreted as a number and thus the 0 is removed)"),Object(i.b)("li",{parentName:"ul"},"Select ",Object(i.b)("inlineCode",{parentName:"li"},"Json")," to set json values (scalars/objects/arrays) from the command line"))),Object(i.b)("li",{parentName:"ul"},"Value")),Object(i.b)(l.a,{type:"warning",mdxType:"Alert"},Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument."),Object(i.b)("li",{parentName:"ul"},"You can use your environment variables in your chart. Check ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),"the section below"),". ")))),Object(i.b)("li",null,Object(i.b)("p",null,"You will find a recap of your helm setup and you can now decide to:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Go back to one of the previous steps and change your helm settings (1)"),Object(i.b)("li",{parentName:"ul"},"Create your helm without deploying it (2)"),Object(i.b)("li",{parentName:"ul"},"Create and deploy your helm (3)")),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/helm/helm_creation_recap.png",alt:"Helm"}))))),Object(i.b)("h2",{id:"deployment-management"},"Deployment Management"),Object(i.b)("p",null,"Have a look at the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/"}),"Deployment Management")," section for more information."),Object(i.b)("h2",{id:"configuration"},"Configuration"),Object(i.b)("p",null,"Once created, you can access the configuration of a helm at any time via the Settings tab available on the helm section"),Object(i.b)("p",null,"You can find below the description of each of the tabs available in this section"),Object(i.b)("h3",{id:"general"},"General"),Object(i.b)("p",null,"General settings section allows you to set up the name and the source of your helm (git repository or helm repository) ."),Object(i.b)("h4",{id:"git-repository"},"Git Repository"),Object(i.b)("p",null,"If your heml is from a git repository, within this section you can:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Modify the branch that Qovery should use for deploying your application"),Object(i.b)("li",{parentName:"ul"},"Modify ",Object(i.b)("inlineCode",{parentName:"li"},"Root Helm Path")," - base folder in which the helm chart resides in your repository")),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,"Qovery supports mono repositories. ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/guides/advanced/monorepository/"}),"See our advanced guide for more details."))),Object(i.b)(l.a,{type:"warning",mdxType:"Alert"},Object(i.b)("p",null,"If your repository contains private submodules using SSH protocol, you will need to add a secret beginning with GIT",Object(i.b)("em",{parentName:"p"},"SSH_KEY"),", containing a private SSH key with access rights to your sumbodules repositories."),Object(i.b)("p",null,"Secret names examples:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"GIT_SSH_KEY_GITHUB"),Object(i.b)("li",{parentName:"ul"},"GIT_SSH_KEY_GITLAB"),Object(i.b)("li",{parentName:"ul"},"GIT_SSH_KEY_MYAPP"))),Object(i.b)("h4",{id:"helm-repository"},"Helm Repository"),Object(i.b)("p",null,"If your helm is deployed from a helm repository, within this section you can modify:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Helm repository: select the helm repository storing the helm chart. You can add a new container registry by clicking on ",Object(i.b)("inlineCode",{parentName:"li"},"New helm repository"),"."),Object(i.b)("li",{parentName:"ul"},"Chart name: the name of the helm to be deployed with this application (example: jenkins)"),Object(i.b)("li",{parentName:"ul"},"Chart version: the version of the chart to be deployed with this application (example: 1.0.0). ")),Object(i.b)("h4",{id:"arguments"},"Arguments"),Object(i.b)("p",null,"For both kind of helm source, within this section yoiu can modify:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Helm arguments: specify the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"https://helm.sh/docs/intro/using_helm/#helpful-options-for-installupgraderollback"}),"helm arguments")," to be used during the helm install/upgrade."),Object(i.b)("li",{parentName:"ul"},"Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.")),Object(i.b)("h4",{id:"auto-deploy"},"Auto Deploy"),Object(i.b)("p",null,"See the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),"Deploying with auto-deploy feature")," section."),Object(i.b)("h3",{id:"values"},"Values"),Object(i.b)("p",null,"Within this section you can modify the values override defined within the creation flow."),Object(i.b)("h4",{id:"override-as-file"},"Override as file"),Object(i.b)("p",null,"Define the location of the file containing the override you want to define for the values of this chart."),Object(i.b)("p",null,"Select the source of your override:"),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Git Repository "),"\nIf you want to override it from another already existing values file from a Git Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Branch: Select branch that Qovery should use to deploy your helm"),Object(i.b)("li",{parentName:"ul"},"Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Raw YAML "),"\nIf you want to override it with a raw yaml you will have to click on ",Object(i.b)("inlineCode",{parentName:"p"},"Create override"),". A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure."),Object(i.b)("p",null,"On both file types you can use your environment variables in your chart. Check ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),"the section below"),"."),Object(i.b)("h4",{id:"override-as-arguments"},"Override as arguments"),Object(i.b)("p",null,"if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the ",Object(i.b)("inlineCode",{parentName:"p"},"--set"),", ",Object(i.b)("inlineCode",{parentName:"p"},"--set-string")," or ",Object(i.b)("inlineCode",{parentName:"p"},"--set-json")," arguments."),Object(i.b)("p",null,"Add a new variable by declaring:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Override type: select the type of your variable. For more information, have a look at the Helm documentation"),Object(i.b)("li",{parentName:"ul"},"Variable: the variable name"),Object(i.b)("li",{parentName:"ul"},"Value")),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},"You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument."),Object(i.b)("p",null,"You can use your environment variables in your chart. Check ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),"the section below"),"."),Object(i.b)("h4",{id:"using-the-environment-variables-in-your-chart"},"Using the environment variables in your chart"),Object(i.b)("p",null,"Qovery allows you to use the following macros within your override file. These macros will be automatically replaced by Qovery during the deployment phase, allowing you to access additional functionalities."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Access to the Qovery environment variables ")),Object(i.b)("p",null,"Macro: ",Object(i.b)("inlineCode",{parentName:"p"},"qovery.env.")),Object(i.b)("p",null,"It allows you to access the value of an environment variable or secret stored within Qovery. This is helpful when your deployed helm chart needs to access a secret or an environment variable available in Qovery."),Object(i.b)("p",null,"Example: "),Object(i.b)("p",null,"On Qovery we have created a database and created two aliases for the database url (DB_URL) and, the database password (DB_PASSWORD). Here an example on how the helm chart can access these environment variables and let your service point to the right database:"),Object(i.b)("pre",null,Object(i.b)("code",Object(o.a)({parentName:"pre"},{className:"language-yaml"}),"postgres:\n url: qovery.env.DB_URL\n password: qovery.env.DB_PASSWORD\n")),Object(i.b)("h3",{id:"ports"},"Ports"),Object(i.b)("p",null,"Within this section you can define the port exposed publicly.\nYou can edit the existing ports or declare new ones by specifying:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Service name: this is the kubernetes service name in your helm chart"),Object(i.b)("li",{parentName:"ul"},"Namespace (only if Allow cluster-wide resources was enabled): this is the kubernetes namespace used by your helm chart to deploy the pods behind the chosen service"),Object(i.b)("li",{parentName:"ul"},"Service port: this is the port exposed internally by your service for the other services"),Object(i.b)("li",{parentName:"ul"},"Protocol: you can select the protocol used by your service. Today Qovery supports the following protocols:",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"HTTPS (Select this protocol if you need to run Websockets)"),Object(i.b)("li",{parentName:"ul"},"gRPC"))),Object(i.b)("li",{parentName:"ul"},"External port: it is the port that can be used to access this service over the internet (when exposed publicly). Note that for HTTP and gRPC the port is set by default to 443."),Object(i.b)("li",{parentName:"ul"},"Port Name: it is the name assigned to the port. When multiple ports are exposed publicly, its value is used to route the traffic to the right port based on the called subdomain (which will contain the port name value). Since each port is exposed on the port 443, having a different subdomain is the only way to have multiple ports exposed over the internet. If not set, the default value is ",Object(i.b)("inlineCode",{parentName:"li"},"p")," (see ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"#qovery-provided-domains"}),"Qovery Provided Domain section")," for more information)")),Object(i.b)("h4",{id:"important-informations"},"Important Informations"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Connections on public ports are automatically closed after 60 seconds. If you want to implement long living connection (like for websockets) please make sure to use the rigth ingress timeouts in the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/advanced-settings/#network-settings"}),"advanced settings section"))),Object(i.b)("h3",{id:"domains"},"Domains"),Object(i.b)("p",null,"Within this section you can customize the domain used to reach your helm services. "),Object(i.b)("p",null,"You can customize the domain of your helm services in different ways, depending on what you want to achieve:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"You want to use your own domain for your helm services"),Object(i.b)("li",{parentName:"ul"},"You want to modify the subdomain assigned to your helm services by Qovery (i.e. change ",Object(i.b)("inlineCode",{parentName:"li"},"p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh")," into ",Object(i.b)("inlineCode",{parentName:"li"},"my-app-domain.za8ad0657.bool.sh"),").")),Object(i.b)("p",null,"In both cases, you can assign the new custom domain to your helm services press the ",Object(i.b)("inlineCode",{parentName:"p"},"Add Domain")," button. "),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/application/app-16.png",alt:"Application Domains"})),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,"This configuration will be ",Object(i.b)("strong",{parentName:"p"},"automatically removed")," on every cloned environment or preview environment in order to avoid domain collision.")),Object(i.b)("h4",{id:"configuring-your-own-domain"},"Configuring your own domain"),Object(i.b)("p",null,"Once the domain is added within the Qovery console (Example: mydomain.com), you need to configure within your DNS two ",Object(i.b)("inlineCode",{parentName:"p"},"CNAME")," records pointing to the domain provided by Qovery, as shown in the UI (example: mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud and *.mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud). "),Object(i.b)("p",null,"Having a wildcard domain (example: *.mydomain.com) configured on your DNS will avoid you to modify the Qovery setup every time you want to add a new subdomain. If ",Object(i.b)("inlineCode",{parentName:"p"},"wildcard")," is not supported by your DNS provider, you will have to configure each subdomain manually."),Object(i.b)("p",null,"If the service needs to expose more than one port publicly, you can define a dedicated subdomain to redirect the traffic on the right port by setting the \u201cPort Name\u201d value within the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#ports"}),"port settings"),"."),Object(i.b)("p",null,"From this point, Qovery will automatically handle the TLS/SSL certificate creation and renewal for the configured domain."),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/application/custom-domain.png",alt:"Custom Domain"})),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Special case - CDN in proxy mode ")),Object(i.b)("p",null,"If your service is behind a CDN using a ",Object(i.b)("inlineCode",{parentName:"p"},"proxy mode"),' (i.e. the traffic is routed through the CDN to Qovery), make sure to disable the option "Generate certificate" on the domain setup. Since the certificate of your domain is directly managed by the CDN, Qovery won\'t be able to do that for you and it will raise warnings on your application status.'),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/application/cdn-proxy.png",alt:"CDN Proxy"})),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/guides/getting-started/setting-custom-domain/"}),"We prepared a guide and video tutorial that explains how to set up your custom domain."))),Object(i.b)("h4",{id:"change-the-auto-assigned-sub-domain"},"Change the auto assigned sub-domain"),Object(i.b)("p",null,"You can specify a different sub-domain for your helm services as long as it belongs to the assigned cluster domain (see ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#qovery-provided-domains"}),"Qovery provided domains"),").\nExample: "),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"your current domain is zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh (so your assigned cluster domain is ",Object(i.b)("inlineCode",{parentName:"li"},"za8ad0659.bool.sh"),")"),Object(i.b)("li",{parentName:"ul"},"you can enter a new custom domain ",Object(i.b)("inlineCode",{parentName:"li"},"myfrontend.za8ad0659.bool.sh")," (since it is a subdomain of the cluster domain)")),Object(i.b)("p",null,"The helm services will now be accessible from both the default and the new custom domain."),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,"Qovery does not check collision in the domain declaration. Make sure you assign a unique subdomain within your cluster.")),Object(i.b)("h2",{id:"connecting-from-the-internet"},"Connecting from the internet"),Object(i.b)("p",null,"Your helm services can be reached from the internet by publicly exposing at least one of its ports (See the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#ports"}),"Ports")," section to know more). Once this is done, Qovery will generate for you a domain to reach your application from the internet. You can also customize the domain assigned to your application and manage by yourself this assignment via the ",Object(i.b)("inlineCode",{parentName:"p"},"Domain")," section."),Object(i.b)("h3",{id:"qovery-provided-domains"},"Qovery provided domains"),Object(i.b)("p",null,"For each port publicly exposed, a domain is automatically assigned by Qovery to your helm services. Qovery will manage for you the networking and the TLS configuration for these domains. "),Object(i.b)("p",null,"Example: ",Object(i.b)("inlineCode",{parentName:"p"},"p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh")," or ",Object(i.b)("inlineCode",{parentName:"p"},"-p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh")," for helm services."),Object(i.b)("p",null,"Note:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"each service deployed on the same cluster will have the same root domain assigned (example: ",Object(i.b)("inlineCode",{parentName:"li"},"za8ad0657.bool.sh"),")"),Object(i.b)("li",{parentName:"ul"},"the first characters of the domain (before the ",Object(i.b)("inlineCode",{parentName:"li"},"-"),") is based on the portName given to the port associated with this domain (See the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"#ports"}),"port section"),")"),Object(i.b)("li",{parentName:"ul"},"a default domain (without the portName) is assigned to the ",Object(i.b)("inlineCode",{parentName:"li"},"default port"),"(See the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"#ports"}),"port section"),"). Example ",Object(i.b)("inlineCode",{parentName:"li"},"zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh"))),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"Special Case - Preview Environment"),"\nFor each port exposed publicly, an additional domain will be created with the following pattern ",Object(i.b)("inlineCode",{parentName:"p"},"portName-prId-srvName-envSourceName.cluster_domain"),":"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"portName: is the port name, as explained above"),Object(i.b)("li",{parentName:"ul"},"prID: is the id of the PR that has generated the preview environment"),Object(i.b)("li",{parentName:"ul"},"srvName: is the name of the service"),Object(i.b)("li",{parentName:"ul"},"envSourceName: is the name of the blueprint environment that has created the current preview environment")),Object(i.b)("p",null,"domain example: ",Object(i.b)("inlineCode",{parentName:"p"},"p80-123-frontend-blueprint.za8ad0657.bool.sh")),Object(i.b)("h3",{id:"custom-domains"},"Custom domains"),Object(i.b)("p",null,"If you prefer to assign your own domain to the helm services, have a look at the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#domains"}),"Domain section")," to know more."),Object(i.b)("h2",{id:"logs"},"Logs"),Object(i.b)("p",null,"To learn how to display your helm logs, navigate to ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/logs/#live-logs"}),"logs section")),Object(i.b)("h2",{id:"clone"},"Clone"),Object(i.b)("p",null,"You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment."),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/clone_service.png",alt:"Clone Service"})),Object(i.b)("p",null,"The target environment can be the same as the current environment or even another one in a completely different project."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Important information ")),Object(i.b)("p",null,"Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"same environment:",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"custom domain: this setup is not copied into the new service (to avoid collision)"))),Object(i.b)("li",{parentName:"ul"},"another environment:",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"custom domain: this setup is not copied into the new service (to avoid collision)"),Object(i.b)("li",{parentName:"ul"},"environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)"),Object(i.b)("li",{parentName:"ul"},"deployment pipeline: stage setup is not copied (since the target stage might not exist)"),Object(i.b)("li",{parentName:"ul"},"number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)")))),Object(i.b)("p",null,"Please check the configuration of the new service before deploying it."),Object(i.b)("h3",{id:"advanced-settings"},"Advanced Settings"),Object(i.b)("p",null,"You can further customize the service behaviour via the service advanced settings. Check ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/advanced-settings/"}),"this documentation")," to know more."),Object(i.b)("h2",{id:"delete-a-helm"},"Delete a Helm"),Object(i.b)(r.a,{headingDepth:3,mdxType:"Steps"},Object(i.b)("ol",null,Object(i.b)("li",null,Object(i.b)("p",null,"Choose your helm")),Object(i.b)("li",null,Object(i.b)("p",null,"In the helm overview, click on the ",Object(i.b)("inlineCode",{parentName:"p"},"3 dots")," button and remove the helm.")))))}m.isMDXComponent=!0},444:function(e,t,n){var o;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=a.a.createContext({}),u=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l({},t,{},e)),n},b=function(e){var t=u(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=Object(o.forwardRef)((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,r=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),b=u(n),m=o,d=b["".concat(r,".").concat(m)]||b[m]||p[m]||i;return n?a.a.createElement(d,l({ref:t},s,{components:n})):a.a.createElement(d,l({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var s=2;s1?arguments[1]:void 0,n),c=r>2?arguments[2]:void 0,s=void 0===c?n:a(c,n);s>l;)t[l++]=e;return t}},449:function(e,t,n){var o=n(28).f,a=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in a||n(10)&&o(a,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var o=n(0),a=n.n(o),i=n(445);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(i.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var o=n(1),a=n(0),i=n.n(a),r=n(39),l=n(455),c=n(20),s=n.n(c);t.a=function(e){var t,n=e.to,c=e.href,u=n||c,b=Object(l.a)(u),p=Object(a.useRef)(!1),m=s.a.canUseIntersectionObserver;return Object(a.useEffect)((function(){return!m&&b&&window.docusaurus.prefetch(u),function(){m&&t&&t.disconnect()}}),[u,m,b]),u&&b?i.a.createElement(r.b,Object(o.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(u),p.current=!0)},innerRef:function(e){var n,o;m&&e&&b&&(n=e,o=function(){window.docusaurus.prefetch(u)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),o())}))}))).observe(n))},to:u})):i.a.createElement("a",Object(o.a)({},e,{href:u}))}},452:function(e,t,n){"use strict";var o=n(456),a=n(51);function i(e,t){return t.encode?t.strict?o(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,o){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===o[e]&&(o[e]={}),o[e][t[1]]=n):o[e]=n};case"bracket":return function(e,n,o){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==o[e]?o[e]=[].concat(o[e],n):o[e]=[n]:o[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),o=Object.create(null);return"string"!=typeof e?o:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),i=t.length>0?t.join("="):void 0;i=void 0===i?null:decodeURIComponent(i),n(decodeURIComponent(a),i,o)})),Object.keys(o).sort().reduce((function(e,t){var n=o[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):o},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,o){return null===n?[i(t,e),"[",o,"]"].join(""):[i(t,e),"[",i(o,e),"]=",i(n,e)].join("")};case"bracket":return function(t,n){return null===n?i(t,e):[i(t,e),"[]=",i(n,e)].join("")};default:return function(t,n){return null===n?i(t,e):[i(t,e),"=",i(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(o){var a=e[o];if(void 0===a)return"";if(null===a)return i(o,t);if(Array.isArray(a)){var r=[];return a.slice().forEach((function(e){void 0!==e&&r.push(n(o,e,r.length))})),r.join("&")}return i(o,t)+"="+i(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var o=n(0),a=n.n(o),i=(n(444),n(452)),r=n.n(i);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,i=e.hideFeedbackQuestion,l="undefined"!=typeof window?window.location:null,c={title:"Tutorial on "+l+" failed",body:"The tutorial on:\n\n"+l+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+r.a.stringify(c),u=Object(o.useState)(null),b=u[0],p=u[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!i&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var o=n(0),a=n.n(o),i=n(451),r=n(444),l=n.n(r);n(134);t.a=function(e){var t=e.children,n=e.className,o=e.badge,r=e.leftIcon,c=e.rightIcon,s=e.size,u=e.target,b=e.to,p=l()("jump-to","jump-to--"+s,n),m=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},r&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+r})),a.a.createElement("div",{className:"jump-to--main"},o?a.a.createElement("span",{className:"badge badge--primary badge--right"},o):"",t),a.a.createElement("div",{className:"jump-to--right"},a.a.createElement("i",{className:"feather icon-"+(c||"chevron-right")+" arrow"}))));return u?a.a.createElement("a",{href:b,target:u,className:p},m):a.a.createElement(i.a,{to:b,className:p},m)}},455:function(e,t,n){"use strict";function o(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return o}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/02ec211a.97310ecf.js.LICENSE.txt b/02ec211a.2e4917a8.js.LICENSE.txt similarity index 100% rename from 02ec211a.97310ecf.js.LICENSE.txt rename to 02ec211a.2e4917a8.js.LICENSE.txt diff --git a/02ec211a.97310ecf.js b/02ec211a.97310ecf.js deleted file mode 100644 index 8353dc0260..0000000000 --- a/02ec211a.97310ecf.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 02ec211a.97310ecf.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{154:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return s})),n.d(t,"metadata",(function(){return b})),n.d(t,"rightToc",(function(){return u})),n.d(t,"default",(function(){return m}));var o=n(1),a=n(9),i=(n(0),n(446)),r=n(453),l=(n(454),n(445)),c=n(450),s={last_modified_on:"2024-02-28",title:"Helm",description:"Learn how to configure your Helm on Qovery"},b={id:"using-qovery/configuration/helm",title:"Helm",description:"Learn how to configure your Helm on Qovery",source:"@site/docs/using-qovery/configuration/helm.md",permalink:"/docs/using-qovery/configuration/helm",sidebar:"docs",previous:{title:"Application",permalink:"/docs/using-qovery/configuration/application"},next:{title:"Databases",permalink:"/docs/using-qovery/configuration/database"}},u=[{value:"Deploying from a Git Repository",id:"deploying-from-a-git-repository",children:[]},{value:"Deploying from a Helm Repository",id:"deploying-from-a-helm-repository",children:[]},{value:"Create a Helm",id:"create-a-helm",children:[]},{value:"Deployment Management",id:"deployment-management",children:[]},{value:"Configuration",id:"configuration",children:[{value:"General",id:"general",children:[]},{value:"Values",id:"values",children:[]},{value:"Ports",id:"ports",children:[]},{value:"Domains",id:"domains",children:[]}]},{value:"Connecting from the internet",id:"connecting-from-the-internet",children:[{value:"Qovery provided domains",id:"qovery-provided-domains",children:[]},{value:"Custom domains",id:"custom-domains",children:[]}]},{value:"Logs",id:"logs",children:[]},{value:"Clone",id:"clone",children:[{value:"Advanced Settings",id:"advanced-settings",children:[]}]},{value:"Delete a Helm",id:"delete-a-helm",children:[]}],p={rightToc:u};function m(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(i.b)("wrapper",Object(o.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)(c.a,{name:"documentation",mdxType:"Assumptions"},Object(i.b)("p",null,"You have created an ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/"}),"Environment"),".")),Object(i.b)("p",null,"A ",Object(i.b)("strong",{parentName:"p"},"helm")," is one of the service types that can be deployed within an ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/"}),"Environment"),". Via the helm service you can deploy any helm chart from a git repository or helm repository directly on the kubernetes cluster."),Object(i.b)("p",null,"Qovery allows you to create and deploy helms from two different sources: Git Repository or Helm Repository"),Object(i.b)("h2",{id:"deploying-from-a-git-repository"},"Deploying from a Git Repository"),Object(i.b)("p",null,"In this configuration, Qovery will pull the chart from the chosen repository and install it on your kubernetes cluster."),Object(i.b)("h2",{id:"deploying-from-a-helm-repository"},"Deploying from a Helm Repository"),Object(i.b)("p",null,"In this configuration, Qovery will pull the chosen helm repository a chart and install it on your kubernetes cluster."),Object(i.b)("p",null,"To improve security and avoid deploying charts from non-authorized repositories, we have decided to restrict the list of Helm Repositories you can use during the setup process. Only an administrator with the right permissions can manage it from the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"Helm Repository Management page")),Object(i.b)("h2",{id:"create-a-helm"},"Create a Helm"),Object(i.b)(r.a,{headingDepth:3,mdxType:"Steps"},Object(i.b)("ol",null,Object(i.b)("li",null,Object(i.b)("p",null,'Go into the chosen environment and press the "New Service" button and then the "Create helm" button')),Object(i.b)("li",null,Object(i.b)("p",null,"Select the following fields:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Helm chart Name: give a name to your helm"),Object(i.b)("li",{parentName:"ul"},"Description (Optional): write a text to describe your helm service"),Object(i.b)("li",{parentName:"ul"},"Helm chart Source: Chose between Git Repository or Helm Repository, depending on the source location of your application")),Object(i.b)("p",null,"If you want to deploy a helm from a Git Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git Repository: Select the git provider and the git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Branch: Select branch that Qovery should use to deploy your helm"),Object(i.b)("li",{parentName:"ul"},"Root Helm Path: base folder in which the helm chart resides in your repository")),Object(i.b)("p",null,"If you want to deploy a helm from a Helm Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Helm repository: select the helm repository storing the helm chart. Note: only pre-configured registry are available in this list, check the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"Helm Repository Management page")," for more information.")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Chart name: the name of the helm to be deployed with this application (example: jenkins)")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Chart version: the version of the chart to be deployed with this application (example: 1.0.0). ")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Helm arguments: specify the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"https://helm.sh/docs/helm/helm_install/#options"}),"helm arguments")," to be used during the helm install/upgrade.")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.")),Object(i.b)("li",{parentName:"ul"},Object(i.b)("p",{parentName:"li"},"Allow cluster-wide resources: Allow this chart to deploy resources outside of the environment namespace. You must have the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/members-rbac/"}),"full-access permissions")," on the cluster, the right is present by default in ",Object(i.b)("inlineCode",{parentName:"p"},"Admin"),", ",Object(i.b)("inlineCode",{parentName:"p"},"Devops")," and ",Object(i.b)("inlineCode",{parentName:"p"},"Owner")," roles. Example: if you want to create a new CRD or a new ClusterRole, check this flag."))),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Auto Deploy ")),Object(i.b)("p",null,"Available only if you have selected a git repository as helm source.\nSee the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),"Deploying with auto-deploy feature")," section.")),Object(i.b)("li",null,Object(i.b)("p",null,"By default, the ",Object(i.b)("inlineCode",{parentName:"p"},"values.yaml")," next to your ",Object(i.b)("inlineCode",{parentName:"p"},"chart.yaml")," is used to configure your helm chart but you can create an override in the next two sections."),Object(i.b)("p",null,"In the override as file section, define the location of the file containing the override you want to define for the values of this chart."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Git Repository ")),Object(i.b)("p",null,"If you want to override it from another already existing values file from a Git Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Branch: Select branch that Qovery should use to deploy your helm"),Object(i.b)("li",{parentName:"ul"},"Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Raw YAML ")),Object(i.b)("p",null,"If you want to override it with a raw yaml you will have to click on ",Object(i.b)("inlineCode",{parentName:"p"},"Create override"),". A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure."),Object(i.b)(l.a,{type:"warning",mdxType:"Alert"},Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git repository source is recommended as the raw yaml is not versioned."),Object(i.b)("li",{parentName:"ul"},"On both file types you can add ",Object(i.b)("inlineCode",{parentName:"li"},"Qovery Macros")," to add more functionalities to your helm deployment. Check ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/helm/#qovery-macros"}),"the section below")," before moving forward with your helm chart creation.")))),Object(i.b)("li",null,Object(i.b)("p",null,"if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the ",Object(i.b)("inlineCode",{parentName:"p"},"--set"),", ",Object(i.b)("inlineCode",{parentName:"p"},"--set-string")," or ",Object(i.b)("inlineCode",{parentName:"p"},"--set-json")," arguments."),Object(i.b)("p",null,"Add a new variable by declaring:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Variable: the variable name"),Object(i.b)("li",{parentName:"ul"},"Value type: ",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"Select ",Object(i.b)("inlineCode",{parentName:"li"},"Generic")," to pass configuration from the command line"),Object(i.b)("li",{parentName:"ul"},"Select ",Object(i.b)("inlineCode",{parentName:"li"},"String")," if you want to pass a string type (and avoid weird numeric conversions like 021341 interpreted as a number and thus the 0 is removed)"),Object(i.b)("li",{parentName:"ul"},"Select ",Object(i.b)("inlineCode",{parentName:"li"},"Json")," to set json values (scalars/objects/arrays) from the command line"))),Object(i.b)("li",{parentName:"ul"},"Value")),Object(i.b)(l.a,{type:"warning",mdxType:"Alert"},Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument."),Object(i.b)("li",{parentName:"ul"},"You can add ",Object(i.b)("inlineCode",{parentName:"li"},"Qovery Macros")," to add more functionalities to your helm deployment. Check ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/helm/#qovery-macros"}),"the section below")," before moving forward with your helm chart creation. ")))),Object(i.b)("li",null,Object(i.b)("p",null,"You will find a recap of your helm setup and you can now decide to:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Go back to one of the previous steps and change your helm settings (1)"),Object(i.b)("li",{parentName:"ul"},"Create your helm without deploying it (2)"),Object(i.b)("li",{parentName:"ul"},"Create and deploy your helm (3)")),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/helm/helm_creation_recap.png",alt:"Helm"}))))),Object(i.b)("h2",{id:"deployment-management"},"Deployment Management"),Object(i.b)("p",null,"Have a look at the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/"}),"Deployment Management")," section for more information."),Object(i.b)("h2",{id:"configuration"},"Configuration"),Object(i.b)("p",null,"Once created, you can access the configuration of a helm at any time via the Settings tab available on the helm section"),Object(i.b)("p",null,"You can find below the description of each of the tabs available in this section"),Object(i.b)("h3",{id:"general"},"General"),Object(i.b)("p",null,"General settings section allows you to set up the name and the source of your helm (git repository or helm repository) ."),Object(i.b)("h4",{id:"git-repository"},"Git Repository"),Object(i.b)("p",null,"If your heml is from a git repository, within this section you can:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Modify the branch that Qovery should use for deploying your application"),Object(i.b)("li",{parentName:"ul"},"Modify ",Object(i.b)("inlineCode",{parentName:"li"},"Root Helm Path")," - base folder in which the helm chart resides in your repository")),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,"Qovery supports mono repositories. ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/guides/advanced/monorepository/"}),"See our advanced guide for more details."))),Object(i.b)(l.a,{type:"warning",mdxType:"Alert"},Object(i.b)("p",null,"If your repository contains private submodules using SSH protocol, you will need to add a secret beginning with GIT",Object(i.b)("em",{parentName:"p"},"SSH_KEY"),", containing a private SSH key with access rights to your sumbodules repositories."),Object(i.b)("p",null,"Secret names examples:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"GIT_SSH_KEY_GITHUB"),Object(i.b)("li",{parentName:"ul"},"GIT_SSH_KEY_GITLAB"),Object(i.b)("li",{parentName:"ul"},"GIT_SSH_KEY_MYAPP"))),Object(i.b)("h4",{id:"helm-repository"},"Helm Repository"),Object(i.b)("p",null,"If your helm is deployed from a helm repository, within this section you can modify:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Helm repository: select the helm repository storing the helm chart. You can add a new container registry by clicking on ",Object(i.b)("inlineCode",{parentName:"li"},"New helm repository"),"."),Object(i.b)("li",{parentName:"ul"},"Chart name: the name of the helm to be deployed with this application (example: jenkins)"),Object(i.b)("li",{parentName:"ul"},"Chart version: the version of the chart to be deployed with this application (example: 1.0.0). ")),Object(i.b)("h4",{id:"arguments"},"Arguments"),Object(i.b)("p",null,"For both kind of helm source, within this section yoiu can modify:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Helm arguments: specify the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"https://helm.sh/docs/intro/using_helm/#helpful-options-for-installupgraderollback"}),"helm arguments")," to be used during the helm install/upgrade."),Object(i.b)("li",{parentName:"ul"},"Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.")),Object(i.b)("h4",{id:"auto-deploy"},"Auto Deploy"),Object(i.b)("p",null,"See the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),"Deploying with auto-deploy feature")," section."),Object(i.b)("h3",{id:"values"},"Values"),Object(i.b)("p",null,"Within this section you can modify the values override defined within the creation flow."),Object(i.b)("h4",{id:"override-as-file"},"Override as file"),Object(i.b)("p",null,"Define the location of the file containing the override you want to define for the values of this chart."),Object(i.b)("p",null,"Select the source of your override:"),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Git Repository "),"\nIf you want to override it from another already existing values file from a Git Repository you will have to select:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket)."),Object(i.b)("li",{parentName:"ul"},"Branch: Select branch that Qovery should use to deploy your helm"),Object(i.b)("li",{parentName:"ul"},"Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Raw YAML "),"\nIf you want to override it with a raw yaml you will have to click on ",Object(i.b)("inlineCode",{parentName:"p"},"Create override"),". A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure."),Object(i.b)("p",null,"On both file types you can add ",Object(i.b)("inlineCode",{parentName:"p"},"Qovery Macros")," to add more functionalities to your helm deployment. Check ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/#qovery-macros"}),"the section below"),"."),Object(i.b)("h4",{id:"override-as-arguments"},"Override as arguments"),Object(i.b)("p",null,"if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the ",Object(i.b)("inlineCode",{parentName:"p"},"--set"),", ",Object(i.b)("inlineCode",{parentName:"p"},"--set-string")," or ",Object(i.b)("inlineCode",{parentName:"p"},"--set-json")," arguments."),Object(i.b)("p",null,"Add a new variable by declaring:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Override type: select the type of your variable. For more information, have a look at the Helm documentation"),Object(i.b)("li",{parentName:"ul"},"Variable: the variable name"),Object(i.b)("li",{parentName:"ul"},"Value")),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},"You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument."),Object(i.b)("p",null,"You can add ",Object(i.b)("inlineCode",{parentName:"p"},"Qovery Macros")," to add more functionalities to your helm deployment. Check ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/#qovery-macros"}),"the section below"),"."),Object(i.b)("h4",{id:"qovery-macros"},"Qovery macros"),Object(i.b)("p",null,"Qovery allows you to use the following macros within your override file. These macros will be automatically replaced by Qovery during the deployment phase, allowing you to access additional functionalities."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Access to the Qovery environment variables ")),Object(i.b)("p",null,"Macro: ",Object(i.b)("inlineCode",{parentName:"p"},"qovery.env.")),Object(i.b)("p",null,"It allows you to access the value of an environment variable or secret stored within Qovery. This is helpful when your deployed helm chart needs to access a secret or an environment variable available in Qovery."),Object(i.b)("p",null,"Example: "),Object(i.b)("p",null,"On Qovery we have created a database and created two aliases for the database url (DB_URL) and, the database password (DB_PASSWORD). Here an example on how the helm chart can access these environment variables and let your service point to the right database:"),Object(i.b)("pre",null,Object(i.b)("code",Object(o.a)({parentName:"pre"},{className:"language-yaml"}),"postgres:\n url: qovery.env.DB_URL\n password: qovery.env.DB_PASSWORD\n")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Enable all the Qovery features ")),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Macro for labels: ",Object(i.b)("inlineCode",{parentName:"li"},"qovery.labels.service")),Object(i.b)("li",{parentName:"ul"},"Macro for annotations: ",Object(i.b)("inlineCode",{parentName:"li"},"qovery.annotations.service"))),Object(i.b)("p",null,"It allows to add all the labels and annotations required to activate all the Qovery features on the deployed Helm chart (access your container logs, apply the stop/restart actions, display the pod status in the overview page).\nMake sure to create an override and assign the macro to the labels of ",Object(i.b)("strong",{parentName:"p"},"any deployed Pods/Deployments/Services/Jobs"),". "),Object(i.b)("p",null,"Example:"),Object(i.b)("pre",null,Object(i.b)("code",Object(o.a)({parentName:"pre"},{className:"language-yaml"}),'commonLabels:\n mylabel: "test"\n qovery.labels.service\nannotations:\n qovery.annotations.service\n')),Object(i.b)("p",null,"When your Pods/Deployments/Services/Jobs are deployed, you should see Qovery labels and annotations added to the resources. Something like:"),Object(i.b)("pre",null,Object(i.b)("code",Object(o.a)({parentName:"pre"},{className:"language-yaml"}),"apiVersion: v1\nkind: Pod\nmetadata:\n labels:\n qovery.com/environment-id: 00000000-0000-0000-0000-000000000000\n qovery.com/project-id: 00000000-0000-0000-0000-000000000000\n qovery.com/service-id: 00000000-0000-0000-0000-000000000000\n qovery.com/service-type: helm\n ...\n annotations:\n qovery.com/service-version: application:x.y.z\n ...\n")),Object(i.b)("h3",{id:"ports"},"Ports"),Object(i.b)("p",null,"Within this section you can define the port exposed publicly.\nYou can edit the existing ports or declare new ones by specifying:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Service name: this is the kubernetes service name in your helm chart"),Object(i.b)("li",{parentName:"ul"},"Namespace (only if Allow cluster-wide resources was enabled): this is the kubernetes namespace used by your helm chart to deploy the pods behind the chosen service"),Object(i.b)("li",{parentName:"ul"},"Service port: this is the port exposed internally by your service for the other services"),Object(i.b)("li",{parentName:"ul"},"Protocol: you can select the protocol used by your service. Today Qovery supports the following protocols:",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"HTTPS (Select this protocol if you need to run Websockets)"),Object(i.b)("li",{parentName:"ul"},"gRPC"))),Object(i.b)("li",{parentName:"ul"},"External port: it is the port that can be used to access this service over the internet (when exposed publicly). Note that for HTTP and gRPC the port is set by default to 443."),Object(i.b)("li",{parentName:"ul"},"Port Name: it is the name assigned to the port. When multiple ports are exposed publicly, its value is used to route the traffic to the right port based on the called subdomain (which will contain the port name value). Since each port is exposed on the port 443, having a different subdomain is the only way to have multiple ports exposed over the internet. If not set, the default value is ",Object(i.b)("inlineCode",{parentName:"li"},"p")," (see ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"#qovery-provided-domains"}),"Qovery Provided Domain section")," for more information)")),Object(i.b)("h4",{id:"important-informations"},"Important Informations"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"Connections on public ports are automatically closed after 60 seconds. If you want to implement long living connection (like for websockets) please make sure to use the rigth ingress timeouts in the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/advanced-settings/#network-settings"}),"advanced settings section"))),Object(i.b)("h3",{id:"domains"},"Domains"),Object(i.b)("p",null,"Within this section you can customize the domain used to reach your helm services. "),Object(i.b)("p",null,"You can customize the domain of your helm services in different ways, depending on what you want to achieve:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"You want to use your own domain for your helm services"),Object(i.b)("li",{parentName:"ul"},"You want to modify the subdomain assigned to your helm services by Qovery (i.e. change ",Object(i.b)("inlineCode",{parentName:"li"},"p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh")," into ",Object(i.b)("inlineCode",{parentName:"li"},"my-app-domain.za8ad0657.bool.sh"),").")),Object(i.b)("p",null,"In both cases, you can assign the new custom domain to your helm services press the ",Object(i.b)("inlineCode",{parentName:"p"},"Add Domain")," button. "),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/application/app-16.png",alt:"Application Domains"})),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,"This configuration will be ",Object(i.b)("strong",{parentName:"p"},"automatically removed")," on every cloned environment or preview environment in order to avoid domain collision.")),Object(i.b)("h4",{id:"configuring-your-own-domain"},"Configuring your own domain"),Object(i.b)("p",null,"Once the domain is added within the Qovery console (Example: mydomain.com), you need to configure within your DNS two ",Object(i.b)("inlineCode",{parentName:"p"},"CNAME")," records pointing to the domain provided by Qovery, as shown in the UI (example: mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud and *.mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud). "),Object(i.b)("p",null,"Having a wildcard domain (example: *.mydomain.com) configured on your DNS will avoid you to modify the Qovery setup every time you want to add a new subdomain. If ",Object(i.b)("inlineCode",{parentName:"p"},"wildcard")," is not supported by your DNS provider, you will have to configure each subdomain manually."),Object(i.b)("p",null,"If the service needs to expose more than one port publicly, you can define a dedicated subdomain to redirect the traffic on the right port by setting the \u201cPort Name\u201d value within the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#ports"}),"port settings"),"."),Object(i.b)("p",null,"From this point, Qovery will automatically handle the TLS/SSL certificate creation and renewal for the configured domain."),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/application/custom-domain.png",alt:"Custom Domain"})),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Special case - CDN in proxy mode ")),Object(i.b)("p",null,"If your service is behind a CDN using a ",Object(i.b)("inlineCode",{parentName:"p"},"proxy mode"),' (i.e. the traffic is routed through the CDN to Qovery), make sure to disable the option "Generate certificate" on the domain setup. Since the certificate of your domain is directly managed by the CDN, Qovery won\'t be able to do that for you and it will raise warnings on your application status.'),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/configuration/application/cdn-proxy.png",alt:"CDN Proxy"})),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/guides/getting-started/setting-custom-domain/"}),"We prepared a guide and video tutorial that explains how to set up your custom domain."))),Object(i.b)("h4",{id:"change-the-auto-assigned-sub-domain"},"Change the auto assigned sub-domain"),Object(i.b)("p",null,"You can specify a different sub-domain for your helm services as long as it belongs to the assigned cluster domain (see ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#qovery-provided-domains"}),"Qovery provided domains"),").\nExample: "),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"your current domain is zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh (so your assigned cluster domain is ",Object(i.b)("inlineCode",{parentName:"li"},"za8ad0659.bool.sh"),")"),Object(i.b)("li",{parentName:"ul"},"you can enter a new custom domain ",Object(i.b)("inlineCode",{parentName:"li"},"myfrontend.za8ad0659.bool.sh")," (since it is a subdomain of the cluster domain)")),Object(i.b)("p",null,"The helm services will now be accessible from both the default and the new custom domain."),Object(i.b)(l.a,{type:"info",mdxType:"Alert"},Object(i.b)("p",null,"Qovery does not check collision in the domain declaration. Make sure you assign a unique subdomain within your cluster.")),Object(i.b)("h2",{id:"connecting-from-the-internet"},"Connecting from the internet"),Object(i.b)("p",null,"Your helm services can be reached from the internet by publicly exposing at least one of its ports (See the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#ports"}),"Ports")," section to know more). Once this is done, Qovery will generate for you a domain to reach your application from the internet. You can also customize the domain assigned to your application and manage by yourself this assignment via the ",Object(i.b)("inlineCode",{parentName:"p"},"Domain")," section."),Object(i.b)("h3",{id:"qovery-provided-domains"},"Qovery provided domains"),Object(i.b)("p",null,"For each port publicly exposed, a domain is automatically assigned by Qovery to your helm services. Qovery will manage for you the networking and the TLS configuration for these domains. "),Object(i.b)("p",null,"Example: ",Object(i.b)("inlineCode",{parentName:"p"},"p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh")," or ",Object(i.b)("inlineCode",{parentName:"p"},"-p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh")," for helm services."),Object(i.b)("p",null,"Note:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"each service deployed on the same cluster will have the same root domain assigned (example: ",Object(i.b)("inlineCode",{parentName:"li"},"za8ad0657.bool.sh"),")"),Object(i.b)("li",{parentName:"ul"},"the first characters of the domain (before the ",Object(i.b)("inlineCode",{parentName:"li"},"-"),") is based on the portName given to the port associated with this domain (See the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"#ports"}),"port section"),")"),Object(i.b)("li",{parentName:"ul"},"a default domain (without the portName) is assigned to the ",Object(i.b)("inlineCode",{parentName:"li"},"default port"),"(See the ",Object(i.b)("a",Object(o.a)({parentName:"li"},{href:"#ports"}),"port section"),"). Example ",Object(i.b)("inlineCode",{parentName:"li"},"zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh"))),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"Special Case - Preview Environment"),"\nFor each port exposed publicly, an additional domain will be created with the following pattern ",Object(i.b)("inlineCode",{parentName:"p"},"portName-prId-srvName-envSourceName.cluster_domain"),":"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"portName: is the port name, as explained above"),Object(i.b)("li",{parentName:"ul"},"prID: is the id of the PR that has generated the preview environment"),Object(i.b)("li",{parentName:"ul"},"srvName: is the name of the service"),Object(i.b)("li",{parentName:"ul"},"envSourceName: is the name of the blueprint environment that has created the current preview environment")),Object(i.b)("p",null,"domain example: ",Object(i.b)("inlineCode",{parentName:"p"},"p80-123-frontend-blueprint.za8ad0657.bool.sh")),Object(i.b)("h3",{id:"custom-domains"},"Custom domains"),Object(i.b)("p",null,"If you prefer to assign your own domain to the helm services, have a look at the ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"#domains"}),"Domain section")," to know more."),Object(i.b)("h2",{id:"logs"},"Logs"),Object(i.b)("p",null,"To learn how to display your helm logs, navigate to ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/logs/#live-logs"}),"logs section")),Object(i.b)("h2",{id:"clone"},"Clone"),Object(i.b)("p",null,"You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment."),Object(i.b)("p",{align:"center"},Object(i.b)("img",{src:"/img/clone_service.png",alt:"Clone Service"})),Object(i.b)("p",null,"The target environment can be the same as the current environment or even another one in a completely different project."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"}," Important information ")),Object(i.b)("p",null,"Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:"),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"same environment:",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"custom domain: this setup is not copied into the new service (to avoid collision)"))),Object(i.b)("li",{parentName:"ul"},"another environment:",Object(i.b)("ul",{parentName:"li"},Object(i.b)("li",{parentName:"ul"},"custom domain: this setup is not copied into the new service (to avoid collision)"),Object(i.b)("li",{parentName:"ul"},"environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)"),Object(i.b)("li",{parentName:"ul"},"deployment pipeline: stage setup is not copied (since the target stage might not exist)"),Object(i.b)("li",{parentName:"ul"},"number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)")))),Object(i.b)("p",null,"Please check the configuration of the new service before deploying it."),Object(i.b)("h3",{id:"advanced-settings"},"Advanced Settings"),Object(i.b)("p",null,"You can further customize the service behaviour via the service advanced settings. Check ",Object(i.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/advanced-settings/"}),"this documentation")," to know more."),Object(i.b)("h2",{id:"delete-a-helm"},"Delete a Helm"),Object(i.b)(r.a,{headingDepth:3,mdxType:"Steps"},Object(i.b)("ol",null,Object(i.b)("li",null,Object(i.b)("p",null,"Choose your helm")),Object(i.b)("li",null,Object(i.b)("p",null,"In the helm overview, click on the ",Object(i.b)("inlineCode",{parentName:"p"},"3 dots")," button and remove the helm.")))))}m.isMDXComponent=!0},444:function(e,t,n){var o;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=a.a.createContext({}),b=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l({},t,{},e)),n},u=function(e){var t=b(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=Object(o.forwardRef)((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,r=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),u=b(n),m=o,d=u["".concat(r,".").concat(m)]||u[m]||p[m]||i;return n?a.a.createElement(d,l({ref:t},s,{components:n})):a.a.createElement(d,l({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var s=2;s1?arguments[1]:void 0,n),c=r>2?arguments[2]:void 0,s=void 0===c?n:a(c,n);s>l;)t[l++]=e;return t}},449:function(e,t,n){var o=n(28).f,a=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in a||n(10)&&o(a,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var o=n(0),a=n.n(o),i=n(445);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(i.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var o=n(1),a=n(0),i=n.n(a),r=n(39),l=n(455),c=n(20),s=n.n(c);t.a=function(e){var t,n=e.to,c=e.href,b=n||c,u=Object(l.a)(b),p=Object(a.useRef)(!1),m=s.a.canUseIntersectionObserver;return Object(a.useEffect)((function(){return!m&&u&&window.docusaurus.prefetch(b),function(){m&&t&&t.disconnect()}}),[b,m,u]),b&&u?i.a.createElement(r.b,Object(o.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(b),p.current=!0)},innerRef:function(e){var n,o;m&&e&&u&&(n=e,o=function(){window.docusaurus.prefetch(b)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),o())}))}))).observe(n))},to:b})):i.a.createElement("a",Object(o.a)({},e,{href:b}))}},452:function(e,t,n){"use strict";var o=n(456),a=n(51);function i(e,t){return t.encode?t.strict?o(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,o){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===o[e]&&(o[e]={}),o[e][t[1]]=n):o[e]=n};case"bracket":return function(e,n,o){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==o[e]?o[e]=[].concat(o[e],n):o[e]=[n]:o[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),o=Object.create(null);return"string"!=typeof e?o:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),i=t.length>0?t.join("="):void 0;i=void 0===i?null:decodeURIComponent(i),n(decodeURIComponent(a),i,o)})),Object.keys(o).sort().reduce((function(e,t){var n=o[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):o},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,o){return null===n?[i(t,e),"[",o,"]"].join(""):[i(t,e),"[",i(o,e),"]=",i(n,e)].join("")};case"bracket":return function(t,n){return null===n?i(t,e):[i(t,e),"[]=",i(n,e)].join("")};default:return function(t,n){return null===n?i(t,e):[i(t,e),"=",i(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(o){var a=e[o];if(void 0===a)return"";if(null===a)return i(o,t);if(Array.isArray(a)){var r=[];return a.slice().forEach((function(e){void 0!==e&&r.push(n(o,e,r.length))})),r.join("&")}return i(o,t)+"="+i(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var o=n(0),a=n.n(o),i=(n(444),n(452)),r=n.n(i);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,i=e.hideFeedbackQuestion,l="undefined"!=typeof window?window.location:null,c={title:"Tutorial on "+l+" failed",body:"The tutorial on:\n\n"+l+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+r.a.stringify(c),b=Object(o.useState)(null),u=b[0],p=b[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!i&&!u&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==u&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var o=n(0),a=n.n(o),i=n(451),r=n(444),l=n.n(r);n(134);t.a=function(e){var t=e.children,n=e.className,o=e.badge,r=e.leftIcon,c=e.rightIcon,s=e.size,b=e.target,u=e.to,p=l()("jump-to","jump-to--"+s,n),m=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},r&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+r})),a.a.createElement("div",{className:"jump-to--main"},o?a.a.createElement("span",{className:"badge badge--primary badge--right"},o):"",t),a.a.createElement("div",{className:"jump-to--right"},a.a.createElement("i",{className:"feather icon-"+(c||"chevron-right")+" arrow"}))));return b?a.a.createElement("a",{href:u,target:b,className:p},m):a.a.createElement(i.a,{to:u,className:p},m)}},455:function(e,t,n){"use strict";function o(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return o}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/404.html b/404.html index 743824025c..0a8f6e3dd4 100644 --- a/404.html +++ b/404.html @@ -26,7 +26,7 @@ - + @@ -39,7 +39,7 @@ - + diff --git a/4b542f80.cb6d204d.js b/4b542f80.cb6d204d.js deleted file mode 100644 index 1126117fde..0000000000 --- a/4b542f80.cb6d204d.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 4b542f80.cb6d204d.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[94],{246:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return u})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return b})),n.d(t,"default",(function(){return m}));var r=n(1),a=n(9),o=(n(0),n(446)),i=n(453),c=n(445),l=n(450),u=(n(454),{last_modified_on:"2024-01-12",$schema:"/.meta/.schemas/guides.json",title:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",author_github:"https://github.com/jul-dan",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",permalink:"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost",readingTime:"3 min read",source:"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Monitor and reduce Kubernetes spend with Kubecost",truncated:!1,prevItem:{title:"Migration",permalink:"/guides/advanced/migration"},nextItem:{title:"Monitoring",permalink:"/guides/advanced/monitoring"}},b=[{value:"Goal",id:"goal",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],p={rightToc:b};function m(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(l.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"))),Object(o.b)("h2",{id:"goal"},"Goal"),Object(o.b)("p",null,"In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs"),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-kubecost-helm-repository"},"Add the Kubecost helm repository"),Object(o.b)("p",null,"Add the Kubecost helm repository in your Qovery settings by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://kubecost.github.io/cost-analyzer/")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-the-kubecost-helm-chart"},"Deploy the Kubecost helm chart"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If have a Kubecost token, first create a Qovery environment variable: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"variable: ",Object(o.b)("inlineCode",{parentName:"li"},"KUBECOST_TOKEN")),Object(o.b)("li",{parentName:"ul"},"value: ",Object(o.b)("inlineCode",{parentName:"li"},"")),Object(o.b)("li",{parentName:"ul"},"scope: ",Object(o.b)("inlineCode",{parentName:"li"},"Environment")),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f"))),Object(o.b)("p",null,"Deploy the Kubecost helm chart in your Qovery environment by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")," (the name given during the kubecost helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"cost-analyzer")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"1.108.0")," (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)"))),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))))),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-yaml"}),"kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token\n\nglobal:\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"These are necessary to get all Qovery features, check ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," for more information.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Currently it is not possible to ",Object(o.b)("strong",{parentName:"p"},"Stop")," the Kubecost helm service. You can Start/Update/Delete it.")),Object(o.b)("p",null,"Then click on ",Object(o.b)("inlineCode",{parentName:"p"},"Create and Deploy"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"expose-kubecost"},"Expose Kubecost"),Object(o.b)("p",null,"Check the cost-analyzer service name in the deployment logs, example: ",Object(o.b)("inlineCode",{parentName:"p"},"helm-z325f0565-kubecost-cost-analyzer")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(o.b)("p",null,"Go in your helm chart settings under the ",Object(o.b)("inlineCode",{parentName:"p"},"Networking")," section and add a new port by clicking on ",Object(o.b)("inlineCode",{parentName:"p"},"Add port"),", and set these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Service name: ",Object(o.b)("inlineCode",{parentName:"li"},"helm-z325f0565-kubecost-cost-analyzer")," (the service name taken from the deployment logs)"),Object(o.b)("li",{parentName:"ul"},"Service port: ",Object(o.b)("inlineCode",{parentName:"li"},"9090")),Object(o.b)("li",{parentName:"ul"},"Select protocol: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTP")),Object(o.b)("li",{parentName:"ul"},"Port name: You can customize it or let the default port name.")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(o.b)("p",null,"Then click on Create and redeploy your helm in Qovery."),Object(o.b)("p",null,"A URL will be generated to access the Kubecost frontend application:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Kubecost running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://docs.kubecost.com/#getting-started"}),"https://docs.kubecost.com/#getting-started"),"."))}m.isMDXComponent=!0},444:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=a.a.createContext({}),s=function(e){var t=a.a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},b=function(e){var t=s(e.components);return a.a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),b=s(n),m=r,d=b["".concat(i,".").concat(m)]||b[m]||p[m]||o;return n?a.a.createElement(d,c({ref:t},u,{components:n})):a.a.createElement(d,c({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var u=2;u1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,u=void 0===l?n:a(l,n);u>c;)t[c++]=e;return t}},449:function(e,t,n){var r=n(28).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var r=n(0),a=n.n(r),o=n(445);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var r=n(1),a=n(0),o=n.n(a),i=n(39),c=n(455),l=n(20),u=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,s=n||l,b=Object(c.a)(s),p=Object(a.useRef)(!1),m=u.a.canUseIntersectionObserver;return Object(a.useEffect)((function(){return!m&&b&&window.docusaurus.prefetch(s),function(){m&&t&&t.disconnect()}}),[s,m,b]),s&&b?o.a.createElement(i.b,Object(r.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(s),p.current=!0)},innerRef:function(e){var n,r;m&&e&&b&&(n=e,r=function(){window.docusaurus.prefetch(s)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),r())}))}))).observe(n))},to:s})):o.a.createElement("a",Object(r.a)({},e,{href:s}))}},452:function(e,t,n){"use strict";var r=n(456),a=n(51);function o(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(a),o,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[o(t,e),"[",r,"]"].join(""):[o(t,e),"[",o(r,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return o(r,t);if(Array.isArray(a)){var i=[];return a.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return o(r,t)+"="+o(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},u="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),s=Object(r.useState)(null),b=s[0],p=s[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:u,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,r=e.badge,i=e.leftIcon,l=e.rightIcon,u=e.size,s=e.target,b=e.to,p=c()("jump-to","jump-to--"+u,n),m=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},i&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+i})),a.a.createElement("div",{className:"jump-to--main"},r?a.a.createElement("span",{className:"badge badge--primary badge--right"},r):"",t),a.a.createElement("div",{className:"jump-to--right"},a.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return s?a.a.createElement("a",{href:b,target:s,className:p},m):a.a.createElement(o.a,{to:b,className:p},m)}},455:function(e,t,n){"use strict";function r(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return r}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/4b542f80.cdcb3670.js b/4b542f80.cdcb3670.js new file mode 100644 index 0000000000..2f14fd1c3c --- /dev/null +++ b/4b542f80.cdcb3670.js @@ -0,0 +1,2 @@ +/*! For license information please see 4b542f80.cdcb3670.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[94],{246:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return u})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return b})),n.d(t,"default",(function(){return m}));var r=n(1),a=n(9),o=(n(0),n(446)),i=n(453),c=n(445),l=n(450),u=(n(454),{last_modified_on:"2024-04-10",$schema:"/.meta/.schemas/guides.json",title:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",author_github:"https://github.com/jul-dan",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",permalink:"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost",readingTime:"3 min read",source:"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Monitor and reduce Kubernetes spend with Kubecost",truncated:!1,prevItem:{title:"Migration",permalink:"/guides/advanced/migration"},nextItem:{title:"Monitoring",permalink:"/guides/advanced/monitoring"}},b=[{value:"Goal",id:"goal",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],p={rightToc:b};function m(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(l.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"))),Object(o.b)("h2",{id:"goal"},"Goal"),Object(o.b)("p",null,"In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs"),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-kubecost-helm-repository"},"Add the Kubecost helm repository"),Object(o.b)("p",null,"Add the Kubecost helm repository in your Qovery settings by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://kubecost.github.io/cost-analyzer/")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-the-kubecost-helm-chart"},"Deploy the Kubecost helm chart"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If have a Kubecost token, first create a Qovery environment variable: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"variable: ",Object(o.b)("inlineCode",{parentName:"li"},"KUBECOST_TOKEN")),Object(o.b)("li",{parentName:"ul"},"value: ",Object(o.b)("inlineCode",{parentName:"li"},"")),Object(o.b)("li",{parentName:"ul"},"scope: ",Object(o.b)("inlineCode",{parentName:"li"},"Environment")),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f"))),Object(o.b)("p",null,"Deploy the Kubecost helm chart in your Qovery environment by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")," (the name given during the kubecost helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"cost-analyzer")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"1.108.0")," (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)"))),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))))),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-yaml"}),"kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token\n\n")),Object(o.b)("p",null,"Then click on ",Object(o.b)("inlineCode",{parentName:"p"},"Create and Deploy"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"expose-kubecost"},"Expose Kubecost"),Object(o.b)("p",null,"Check the cost-analyzer service name in the deployment logs, example: ",Object(o.b)("inlineCode",{parentName:"p"},"helm-z325f0565-kubecost-cost-analyzer")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(o.b)("p",null,"Go in your helm chart settings under the ",Object(o.b)("inlineCode",{parentName:"p"},"Networking")," section and add a new port by clicking on ",Object(o.b)("inlineCode",{parentName:"p"},"Add port"),", and set these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Service name: ",Object(o.b)("inlineCode",{parentName:"li"},"helm-z325f0565-kubecost-cost-analyzer")," (the service name taken from the deployment logs)"),Object(o.b)("li",{parentName:"ul"},"Service port: ",Object(o.b)("inlineCode",{parentName:"li"},"9090")),Object(o.b)("li",{parentName:"ul"},"Select protocol: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTP")),Object(o.b)("li",{parentName:"ul"},"Port name: You can customize it or let the default port name.")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(o.b)("p",null,"Then click on Create and redeploy your helm in Qovery."),Object(o.b)("p",null,"A URL will be generated to access the Kubecost frontend application:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Kubecost running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://docs.kubecost.com/#getting-started"}),"https://docs.kubecost.com/#getting-started"),"."))}m.isMDXComponent=!0},444:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=a.a.createContext({}),s=function(e){var t=a.a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},b=function(e){var t=s(e.components);return a.a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),b=s(n),m=r,d=b["".concat(i,".").concat(m)]||b[m]||p[m]||o;return n?a.a.createElement(d,c({ref:t},u,{components:n})):a.a.createElement(d,c({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var u=2;u1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,u=void 0===l?n:a(l,n);u>c;)t[c++]=e;return t}},449:function(e,t,n){var r=n(28).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var r=n(0),a=n.n(r),o=n(445);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var r=n(1),a=n(0),o=n.n(a),i=n(39),c=n(455),l=n(20),u=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,s=n||l,b=Object(c.a)(s),p=Object(a.useRef)(!1),m=u.a.canUseIntersectionObserver;return Object(a.useEffect)((function(){return!m&&b&&window.docusaurus.prefetch(s),function(){m&&t&&t.disconnect()}}),[s,m,b]),s&&b?o.a.createElement(i.b,Object(r.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(s),p.current=!0)},innerRef:function(e){var n,r;m&&e&&b&&(n=e,r=function(){window.docusaurus.prefetch(s)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),r())}))}))).observe(n))},to:s})):o.a.createElement("a",Object(r.a)({},e,{href:s}))}},452:function(e,t,n){"use strict";var r=n(456),a=n(51);function o(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(a),o,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[o(t,e),"[",r,"]"].join(""):[o(t,e),"[",o(r,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return o(r,t);if(Array.isArray(a)){var i=[];return a.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return o(r,t)+"="+o(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},u="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),s=Object(r.useState)(null),b=s[0],p=s[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:u,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,r=e.badge,i=e.leftIcon,l=e.rightIcon,u=e.size,s=e.target,b=e.to,p=c()("jump-to","jump-to--"+u,n),m=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},i&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+i})),a.a.createElement("div",{className:"jump-to--main"},r?a.a.createElement("span",{className:"badge badge--primary badge--right"},r):"",t),a.a.createElement("div",{className:"jump-to--right"},a.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return s?a.a.createElement("a",{href:b,target:s,className:p},m):a.a.createElement(o.a,{to:b,className:p},m)}},455:function(e,t,n){"use strict";function r(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return r}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/4b542f80.cb6d204d.js.LICENSE.txt b/4b542f80.cdcb3670.js.LICENSE.txt similarity index 100% rename from 4b542f80.cb6d204d.js.LICENSE.txt rename to 4b542f80.cdcb3670.js.LICENSE.txt diff --git a/b479fc9a.a29edc02.js b/b479fc9a.a29edc02.js deleted file mode 100644 index ab222eea6f..0000000000 --- a/b479fc9a.a29edc02.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see b479fc9a.a29edc02.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[195],{346:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return u})),n.d(t,"default",(function(){return b}));var a=n(1),r=n(9),o=(n(0),n(446)),i=n(453),c=(n(445),n(450)),l=(n(454),{last_modified_on:"2024-01-05",$schema:"/.meta/.schemas/guides.json",title:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",author_github:"https://github.com/acarranoqovery",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",permalink:"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog",readingTime:"4 min read",source:"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Kubernetes observability and monitoring with Datadog",truncated:!1,prevItem:{title:"Integrate your application logs to Cloudwatch",permalink:"/guides/tutorial/cloudwatch-integration"},nextItem:{title:"Managing Environment Variables in React (create-react-app)",permalink:"/guides/tutorial/managing-env-variables-in-create-react-app"}},u=[{value:"Installation",id:"installation",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],d={rightToc:u};function b(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},d,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog.\nDatadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery."),Object(o.b)(c.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"),Object(o.b)("li",{parentName:"ul"},"You have a dedicated Qovery project and environment to deploy Datadog (example: Project=Tooling, Environment=Production)"),Object(o.b)("li",{parentName:"ul"},"You have a Datadog account"),Object(o.b)("li",{parentName:"ul"},"You have already created a ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://docs.datadoghq.com/account_management/api-app-keys/#api-keys"}),"Datadog API Key")))),Object(o.b)("h2",{id:"installation"},"Installation"),Object(o.b)("p",null,"In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications."),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-datadog-helm-repository"},"Add the Datadog helm repository"),Object(o.b)("p",null,"Add the Datadog helm repository in your Qovery settings by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://helm.datadoghq.com")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"create-the-datadog-service-within-qovery"},"Create the datadog service within Qovery"),Object(o.b)("p",null,"Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," and these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")," (the name given during the datadog helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"datadog")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"3.49.5")," (this is the version we used for this setup, update it based on the chosen version)"),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:"),Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-yaml"}),"# The following YAML contains the minimum configuration required to deploy the Datadog Agent\n# on your cluster. Update it accordingly to your needs\ndatadog:\n # here we use a Qovery secret to retrieve the Datadog API Key (See next step)\n apiKey: qovery.env.DD_API_KEY\n # Update the site depending on where you want to store your data in Datadog\n site: datadoghq.eu\n # Update the cluster name with the name of your choice\n clusterName: qoverycluster\n\n# in the section below, we are adding Qovery macros in order to automatically add a set \n# of labels and annotations to the deployed Pods/Deployments/services etc.. This is not \n# mandatory to install Datadog itself but it allows you to fully benefit from the Qovery\n# functionalities (Display application logs, restart pods etc..). See the official Qovery\n# Helm documentation for more information.\ncommonLabels: \n qovery.labels.service\n\nclusterAgent:\n deploymentAnnotations:\n qovery.annotations.service\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n\nagents:\n daemonsetAnnotations:\n qovery.annotations.service\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n\nclusterChecksRunner:\n deploymentAnnotations:\n qovery.annotations.service\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n")),Object(o.b)("p",null,"There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml"}),"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml")),Object(o.b)("p",null,"Now get to the last step and just ",Object(o.b)("inlineCode",{parentName:"p"},"Create")," the service on Qovery.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"store-the-datadog-api-key-as-secret"},"Store the Datadog API Key as secret"),Object(o.b)("p",null,"In the previous step we have assigned the macro ",Object(o.b)("inlineCode",{parentName:"p"},"qovery.env.DD_API_KEY")," to the API Key value. In this step we will create this secret within the Qovery console."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Open the service overview of the created Datadog service"),Object(o.b)("li",{parentName:"ul"},"Enter the ",Object(o.b)("inlineCode",{parentName:"li"},"Variables")," section"),Object(o.b)("li",{parentName:"ul"},"Add a new Variable with:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Variable = DD_API_KEY"),Object(o.b)("li",{parentName:"ul"},"Value = "),Object(o.b)("li",{parentName:"ul"},"Scope = Service (so that it is accessible only to this service)"),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f")))),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-secret.png",alt:"Datadog - API Key"})),Object(o.b)("p",null,"If you need more information on how to manage your environment variables, have a look at ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment-variable/"}),"this documentation"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-your-chart"},"Deploy your chart"),Object(o.b)("p",null,"Open the ",Object(o.b)("inlineCode",{parentName:"p"},"Play")," button and trigger the deployment of your chart (see point 1 in the picture below)."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/deploy.png",alt:"Datadog - Deploy"})),Object(o.b)("p",null,"You can follow the deployment and access the deployment logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button (see point 2 in the picutre above)."),Object(o.b)("p",null,"Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-pods.png",alt:"Datadog - Pods"})),Object(o.b)("p",null,"You can also look at the Pod logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"verify-the-setup-on-datadog"},"Verify the setup on Datadog"),Object(o.b)("p",null,"Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-console.png",alt:"Datadog - Console"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Datadog agent running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://docs.datadoghq.com/fr/getting_started"}),"https://docs.datadoghq.com/fr/getting_started"),"."))}b.isMDXComponent=!0},444:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=r.a.createContext({}),u=function(e){var t=r.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},d=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},b={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(n),p=a,m=d["".concat(i,".").concat(p)]||d[p]||b[p]||o;return n?r.a.createElement(m,c({ref:t},s,{components:n})):r.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>c;)t[c++]=e;return t}},449:function(e,t,n){var a=n(28).f,r=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var a=n(0),r=n.n(a),o=n(445);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},r.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),i=n(39),c=n(455),l=n(20),s=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,u=n||l,d=Object(c.a)(u),b=Object(r.useRef)(!1),p=s.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!p&&d&&window.docusaurus.prefetch(u),function(){p&&t&&t.disconnect()}}),[u,p,d]),u&&d?o.a.createElement(i.b,Object(a.a)({},e,{onMouseEnter:function(){b.current||(window.docusaurus.preload(u),b.current=!0)},innerRef:function(e){var n,a;p&&e&&d&&(n=e,a=function(){window.docusaurus.prefetch(u)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),a())}))}))).observe(n))},to:u})):o.a.createElement("a",Object(a.a)({},e,{href:u}))}},452:function(e,t,n){"use strict";var a=n(456),r=n(51);function o(e,t){return t.encode?t.strict?a(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,a){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===a[e]&&(a[e]={}),a[e][t[1]]=n):a[e]=n};case"bracket":return function(e,n,a){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==a[e]?a[e]=[].concat(a[e],n):a[e]=[n]:a[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=r({arrayFormat:"none"},t)),a=Object.create(null);return"string"!=typeof e?a:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),r=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(r),o,a)})),Object.keys(a).sort().reduce((function(e,t){var n=a[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):a},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,a){return null===n?[o(t,e),"[",a,"]"].join(""):[o(t,e),"[",o(a,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=r({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(a){var r=e[a];if(void 0===r)return"";if(null===r)return o(a,t);if(Array.isArray(r)){var i=[];return r.slice().forEach((function(e){void 0!==e&&i.push(n(a,e,i.length))})),i.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),u=Object(a.useState)(null),d=u[0],b=u[1];return r.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!d&&r.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",r.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return b("yes")}},"Yes"),"\xa0\xa0",r.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==d&&r.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",r.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,a=e.badge,i=e.leftIcon,l=e.rightIcon,s=e.size,u=e.target,d=e.to,b=c()("jump-to","jump-to--"+s,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},i&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+i})),r.a.createElement("div",{className:"jump-to--main"},a?r.a.createElement("span",{className:"badge badge--primary badge--right"},a):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return u?r.a.createElement("a",{href:d,target:u,className:b},p):r.a.createElement(o.a,{to:d,className:b},p)}},455:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/b479fc9a.eb4bc907.js b/b479fc9a.eb4bc907.js new file mode 100644 index 0000000000..7145d714b1 --- /dev/null +++ b/b479fc9a.eb4bc907.js @@ -0,0 +1,2 @@ +/*! For license information please see b479fc9a.eb4bc907.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[195],{346:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return u})),n.d(t,"default",(function(){return d}));var a=n(1),r=n(9),o=(n(0),n(446)),i=n(453),c=(n(445),n(450)),l=(n(454),{last_modified_on:"2024-04-10",$schema:"/.meta/.schemas/guides.json",title:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",author_github:"https://github.com/acarranoqovery",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",permalink:"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog",readingTime:"4 min read",source:"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Kubernetes observability and monitoring with Datadog",truncated:!1,prevItem:{title:"Integrate your application logs to Cloudwatch",permalink:"/guides/tutorial/cloudwatch-integration"},nextItem:{title:"Managing Environment Variables in React (create-react-app)",permalink:"/guides/tutorial/managing-env-variables-in-create-react-app"}},u=[{value:"Installation",id:"installation",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],b={rightToc:u};function d(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},b,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog.\nDatadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery."),Object(o.b)(c.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"),Object(o.b)("li",{parentName:"ul"},"You have a dedicated Qovery project and environment to deploy Datadog (example: Project=Tooling, Environment=Production)"),Object(o.b)("li",{parentName:"ul"},"You have a Datadog account"),Object(o.b)("li",{parentName:"ul"},"You have already created a ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://docs.datadoghq.com/account_management/api-app-keys/#api-keys"}),"Datadog API Key")))),Object(o.b)("h2",{id:"installation"},"Installation"),Object(o.b)("p",null,"In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications."),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-datadog-helm-repository"},"Add the Datadog helm repository"),Object(o.b)("p",null,"Add the Datadog helm repository in your Qovery settings by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://helm.datadoghq.com")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"create-the-datadog-service-within-qovery"},"Create the datadog service within Qovery"),Object(o.b)("p",null,"Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," and these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")," (the name given during the datadog helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"datadog")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"3.49.5")," (this is the version we used for this setup, update it based on the chosen version)"),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:"),Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-yaml"}),"# The following YAML contains the minimum configuration required to deploy the Datadog Agent\n# on your cluster. Update it accordingly to your needs\ndatadog:\n # here we use a Qovery secret to retrieve the Datadog API Key (See next step)\n apiKey: qovery.env.DD_API_KEY\n # Update the site depending on where you want to store your data in Datadog\n site: datadoghq.eu\n # Update the cluster name with the name of your choice\n clusterName: qoverycluster\n")),Object(o.b)("p",null,"There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml"}),"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml")),Object(o.b)("p",null,"Now get to the last step and just ",Object(o.b)("inlineCode",{parentName:"p"},"Create")," the service on Qovery.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"store-the-datadog-api-key-as-secret"},"Store the Datadog API Key as secret"),Object(o.b)("p",null,"In the previous step we have assigned the macro ",Object(o.b)("inlineCode",{parentName:"p"},"qovery.env.DD_API_KEY")," to the API Key value. In this step we will create this secret within the Qovery console."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Open the service overview of the created Datadog service"),Object(o.b)("li",{parentName:"ul"},"Enter the ",Object(o.b)("inlineCode",{parentName:"li"},"Variables")," section"),Object(o.b)("li",{parentName:"ul"},"Add a new Variable with:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Variable = DD_API_KEY"),Object(o.b)("li",{parentName:"ul"},"Value = "),Object(o.b)("li",{parentName:"ul"},"Scope = Service (so that it is accessible only to this service)"),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f")))),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-secret.png",alt:"Datadog - API Key"})),Object(o.b)("p",null,"If you need more information on how to manage your environment variables, have a look at ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment-variable/"}),"this documentation"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-your-chart"},"Deploy your chart"),Object(o.b)("p",null,"Open the ",Object(o.b)("inlineCode",{parentName:"p"},"Play")," button and trigger the deployment of your chart (see point 1 in the picture below)."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/deploy.png",alt:"Datadog - Deploy"})),Object(o.b)("p",null,"You can follow the deployment and access the deployment logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button (see point 2 in the picutre above)."),Object(o.b)("p",null,"Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-pods.png",alt:"Datadog - Pods"})),Object(o.b)("p",null,"You can also look at the Pod logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"verify-the-setup-on-datadog"},"Verify the setup on Datadog"),Object(o.b)("p",null,"Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-console.png",alt:"Datadog - Console"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Datadog agent running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://docs.datadoghq.com/fr/getting_started"}),"https://docs.datadoghq.com/fr/getting_started"),"."))}d.isMDXComponent=!0},444:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=r.a.createContext({}),u=function(e){var t=r.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},b=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),b=u(n),p=a,m=b["".concat(i,".").concat(p)]||b[p]||d[p]||o;return n?r.a.createElement(m,c({ref:t},s,{components:n})):r.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>c;)t[c++]=e;return t}},449:function(e,t,n){var a=n(28).f,r=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var a=n(0),r=n.n(a),o=n(445);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},r.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),i=n(39),c=n(455),l=n(20),s=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,u=n||l,b=Object(c.a)(u),d=Object(r.useRef)(!1),p=s.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!p&&b&&window.docusaurus.prefetch(u),function(){p&&t&&t.disconnect()}}),[u,p,b]),u&&b?o.a.createElement(i.b,Object(a.a)({},e,{onMouseEnter:function(){d.current||(window.docusaurus.preload(u),d.current=!0)},innerRef:function(e){var n,a;p&&e&&b&&(n=e,a=function(){window.docusaurus.prefetch(u)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),a())}))}))).observe(n))},to:u})):o.a.createElement("a",Object(a.a)({},e,{href:u}))}},452:function(e,t,n){"use strict";var a=n(456),r=n(51);function o(e,t){return t.encode?t.strict?a(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,a){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===a[e]&&(a[e]={}),a[e][t[1]]=n):a[e]=n};case"bracket":return function(e,n,a){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==a[e]?a[e]=[].concat(a[e],n):a[e]=[n]:a[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=r({arrayFormat:"none"},t)),a=Object.create(null);return"string"!=typeof e?a:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),r=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(r),o,a)})),Object.keys(a).sort().reduce((function(e,t){var n=a[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):a},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,a){return null===n?[o(t,e),"[",a,"]"].join(""):[o(t,e),"[",o(a,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=r({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(a){var r=e[a];if(void 0===r)return"";if(null===r)return o(a,t);if(Array.isArray(r)){var i=[];return r.slice().forEach((function(e){void 0!==e&&i.push(n(a,e,i.length))})),i.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),u=Object(a.useState)(null),b=u[0],d=u[1];return r.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&r.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",r.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return d("yes")}},"Yes"),"\xa0\xa0",r.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&r.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",r.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,a=e.badge,i=e.leftIcon,l=e.rightIcon,s=e.size,u=e.target,b=e.to,d=c()("jump-to","jump-to--"+s,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},i&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+i})),r.a.createElement("div",{className:"jump-to--main"},a?r.a.createElement("span",{className:"badge badge--primary badge--right"},a):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return u?r.a.createElement("a",{href:b,target:u,className:d},p):r.a.createElement(o.a,{to:b,className:d},p)}},455:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/b479fc9a.a29edc02.js.LICENSE.txt b/b479fc9a.eb4bc907.js.LICENSE.txt similarity index 100% rename from b479fc9a.a29edc02.js.LICENSE.txt rename to b479fc9a.eb4bc907.js.LICENSE.txt diff --git a/b5eab6bb.06b51fa5.js b/b5eab6bb.06b51fa5.js new file mode 100644 index 0000000000..a7794590ff --- /dev/null +++ b/b5eab6bb.06b51fa5.js @@ -0,0 +1,2 @@ +/*! For license information please see b5eab6bb.06b51fa5.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[201],{352:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return u})),n.d(t,"default",(function(){return d}));var a=n(1),r=n(9),o=(n(0),n(446)),i=n(453),c=(n(445),n(450)),l=(n(454),{last_modified_on:"2024-04-10",$schema:"/.meta/.schemas/guides.json",title:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",author_github:"https://github.com/acarranoqovery",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",permalink:"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog",readingTime:"4 min read",source:"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Kubernetes observability and monitoring with Datadog",truncated:!1,prevItem:{title:"Integrate your application logs to Cloudwatch",permalink:"/guides/tutorial/cloudwatch-integration"},nextItem:{title:"Managing Environment Variables in React (create-react-app)",permalink:"/guides/tutorial/managing-env-variables-in-create-react-app"}},u=[{value:"Installation",id:"installation",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],b={rightToc:u};function d(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},b,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog.\nDatadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery."),Object(o.b)(c.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"),Object(o.b)("li",{parentName:"ul"},"You have a dedicated Qovery project and environment to deploy Datadog (example: Project=Tooling, Environment=Production)"),Object(o.b)("li",{parentName:"ul"},"You have a Datadog account"),Object(o.b)("li",{parentName:"ul"},"You have already created a ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://docs.datadoghq.com/account_management/api-app-keys/#api-keys"}),"Datadog API Key")))),Object(o.b)("h2",{id:"installation"},"Installation"),Object(o.b)("p",null,"In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications."),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-datadog-helm-repository"},"Add the Datadog helm repository"),Object(o.b)("p",null,"Add the Datadog helm repository in your Qovery settings by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://helm.datadoghq.com")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"create-the-datadog-service-within-qovery"},"Create the datadog service within Qovery"),Object(o.b)("p",null,"Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," and these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")," (the name given during the datadog helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"datadog")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"3.49.5")," (this is the version we used for this setup, update it based on the chosen version)"),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:"),Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-yaml"}),"# The following YAML contains the minimum configuration required to deploy the Datadog Agent\n# on your cluster. Update it accordingly to your needs\ndatadog:\n # here we use a Qovery secret to retrieve the Datadog API Key (See next step)\n apiKey: qovery.env.DD_API_KEY\n # Update the site depending on where you want to store your data in Datadog\n site: datadoghq.eu\n # Update the cluster name with the name of your choice\n clusterName: qoverycluster\n")),Object(o.b)("p",null,"There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml"}),"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml")),Object(o.b)("p",null,"Now get to the last step and just ",Object(o.b)("inlineCode",{parentName:"p"},"Create")," the service on Qovery.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"store-the-datadog-api-key-as-secret"},"Store the Datadog API Key as secret"),Object(o.b)("p",null,"In the previous step we have assigned the macro ",Object(o.b)("inlineCode",{parentName:"p"},"qovery.env.DD_API_KEY")," to the API Key value. In this step we will create this secret within the Qovery console."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Open the service overview of the created Datadog service"),Object(o.b)("li",{parentName:"ul"},"Enter the ",Object(o.b)("inlineCode",{parentName:"li"},"Variables")," section"),Object(o.b)("li",{parentName:"ul"},"Add a new Variable with:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Variable = DD_API_KEY"),Object(o.b)("li",{parentName:"ul"},"Value = "),Object(o.b)("li",{parentName:"ul"},"Scope = Service (so that it is accessible only to this service)"),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f")))),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-secret.png",alt:"Datadog - API Key"})),Object(o.b)("p",null,"If you need more information on how to manage your environment variables, have a look at ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment-variable/"}),"this documentation"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-your-chart"},"Deploy your chart"),Object(o.b)("p",null,"Open the ",Object(o.b)("inlineCode",{parentName:"p"},"Play")," button and trigger the deployment of your chart (see point 1 in the picture below)."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/deploy.png",alt:"Datadog - Deploy"})),Object(o.b)("p",null,"You can follow the deployment and access the deployment logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button (see point 2 in the picutre above)."),Object(o.b)("p",null,"Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-pods.png",alt:"Datadog - Pods"})),Object(o.b)("p",null,"You can also look at the Pod logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"verify-the-setup-on-datadog"},"Verify the setup on Datadog"),Object(o.b)("p",null,"Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-console.png",alt:"Datadog - Console"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Datadog agent running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://docs.datadoghq.com/fr/getting_started"}),"https://docs.datadoghq.com/fr/getting_started"),"."))}d.isMDXComponent=!0},444:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=r.a.createContext({}),u=function(e){var t=r.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},b=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),b=u(n),p=a,m=b["".concat(i,".").concat(p)]||b[p]||d[p]||o;return n?r.a.createElement(m,c({ref:t},s,{components:n})):r.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>c;)t[c++]=e;return t}},449:function(e,t,n){var a=n(28).f,r=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var a=n(0),r=n.n(a),o=n(445);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},r.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),i=n(39),c=n(455),l=n(20),s=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,u=n||l,b=Object(c.a)(u),d=Object(r.useRef)(!1),p=s.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!p&&b&&window.docusaurus.prefetch(u),function(){p&&t&&t.disconnect()}}),[u,p,b]),u&&b?o.a.createElement(i.b,Object(a.a)({},e,{onMouseEnter:function(){d.current||(window.docusaurus.preload(u),d.current=!0)},innerRef:function(e){var n,a;p&&e&&b&&(n=e,a=function(){window.docusaurus.prefetch(u)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),a())}))}))).observe(n))},to:u})):o.a.createElement("a",Object(a.a)({},e,{href:u}))}},452:function(e,t,n){"use strict";var a=n(456),r=n(51);function o(e,t){return t.encode?t.strict?a(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,a){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===a[e]&&(a[e]={}),a[e][t[1]]=n):a[e]=n};case"bracket":return function(e,n,a){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==a[e]?a[e]=[].concat(a[e],n):a[e]=[n]:a[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=r({arrayFormat:"none"},t)),a=Object.create(null);return"string"!=typeof e?a:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),r=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(r),o,a)})),Object.keys(a).sort().reduce((function(e,t){var n=a[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):a},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,a){return null===n?[o(t,e),"[",a,"]"].join(""):[o(t,e),"[",o(a,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=r({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(a){var r=e[a];if(void 0===r)return"";if(null===r)return o(a,t);if(Array.isArray(r)){var i=[];return r.slice().forEach((function(e){void 0!==e&&i.push(n(a,e,i.length))})),i.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),u=Object(a.useState)(null),b=u[0],d=u[1];return r.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&r.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",r.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return d("yes")}},"Yes"),"\xa0\xa0",r.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&r.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",r.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,a=e.badge,i=e.leftIcon,l=e.rightIcon,s=e.size,u=e.target,b=e.to,d=c()("jump-to","jump-to--"+s,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},i&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+i})),r.a.createElement("div",{className:"jump-to--main"},a?r.a.createElement("span",{className:"badge badge--primary badge--right"},a):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return u?r.a.createElement("a",{href:b,target:u,className:d},p):r.a.createElement(o.a,{to:b,className:d},p)}},455:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/b5eab6bb.3cd01eba.js.LICENSE.txt b/b5eab6bb.06b51fa5.js.LICENSE.txt similarity index 100% rename from b5eab6bb.3cd01eba.js.LICENSE.txt rename to b5eab6bb.06b51fa5.js.LICENSE.txt diff --git a/b5eab6bb.3cd01eba.js b/b5eab6bb.3cd01eba.js deleted file mode 100644 index 299f3ce261..0000000000 --- a/b5eab6bb.3cd01eba.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see b5eab6bb.3cd01eba.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[201],{352:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return u})),n.d(t,"default",(function(){return b}));var a=n(1),r=n(9),o=(n(0),n(446)),i=n(453),c=(n(445),n(450)),l=(n(454),{last_modified_on:"2024-01-05",$schema:"/.meta/.schemas/guides.json",title:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",author_github:"https://github.com/acarranoqovery",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Kubernetes observability and monitoring with Datadog",description:"How to integrate Datadog with Kubernetes on Qovery.",permalink:"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog",readingTime:"4 min read",source:"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Kubernetes observability and monitoring with Datadog",truncated:!1,prevItem:{title:"Integrate your application logs to Cloudwatch",permalink:"/guides/tutorial/cloudwatch-integration"},nextItem:{title:"Managing Environment Variables in React (create-react-app)",permalink:"/guides/tutorial/managing-env-variables-in-create-react-app"}},u=[{value:"Installation",id:"installation",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],d={rightToc:u};function b(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},d,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog.\nDatadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery."),Object(o.b)(c.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"),Object(o.b)("li",{parentName:"ul"},"You have a dedicated Qovery project and environment to deploy Datadog (example: Project=Tooling, Environment=Production)"),Object(o.b)("li",{parentName:"ul"},"You have a Datadog account"),Object(o.b)("li",{parentName:"ul"},"You have already created a ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://docs.datadoghq.com/account_management/api-app-keys/#api-keys"}),"Datadog API Key")))),Object(o.b)("h2",{id:"installation"},"Installation"),Object(o.b)("p",null,"In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications."),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-datadog-helm-repository"},"Add the Datadog helm repository"),Object(o.b)("p",null,"Add the Datadog helm repository in your Qovery settings by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://helm.datadoghq.com")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"create-the-datadog-service-within-qovery"},"Create the datadog service within Qovery"),Object(o.b)("p",null,"Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," and these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Datadog")," (the name given during the datadog helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"datadog")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"3.49.5")," (this is the version we used for this setup, update it based on the chosen version)"),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:"),Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-yaml"}),"# The following YAML contains the minimum configuration required to deploy the Datadog Agent\n# on your cluster. Update it accordingly to your needs\ndatadog:\n # here we use a Qovery secret to retrieve the Datadog API Key (See next step)\n apiKey: qovery.env.DD_API_KEY\n # Update the site depending on where you want to store your data in Datadog\n site: datadoghq.eu\n # Update the cluster name with the name of your choice\n clusterName: qoverycluster\n\n# in the section below, we are adding Qovery macros in order to automatically add a set \n# of labels and annotations to the deployed Pods/Deployments/services etc.. This is not \n# mandatory to install Datadog itself but it allows you to fully benefit from the Qovery\n# functionalities (Display application logs, restart pods etc..). See the official Qovery\n# Helm documentation for more information.\ncommonLabels: \n qovery.labels.service\n\nclusterAgent:\n deploymentAnnotations:\n qovery.annotations.service\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n\nagents:\n daemonsetAnnotations:\n qovery.annotations.service\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n\nclusterChecksRunner:\n deploymentAnnotations:\n qovery.annotations.service\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n")),Object(o.b)("p",null,"There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml"}),"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml")),Object(o.b)("p",null,"Now get to the last step and just ",Object(o.b)("inlineCode",{parentName:"p"},"Create")," the service on Qovery.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"store-the-datadog-api-key-as-secret"},"Store the Datadog API Key as secret"),Object(o.b)("p",null,"In the previous step we have assigned the macro ",Object(o.b)("inlineCode",{parentName:"p"},"qovery.env.DD_API_KEY")," to the API Key value. In this step we will create this secret within the Qovery console."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Open the service overview of the created Datadog service"),Object(o.b)("li",{parentName:"ul"},"Enter the ",Object(o.b)("inlineCode",{parentName:"li"},"Variables")," section"),Object(o.b)("li",{parentName:"ul"},"Add a new Variable with:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Variable = DD_API_KEY"),Object(o.b)("li",{parentName:"ul"},"Value = "),Object(o.b)("li",{parentName:"ul"},"Scope = Service (so that it is accessible only to this service)"),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f")))),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-secret.png",alt:"Datadog - API Key"})),Object(o.b)("p",null,"If you need more information on how to manage your environment variables, have a look at ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment-variable/"}),"this documentation"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-your-chart"},"Deploy your chart"),Object(o.b)("p",null,"Open the ",Object(o.b)("inlineCode",{parentName:"p"},"Play")," button and trigger the deployment of your chart (see point 1 in the picture below)."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/deploy.png",alt:"Datadog - Deploy"})),Object(o.b)("p",null,"You can follow the deployment and access the deployment logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button (see point 2 in the picutre above)."),Object(o.b)("p",null,"Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-pods.png",alt:"Datadog - Pods"})),Object(o.b)("p",null,"You can also look at the Pod logs by pressing the ",Object(o.b)("inlineCode",{parentName:"p"},"Log")," button.")),Object(o.b)("li",null,Object(o.b)("h4",{id:"verify-the-setup-on-datadog"},"Verify the setup on Datadog"),Object(o.b)("p",null,"Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-console.png",alt:"Datadog - Console"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Datadog agent running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://docs.datadoghq.com/fr/getting_started"}),"https://docs.datadoghq.com/fr/getting_started"),"."))}b.isMDXComponent=!0},444:function(e,t,n){var a;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=r.a.createContext({}),u=function(e){var t=r.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},d=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},b={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(n),p=a,m=d["".concat(i,".").concat(p)]||d[p]||b[p]||o;return n?r.a.createElement(m,c({ref:t},s,{components:n})):r.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>c;)t[c++]=e;return t}},449:function(e,t,n){var a=n(28).f,r=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var a=n(0),r=n.n(a),o=n(445);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},r.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),i=n(39),c=n(455),l=n(20),s=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,u=n||l,d=Object(c.a)(u),b=Object(r.useRef)(!1),p=s.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!p&&d&&window.docusaurus.prefetch(u),function(){p&&t&&t.disconnect()}}),[u,p,d]),u&&d?o.a.createElement(i.b,Object(a.a)({},e,{onMouseEnter:function(){b.current||(window.docusaurus.preload(u),b.current=!0)},innerRef:function(e){var n,a;p&&e&&d&&(n=e,a=function(){window.docusaurus.prefetch(u)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),a())}))}))).observe(n))},to:u})):o.a.createElement("a",Object(a.a)({},e,{href:u}))}},452:function(e,t,n){"use strict";var a=n(456),r=n(51);function o(e,t){return t.encode?t.strict?a(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,a){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===a[e]&&(a[e]={}),a[e][t[1]]=n):a[e]=n};case"bracket":return function(e,n,a){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==a[e]?a[e]=[].concat(a[e],n):a[e]=[n]:a[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=r({arrayFormat:"none"},t)),a=Object.create(null);return"string"!=typeof e?a:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),r=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(r),o,a)})),Object.keys(a).sort().reduce((function(e,t){var n=a[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):a},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,a){return null===n?[o(t,e),"[",a,"]"].join(""):[o(t,e),"[",o(a,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=r({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(a){var r=e[a];if(void 0===r)return"";if(null===r)return o(a,t);if(Array.isArray(r)){var i=[];return r.slice().forEach((function(e){void 0!==e&&i.push(n(a,e,i.length))})),i.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),u=Object(a.useState)(null),d=u[0],b=u[1];return r.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!d&&r.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",r.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return b("yes")}},"Yes"),"\xa0\xa0",r.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==d&&r.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",r.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,a=e.badge,i=e.leftIcon,l=e.rightIcon,s=e.size,u=e.target,d=e.to,b=c()("jump-to","jump-to--"+s,n),p=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},i&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+i})),r.a.createElement("div",{className:"jump-to--main"},a?r.a.createElement("span",{className:"badge badge--primary badge--right"},a):"",t),r.a.createElement("div",{className:"jump-to--right"},r.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return u?r.a.createElement("a",{href:d,target:u,className:b},p):r.a.createElement(o.a,{to:d,className:b},p)}},455:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/community/index.html b/community/index.html index ac3f9c7724..b4e7fc41f3 100644 --- a/community/index.html +++ b/community/index.html @@ -26,7 +26,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/components/index.html b/components/index.html index d19e101f63..d197d461d5 100644 --- a/components/index.html +++ b/components/index.html @@ -26,7 +26,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/contact/index.html b/contact/index.html index f58b93833e..c8cefeda01 100644 --- a/contact/index.html +++ b/contact/index.html @@ -26,7 +26,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/docs/getting-started/basic-concepts/index.html b/docs/getting-started/basic-concepts/index.html index c7bc72b1fd..db9acd6ea1 100644 --- a/docs/getting-started/basic-concepts/index.html +++ b/docs/getting-started/basic-concepts/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/deploy-my-app/index.html b/docs/getting-started/deploy-my-app/index.html index b57ed26014..982edc02b6 100644 --- a/docs/getting-started/deploy-my-app/index.html +++ b/docs/getting-started/deploy-my-app/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/how-qovery-works/index.html b/docs/getting-started/how-qovery-works/index.html index 98796fa452..95b0f08ccf 100644 --- a/docs/getting-started/how-qovery-works/index.html +++ b/docs/getting-started/how-qovery-works/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html index 51053e1906..fbb7cf6562 100644 --- a/docs/getting-started/index.html +++ b/docs/getting-started/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html index d54d20df9a..4027aac903 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html index a23bdf0b2e..5aedf3c7e2 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html index 272bf96d97..0ffc1c3a45 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html index d1f3b45833..4ffde43100 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html index 6597906c89..ab94b00e8d 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/index.html b/docs/getting-started/install-qovery/aws/index.html index 15e6598c65..7fb6715f4b 100644 --- a/docs/getting-started/install-qovery/aws/index.html +++ b/docs/getting-started/install-qovery/aws/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html b/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html index 01f0bc0d71..3e58a829a6 100644 --- a/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html index f29a44dff2..b0e8275320 100644 --- a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html index bfc02d2273..a7c7d3d9de 100644 --- a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/index.html b/docs/getting-started/install-qovery/azure/index.html index 9dda5d1db8..4ffdf3f37e 100644 --- a/docs/getting-started/install-qovery/azure/index.html +++ b/docs/getting-started/install-qovery/azure/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html b/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html index d061637fe9..2e43678e37 100644 --- a/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html index b1113466f6..bbf84d6f7e 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html index 25fca67f91..78029ea29e 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html index 13ce6b1fbc..b382a63e26 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/index.html b/docs/getting-started/install-qovery/gcp/index.html index 1f43dd814f..42bf64675f 100644 --- a/docs/getting-started/install-qovery/gcp/index.html +++ b/docs/getting-started/install-qovery/gcp/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html b/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html index babe2c6047..89cd5c36af 100644 --- a/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/index.html b/docs/getting-started/install-qovery/index.html index c609b6cdf4..758a99fe4c 100644 --- a/docs/getting-started/install-qovery/index.html +++ b/docs/getting-started/install-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/byok-config/index.html b/docs/getting-started/install-qovery/kubernetes/byok-config/index.html index 10f1cb0c0a..6af9663e68 100644 --- a/docs/getting-started/install-qovery/kubernetes/byok-config/index.html +++ b/docs/getting-started/install-qovery/kubernetes/byok-config/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/create-k8s-cluster/index.html b/docs/getting-started/install-qovery/kubernetes/create-k8s-cluster/index.html index d24f2e4ba0..630b417516 100644 --- a/docs/getting-started/install-qovery/kubernetes/create-k8s-cluster/index.html +++ b/docs/getting-started/install-qovery/kubernetes/create-k8s-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/faq/index.html b/docs/getting-started/install-qovery/kubernetes/faq/index.html index 8ea190d384..a9438f2f4e 100644 --- a/docs/getting-started/install-qovery/kubernetes/faq/index.html +++ b/docs/getting-started/install-qovery/kubernetes/faq/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/index.html b/docs/getting-started/install-qovery/kubernetes/index.html index c31f5bb8b9..13bb9c7d3c 100644 --- a/docs/getting-started/install-qovery/kubernetes/index.html +++ b/docs/getting-started/install-qovery/kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/installation-aws/index.html b/docs/getting-started/install-qovery/kubernetes/installation-aws/index.html index f3dbda0ce9..be4565b24b 100644 --- a/docs/getting-started/install-qovery/kubernetes/installation-aws/index.html +++ b/docs/getting-started/install-qovery/kubernetes/installation-aws/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/quickstart/index.html b/docs/getting-started/install-qovery/kubernetes/quickstart/index.html index 45bd93027e..dc6804dabe 100644 --- a/docs/getting-started/install-qovery/kubernetes/quickstart/index.html +++ b/docs/getting-started/install-qovery/kubernetes/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/requirements/index.html b/docs/getting-started/install-qovery/kubernetes/requirements/index.html index c36166645d..7e019c43f0 100644 --- a/docs/getting-started/install-qovery/kubernetes/requirements/index.html +++ b/docs/getting-started/install-qovery/kubernetes/requirements/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html b/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html index e404018b4f..53a00592b1 100644 --- a/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html +++ b/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html index 4a14e9dd71..5d2ca0f1a6 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html index a09796af3b..5717d80aec 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html index d90dea26e9..90d7b8e49a 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html index 27f7a8adf9..08948ac5d4 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/index.html b/docs/getting-started/install-qovery/scaleway/index.html index 663d93b3d7..f192cda0a5 100644 --- a/docs/getting-started/install-qovery/scaleway/index.html +++ b/docs/getting-started/install-qovery/scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html b/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html index bed528bb89..9c0b068d6e 100644 --- a/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/what-is-qovery/index.html b/docs/getting-started/what-is-qovery/index.html index 089ec892df..55a2c7c509 100644 --- a/docs/getting-started/what-is-qovery/index.html +++ b/docs/getting-started/what-is-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/whats-next/index.html b/docs/getting-started/whats-next/index.html index 5869b4bc40..51a53c7290 100644 --- a/docs/getting-started/whats-next/index.html +++ b/docs/getting-started/whats-next/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/index.html b/docs/index.html index 28dc2e90cc..2dc4f3b941 100644 --- a/docs/index.html +++ b/docs/index.html @@ -22,7 +22,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/docs/security-and-compliance/backup-and-restore/index.html b/docs/security-and-compliance/backup-and-restore/index.html index 2cb0d1f97c..3ea2770b53 100644 --- a/docs/security-and-compliance/backup-and-restore/index.html +++ b/docs/security-and-compliance/backup-and-restore/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/security-and-compliance/encryption/index.html b/docs/security-and-compliance/encryption/index.html index 2348d63bdf..9a21976c87 100644 --- a/docs/security-and-compliance/encryption/index.html +++ b/docs/security-and-compliance/encryption/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/security-and-compliance/gdpr/index.html b/docs/security-and-compliance/gdpr/index.html index 2c270a13be..7ff9a68a03 100644 --- a/docs/security-and-compliance/gdpr/index.html +++ b/docs/security-and-compliance/gdpr/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/security-and-compliance/index.html b/docs/security-and-compliance/index.html index 449e60b911..d88877d4ac 100644 --- a/docs/security-and-compliance/index.html +++ b/docs/security-and-compliance/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/security-and-compliance/soc2/index.html b/docs/security-and-compliance/soc2/index.html index fff1dac5cb..1bdfb4b85c 100644 --- a/docs/security-and-compliance/soc2/index.html +++ b/docs/security-and-compliance/soc2/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/useful-resources/faq/index.html b/docs/useful-resources/faq/index.html index 2e9b1425e5..906a375590 100644 --- a/docs/useful-resources/faq/index.html +++ b/docs/useful-resources/faq/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/useful-resources/help-and-support/index.html b/docs/useful-resources/help-and-support/index.html index 6d20561c36..79b0892ea6 100644 --- a/docs/useful-resources/help-and-support/index.html +++ b/docs/useful-resources/help-and-support/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/audit-logs/index.html b/docs/using-qovery/audit-logs/index.html index 61fcbd0a93..faf0916543 100644 --- a/docs/using-qovery/audit-logs/index.html +++ b/docs/using-qovery/audit-logs/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/advanced-settings/index.html b/docs/using-qovery/configuration/advanced-settings/index.html index 7cfef5df56..5ef284e9e0 100644 --- a/docs/using-qovery/configuration/advanced-settings/index.html +++ b/docs/using-qovery/configuration/advanced-settings/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/application-health-checks/index.html b/docs/using-qovery/configuration/application-health-checks/index.html index 4e29d486e8..f0a97b8391 100644 --- a/docs/using-qovery/configuration/application-health-checks/index.html +++ b/docs/using-qovery/configuration/application-health-checks/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/using-qovery/configuration/application/index.html b/docs/using-qovery/configuration/application/index.html index de9f49e0dc..fe41be6905 100644 --- a/docs/using-qovery/configuration/application/index.html +++ b/docs/using-qovery/configuration/application/index.html @@ -26,7 +26,7 @@ - + @@ -62,7 +62,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/index.html b/docs/using-qovery/configuration/cloud-service-provider/index.html index 5b5ef4e070..529da158d4 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cluster-advanced-settings/index.html b/docs/using-qovery/configuration/cluster-advanced-settings/index.html index 3425f4d4e5..44eba5d5c9 100644 --- a/docs/using-qovery/configuration/cluster-advanced-settings/index.html +++ b/docs/using-qovery/configuration/cluster-advanced-settings/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/clusters/index.html b/docs/using-qovery/configuration/clusters/index.html index b0156273c6..4a2e4ee6ed 100644 --- a/docs/using-qovery/configuration/clusters/index.html +++ b/docs/using-qovery/configuration/clusters/index.html @@ -26,7 +26,7 @@ - + @@ -61,7 +61,7 @@ - + diff --git a/docs/using-qovery/configuration/cronjob/index.html b/docs/using-qovery/configuration/cronjob/index.html index 5009710e49..b672bf8816 100644 --- a/docs/using-qovery/configuration/cronjob/index.html +++ b/docs/using-qovery/configuration/cronjob/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/using-qovery/configuration/database/index.html b/docs/using-qovery/configuration/database/index.html index fb9dc30807..ffe4d2c3a5 100644 --- a/docs/using-qovery/configuration/database/index.html +++ b/docs/using-qovery/configuration/database/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/configuration/database/mongodb/index.html b/docs/using-qovery/configuration/database/mongodb/index.html index e2ea04da60..173f0119db 100644 --- a/docs/using-qovery/configuration/database/mongodb/index.html +++ b/docs/using-qovery/configuration/database/mongodb/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/database/mysql/index.html b/docs/using-qovery/configuration/database/mysql/index.html index 0cc235c40f..c1173df2bd 100644 --- a/docs/using-qovery/configuration/database/mysql/index.html +++ b/docs/using-qovery/configuration/database/mysql/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/database/postgresql/index.html b/docs/using-qovery/configuration/database/postgresql/index.html index 350bb5becf..d19884cf4c 100644 --- a/docs/using-qovery/configuration/database/postgresql/index.html +++ b/docs/using-qovery/configuration/database/postgresql/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/database/redis/index.html b/docs/using-qovery/configuration/database/redis/index.html index 8a844937e7..d685e34480 100644 --- a/docs/using-qovery/configuration/database/redis/index.html +++ b/docs/using-qovery/configuration/database/redis/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/deployment-rule/index.html b/docs/using-qovery/configuration/deployment-rule/index.html index 2318f61899..385d95b3fd 100644 --- a/docs/using-qovery/configuration/deployment-rule/index.html +++ b/docs/using-qovery/configuration/deployment-rule/index.html @@ -26,7 +26,7 @@ - + @@ -63,7 +63,7 @@ - + diff --git a/docs/using-qovery/configuration/environment-variable/index.html b/docs/using-qovery/configuration/environment-variable/index.html index 697dd1ea1a..9251507a51 100644 --- a/docs/using-qovery/configuration/environment-variable/index.html +++ b/docs/using-qovery/configuration/environment-variable/index.html @@ -26,7 +26,7 @@ - + @@ -67,7 +67,7 @@ - + diff --git a/docs/using-qovery/configuration/environment/index.html b/docs/using-qovery/configuration/environment/index.html index 83d50298c4..d78d577d87 100644 --- a/docs/using-qovery/configuration/environment/index.html +++ b/docs/using-qovery/configuration/environment/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/using-qovery/configuration/helm/index.html b/docs/using-qovery/configuration/helm/index.html index 1519c094ad..0ede9cd5dc 100644 --- a/docs/using-qovery/configuration/helm/index.html +++ b/docs/using-qovery/configuration/helm/index.html @@ -26,7 +26,7 @@ - + @@ -44,17 +44,16 @@ - +

Helm

A helm is one of the service types that can be deployed within an Environment. Via the helm service you can deploy any helm chart from a git repository or helm repository directly on the kubernetes cluster.

Qovery allows you to create and deploy helms from two different sources: Git Repository or Helm Repository

Deploying from a Git Repository

In this configuration, Qovery will pull the chart from the chosen repository and install it on your kubernetes cluster.

Deploying from a Helm Repository

In this configuration, Qovery will pull the chosen helm repository a chart and install it on your kubernetes cluster.

To improve security and avoid deploying charts from non-authorized repositories, we have decided to restrict the list of Helm Repositories you can use during the setup process. Only an administrator with the right permissions can manage it from the Helm Repository Management page

Create a Helm

  1. Go into the chosen environment and press the "New Service" button and then the "Create helm" button

  2. Select the following fields:

    • Helm chart Name: give a name to your helm
    • Description (Optional): write a text to describe your helm service
    • Helm chart Source: Chose between Git Repository or Helm Repository, depending on the source location of your application

    If you want to deploy a helm from a Git Repository you will have to select:

    • Git Repository: Select the git provider and the git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).
    • Branch: Select branch that Qovery should use to deploy your helm
    • Root Helm Path: base folder in which the helm chart resides in your repository

    If you want to deploy a helm from a Helm Repository you will have to select:

    • Helm repository: select the helm repository storing the helm chart. Note: only pre-configured registry are available in this list, check the Helm Repository Management page for more information.

    • Chart name: the name of the helm to be deployed with this application (example: jenkins)

    • Chart version: the version of the chart to be deployed with this application (example: 1.0.0).

    • Helm arguments: specify the helm arguments to be used during the helm install/upgrade.

    • Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.

    • Allow cluster-wide resources: Allow this chart to deploy resources outside of the environment namespace. You must have the full-access permissions on the cluster, the right is present by default in Admin, Devops and Owner roles. Example: if you want to create a new CRD or a new ClusterRole, check this flag.

    Auto Deploy

    Available only if you have selected a git repository as helm source. -See the Deploying with auto-deploy feature section.

  3. By default, the values.yaml next to your chart.yaml is used to configure your helm chart but you can create an override in the next two sections.

    In the override as file section, define the location of the file containing the override you want to define for the values of this chart.

    Git Repository

    If you want to override it from another already existing values file from a Git Repository you will have to select:

    • Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).
    • Branch: Select branch that Qovery should use to deploy your helm
    • Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.

    Raw YAML

    If you want to override it with a raw yaml you will have to click on Create override. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.

  4. if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the --set, --set-string or --set-json arguments.

    Add a new variable by declaring:

    • Variable: the variable name
    • Value type:
      • Select Generic to pass configuration from the command line
      • Select String if you want to pass a string type (and avoid weird numeric conversions like 021341 interpreted as a number and thus the 0 is removed)
      • Select Json to set json values (scalars/objects/arrays) from the command line
    • Value
  5. You will find a recap of your helm setup and you can now decide to:

    • Go back to one of the previous steps and change your helm settings (1)
    • Create your helm without deploying it (2)
    • Create and deploy your helm (3)

    Helm

Deployment Management

Have a look at the Deployment Management section for more information.

Configuration

Once created, you can access the configuration of a helm at any time via the Settings tab available on the helm section

You can find below the description of each of the tabs available in this section

General

General settings section allows you to set up the name and the source of your helm (git repository or helm repository) .

Git Repository

If your heml is from a git repository, within this section you can:

  • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
  • Modify the branch that Qovery should use for deploying your application
  • Modify Root Helm Path - base folder in which the helm chart resides in your repository

Helm Repository

If your helm is deployed from a helm repository, within this section you can modify:

  • Helm repository: select the helm repository storing the helm chart. You can add a new container registry by clicking on New helm repository.
  • Chart name: the name of the helm to be deployed with this application (example: jenkins)
  • Chart version: the version of the chart to be deployed with this application (example: 1.0.0).

Arguments

For both kind of helm source, within this section yoiu can modify:

  • Helm arguments: specify the helm arguments to be used during the helm install/upgrade.
  • Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.

Auto Deploy

See the Deploying with auto-deploy feature section.

Values

Within this section you can modify the values override defined within the creation flow.

Override as file

Define the location of the file containing the override you want to define for the values of this chart.

Select the source of your override:

Git Repository +See the Deploying with auto-deploy feature section.

  • By default, the values.yaml next to your chart.yaml is used to configure your helm chart but you can create an override in the next two sections.

    In the override as file section, define the location of the file containing the override you want to define for the values of this chart.

    Git Repository

    If you want to override it from another already existing values file from a Git Repository you will have to select:

    • Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).
    • Branch: Select branch that Qovery should use to deploy your helm
    • Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.

    Raw YAML

    If you want to override it with a raw yaml you will have to click on Create override. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.

  • if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the --set, --set-string or --set-json arguments.

    Add a new variable by declaring:

    • Variable: the variable name
    • Value type:
      • Select Generic to pass configuration from the command line
      • Select String if you want to pass a string type (and avoid weird numeric conversions like 021341 interpreted as a number and thus the 0 is removed)
      • Select Json to set json values (scalars/objects/arrays) from the command line
    • Value
  • You will find a recap of your helm setup and you can now decide to:

    • Go back to one of the previous steps and change your helm settings (1)
    • Create your helm without deploying it (2)
    • Create and deploy your helm (3)

    Helm

  • Deployment Management

    Have a look at the Deployment Management section for more information.

    Configuration

    Once created, you can access the configuration of a helm at any time via the Settings tab available on the helm section

    You can find below the description of each of the tabs available in this section

    General

    General settings section allows you to set up the name and the source of your helm (git repository or helm repository) .

    Git Repository

    If your heml is from a git repository, within this section you can:

    • Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).
    • Modify the branch that Qovery should use for deploying your application
    • Modify Root Helm Path - base folder in which the helm chart resides in your repository

    Helm Repository

    If your helm is deployed from a helm repository, within this section you can modify:

    • Helm repository: select the helm repository storing the helm chart. You can add a new container registry by clicking on New helm repository.
    • Chart name: the name of the helm to be deployed with this application (example: jenkins)
    • Chart version: the version of the chart to be deployed with this application (example: 1.0.0).

    Arguments

    For both kind of helm source, within this section yoiu can modify:

    • Helm arguments: specify the helm arguments to be used during the helm install/upgrade.
    • Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.

    Auto Deploy

    See the Deploying with auto-deploy feature section.

    Values

    Within this section you can modify the values override defined within the creation flow.

    Override as file

    Define the location of the file containing the override you want to define for the values of this chart.

    Select the source of your override:

    Git Repository If you want to override it from another already existing values file from a Git Repository you will have to select:

    • Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).
    • Branch: Select branch that Qovery should use to deploy your helm
    • Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.

    Raw YAML -If you want to override it with a raw yaml you will have to click on Create override. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.

    On both file types you can add Qovery Macros to add more functionalities to your helm deployment. Check the section below.

    Override as arguments

    if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the --set, --set-string or --set-json arguments.

    Add a new variable by declaring:

    • Override type: select the type of your variable. For more information, have a look at the Helm documentation
    • Variable: the variable name
    • Value

    You can add Qovery Macros to add more functionalities to your helm deployment. Check the section below.

    Qovery macros

    Qovery allows you to use the following macros within your override file. These macros will be automatically replaced by Qovery during the deployment phase, allowing you to access additional functionalities.

    Access to the Qovery environment variables

    Macro: qovery.env.<ENV_VAR_NAME>

    It allows you to access the value of an environment variable or secret stored within Qovery. This is helpful when your deployed helm chart needs to access a secret or an environment variable available in Qovery.

    Example:

    On Qovery we have created a database and created two aliases for the database url (DB_URL) and, the database password (DB_PASSWORD). Here an example on how the helm chart can access these environment variables and let your service point to the right database:

    postgres:
    url: qovery.env.DB_URL
    password: qovery.env.DB_PASSWORD

    Enable all the Qovery features

    • Macro for labels: qovery.labels.service
    • Macro for annotations: qovery.annotations.service

    It allows to add all the labels and annotations required to activate all the Qovery features on the deployed Helm chart (access your container logs, apply the stop/restart actions, display the pod status in the overview page). -Make sure to create an override and assign the macro to the labels of any deployed Pods/Deployments/Services/Jobs.

    Example:

    commonLabels:
    mylabel: "test"
    qovery.labels.service
    annotations:
    qovery.annotations.service

    When your Pods/Deployments/Services/Jobs are deployed, you should see Qovery labels and annotations added to the resources. Something like:

    apiVersion: v1
    kind: Pod
    metadata:
    labels:
    qovery.com/environment-id: 00000000-0000-0000-0000-000000000000
    qovery.com/project-id: 00000000-0000-0000-0000-000000000000
    qovery.com/service-id: 00000000-0000-0000-0000-000000000000
    qovery.com/service-type: helm
    ...
    annotations:
    qovery.com/service-version: application:x.y.z
    ...

    Ports

    Within this section you can define the port exposed publicly. +If you want to override it with a raw yaml you will have to click on Create override. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.

    On both file types you can use your environment variables in your chart. Check the section below.

    Override as arguments

    if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the --set, --set-string or --set-json arguments.

    Add a new variable by declaring:

    • Override type: select the type of your variable. For more information, have a look at the Helm documentation
    • Variable: the variable name
    • Value

    You can use your environment variables in your chart. Check the section below.

    Using the environment variables in your chart

    Qovery allows you to use the following macros within your override file. These macros will be automatically replaced by Qovery during the deployment phase, allowing you to access additional functionalities.

    Access to the Qovery environment variables

    Macro: qovery.env.<ENV_VAR_NAME>

    It allows you to access the value of an environment variable or secret stored within Qovery. This is helpful when your deployed helm chart needs to access a secret or an environment variable available in Qovery.

    Example:

    On Qovery we have created a database and created two aliases for the database url (DB_URL) and, the database password (DB_PASSWORD). Here an example on how the helm chart can access these environment variables and let your service point to the right database:

    postgres:
    url: qovery.env.DB_URL
    password: qovery.env.DB_PASSWORD

    Ports

    Within this section you can define the port exposed publicly. You can edit the existing ports or declare new ones by specifying:

    • Service name: this is the kubernetes service name in your helm chart
    • Namespace (only if Allow cluster-wide resources was enabled): this is the kubernetes namespace used by your helm chart to deploy the pods behind the chosen service
    • Service port: this is the port exposed internally by your service for the other services
    • Protocol: you can select the protocol used by your service. Today Qovery supports the following protocols:
      • HTTPS (Select this protocol if you need to run Websockets)
      • gRPC
    • External port: it is the port that can be used to access this service over the internet (when exposed publicly). Note that for HTTP and gRPC the port is set by default to 443.
    • Port Name: it is the name assigned to the port. When multiple ports are exposed publicly, its value is used to route the traffic to the right port based on the called subdomain (which will contain the port name value). Since each port is exposed on the port 443, having a different subdomain is the only way to have multiple ports exposed over the internet. If not set, the default value is p<portNumber> (see Qovery Provided Domain section for more information)

    Important Informations

    • Connections on public ports are automatically closed after 60 seconds. If you want to implement long living connection (like for websockets) please make sure to use the rigth ingress timeouts in the advanced settings section

    Domains

    Within this section you can customize the domain used to reach your helm services.

    You can customize the domain of your helm services in different ways, depending on what you want to achieve:

    • You want to use your own domain for your helm services
    • You want to modify the subdomain assigned to your helm services by Qovery (i.e. change p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh into my-app-domain.za8ad0657.bool.sh).

    In both cases, you can assign the new custom domain to your helm services press the Add Domain button.

    Application Domains

    Configuring your own domain

    Once the domain is added within the Qovery console (Example: mydomain.com), you need to configure within your DNS two CNAME records pointing to the domain provided by Qovery, as shown in the UI (example: mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud and *.mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud).

    Having a wildcard domain (example: *.mydomain.com) configured on your DNS will avoid you to modify the Qovery setup every time you want to add a new subdomain. If wildcard is not supported by your DNS provider, you will have to configure each subdomain manually.

    If the service needs to expose more than one port publicly, you can define a dedicated subdomain to redirect the traffic on the right port by setting the “Port Name” value within the port settings.

    From this point, Qovery will automatically handle the TLS/SSL certificate creation and renewal for the configured domain.

    Custom Domain

    Special case - CDN in proxy mode

    If your service is behind a CDN using a proxy mode (i.e. the traffic is routed through the CDN to Qovery), make sure to disable the option "Generate certificate" on the domain setup. Since the certificate of your domain is directly managed by the CDN, Qovery won't be able to do that for you and it will raise warnings on your application status.

    CDN Proxy

    Change the auto assigned sub-domain

    You can specify a different sub-domain for your helm services as long as it belongs to the assigned cluster domain (see Qovery provided domains). Example:

    • your current domain is zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh (so your assigned cluster domain is za8ad0659.bool.sh)
    • you can enter a new custom domain myfrontend.za8ad0659.bool.sh (since it is a subdomain of the cluster domain)

    The helm services will now be accessible from both the default and the new custom domain.

    Connecting from the internet

    Your helm services can be reached from the internet by publicly exposing at least one of its ports (See the Ports section to know more). Once this is done, Qovery will generate for you a domain to reach your application from the internet. You can also customize the domain assigned to your application and manage by yourself this assignment via the Domain section.

    Qovery provided domains

    For each port publicly exposed, a domain is automatically assigned by Qovery to your helm services. Qovery will manage for you the networking and the TLS configuration for these domains.

    Example: p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh or <service_name>-p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh for helm services.

    Note:

    • each service deployed on the same cluster will have the same root domain assigned (example: za8ad0657.bool.sh)
    • the first characters of the domain (before the -) is based on the portName given to the port associated with this domain (See the port section)
    • a default domain (without the portName) is assigned to the default port(See the port section). Example zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh

    Special Case - Preview Environment For each port exposed publicly, an additional domain will be created with the following pattern portName-prId-srvName-envSourceName.cluster_domain:

    • portName: is the port name, as explained above
    • prID: is the id of the PR that has generated the preview environment
    • srvName: is the name of the service
    • envSourceName: is the name of the blueprint environment that has created the current preview environment

    domain example: p80-123-frontend-blueprint.za8ad0657.bool.sh

    Custom domains

    If you prefer to assign your own domain to the helm services, have a look at the Domain section to know more.

    Logs

    To learn how to display your helm logs, navigate to logs section

    Clone

    You can create a clone of the service via the clone feature. A new service with the same configuration (see below for exceptions) will be created into the target environment.

    Clone Service

    The target environment can be the same as the current environment or even another one in a completely different project.

    Important information

    Not every configuration parameter will be copied within the new service for consistency reasons. The configuration is fully or partially copied depending on the target environment:

    • same environment:
      • custom domain: this setup is not copied into the new service (to avoid collision)
    • another environment:
      • custom domain: this setup is not copied into the new service (to avoid collision)
      • environment variable: aliases defined on environment variables are not copied (since the aliased env var might not exist)
      • deployment pipeline: stage setup is not copied (since the target stage might not exist)
      • number of instances: if the target environment runs on a Qovery EC2 cluster, the max number of instances is set to 1 (Qovery EC2 constraint)

    Please check the configuration of the new service before deploying it.

    Advanced Settings

    You can further customize the service behaviour via the service advanced settings. Check this documentation to know more.

    Delete a Helm

    1. Choose your helm

    2. In the helm overview, click on the 3 dots button and remove the helm.

    @@ -62,7 +61,7 @@ - + @@ -80,7 +79,7 @@ - + diff --git a/docs/using-qovery/configuration/index.html b/docs/using-qovery/configuration/index.html index c63d77214d..66fff366ff 100644 --- a/docs/using-qovery/configuration/index.html +++ b/docs/using-qovery/configuration/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/lifecycle-job/index.html b/docs/using-qovery/configuration/lifecycle-job/index.html index 2ad2cddd5b..5bb40b863d 100644 --- a/docs/using-qovery/configuration/lifecycle-job/index.html +++ b/docs/using-qovery/configuration/lifecycle-job/index.html @@ -26,7 +26,7 @@ - + @@ -61,7 +61,7 @@ - + diff --git a/docs/using-qovery/configuration/object-storage/index.html b/docs/using-qovery/configuration/object-storage/index.html index f8986548cf..27e90c55ee 100644 --- a/docs/using-qovery/configuration/object-storage/index.html +++ b/docs/using-qovery/configuration/object-storage/index.html @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/api-token/index.html b/docs/using-qovery/configuration/organization/api-token/index.html index 31ef34023c..925789e689 100644 --- a/docs/using-qovery/configuration/organization/api-token/index.html +++ b/docs/using-qovery/configuration/organization/api-token/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/container-registry/index.html b/docs/using-qovery/configuration/organization/container-registry/index.html index ec8c9ecdcc..0fb8600092 100644 --- a/docs/using-qovery/configuration/organization/container-registry/index.html +++ b/docs/using-qovery/configuration/organization/container-registry/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/git-repository-access/index.html b/docs/using-qovery/configuration/organization/git-repository-access/index.html index ea1960b133..2375520569 100644 --- a/docs/using-qovery/configuration/organization/git-repository-access/index.html +++ b/docs/using-qovery/configuration/organization/git-repository-access/index.html @@ -26,7 +26,7 @@ - + @@ -60,7 +60,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/helm-repository/index.html b/docs/using-qovery/configuration/organization/helm-repository/index.html index 36e1a20bee..a8fe66a91c 100644 --- a/docs/using-qovery/configuration/organization/helm-repository/index.html +++ b/docs/using-qovery/configuration/organization/helm-repository/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/index.html b/docs/using-qovery/configuration/organization/index.html index 83a37d044d..f5a7042790 100644 --- a/docs/using-qovery/configuration/organization/index.html +++ b/docs/using-qovery/configuration/organization/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/members-rbac/index.html b/docs/using-qovery/configuration/organization/members-rbac/index.html index f8f8851de7..c874c531b6 100644 --- a/docs/using-qovery/configuration/organization/members-rbac/index.html +++ b/docs/using-qovery/configuration/organization/members-rbac/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/configuration/project/index.html b/docs/using-qovery/configuration/project/index.html index 906932a136..6b64ac6b05 100644 --- a/docs/using-qovery/configuration/project/index.html +++ b/docs/using-qovery/configuration/project/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/provider/index.html b/docs/using-qovery/configuration/provider/index.html index 9ce92fdfa7..376726735c 100644 --- a/docs/using-qovery/configuration/provider/index.html +++ b/docs/using-qovery/configuration/provider/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/service-health-checks/index.html b/docs/using-qovery/configuration/service-health-checks/index.html index 073afa0671..bd50ca3e4a 100644 --- a/docs/using-qovery/configuration/service-health-checks/index.html +++ b/docs/using-qovery/configuration/service-health-checks/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/using-qovery/configuration/user-account/index.html b/docs/using-qovery/configuration/user-account/index.html index 53454ee521..445da71b00 100644 --- a/docs/using-qovery/configuration/user-account/index.html +++ b/docs/using-qovery/configuration/user-account/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html index 4dac80761f..4908ef3566 100644 --- a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html +++ b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html index ed060a45da..12de7ee210 100644 --- a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html +++ b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-actions/index.html b/docs/using-qovery/deployment/deployment-actions/index.html index 485a7f72cb..1610341e84 100644 --- a/docs/using-qovery/deployment/deployment-actions/index.html +++ b/docs/using-qovery/deployment/deployment-actions/index.html @@ -26,7 +26,7 @@ - + @@ -61,7 +61,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-history/index.html b/docs/using-qovery/deployment/deployment-history/index.html index f8542b51a0..b3b1d55113 100644 --- a/docs/using-qovery/deployment/deployment-history/index.html +++ b/docs/using-qovery/deployment/deployment-history/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-pipeline/index.html b/docs/using-qovery/deployment/deployment-pipeline/index.html index 0999d7a3a4..0924bcd83d 100644 --- a/docs/using-qovery/deployment/deployment-pipeline/index.html +++ b/docs/using-qovery/deployment/deployment-pipeline/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-strategies/index.html b/docs/using-qovery/deployment/deployment-strategies/index.html index 68220549ae..64deb2da87 100644 --- a/docs/using-qovery/deployment/deployment-strategies/index.html +++ b/docs/using-qovery/deployment/deployment-strategies/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/deployment/image-mirroring/index.html b/docs/using-qovery/deployment/image-mirroring/index.html index 3fbd0d354e..0392682b22 100644 --- a/docs/using-qovery/deployment/image-mirroring/index.html +++ b/docs/using-qovery/deployment/image-mirroring/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/deployment/index.html b/docs/using-qovery/deployment/index.html index 84bac4ef6d..a42d8ab35b 100644 --- a/docs/using-qovery/deployment/index.html +++ b/docs/using-qovery/deployment/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/deployment/logs/index.html b/docs/using-qovery/deployment/logs/index.html index 096ebc9589..df444ef76e 100644 --- a/docs/using-qovery/deployment/logs/index.html +++ b/docs/using-qovery/deployment/logs/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/deployment/running-and-deployment-statuses/index.html b/docs/using-qovery/deployment/running-and-deployment-statuses/index.html index 65a41d381d..55f463b9f7 100644 --- a/docs/using-qovery/deployment/running-and-deployment-statuses/index.html +++ b/docs/using-qovery/deployment/running-and-deployment-statuses/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/index.html b/docs/using-qovery/index.html index 54c0840d56..c3400216d0 100644 --- a/docs/using-qovery/index.html +++ b/docs/using-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/api-integration/index.html b/docs/using-qovery/integration/api-integration/index.html index d02958ef75..52bd3ba0d4 100644 --- a/docs/using-qovery/integration/api-integration/index.html +++ b/docs/using-qovery/integration/api-integration/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/container-registry/index.html b/docs/using-qovery/integration/container-registry/index.html index ad81a942e8..2f54b182a3 100644 --- a/docs/using-qovery/integration/container-registry/index.html +++ b/docs/using-qovery/integration/container-registry/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/circle-ci/index.html b/docs/using-qovery/integration/continuous-integration/circle-ci/index.html index 5c669bb4bb..ec262f3d27 100644 --- a/docs/using-qovery/integration/continuous-integration/circle-ci/index.html +++ b/docs/using-qovery/integration/continuous-integration/circle-ci/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/github-actions/index.html b/docs/using-qovery/integration/continuous-integration/github-actions/index.html index aa2d1c1c93..e6bb4ade2f 100644 --- a/docs/using-qovery/integration/continuous-integration/github-actions/index.html +++ b/docs/using-qovery/integration/continuous-integration/github-actions/index.html @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html b/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html index 74496f2683..145316ebe4 100644 --- a/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html +++ b/docs/using-qovery/integration/continuous-integration/gitlab-ci/index.html @@ -26,7 +26,7 @@ - + @@ -61,7 +61,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/index.html b/docs/using-qovery/integration/continuous-integration/index.html index b9c9584ae4..b57c39b209 100644 --- a/docs/using-qovery/integration/continuous-integration/index.html +++ b/docs/using-qovery/integration/continuous-integration/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/continuous-integration/jenkins/index.html b/docs/using-qovery/integration/continuous-integration/jenkins/index.html index a71b0d11d0..5a20e22420 100644 --- a/docs/using-qovery/integration/continuous-integration/jenkins/index.html +++ b/docs/using-qovery/integration/continuous-integration/jenkins/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/integration/git-repository/index.html b/docs/using-qovery/integration/git-repository/index.html index c9a0b31137..17d31e5057 100644 --- a/docs/using-qovery/integration/git-repository/index.html +++ b/docs/using-qovery/integration/git-repository/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/helm-repository/index.html b/docs/using-qovery/integration/helm-repository/index.html index ef49cf558c..c3465a33f4 100644 --- a/docs/using-qovery/integration/helm-repository/index.html +++ b/docs/using-qovery/integration/helm-repository/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/index.html b/docs/using-qovery/integration/index.html index d204e1feca..06fd2673ad 100644 --- a/docs/using-qovery/integration/index.html +++ b/docs/using-qovery/integration/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/monitoring/datadog/index.html b/docs/using-qovery/integration/monitoring/datadog/index.html index cd9b346dd7..328936b4ad 100644 --- a/docs/using-qovery/integration/monitoring/datadog/index.html +++ b/docs/using-qovery/integration/monitoring/datadog/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/integration/monitoring/index.html b/docs/using-qovery/integration/monitoring/index.html index 533b83cc16..df474e3ff9 100644 --- a/docs/using-qovery/integration/monitoring/index.html +++ b/docs/using-qovery/integration/monitoring/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/monitoring/new-relic/index.html b/docs/using-qovery/integration/monitoring/new-relic/index.html index 85d9c4b85e..731c2e194f 100644 --- a/docs/using-qovery/integration/monitoring/new-relic/index.html +++ b/docs/using-qovery/integration/monitoring/new-relic/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html b/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html index 24d9433d23..adbc914f67 100644 --- a/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html +++ b/docs/using-qovery/integration/secret-manager/aws-secrets-manager/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/secret-manager/doppler/index.html b/docs/using-qovery/integration/secret-manager/doppler/index.html index 5523c6d651..5c9b34056b 100644 --- a/docs/using-qovery/integration/secret-manager/doppler/index.html +++ b/docs/using-qovery/integration/secret-manager/doppler/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/secret-manager/index.html b/docs/using-qovery/integration/secret-manager/index.html index 532463da1d..b298f0f9fe 100644 --- a/docs/using-qovery/integration/secret-manager/index.html +++ b/docs/using-qovery/integration/secret-manager/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/slack/index.html b/docs/using-qovery/integration/slack/index.html index 5f7bd40dbc..fb4c4906e0 100644 --- a/docs/using-qovery/integration/slack/index.html +++ b/docs/using-qovery/integration/slack/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/integration/terraform/index.html b/docs/using-qovery/integration/terraform/index.html index 8d7c3334d2..0365caf82a 100644 --- a/docs/using-qovery/integration/terraform/index.html +++ b/docs/using-qovery/integration/terraform/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/integration/webhook/index.html b/docs/using-qovery/integration/webhook/index.html index 5ee23096f9..36fa7efefa 100644 --- a/docs/using-qovery/integration/webhook/index.html +++ b/docs/using-qovery/integration/webhook/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/interface/cli/index.html b/docs/using-qovery/interface/cli/index.html index f7b6afd611..8a455ca84c 100644 --- a/docs/using-qovery/interface/cli/index.html +++ b/docs/using-qovery/interface/cli/index.html @@ -26,7 +26,7 @@ - + @@ -89,7 +89,7 @@ - + diff --git a/docs/using-qovery/interface/index.html b/docs/using-qovery/interface/index.html index a3adf32e70..c46960cca3 100644 --- a/docs/using-qovery/interface/index.html +++ b/docs/using-qovery/interface/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/interface/rest-api/index.html b/docs/using-qovery/interface/rest-api/index.html index be43d75dc7..7fea4de19f 100644 --- a/docs/using-qovery/interface/rest-api/index.html +++ b/docs/using-qovery/interface/rest-api/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/interface/terraform-interface/index.html b/docs/using-qovery/interface/terraform-interface/index.html index 559e1e633c..3bc70486cd 100644 --- a/docs/using-qovery/interface/terraform-interface/index.html +++ b/docs/using-qovery/interface/terraform-interface/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/interface/web-interface/index.html b/docs/using-qovery/interface/web-interface/index.html index 7ccdb1c9b9..b9a7edcfbf 100644 --- a/docs/using-qovery/interface/web-interface/index.html +++ b/docs/using-qovery/interface/web-interface/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/maintenance/index.html b/docs/using-qovery/maintenance/index.html index 82b3bed50b..dc8be63800 100644 --- a/docs/using-qovery/maintenance/index.html +++ b/docs/using-qovery/maintenance/index.html @@ -26,7 +26,7 @@ - + @@ -71,7 +71,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html b/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html index 87662a76c5..6afce8fb21 100644 --- a/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/index.html b/docs/using-qovery/troubleshoot/index.html index 2885c2572b..c91f514fb3 100644 --- a/docs/using-qovery/troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html b/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html index 27103bd62a..84b8730a93 100644 --- a/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/service-deployment-troubleshoot/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html b/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html index a17f6b0139..6937c0b188 100644 --- a/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/service-run-troubleshoot/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/e1e1580b.5ec24049.js b/e1e1580b.5ec24049.js deleted file mode 100644 index 407313a596..0000000000 --- a/e1e1580b.5ec24049.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see e1e1580b.5ec24049.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[263],{415:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return u})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return b})),n.d(t,"default",(function(){return m}));var r=n(1),a=n(9),o=(n(0),n(446)),i=n(453),c=n(445),l=n(450),u=(n(454),{last_modified_on:"2024-01-12",$schema:"/.meta/.schemas/guides.json",title:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",author_github:"https://github.com/jul-dan",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",permalink:"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost",readingTime:"3 min read",source:"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Monitor and reduce Kubernetes spend with Kubecost",truncated:!1,prevItem:{title:"Migration",permalink:"/guides/advanced/migration"},nextItem:{title:"Monitoring",permalink:"/guides/advanced/monitoring"}},b=[{value:"Goal",id:"goal",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],p={rightToc:b};function m(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(l.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"))),Object(o.b)("h2",{id:"goal"},"Goal"),Object(o.b)("p",null,"In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs"),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-kubecost-helm-repository"},"Add the Kubecost helm repository"),Object(o.b)("p",null,"Add the Kubecost helm repository in your Qovery settings by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://kubecost.github.io/cost-analyzer/")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-the-kubecost-helm-chart"},"Deploy the Kubecost helm chart"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If have a Kubecost token, first create a Qovery environment variable: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"variable: ",Object(o.b)("inlineCode",{parentName:"li"},"KUBECOST_TOKEN")),Object(o.b)("li",{parentName:"ul"},"value: ",Object(o.b)("inlineCode",{parentName:"li"},"")),Object(o.b)("li",{parentName:"ul"},"scope: ",Object(o.b)("inlineCode",{parentName:"li"},"Environment")),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f"))),Object(o.b)("p",null,"Deploy the Kubecost helm chart in your Qovery environment by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")," (the name given during the kubecost helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"cost-analyzer")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"1.108.0")," (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)"))),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))))),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-yaml"}),"kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token\n\nglobal:\n podAnnotations:\n qovery.annotations.service\n additionalLabels:\n qovery.labels.service\n")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"These are necessary to get all Qovery features, check ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," for more information.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Currently it is not possible to ",Object(o.b)("strong",{parentName:"p"},"Stop")," the Kubecost helm service. You can Start/Update/Delete it.")),Object(o.b)("p",null,"Then click on ",Object(o.b)("inlineCode",{parentName:"p"},"Create and Deploy"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"expose-kubecost"},"Expose Kubecost"),Object(o.b)("p",null,"Check the cost-analyzer service name in the deployment logs, example: ",Object(o.b)("inlineCode",{parentName:"p"},"helm-z325f0565-kubecost-cost-analyzer")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(o.b)("p",null,"Go in your helm chart settings under the ",Object(o.b)("inlineCode",{parentName:"p"},"Networking")," section and add a new port by clicking on ",Object(o.b)("inlineCode",{parentName:"p"},"Add port"),", and set these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Service name: ",Object(o.b)("inlineCode",{parentName:"li"},"helm-z325f0565-kubecost-cost-analyzer")," (the service name taken from the deployment logs)"),Object(o.b)("li",{parentName:"ul"},"Service port: ",Object(o.b)("inlineCode",{parentName:"li"},"9090")),Object(o.b)("li",{parentName:"ul"},"Select protocol: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTP")),Object(o.b)("li",{parentName:"ul"},"Port name: You can customize it or let the default port name.")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(o.b)("p",null,"Then click on Create and redeploy your helm in Qovery."),Object(o.b)("p",null,"A URL will be generated to access the Kubecost frontend application:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Kubecost running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://docs.kubecost.com/#getting-started"}),"https://docs.kubecost.com/#getting-started"),"."))}m.isMDXComponent=!0},444:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=a.a.createContext({}),s=function(e){var t=a.a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},b=function(e){var t=s(e.components);return a.a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),b=s(n),m=r,d=b["".concat(i,".").concat(m)]||b[m]||p[m]||o;return n?a.a.createElement(d,c({ref:t},u,{components:n})):a.a.createElement(d,c({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var u=2;u1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,u=void 0===l?n:a(l,n);u>c;)t[c++]=e;return t}},449:function(e,t,n){var r=n(28).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var r=n(0),a=n.n(r),o=n(445);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var r=n(1),a=n(0),o=n.n(a),i=n(39),c=n(455),l=n(20),u=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,s=n||l,b=Object(c.a)(s),p=Object(a.useRef)(!1),m=u.a.canUseIntersectionObserver;return Object(a.useEffect)((function(){return!m&&b&&window.docusaurus.prefetch(s),function(){m&&t&&t.disconnect()}}),[s,m,b]),s&&b?o.a.createElement(i.b,Object(r.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(s),p.current=!0)},innerRef:function(e){var n,r;m&&e&&b&&(n=e,r=function(){window.docusaurus.prefetch(s)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),r())}))}))).observe(n))},to:s})):o.a.createElement("a",Object(r.a)({},e,{href:s}))}},452:function(e,t,n){"use strict";var r=n(456),a=n(51);function o(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(a),o,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[o(t,e),"[",r,"]"].join(""):[o(t,e),"[",o(r,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return o(r,t);if(Array.isArray(a)){var i=[];return a.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return o(r,t)+"="+o(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},u="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),s=Object(r.useState)(null),b=s[0],p=s[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:u,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,r=e.badge,i=e.leftIcon,l=e.rightIcon,u=e.size,s=e.target,b=e.to,p=c()("jump-to","jump-to--"+u,n),m=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},i&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+i})),a.a.createElement("div",{className:"jump-to--main"},r?a.a.createElement("span",{className:"badge badge--primary badge--right"},r):"",t),a.a.createElement("div",{className:"jump-to--right"},a.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return s?a.a.createElement("a",{href:b,target:s,className:p},m):a.a.createElement(o.a,{to:b,className:p},m)}},455:function(e,t,n){"use strict";function r(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return r}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/e1e1580b.a32d0a8e.js b/e1e1580b.a32d0a8e.js new file mode 100644 index 0000000000..f58bd2c913 --- /dev/null +++ b/e1e1580b.a32d0a8e.js @@ -0,0 +1,2 @@ +/*! For license information please see e1e1580b.a32d0a8e.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[263],{415:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return u})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return b})),n.d(t,"default",(function(){return m}));var r=n(1),a=n(9),o=(n(0),n(446)),i=n(453),c=n(445),l=n(450),u=(n(454),{last_modified_on:"2024-04-10",$schema:"/.meta/.schemas/guides.json",title:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",author_github:"https://github.com/jul-dan",tags:["type: tutorial","technology: qovery"],hide_pagination:!0}),s={categories:[{name:"tutorial",title:"Tutorial",description:"Additional step-by-step resources to leverage even more Qovery",permalink:"/guides/tutorial"}],coverLabel:"Monitor and reduce Kubernetes spend with Kubecost",description:"How to deploy Kubecost with Qovery",permalink:"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost",readingTime:"3 min read",source:"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md",tags:[{label:"type: tutorial",permalink:"/guides/tags/type-tutorial"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Monitor and reduce Kubernetes spend with Kubecost",truncated:!1,prevItem:{title:"Migration",permalink:"/guides/advanced/migration"},nextItem:{title:"Monitoring",permalink:"/guides/advanced/monitoring"}},b=[{value:"Goal",id:"goal",children:[]},{value:"Conclusion",id:"conclusion",children:[]}],p={rightToc:b};function m(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(l.a,{name:"guide",mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery cluster running"))),Object(o.b)("h2",{id:"goal"},"Goal"),Object(o.b)("p",null,"In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs"),Object(o.b)(i.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("h4",{id:"add-the-kubecost-helm-repository"},"Add the Kubecost helm repository"),Object(o.b)("p",null,"Add the Kubecost helm repository in your Qovery settings by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/organization/helm-repository/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Repository name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Kind: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTPS")),Object(o.b)("li",{parentName:"ul"},"Repository URL: ",Object(o.b)("inlineCode",{parentName:"li"},"https://kubecost.github.io/cost-analyzer/")))),Object(o.b)("li",null,Object(o.b)("h4",{id:"deploy-the-kubecost-helm-chart"},"Deploy the Kubecost helm chart"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If have a Kubecost token, first create a Qovery environment variable: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"variable: ",Object(o.b)("inlineCode",{parentName:"li"},"KUBECOST_TOKEN")),Object(o.b)("li",{parentName:"ul"},"value: ",Object(o.b)("inlineCode",{parentName:"li"},"")),Object(o.b)("li",{parentName:"ul"},"scope: ",Object(o.b)("inlineCode",{parentName:"li"},"Environment")),Object(o.b)("li",{parentName:"ul"},"Secret variable \u2714\ufe0f"))),Object(o.b)("p",null,"Deploy the Kubecost helm chart in your Qovery environment by following ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/helm/"}),"this documentation")," with these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"General:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Application name: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")),Object(o.b)("li",{parentName:"ul"},"Source:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Helm source: ",Object(o.b)("inlineCode",{parentName:"li"},"Helm repository")),Object(o.b)("li",{parentName:"ul"},"Repository: ",Object(o.b)("inlineCode",{parentName:"li"},"Kubecost")," (the name given during the kubecost helm repository added in the previous step)"),Object(o.b)("li",{parentName:"ul"},"Chart name: ",Object(o.b)("inlineCode",{parentName:"li"},"cost-analyzer")),Object(o.b)("li",{parentName:"ul"},"Version: ",Object(o.b)("inlineCode",{parentName:"li"},"1.108.0")," (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)"))),Object(o.b)("li",{parentName:"ul"},"Allow cluster-wide resources \u2714\ufe0f"))),Object(o.b)("li",{parentName:"ul"},"Values",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Values override as file:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"File source: ",Object(o.b)("inlineCode",{parentName:"li"},"Raw YAML")),Object(o.b)("li",{parentName:"ul"},"Raw YAML:")))))),Object(o.b)("pre",null,Object(o.b)("code",Object(r.a)({parentName:"pre"},{className:"language-yaml"}),"kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token\n\n")),Object(o.b)("p",null,"Then click on ",Object(o.b)("inlineCode",{parentName:"p"},"Create and Deploy"))),Object(o.b)("li",null,Object(o.b)("h4",{id:"expose-kubecost"},"Expose Kubecost"),Object(o.b)("p",null,"Check the cost-analyzer service name in the deployment logs, example: ",Object(o.b)("inlineCode",{parentName:"p"},"helm-z325f0565-kubecost-cost-analyzer")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(o.b)("p",null,"Go in your helm chart settings under the ",Object(o.b)("inlineCode",{parentName:"p"},"Networking")," section and add a new port by clicking on ",Object(o.b)("inlineCode",{parentName:"p"},"Add port"),", and set these values:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Service name: ",Object(o.b)("inlineCode",{parentName:"li"},"helm-z325f0565-kubecost-cost-analyzer")," (the service name taken from the deployment logs)"),Object(o.b)("li",{parentName:"ul"},"Service port: ",Object(o.b)("inlineCode",{parentName:"li"},"9090")),Object(o.b)("li",{parentName:"ul"},"Select protocol: ",Object(o.b)("inlineCode",{parentName:"li"},"HTTP")),Object(o.b)("li",{parentName:"ul"},"Port name: You can customize it or let the default port name.")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(o.b)("p",null,"Then click on Create and redeploy your helm in Qovery."),Object(o.b)("p",null,"A URL will be generated to access the Kubecost frontend application:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"You now have Kubecost running on your Qovery cluster. You can check their ",Object(o.b)("inlineCode",{parentName:"p"},"Getting Started")," guide to familiarize yourself with the product: ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://docs.kubecost.com/#getting-started"}),"https://docs.kubecost.com/#getting-started"),"."))}m.isMDXComponent=!0},444:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function a(){for(var e=[],t=0;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=a.a.createContext({}),s=function(e){var t=a.a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},b=function(e){var t=s(e.components);return a.a.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),b=s(n),m=r,d=b["".concat(i,".").concat(m)]||b[m]||p[m]||o;return n?a.a.createElement(d,c({ref:t},u,{components:n})):a.a.createElement(d,c({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var u=2;u1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,u=void 0===l?n:a(l,n);u>c;)t[c++]=e;return t}},449:function(e,t,n){var r=n(28).f,a=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in a||n(10)&&r(a,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(e){return""}}})},450:function(e,t,n){"use strict";n(449);var r=n(0),a=n.n(r),o=n(445);t.a=function(e){var t=e.children,n=e.name;return a.a.createElement(o.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},a.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},451:function(e,t,n){"use strict";var r=n(1),a=n(0),o=n.n(a),i=n(39),c=n(455),l=n(20),u=n.n(l);t.a=function(e){var t,n=e.to,l=e.href,s=n||l,b=Object(c.a)(s),p=Object(a.useRef)(!1),m=u.a.canUseIntersectionObserver;return Object(a.useEffect)((function(){return!m&&b&&window.docusaurus.prefetch(s),function(){m&&t&&t.disconnect()}}),[s,m,b]),s&&b?o.a.createElement(i.b,Object(r.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(s),p.current=!0)},innerRef:function(e){var n,r;m&&e&&b&&(n=e,r=function(){window.docusaurus.prefetch(s)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){n===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(n),t.disconnect(),r())}))}))).observe(n))},to:s})):o.a.createElement("a",Object(r.a)({},e,{href:s}))}},452:function(e,t,n){"use strict";var r=n(456),a=n(51);function o(e,t){return t.encode?t.strict?r(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,r){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===r[e]&&(r[e]={}),r[e][t[1]]=n):r[e]=n};case"bracket":return function(e,n,r){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==r[e]?r[e]=[].concat(r[e],n):r[e]=[n]:r[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=a({arrayFormat:"none"},t)),r=Object.create(null);return"string"!=typeof e?r:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),a=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(a),o,r)})),Object.keys(r).sort().reduce((function(e,t){var n=r[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):r},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,r){return null===n?[o(t,e),"[",r,"]"].join(""):[o(t,e),"[",o(r,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=a({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var a=e[r];if(void 0===a)return"";if(null===a)return o(r,t);if(Array.isArray(a)){var i=[];return a.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return o(r,t)+"="+o(a,t)})).filter((function(e){return e.length>0})).join("&"):""}},453:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(444),n(452)),i=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+c+" failed",body:"The tutorial on:\n\n"+c+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},u="https://github.com/qovery/documentation/issues/new?"+i.a.stringify(l),s=Object(r.useState)(null),b=s[0],p=s[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!b&&a.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",a.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:u,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==b&&a.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",a.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},454:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=n(451),i=n(444),c=n.n(i);n(134);t.a=function(e){var t=e.children,n=e.className,r=e.badge,i=e.leftIcon,l=e.rightIcon,u=e.size,s=e.target,b=e.to,p=c()("jump-to","jump-to--"+u,n),m=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},i&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+i})),a.a.createElement("div",{className:"jump-to--main"},r?a.a.createElement("span",{className:"badge badge--primary badge--right"},r):"",t),a.a.createElement("div",{className:"jump-to--right"},a.a.createElement("i",{className:"feather icon-"+(l||"chevron-right")+" arrow"}))));return s?a.a.createElement("a",{href:b,target:s,className:p},m):a.a.createElement(o.a,{to:b,className:p},m)}},455:function(e,t,n){"use strict";function r(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return r}))},456:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/e1e1580b.5ec24049.js.LICENSE.txt b/e1e1580b.a32d0a8e.js.LICENSE.txt similarity index 100% rename from e1e1580b.5ec24049.js.LICENSE.txt rename to e1e1580b.a32d0a8e.js.LICENSE.txt diff --git a/guides/advanced/continuous-integration/index.html b/guides/advanced/continuous-integration/index.html index 0303720a67..06847de876 100644 --- a/guides/advanced/continuous-integration/index.html +++ b/guides/advanced/continuous-integration/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/costs-control/index.html b/guides/advanced/costs-control/index.html index 9924dd9c02..c393a43ea6 100644 --- a/guides/advanced/costs-control/index.html +++ b/guides/advanced/costs-control/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/deploy-api-gateway/index.html b/guides/advanced/deploy-api-gateway/index.html index 8635cc34db..3911a455c2 100644 --- a/guides/advanced/deploy-api-gateway/index.html +++ b/guides/advanced/deploy-api-gateway/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/deploy-aws-services/index.html b/guides/advanced/deploy-aws-services/index.html index d35b4105a8..e4921b7bde 100644 --- a/guides/advanced/deploy-aws-services/index.html +++ b/guides/advanced/deploy-aws-services/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/deploy-external-services/index.html b/guides/advanced/deploy-external-services/index.html index b6d02508a0..d540633ed9 100644 --- a/guides/advanced/deploy-external-services/index.html +++ b/guides/advanced/deploy-external-services/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/deploy-frontend/index.html b/guides/advanced/deploy-frontend/index.html index ea8b762d9c..cfd430d664 100644 --- a/guides/advanced/deploy-frontend/index.html +++ b/guides/advanced/deploy-frontend/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/guides/advanced/helm-chart/index.html b/guides/advanced/helm-chart/index.html index 4715107838..647d759301 100644 --- a/guides/advanced/helm-chart/index.html +++ b/guides/advanced/helm-chart/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/index.html b/guides/advanced/index.html index 7194ad45f8..fd6f20f58b 100644 --- a/guides/advanced/index.html +++ b/guides/advanced/index.html @@ -26,7 +26,7 @@ - + @@ -79,7 +79,7 @@ - + diff --git a/guides/advanced/microservices/index.html b/guides/advanced/microservices/index.html index bcc7b4adbd..580c1c5fa7 100644 --- a/guides/advanced/microservices/index.html +++ b/guides/advanced/microservices/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/guides/advanced/migration/index.html b/guides/advanced/migration/index.html index c6bf32d0cf..e204060ba2 100644 --- a/guides/advanced/migration/index.html +++ b/guides/advanced/migration/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/monitoring/index.html b/guides/advanced/monitoring/index.html index af0b46e453..6b122841c1 100644 --- a/guides/advanced/monitoring/index.html +++ b/guides/advanced/monitoring/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/monorepository/index.html b/guides/advanced/monorepository/index.html index 41144e6883..9a35345237 100644 --- a/guides/advanced/monorepository/index.html +++ b/guides/advanced/monorepository/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/advanced/production/index.html b/guides/advanced/production/index.html index 560b1458a9..2b1dd991a3 100644 --- a/guides/advanced/production/index.html +++ b/guides/advanced/production/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/seed-database/index.html b/guides/advanced/seed-database/index.html index 8b1ac3fcf2..27a7ec64c9 100644 --- a/guides/advanced/seed-database/index.html +++ b/guides/advanced/seed-database/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/advanced/terraform/index.html b/guides/advanced/terraform/index.html index 2972a2508a..a661171397 100644 --- a/guides/advanced/terraform/index.html +++ b/guides/advanced/terraform/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/use-preview-environments/index.html b/guides/advanced/use-preview-environments/index.html index 72395727d6..6733b543aa 100644 --- a/guides/advanced/use-preview-environments/index.html +++ b/guides/advanced/use-preview-environments/index.html @@ -26,7 +26,7 @@ - + @@ -52,7 +52,7 @@ - + diff --git a/guides/getting-started/create-a-database/index.html b/guides/getting-started/create-a-database/index.html index 57c29559c0..f34d44c855 100644 --- a/guides/getting-started/create-a-database/index.html +++ b/guides/getting-started/create-a-database/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/getting-started/debugging/index.html b/guides/getting-started/debugging/index.html index ff6e3f6a78..315effeccd 100644 --- a/guides/getting-started/debugging/index.html +++ b/guides/getting-started/debugging/index.html @@ -26,7 +26,7 @@ - + @@ -52,7 +52,7 @@ - + diff --git a/guides/getting-started/deploy-your-first-application/index.html b/guides/getting-started/deploy-your-first-application/index.html index c12b13e5fa..e01aba0aba 100644 --- a/guides/getting-started/deploy-your-first-application/index.html +++ b/guides/getting-started/deploy-your-first-application/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/getting-started/index.html b/guides/getting-started/index.html index 9d8df6dbef..5cb5fb4565 100644 --- a/guides/getting-started/index.html +++ b/guides/getting-started/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/guides/getting-started/managing-environment-variables/index.html b/guides/getting-started/managing-environment-variables/index.html index 4c5e23a539..fe26041e1f 100644 --- a/guides/getting-started/managing-environment-variables/index.html +++ b/guides/getting-started/managing-environment-variables/index.html @@ -26,7 +26,7 @@ - + @@ -60,7 +60,7 @@ - + diff --git a/guides/getting-started/setting-custom-domain/index.html b/guides/getting-started/setting-custom-domain/index.html index 057d4d281c..5938b1c9b4 100644 --- a/guides/getting-started/setting-custom-domain/index.html +++ b/guides/getting-started/setting-custom-domain/index.html @@ -26,7 +26,7 @@ - + @@ -52,7 +52,7 @@ - + diff --git a/guides/index.html b/guides/index.html index 52fde5a2f4..85c465a4f4 100644 --- a/guides/index.html +++ b/guides/index.html @@ -26,7 +26,7 @@ - + @@ -130,7 +130,7 @@ - + @@ -140,7 +140,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -295,7 +295,7 @@ - + diff --git a/guides/installation-guide/guide-amazon-web-services/index.html b/guides/installation-guide/guide-amazon-web-services/index.html index 9a52b26b4d..09158652f6 100644 --- a/guides/installation-guide/guide-amazon-web-services/index.html +++ b/guides/installation-guide/guide-amazon-web-services/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-google-cloud-platform/index.html b/guides/installation-guide/guide-google-cloud-platform/index.html index e0c3e1d785..30ff66464b 100644 --- a/guides/installation-guide/guide-google-cloud-platform/index.html +++ b/guides/installation-guide/guide-google-cloud-platform/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-kubernetes/index.html b/guides/installation-guide/guide-kubernetes/index.html index e450ff0881..4c8095a8e6 100644 --- a/guides/installation-guide/guide-kubernetes/index.html +++ b/guides/installation-guide/guide-kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-microsoft-azure/index.html b/guides/installation-guide/guide-microsoft-azure/index.html index fcf246a472..44524cdc5d 100644 --- a/guides/installation-guide/guide-microsoft-azure/index.html +++ b/guides/installation-guide/guide-microsoft-azure/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-scaleway/index.html b/guides/installation-guide/guide-scaleway/index.html index 8c9d818012..7d2bf796bd 100644 --- a/guides/installation-guide/guide-scaleway/index.html +++ b/guides/installation-guide/guide-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/index.html b/guides/installation-guide/index.html index 91071311e0..f919891bb2 100644 --- a/guides/installation-guide/index.html +++ b/guides/installation-guide/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tags/database-postgresql/index.html b/guides/tags/database-postgresql/index.html index bae821c9c5..2b6cd42952 100644 --- a/guides/tags/database-postgresql/index.html +++ b/guides/tags/database-postgresql/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/guides/tags/framework-rails/index.html b/guides/tags/framework-rails/index.html index 66745390ac..c4202b3592 100644 --- a/guides/tags/framework-rails/index.html +++ b/guides/tags/framework-rails/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/index.html b/guides/tags/index.html index 47a8ff8e14..819b8a86bc 100644 --- a/guides/tags/index.html +++ b/guides/tags/index.html @@ -26,7 +26,7 @@ - + @@ -49,7 +49,7 @@ - + diff --git a/guides/tags/installation-guide-aws/index.html b/guides/tags/installation-guide-aws/index.html index dcf7339a4b..2ec676a107 100644 --- a/guides/tags/installation-guide-aws/index.html +++ b/guides/tags/installation-guide-aws/index.html @@ -26,7 +26,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/guides/tags/installation-guide-azure/index.html b/guides/tags/installation-guide-azure/index.html index 61fb95557a..408e89a815 100644 --- a/guides/tags/installation-guide-azure/index.html +++ b/guides/tags/installation-guide-azure/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/installation-guide-gcp/index.html b/guides/tags/installation-guide-gcp/index.html index 11858ff3e8..6c7178c621 100644 --- a/guides/tags/installation-guide-gcp/index.html +++ b/guides/tags/installation-guide-gcp/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/installation-guide-kubernetes/index.html b/guides/tags/installation-guide-kubernetes/index.html index c9a6fe22a9..61495b0320 100644 --- a/guides/tags/installation-guide-kubernetes/index.html +++ b/guides/tags/installation-guide-kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/installation-guide-scaleway/index.html b/guides/tags/installation-guide-scaleway/index.html index c051cd4723..a80cf69788 100644 --- a/guides/tags/installation-guide-scaleway/index.html +++ b/guides/tags/installation-guide-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/language-javascript/index.html b/guides/tags/language-javascript/index.html index 8f0a21e804..de851c917e 100644 --- a/guides/tags/language-javascript/index.html +++ b/guides/tags/language-javascript/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/guides/tags/language-kotlin/index.html b/guides/tags/language-kotlin/index.html index 705a5e2f84..00bd168004 100644 --- a/guides/tags/language-kotlin/index.html +++ b/guides/tags/language-kotlin/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/guides/tags/language-ruby/index.html b/guides/tags/language-ruby/index.html index 1b64251efa..0d9fa7e573 100644 --- a/guides/tags/language-ruby/index.html +++ b/guides/tags/language-ruby/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/language-rust/index.html b/guides/tags/language-rust/index.html index e8e48237fe..bf7851f4c5 100644 --- a/guides/tags/language-rust/index.html +++ b/guides/tags/language-rust/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tags/technology-docker/index.html b/guides/tags/technology-docker/index.html index 2b2f6dd3f6..1179562ba7 100644 --- a/guides/tags/technology-docker/index.html +++ b/guides/tags/technology-docker/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/technology-github/index.html b/guides/tags/technology-github/index.html index 5cd0852ce8..7de9e0b0ac 100644 --- a/guides/tags/technology-github/index.html +++ b/guides/tags/technology-github/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/technology-helm/index.html b/guides/tags/technology-helm/index.html index deb2d4ef36..46d13c2246 100644 --- a/guides/tags/technology-helm/index.html +++ b/guides/tags/technology-helm/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/technology-qovery/index.html b/guides/tags/technology-qovery/index.html index 5d17d7c88d..743c721fd9 100644 --- a/guides/tags/technology-qovery/index.html +++ b/guides/tags/technology-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -92,13 +92,13 @@ - + - + @@ -129,7 +129,7 @@ - + @@ -195,13 +195,13 @@ - + - + diff --git a/guides/tags/technology-terraform/index.html b/guides/tags/technology-terraform/index.html index 285a39d5b0..39c33be4f1 100644 --- a/guides/tags/technology-terraform/index.html +++ b/guides/tags/technology-terraform/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/type-guide/index.html b/guides/tags/type-guide/index.html index 407e0ac18f..9a35ad7217 100644 --- a/guides/tags/type-guide/index.html +++ b/guides/tags/type-guide/index.html @@ -26,7 +26,7 @@ - + @@ -99,7 +99,7 @@ - + diff --git a/guides/tags/type-tutorial/index.html b/guides/tags/type-tutorial/index.html index c80fd5a2fe..786582d0e5 100644 --- a/guides/tags/type-tutorial/index.html +++ b/guides/tags/type-tutorial/index.html @@ -26,7 +26,7 @@ - + @@ -96,13 +96,13 @@ - + - + @@ -131,7 +131,7 @@ - + @@ -201,13 +201,13 @@ - + - + diff --git a/guides/tutorial/aws-sqs-lambda-with-qovery/index.html b/guides/tutorial/aws-sqs-lambda-with-qovery/index.html index 393cf3a19f..4da86f8d96 100644 --- a/guides/tutorial/aws-sqs-lambda-with-qovery/index.html +++ b/guides/tutorial/aws-sqs-lambda-with-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/aws-vpc-peering-with-qovery/index.html b/guides/tutorial/aws-vpc-peering-with-qovery/index.html index 956e5c9627..a7bde6f443 100644 --- a/guides/tutorial/aws-vpc-peering-with-qovery/index.html +++ b/guides/tutorial/aws-vpc-peering-with-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html b/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html index b4d5b8e77c..e782d4c547 100644 --- a/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html +++ b/guides/tutorial/blazingly-fast-preview-environments-for-nextjs-nodejs-and-mongodb-on-aws/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html b/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html index 7c390e7323..f351034e44 100644 --- a/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html +++ b/guides/tutorial/build-e2e-testing-ephemeral-environments/index.html @@ -26,7 +26,7 @@ - + @@ -81,7 +81,7 @@ - + diff --git a/guides/tutorial/cloudwatch-integration/index.html b/guides/tutorial/cloudwatch-integration/index.html index c426af6ad9..a3021f1773 100644 --- a/guides/tutorial/cloudwatch-integration/index.html +++ b/guides/tutorial/cloudwatch-integration/index.html @@ -26,7 +26,7 @@ - + @@ -54,7 +54,7 @@ - + diff --git a/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html b/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html index 1ff196cdbc..7f78152bc7 100644 --- a/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html +++ b/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html @@ -26,7 +26,7 @@ - + @@ -69,7 +69,7 @@ - + diff --git a/guides/tutorial/create-a-playground-environment-on-aws/index.html b/guides/tutorial/create-a-playground-environment-on-aws/index.html index 6f1364f039..33f210582f 100644 --- a/guides/tutorial/create-a-playground-environment-on-aws/index.html +++ b/guides/tutorial/create-a-playground-environment-on-aws/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html b/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html index 13d74e6739..8ae57474ac 100644 --- a/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html +++ b/guides/tutorial/create-your-staging-environment-from-your-production-environment-on-aws/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html b/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html index 2d72f57765..dc0e476f0d 100644 --- a/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html +++ b/guides/tutorial/customizing-preview-url-with-qovery-cli/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tutorial/data-seeding-in-postgres/index.html b/guides/tutorial/data-seeding-in-postgres/index.html index a3d0f74337..9cc4dc08cf 100644 --- a/guides/tutorial/data-seeding-in-postgres/index.html +++ b/guides/tutorial/data-seeding-in-postgres/index.html @@ -26,7 +26,7 @@ - + @@ -64,7 +64,7 @@ - + diff --git a/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html b/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html index 43e3e3eeb1..20e6541aaa 100644 --- a/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html +++ b/guides/tutorial/deploy-rails-with-postgresql-and-sidekiq/index.html @@ -26,7 +26,7 @@ - + @@ -104,7 +104,7 @@ - + diff --git a/guides/tutorial/deploy-temporal-on-kubernetes/index.html b/guides/tutorial/deploy-temporal-on-kubernetes/index.html index c71db86bb0..f086a5aac2 100644 --- a/guides/tutorial/deploy-temporal-on-kubernetes/index.html +++ b/guides/tutorial/deploy-temporal-on-kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tutorial/generate-qovery-api-client/index.html b/guides/tutorial/generate-qovery-api-client/index.html index 6c4044e5c2..74661fc720 100644 --- a/guides/tutorial/generate-qovery-api-client/index.html +++ b/guides/tutorial/generate-qovery-api-client/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html b/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html index 63f8d02e49..1bf1f705f5 100644 --- a/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html +++ b/guides/tutorial/getting-started-with-preview-environments-on-aws-for-beginners/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/github-organization-repository-access/index.html b/guides/tutorial/github-organization-repository-access/index.html index 6b301cbab2..c8fe28daf8 100644 --- a/guides/tutorial/github-organization-repository-access/index.html +++ b/guides/tutorial/github-organization-repository-access/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tutorial/grafana-install/index.html b/guides/tutorial/grafana-install/index.html index ac6db525d5..f22f8e01c8 100644 --- a/guides/tutorial/grafana-install/index.html +++ b/guides/tutorial/grafana-install/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html b/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html index 0cee650df0..9da698309c 100644 --- a/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html +++ b/guides/tutorial/how-to-activate-sso-to-connect-to-your-eks-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html index 0ac259e405..d659408949 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-1/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html index a5b759ccd4..c4514df368 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-2/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html index ddbf19f4f6..67b5ebe571 100644 --- a/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html +++ b/guides/tutorial/how-to-build-a-cloud-version-of-your-open-source-software-part-3/index.html @@ -26,7 +26,7 @@ - + @@ -67,7 +67,7 @@ - + diff --git a/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html b/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html index 289729b780..ae79ee67d3 100644 --- a/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html +++ b/guides/tutorial/how-to-connect-to-a-managed-mongodb-instance-on-aws/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html b/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html index e601806826..76723ee7c3 100644 --- a/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html +++ b/guides/tutorial/how-to-connect-to-your-eks-cluster-with-kubectl/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html b/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html index 6fa8ac293a..97de0abc33 100644 --- a/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html +++ b/guides/tutorial/how-to-create-an-rds-instance-through-aws-console/index.html @@ -26,7 +26,7 @@ - + @@ -52,7 +52,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html index b99fb8d212..c841bef7ea 100644 --- a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html +++ b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html @@ -26,7 +26,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html index 7d9375eb2f..072ffc7358 100644 --- a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html +++ b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html index 0708cb27d8..0de68e317e 100644 --- a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html +++ b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/guides/tutorial/how-to-run-commands-at-application-startup/index.html b/guides/tutorial/how-to-run-commands-at-application-startup/index.html index 7ec01b4e87..bc58cbea64 100644 --- a/guides/tutorial/how-to-run-commands-at-application-startup/index.html +++ b/guides/tutorial/how-to-run-commands-at-application-startup/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html b/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html index 8e05fcecf6..3e59cbc1ac 100644 --- a/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html +++ b/guides/tutorial/how-to-use-cloudfront-with-react-frontend-application-on-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -52,7 +52,7 @@ - + diff --git a/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html b/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html index 3f7d50a15d..d6f4ab0e73 100644 --- a/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html +++ b/guides/tutorial/how-to-use-lifecycle-job-to-deploy-any-kind-of-resources/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tutorial/how-to-write-a-dockerfile/index.html b/guides/tutorial/how-to-write-a-dockerfile/index.html index 05b34a91f5..2fe8ea2c57 100644 --- a/guides/tutorial/how-to-write-a-dockerfile/index.html +++ b/guides/tutorial/how-to-write-a-dockerfile/index.html @@ -26,7 +26,7 @@ - + @@ -49,7 +49,7 @@ - + diff --git a/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html b/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html index 52ecfa5ce3..39c7ca2ea2 100644 --- a/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html +++ b/guides/tutorial/import-your-environment-variables-with-the-qovery-cli/index.html @@ -26,7 +26,7 @@ - + @@ -54,7 +54,7 @@ - + diff --git a/guides/tutorial/index.html b/guides/tutorial/index.html index 9fb3215c7f..44affa9664 100644 --- a/guides/tutorial/index.html +++ b/guides/tutorial/index.html @@ -26,7 +26,7 @@ - + @@ -96,13 +96,13 @@ - + - + @@ -131,7 +131,7 @@ - + @@ -201,13 +201,13 @@ - + - + diff --git a/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html b/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html index 5b5185ecb4..5efaf50afd 100644 --- a/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html +++ b/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html @@ -26,7 +26,7 @@ - + @@ -38,23 +38,19 @@ - +
    -

    Kubernetes observability and monitoring with Datadog

    How to integrate Datadog with Kubernetes on Qovery.

    While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog. -Datadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery.

    Installation

    In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications.

    1. Add the Datadog helm repository

      Add the Datadog helm repository in your Qovery settings by following this documentation

      • Repository name: Datadog
      • Kind: HTTPS
      • Repository URL: https://helm.datadoghq.com
    2. Create the datadog service within Qovery

      Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following this documentation and these values:

      • General:
        • Application name: Datadog
        • Source:
          • Helm source: Helm repository
          • Repository: Datadog (the name given during the datadog helm repository added in the previous step)
          • Chart name: datadog
          • Version: 3.49.5 (this is the version we used for this setup, update it based on the chosen version)
          • Allow cluster-wide resources ✔️
      • Values
        • Values override as file:
        • File source: Raw YAML
        • Raw YAML:
      # The following YAML contains the minimum configuration required to deploy the Datadog Agent
      # on your cluster. Update it accordingly to your needs
      datadog:
      # here we use a Qovery secret to retrieve the Datadog API Key (See next step)
      apiKey: qovery.env.DD_API_KEY
      # Update the site depending on where you want to store your data in Datadog
      site: datadoghq.eu
      # Update the cluster name with the name of your choice
      clusterName: qoverycluster
      -
      # in the section below, we are adding Qovery macros in order to automatically add a set
      # of labels and annotations to the deployed Pods/Deployments/services etc.. This is not
      # mandatory to install Datadog itself but it allows you to fully benefit from the Qovery
      # functionalities (Display application logs, restart pods etc..). See the official Qovery
      # Helm documentation for more information.
      commonLabels:
      qovery.labels.service
      -
      clusterAgent:
      deploymentAnnotations:
      qovery.annotations.service
      podAnnotations:
      qovery.annotations.service
      additionalLabels:
      qovery.labels.service
      -
      agents:
      daemonsetAnnotations:
      qovery.annotations.service
      podAnnotations:
      qovery.annotations.service
      additionalLabels:
      qovery.labels.service
      -
      clusterChecksRunner:
      deploymentAnnotations:
      qovery.annotations.service
      podAnnotations:
      qovery.annotations.service
      additionalLabels:
      qovery.labels.service

      There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml

      Now get to the last step and just Create the service on Qovery.

    3. Store the Datadog API Key as secret

      In the previous step we have assigned the macro qovery.env.DD_API_KEY to the API Key value. In this step we will create this secret within the Qovery console.

      • Open the service overview of the created Datadog service
      • Enter the Variables section
      • Add a new Variable with:
        • Variable = DD_API_KEY
        • Value = <your_API_KEY>
        • Scope = Service (so that it is accessible only to this service)
        • Secret variable ✔️

      Datadog - API Key

      If you need more information on how to manage your environment variables, have a look at this documentation

    4. Deploy your chart

      Open the Play button and trigger the deployment of your chart (see point 1 in the picture below).

      Datadog - Deploy

      You can follow the deployment and access the deployment logs by pressing the Log button (see point 2 in the picutre above).

      Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console.

      Datadog - Pods

      You can also look at the Pod logs by pressing the Log button.

    5. Verify the setup on Datadog

      Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster

      Datadog - Console

    Conclusion

    You now have Datadog agent running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.datadoghq.com/fr/getting_started.

    +

    Kubernetes observability and monitoring with Datadog

    How to integrate Datadog with Kubernetes on Qovery.

    While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog. +Datadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery.

    Installation

    In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications.

    1. Add the Datadog helm repository

      Add the Datadog helm repository in your Qovery settings by following this documentation

      • Repository name: Datadog
      • Kind: HTTPS
      • Repository URL: https://helm.datadoghq.com
    2. Create the datadog service within Qovery

      Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following this documentation and these values:

      • General:
        • Application name: Datadog
        • Source:
          • Helm source: Helm repository
          • Repository: Datadog (the name given during the datadog helm repository added in the previous step)
          • Chart name: datadog
          • Version: 3.49.5 (this is the version we used for this setup, update it based on the chosen version)
          • Allow cluster-wide resources ✔️
      • Values
        • Values override as file:
        • File source: Raw YAML
        • Raw YAML:
      # The following YAML contains the minimum configuration required to deploy the Datadog Agent
      # on your cluster. Update it accordingly to your needs
      datadog:
      # here we use a Qovery secret to retrieve the Datadog API Key (See next step)
      apiKey: qovery.env.DD_API_KEY
      # Update the site depending on where you want to store your data in Datadog
      site: datadoghq.eu
      # Update the cluster name with the name of your choice
      clusterName: qoverycluster

      There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml

      Now get to the last step and just Create the service on Qovery.

    3. Store the Datadog API Key as secret

      In the previous step we have assigned the macro qovery.env.DD_API_KEY to the API Key value. In this step we will create this secret within the Qovery console.

      • Open the service overview of the created Datadog service
      • Enter the Variables section
      • Add a new Variable with:
        • Variable = DD_API_KEY
        • Value = <your_API_KEY>
        • Scope = Service (so that it is accessible only to this service)
        • Secret variable ✔️

      Datadog - API Key

      If you need more information on how to manage your environment variables, have a look at this documentation

    4. Deploy your chart

      Open the Play button and trigger the deployment of your chart (see point 1 in the picture below).

      Datadog - Deploy

      You can follow the deployment and access the deployment logs by pressing the Log button (see point 2 in the picutre above).

      Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console.

      Datadog - Pods

      You can also look at the Pod logs by pressing the Log button.

    5. Verify the setup on Datadog

      Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster

      Datadog - Console

    Conclusion

    You now have Datadog agent running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.datadoghq.com/fr/getting_started.

    - + @@ -66,7 +62,7 @@ - + diff --git a/guides/tutorial/managing-env-variables-in-create-react-app/index.html b/guides/tutorial/managing-env-variables-in-create-react-app/index.html index 51149bdc4a..1bb9ec4b94 100644 --- a/guides/tutorial/managing-env-variables-in-create-react-app/index.html +++ b/guides/tutorial/managing-env-variables-in-create-react-app/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html index 704d5fc03e..6abfc2879a 100644 --- a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html +++ b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html b/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html index d96bc06860..ececda3175 100644 --- a/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html +++ b/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html @@ -26,7 +26,7 @@ - + @@ -38,19 +38,18 @@ - +
    -

    Monitor and reduce Kubernetes spend with Kubecost

    How to deploy Kubecost with Qovery

    Goal

    In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs

    1. Add the Kubecost helm repository

      Add the Kubecost helm repository in your Qovery settings by following this documentation with these values:

      • Repository name: Kubecost
      • Kind: HTTPS
      • Repository URL: https://kubecost.github.io/cost-analyzer/
    2. Deploy the Kubecost helm chart

      Deploy the Kubecost helm chart in your Qovery environment by following this documentation with these values:

      • General:
        • Application name: Kubecost
        • Source:
          • Helm source: Helm repository
          • Repository: Kubecost (the name given during the kubecost helm repository added in the previous step)
          • Chart name: cost-analyzer
          • Version: 1.108.0 (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)
        • Allow cluster-wide resources ✔️
      • Values
        • Values override as file:
          • File source: Raw YAML
          • Raw YAML:
      kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token
      -
      global:
      podAnnotations:
      qovery.annotations.service
      additionalLabels:
      qovery.labels.service

      Then click on Create and Deploy

    3. Expose Kubecost

      Check the cost-analyzer service name in the deployment logs, example: helm-z325f0565-kubecost-cost-analyzer

      Service name

      Go in your helm chart settings under the Networking section and add a new port by clicking on Add port, and set these values:

      • Service name: helm-z325f0565-kubecost-cost-analyzer (the service name taken from the deployment logs)
      • Service port: 9090
      • Select protocol: HTTP
      • Port name: You can customize it or let the default port name.

      Add port

      Then click on Create and redeploy your helm in Qovery.

      A URL will be generated to access the Kubecost frontend application:

      Link

    Conclusion

    You now have Kubecost running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.kubecost.com/#getting-started.

    +

    Monitor and reduce Kubernetes spend with Kubecost

    How to deploy Kubecost with Qovery

    Goal

    In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs

    1. Add the Kubecost helm repository

      Add the Kubecost helm repository in your Qovery settings by following this documentation with these values:

      • Repository name: Kubecost
      • Kind: HTTPS
      • Repository URL: https://kubecost.github.io/cost-analyzer/
    2. Deploy the Kubecost helm chart

      Deploy the Kubecost helm chart in your Qovery environment by following this documentation with these values:

      • General:
        • Application name: Kubecost
        • Source:
          • Helm source: Helm repository
          • Repository: Kubecost (the name given during the kubecost helm repository added in the previous step)
          • Chart name: cost-analyzer
          • Version: 1.108.0 (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)
        • Allow cluster-wide resources ✔️
      • Values
        • Values override as file:
          • File source: Raw YAML
          • Raw YAML:
      kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token

      Then click on Create and Deploy

    3. Expose Kubecost

      Check the cost-analyzer service name in the deployment logs, example: helm-z325f0565-kubecost-cost-analyzer

      Service name

      Go in your helm chart settings under the Networking section and add a new port by clicking on Add port, and set these values:

      • Service name: helm-z325f0565-kubecost-cost-analyzer (the service name taken from the deployment logs)
      • Service port: 9090
      • Select protocol: HTTP
      • Port name: You can customize it or let the default port name.

      Add port

      Then click on Create and redeploy your helm in Qovery.

      A URL will be generated to access the Kubecost frontend application:

      Link

    Conclusion

    You now have Kubecost running on your Qovery cluster. You can check their Getting Started guide to familiarize yourself with the product: https://docs.kubecost.com/#getting-started.

    - + @@ -62,7 +61,7 @@ - + diff --git a/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html index 754c5b57bf..739f2400a3 100644 --- a/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html +++ b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tutorial/url-shortener-api-with-kotlin/index.html b/guides/tutorial/url-shortener-api-with-kotlin/index.html index 4827994881..0e3fef30fb 100644 --- a/guides/tutorial/url-shortener-api-with-kotlin/index.html +++ b/guides/tutorial/url-shortener-api-with-kotlin/index.html @@ -26,7 +26,7 @@ - + @@ -82,7 +82,7 @@ - + diff --git a/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html b/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html index 9d7ca663cd..ad396bbb1e 100644 --- a/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html +++ b/guides/tutorial/use-an-api-gateway-in-front-of-multiple-services/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tutorial/use-aws-iam-roles-with-qovery/index.html b/guides/tutorial/use-aws-iam-roles-with-qovery/index.html index b6e74d0f30..3b7e547548 100644 --- a/guides/tutorial/use-aws-iam-roles-with-qovery/index.html +++ b/guides/tutorial/use-aws-iam-roles-with-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/working-with-git-submodules/index.html b/guides/tutorial/working-with-git-submodules/index.html index 48f408d011..81267f3b25 100644 --- a/guides/tutorial/working-with-git-submodules/index.html +++ b/guides/tutorial/working-with-git-submodules/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/index.html b/index.html index 74734004ce..a86031fcb2 100644 --- a/index.html +++ b/index.html @@ -26,7 +26,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/mailing_list/index.html b/mailing_list/index.html index 7ab1406480..7d27fbdd55 100644 --- a/mailing_list/index.html +++ b/mailing_list/index.html @@ -22,7 +22,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/runtime~main.07b2f2dd.js b/runtime~main.b87e637a.js similarity index 98% rename from runtime~main.07b2f2dd.js rename to runtime~main.b87e637a.js index a333212f76..b32bd26abd 100644 --- a/runtime~main.07b2f2dd.js +++ b/runtime~main.b87e637a.js @@ -1 +1 @@ -!function(e){function c(c){for(var f,a,r=c[0],n=c[1],o=c[2],u=0,i=[];ufunction MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"],{name:"documentation",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You have created an `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/environment/"}),`Environment`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`helm`),` is one of the service types that can be deployed within an `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/environment/"}),`Environment`),`. Via the helm service you can deploy any helm chart from a git repository or helm repository directly on the kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to create and deploy helms from two different sources: Git Repository or Helm Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"deploying-from-a-git-repository"},`Deploying from a Git Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this configuration, Qovery will pull the chart from the chosen repository and install it on your kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"deploying-from-a-helm-repository"},`Deploying from a Helm Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this configuration, Qovery will pull the chosen helm repository a chart and install it on your kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To improve security and avoid deploying charts from non-authorized repositories, we have decided to restrict the list of Helm Repositories you can use during the setup process. Only an administrator with the right permissions can manage it from the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`Helm Repository Management page`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"create-a-helm"},`Create a Helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Go into the chosen environment and press the "New Service" button and then the "Create helm" button`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Select the following fields:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm chart Name: give a name to your helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Description (Optional): write a text to describe your helm service`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm chart Source: Chose between Git Repository or Helm Repository, depending on the source location of your application`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to deploy a helm from a Git Repository you will have to select:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Git Repository: Select the git provider and the git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Branch: Select branch that Qovery should use to deploy your helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Root Helm Path: base folder in which the helm chart resides in your repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to deploy a helm from a Helm Repository you will have to select:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Helm repository: select the helm repository storing the helm chart. Note: only pre-configured registry are available in this list, check the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`Helm Repository Management page`),` for more information.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Chart name: the name of the helm to be deployed with this application (example: jenkins)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Chart version: the version of the chart to be deployed with this application (example: 1.0.0). `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Helm arguments: specify the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://helm.sh/docs/helm/helm_install/#options"}),`helm arguments`),` to be used during the helm install/upgrade.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Allow cluster-wide resources: Allow this chart to deploy resources outside of the environment namespace. You must have the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/members-rbac/"}),`full-access permissions`),` on the cluster, the right is present by default in `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Admin`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Devops`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Owner`),` roles. Example: if you want to create a new CRD or a new ClusterRole, check this flag.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Auto Deploy `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Available only if you have selected a git repository as helm source. -See the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),`Deploying with auto-deploy feature`),` section.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By default, the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`values.yaml`),` next to your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`chart.yaml`),` is used to configure your helm chart but you can create an override in the next two sections.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the override as file section, define the location of the file containing the override you want to define for the values of this chart.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Git Repository `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to override it from another already existing values file from a Git Repository you will have to select:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Branch: Select branch that Qovery should use to deploy your helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Raw YAML `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to override it with a raw yaml you will have to click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create override`),`. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Git repository source is recommended as the raw yaml is not versioned.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On both file types you can add `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Qovery Macros`),` to add more functionalities to your helm deployment. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/helm/#qovery-macros"}),`the section below`),` before moving forward with your helm chart creation.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-string`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-json`),` arguments.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add a new variable by declaring:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Variable: the variable name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value type: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Generic`),` to pass configuration from the command line`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`String`),` if you want to pass a string type (and avoid weird numeric conversions like 021341 interpreted as a number and thus the 0 is removed)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Json`),` to set json values (scalars/objects/arrays) from the command line`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can add `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Qovery Macros`),` to add more functionalities to your helm deployment. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/helm/#qovery-macros"}),`the section below`),` before moving forward with your helm chart creation. `)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You will find a recap of your helm setup and you can now decide to:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Go back to one of the previous steps and change your helm settings (1)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Create your helm without deploying it (2)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Create and deploy your helm (3)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/helm/helm_creation_recap.png",alt:"Helm"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"deployment-management"},`Deployment Management`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Have a look at the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/deployment/"}),`Deployment Management`),` section for more information.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"configuration"},`Configuration`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once created, you can access the configuration of a helm at any time via the Settings tab available on the helm section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can find below the description of each of the tabs available in this section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"general"},`General`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`General settings section allows you to set up the name and the source of your helm (git repository or helm repository) .`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"git-repository"},`Git Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If your heml is from a git repository, within this section you can:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Modify the branch that Qovery should use for deploying your application`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Modify `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Root Helm Path`),` - base folder in which the helm chart resides in your repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery supports mono repositories. `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/guides/advanced/monorepository/"}),`See our advanced guide for more details.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If your repository contains private submodules using SSH protocol, you will need to add a secret beginning with GIT`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`SSH_KEY`),`, containing a private SSH key with access rights to your sumbodules repositories.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Secret names examples:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`GIT_SSH_KEY_GITHUB`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`GIT_SSH_KEY_GITLAB`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`GIT_SSH_KEY_MYAPP`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"helm-repository"},`Helm Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If your helm is deployed from a helm repository, within this section you can modify:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm repository: select the helm repository storing the helm chart. You can add a new container registry by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`New helm repository`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: the name of the helm to be deployed with this application (example: jenkins)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart version: the version of the chart to be deployed with this application (example: 1.0.0). `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"arguments"},`Arguments`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For both kind of helm source, within this section yoiu can modify:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm arguments: specify the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://helm.sh/docs/intro/using_helm/#helpful-options-for-installupgraderollback"}),`helm arguments`),` to be used during the helm install/upgrade.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"auto-deploy"},`Auto Deploy`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`See the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),`Deploying with auto-deploy feature`),` section.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"values"},`Values`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Within this section you can modify the values override defined within the creation flow.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"override-as-file"},`Override as file`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Define the location of the file containing the override you want to define for the values of this chart.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Select the source of your override:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Git Repository `),` +const frontMatter={last_modified_on:'2024-04-10',title:'Helm',description:'Learn how to configure your Helm on Qovery'};const metadata={"id":"using-qovery/configuration/helm","title":"Helm","description":"Learn how to configure your Helm on Qovery","source":"@site/docs/using-qovery/configuration/helm.md","permalink":"/docs/using-qovery/configuration/helm","sidebar":"docs","previous":{"title":"Application","permalink":"/docs/using-qovery/configuration/application"},"next":{"title":"Databases","permalink":"/docs/using-qovery/configuration/database"}};/* @jsx mdx */const rightToc=[{value:'Deploying from a Git Repository',id:'deploying-from-a-git-repository',children:[]},{value:'Deploying from a Helm Repository',id:'deploying-from-a-helm-repository',children:[]},{value:'Create a Helm',id:'create-a-helm',children:[]},{value:'Deployment Management',id:'deployment-management',children:[]},{value:'Configuration',id:'configuration',children:[{value:'General',id:'general',children:[]},{value:'Values',id:'values',children:[]},{value:'Ports',id:'ports',children:[]},{value:'Domains',id:'domains',children:[]}]},{value:'Connecting from the internet',id:'connecting-from-the-internet',children:[{value:'Qovery provided domains',id:'qovery-provided-domains',children:[]},{value:'Custom domains',id:'custom-domains',children:[]}]},{value:'Logs',id:'logs',children:[]},{value:'Clone',id:'clone',children:[{value:'Advanced Settings',id:'advanced-settings',children:[]}]},{value:'Delete a Helm',id:'delete-a-helm',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"],{name:"documentation",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You have created an `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/environment/"}),`Environment`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`helm`),` is one of the service types that can be deployed within an `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/environment/"}),`Environment`),`. Via the helm service you can deploy any helm chart from a git repository or helm repository directly on the kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to create and deploy helms from two different sources: Git Repository or Helm Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"deploying-from-a-git-repository"},`Deploying from a Git Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this configuration, Qovery will pull the chart from the chosen repository and install it on your kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"deploying-from-a-helm-repository"},`Deploying from a Helm Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this configuration, Qovery will pull the chosen helm repository a chart and install it on your kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To improve security and avoid deploying charts from non-authorized repositories, we have decided to restrict the list of Helm Repositories you can use during the setup process. Only an administrator with the right permissions can manage it from the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`Helm Repository Management page`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"create-a-helm"},`Create a Helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Go into the chosen environment and press the "New Service" button and then the "Create helm" button`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Select the following fields:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm chart Name: give a name to your helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Description (Optional): write a text to describe your helm service`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm chart Source: Chose between Git Repository or Helm Repository, depending on the source location of your application`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to deploy a helm from a Git Repository you will have to select:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Git Repository: Select the git provider and the git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Branch: Select branch that Qovery should use to deploy your helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Root Helm Path: base folder in which the helm chart resides in your repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to deploy a helm from a Helm Repository you will have to select:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Helm repository: select the helm repository storing the helm chart. Note: only pre-configured registry are available in this list, check the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`Helm Repository Management page`),` for more information.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Chart name: the name of the helm to be deployed with this application (example: jenkins)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Chart version: the version of the chart to be deployed with this application (example: 1.0.0). `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Helm arguments: specify the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://helm.sh/docs/helm/helm_install/#options"}),`helm arguments`),` to be used during the helm install/upgrade.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{parentName:"li"},`Allow cluster-wide resources: Allow this chart to deploy resources outside of the environment namespace. You must have the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/members-rbac/"}),`full-access permissions`),` on the cluster, the right is present by default in `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Admin`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Devops`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Owner`),` roles. Example: if you want to create a new CRD or a new ClusterRole, check this flag.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Auto Deploy `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Available only if you have selected a git repository as helm source. +See the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),`Deploying with auto-deploy feature`),` section.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By default, the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`values.yaml`),` next to your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`chart.yaml`),` is used to configure your helm chart but you can create an override in the next two sections.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the override as file section, define the location of the file containing the override you want to define for the values of this chart.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Git Repository `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to override it from another already existing values file from a Git Repository you will have to select:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Branch: Select branch that Qovery should use to deploy your helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Raw YAML `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you want to override it with a raw yaml you will have to click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create override`),`. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Git repository source is recommended as the raw yaml is not versioned.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On both file types you can use your environment variables in your chart. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),`the section below`),`.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-string`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-json`),` arguments.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add a new variable by declaring:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Variable: the variable name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value type: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Generic`),` to pass configuration from the command line`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`String`),` if you want to pass a string type (and avoid weird numeric conversions like 021341 interpreted as a number and thus the 0 is removed)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Json`),` to set json values (scalars/objects/arrays) from the command line`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can use your environment variables in your chart. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),`the section below`),`. `)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You will find a recap of your helm setup and you can now decide to:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Go back to one of the previous steps and change your helm settings (1)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Create your helm without deploying it (2)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Create and deploy your helm (3)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/helm/helm_creation_recap.png",alt:"Helm"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"deployment-management"},`Deployment Management`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Have a look at the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/deployment/"}),`Deployment Management`),` section for more information.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"configuration"},`Configuration`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once created, you can access the configuration of a helm at any time via the Settings tab available on the helm section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can find below the description of each of the tabs available in this section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"general"},`General`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`General settings section allows you to set up the name and the source of your helm (git repository or helm repository) .`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"git-repository"},`Git Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If your heml is from a git repository, within this section you can:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Modify the git provider where your code is stored (it can be hosted on GitHub, GitLab or Bitbucket).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Modify the branch that Qovery should use for deploying your application`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Modify `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Root Helm Path`),` - base folder in which the helm chart resides in your repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery supports mono repositories. `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/guides/advanced/monorepository/"}),`See our advanced guide for more details.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If your repository contains private submodules using SSH protocol, you will need to add a secret beginning with GIT`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`SSH_KEY`),`, containing a private SSH key with access rights to your sumbodules repositories.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Secret names examples:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`GIT_SSH_KEY_GITHUB`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`GIT_SSH_KEY_GITLAB`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`GIT_SSH_KEY_MYAPP`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"helm-repository"},`Helm Repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If your helm is deployed from a helm repository, within this section you can modify:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm repository: select the helm repository storing the helm chart. You can add a new container registry by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`New helm repository`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: the name of the helm to be deployed with this application (example: jenkins)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart version: the version of the chart to be deployed with this application (example: 1.0.0). `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"arguments"},`Arguments`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For both kind of helm source, within this section yoiu can modify:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm arguments: specify the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://helm.sh/docs/intro/using_helm/#helpful-options-for-installupgraderollback"}),`helm arguments`),` to be used during the helm install/upgrade.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm timeout: specify the value to wait for Kubernetes commands to complete. This defaults to 5mins.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"auto-deploy"},`Auto Deploy`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`See the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/deployment/deploying-with-auto-deploy/"}),`Deploying with auto-deploy feature`),` section.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"values"},`Values`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Within this section you can modify the values override defined within the creation flow.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"override-as-file"},`Override as file`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Define the location of the file containing the override you want to define for the values of this chart.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Select the source of your override:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Git Repository `),` If you want to override it from another already existing values file from a Git Repository you will have to select:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Git Repository: Select the git provider and git repository hosting your code (it can be hosted on GitHub, GitLab or Bitbucket).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Branch: Select branch that Qovery should use to deploy your helm`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Overrides path: the path of the values files (example: ci/values_ci.yaml). You can specify multiple paths by separating them with a semi-colon.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Raw YAML `),` -If you want to override it with a raw yaml you will have to click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create override`),`. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On both file types you can add `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Qovery Macros`),` to add more functionalities to your helm deployment. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/#qovery-macros"}),`the section below`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"override-as-arguments"},`Override as arguments`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-string`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-json`),` arguments.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add a new variable by declaring:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Override type: select the type of your variable. For more information, have a look at the Helm documentation`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Variable: the variable name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},"You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument."),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can add `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Qovery Macros`),` to add more functionalities to your helm deployment. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/#qovery-macros"}),`the section below`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"qovery-macros"},`Qovery macros`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to use the following macros within your override file. These macros will be automatically replaced by Qovery during the deployment phase, allowing you to access additional functionalities.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Access to the Qovery environment variables `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Macro: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery.env.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`It allows you to access the value of an environment variable or secret stored within Qovery. This is helpful when your deployed helm chart needs to access a secret or an environment variable available in Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Example: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On Qovery we have created a database and created two aliases for the database url (DB_URL) and, the database password (DB_PASSWORD). Here an example on how the helm chart can access these environment variables and let your service point to the right database:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`postgres: +If you want to override it with a raw yaml you will have to click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create override`),`. A new editor modal will be opened, to let you write your yaml override. The default values.yaml content will be displayed on the right to help you to respect the structure.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On both file types you can use your environment variables in your chart. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),`the section below`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"override-as-arguments"},`Override as arguments`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`if you want to specify one by one your overrides or define additional overrides on top of the one available in your override file, you can pass them as arguments. These will be passed to the helm command via the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-string`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`--set-json`),` arguments.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add a new variable by declaring:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Override type: select the type of your variable. For more information, have a look at the Helm documentation`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Variable: the variable name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},"You can combine override as file and override as argument but, in case of collision, the priority will be given to the override as argument."),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can use your environment variables in your chart. Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/#using-the-environment-variables-in-your-chart"}),`the section below`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"using-the-environment-variables-in-your-chart"},`Using the environment variables in your chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to use the following macros within your override file. These macros will be automatically replaced by Qovery during the deployment phase, allowing you to access additional functionalities.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Access to the Qovery environment variables `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Macro: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery.env.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`It allows you to access the value of an environment variable or secret stored within Qovery. This is helpful when your deployed helm chart needs to access a secret or an environment variable available in Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Example: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On Qovery we have created a database and created two aliases for the database url (DB_URL) and, the database password (DB_PASSWORD). Here an example on how the helm chart can access these environment variables and let your service point to the right database:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`postgres: url: qovery.env.DB_URL password: qovery.env.DB_PASSWORD -`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Enable all the Qovery features `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Macro for labels: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`qovery.labels.service`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Macro for annotations: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`qovery.annotations.service`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`It allows to add all the labels and annotations required to activate all the Qovery features on the deployed Helm chart (access your container logs, apply the stop/restart actions, display the pod status in the overview page). -Make sure to create an override and assign the macro to the labels of `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`any deployed Pods/Deployments/Services/Jobs`),`. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Example:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`commonLabels: - mylabel: "test" - qovery.labels.service -annotations: - qovery.annotations.service -`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`When your Pods/Deployments/Services/Jobs are deployed, you should see Qovery labels and annotations added to the resources. Something like:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`apiVersion: v1 -kind: Pod -metadata: - labels: - qovery.com/environment-id: 00000000-0000-0000-0000-000000000000 - qovery.com/project-id: 00000000-0000-0000-0000-000000000000 - qovery.com/service-id: 00000000-0000-0000-0000-000000000000 - qovery.com/service-type: helm - ... - annotations: - qovery.com/service-version: application:x.y.z - ... `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"ports"},`Ports`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Within this section you can define the port exposed publicly. You can edit the existing ports or declare new ones by specifying:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service name: this is the kubernetes service name in your helm chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Namespace (only if Allow cluster-wide resources was enabled): this is the kubernetes namespace used by your helm chart to deploy the pods behind the chosen service`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service port: this is the port exposed internally by your service for the other services`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Protocol: you can select the protocol used by your service. Today Qovery supports the following protocols:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`HTTPS (Select this protocol if you need to run Websockets)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`gRPC`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`External port: it is the port that can be used to access this service over the internet (when exposed publicly). Note that for HTTP and gRPC the port is set by default to 443.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Port Name: it is the name assigned to the port. When multiple ports are exposed publicly, its value is used to route the traffic to the right port based on the called subdomain (which will contain the port name value). Since each port is exposed on the port 443, having a different subdomain is the only way to have multiple ports exposed over the internet. If not set, the default value is `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`p`),` (see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"#qovery-provided-domains"}),`Qovery Provided Domain section`),` for more information)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"important-informations"},`Important Informations`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Connections on public ports are automatically closed after 60 seconds. If you want to implement long living connection (like for websockets) please make sure to use the rigth ingress timeouts in the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/advanced-settings/#network-settings"}),`advanced settings section`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"domains"},`Domains`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Within this section you can customize the domain used to reach your helm services. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can customize the domain of your helm services in different ways, depending on what you want to achieve:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You want to use your own domain for your helm services`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You want to modify the subdomain assigned to your helm services by Qovery (i.e. change `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh`),` into `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`my-app-domain.za8ad0657.bool.sh`),`).`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In both cases, you can assign the new custom domain to your helm services press the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add Domain`),` button. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/application/app-16.png",alt:"Application Domains"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This configuration will be `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`automatically removed`),` on every cloned environment or preview environment in order to avoid domain collision.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"configuring-your-own-domain"},`Configuring your own domain`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the domain is added within the Qovery console (Example: mydomain.com), you need to configure within your DNS two `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`CNAME`),` records pointing to the domain provided by Qovery, as shown in the UI (example: mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud and *.mydomain.com CNAME za7cc1b71-z4b8474b3-gtw.zc531a994.rustrocks.cloud). `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Having a wildcard domain (example: *.mydomain.com) configured on your DNS will avoid you to modify the Qovery setup every time you want to add a new subdomain. If `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`wildcard`),` is not supported by your DNS provider, you will have to configure each subdomain manually.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If the service needs to expose more than one port publicly, you can define a dedicated subdomain to redirect the traffic on the right port by setting the “Port Name” value within the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"#ports"}),`port settings`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`From this point, Qovery will automatically handle the TLS/SSL certificate creation and renewal for the configured domain.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/application/custom-domain.png",alt:"Custom Domain"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},` Special case - CDN in proxy mode `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If your service is behind a CDN using a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`proxy mode`),` (i.e. the traffic is routed through the CDN to Qovery), make sure to disable the option "Generate certificate" on the domain setup. Since the certificate of your domain is directly managed by the CDN, Qovery won't be able to do that for you and it will raise warnings on your application status.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/application/cdn-proxy.png",alt:"CDN Proxy"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/guides/getting-started/setting-custom-domain/"}),`We prepared a guide and video tutorial that explains how to set up your custom domain.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"change-the-auto-assigned-sub-domain"},`Change the auto assigned sub-domain`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can specify a different sub-domain for your helm services as long as it belongs to the assigned cluster domain (see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"#qovery-provided-domains"}),`Qovery provided domains`),`). Example: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`your current domain is zdf72de71-z709e1a85-gtw.za8ad0659.bool.sh (so your assigned cluster domain is `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`za8ad0659.bool.sh`),`)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`you can enter a new custom domain `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`myfrontend.za8ad0659.bool.sh`),` (since it is a subdomain of the cluster domain)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The helm services will now be accessible from both the default and the new custom domain.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery does not check collision in the domain declaration. Make sure you assign a unique subdomain within your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"connecting-from-the-internet"},`Connecting from the internet`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Your helm services can be reached from the internet by publicly exposing at least one of its ports (See the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"#ports"}),`Ports`),` section to know more). Once this is done, Qovery will generate for you a domain to reach your application from the internet. You can also customize the domain assigned to your application and manage by yourself this assignment via the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Domain`),` section.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"qovery-provided-domains"},`Qovery provided domains`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For each port publicly exposed, a domain is automatically assigned by Qovery to your helm services. Qovery will manage for you the networking and the TLS configuration for these domains. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Example: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`-p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh`),` for helm services.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Note:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`each service deployed on the same cluster will have the same root domain assigned (example: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`za8ad0657.bool.sh`),`)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`the first characters of the domain (before the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`-`),`) is based on the portName given to the port associated with this domain (See the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"#ports"}),`port section`),`)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`a default domain (without the portName) is assigned to the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`default port`),`(See the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"#ports"}),`port section`),`). Example `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Special Case - Preview Environment`),` @@ -50268,14 +50250,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7); -const frontMatter={last_modified_on:'2024-01-12',$schema:'/.meta/.schemas/guides.json',title:'Monitor and reduce Kubernetes spend with Kubecost',description:'How to deploy Kubecost with Qovery',author_github:'https://github.com/jul-dan',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Monitor and reduce Kubernetes spend with Kubecost","description":"How to deploy Kubecost with Qovery","permalink":"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost","readingTime":"3 min read","source":"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Monitor and reduce Kubernetes spend with Kubecost","truncated":false,"prevItem":{"title":"Migration","permalink":"/guides/advanced/migration"},"nextItem":{"title":"Monitoring","permalink":"/guides/advanced/monitoring"}};/* @jsx mdx */const rightToc=[{value:'Goal',id:'goal',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{name:"guide",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Qovery cluster running`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"goal"},`Goal`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"add-the-kubecost-helm-repository"},`Add the Kubecost helm repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add the Kubecost helm repository in your Qovery settings by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kind: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTPS`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository URL: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://kubecost.github.io/cost-analyzer/`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deploy-the-kubecost-helm-chart"},`Deploy the Kubecost helm chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If have a Kubecost token, first create a Qovery environment variable: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`variable: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`KUBECOST_TOKEN`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`value: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},``)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`scope: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Environment`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Secret variable ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Deploy the Kubecost helm chart in your Qovery environment by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`General:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Application name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Source:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Helm repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`),` (the name given during the kubecost helm repository added in the previous step)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Version: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`1.108.0`),` (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Allow cluster-wide resources ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values override as file:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`File source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Raw YAML`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Raw YAML:`)))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token +const frontMatter={last_modified_on:'2024-04-10',$schema:'/.meta/.schemas/guides.json',title:'Monitor and reduce Kubernetes spend with Kubecost',description:'How to deploy Kubecost with Qovery',author_github:'https://github.com/jul-dan',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Monitor and reduce Kubernetes spend with Kubecost","description":"How to deploy Kubecost with Qovery","permalink":"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost","readingTime":"3 min read","source":"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Monitor and reduce Kubernetes spend with Kubecost","truncated":false,"prevItem":{"title":"Migration","permalink":"/guides/advanced/migration"},"nextItem":{"title":"Monitoring","permalink":"/guides/advanced/monitoring"}};/* @jsx mdx */const rightToc=[{value:'Goal',id:'goal',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{name:"guide",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Qovery cluster running`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"goal"},`Goal`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"add-the-kubecost-helm-repository"},`Add the Kubecost helm repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add the Kubecost helm repository in your Qovery settings by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kind: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTPS`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository URL: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://kubecost.github.io/cost-analyzer/`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deploy-the-kubecost-helm-chart"},`Deploy the Kubecost helm chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If have a Kubecost token, first create a Qovery environment variable: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`variable: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`KUBECOST_TOKEN`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`value: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},``)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`scope: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Environment`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Secret variable ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Deploy the Kubecost helm chart in your Qovery environment by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`General:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Application name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Source:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Helm repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`),` (the name given during the kubecost helm repository added in the previous step)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Version: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`1.108.0`),` (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Allow cluster-wide resources ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values override as file:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`File source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Raw YAML`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Raw YAML:`)))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token -global: - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service -`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`These are necessary to get all Qovery features, check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` for more information.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Currently it is not possible to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Stop`),` the Kubecost helm service. You can Start/Update/Delete it.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Deploy`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"expose-kubecost"},`Expose Kubecost`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Check the cost-analyzer service name in the deployment logs, example: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`helm-z325f0565-kubecost-cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Go in your helm chart settings under the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Networking`),` section and add a new port by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add port`),`, and set these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`helm-z325f0565-kubecost-cost-analyzer`),` (the service name taken from the deployment logs)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service port: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`9090`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select protocol: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTP`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Port name: You can customize it or let the default port name.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on Create and redeploy your helm in Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A URL will be generated to access the Kubecost frontend application:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"conclusion"},`Conclusion`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You now have Kubecost running on your Qovery cluster. You can check their `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Getting Started`),` guide to familiarize yourself with the product: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://docs.kubecost.com/#getting-started"}),`https://docs.kubecost.com/#getting-started`),`.`));};MDXContent.isMDXComponent=true; +`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Deploy`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"expose-kubecost"},`Expose Kubecost`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Check the cost-analyzer service name in the deployment logs, example: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`helm-z325f0565-kubecost-cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Go in your helm chart settings under the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Networking`),` section and add a new port by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add port`),`, and set these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`helm-z325f0565-kubecost-cost-analyzer`),` (the service name taken from the deployment logs)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service port: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`9090`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select protocol: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTP`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Port name: You can customize it or let the default port name.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on Create and redeploy your helm in Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A URL will be generated to access the Kubecost frontend application:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"conclusion"},`Conclusion`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You now have Kubecost running on your Qovery cluster. You can check their `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Getting Started`),` guide to familiarize yourself with the product: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://docs.kubecost.com/#getting-started"}),`https://docs.kubecost.com/#getting-started`),`.`));};MDXContent.isMDXComponent=true; /***/ }), /* 284 */ @@ -55179,7 +55156,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7); -const frontMatter={last_modified_on:'2024-01-05',$schema:'/.meta/.schemas/guides.json',title:'Kubernetes observability and monitoring with Datadog',description:'How to integrate Datadog with Kubernetes on Qovery.',author_github:'https://github.com/acarranoqovery',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Kubernetes observability and monitoring with Datadog","description":"How to integrate Datadog with Kubernetes on Qovery.","permalink":"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog","readingTime":"4 min read","source":"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Kubernetes observability and monitoring with Datadog","truncated":false,"prevItem":{"title":"Integrate your application logs to Cloudwatch","permalink":"/guides/tutorial/cloudwatch-integration"},"nextItem":{"title":"Managing Environment Variables in React (create-react-app)","permalink":"/guides/tutorial/managing-env-variables-in-create-react-app"}};/* @jsx mdx */const rightToc=[{value:'Installation',id:'installation',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog. +const frontMatter={last_modified_on:'2024-04-10',$schema:'/.meta/.schemas/guides.json',title:'Kubernetes observability and monitoring with Datadog',description:'How to integrate Datadog with Kubernetes on Qovery.',author_github:'https://github.com/acarranoqovery',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Kubernetes observability and monitoring with Datadog","description":"How to integrate Datadog with Kubernetes on Qovery.","permalink":"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog","readingTime":"4 min read","source":"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Kubernetes observability and monitoring with Datadog","truncated":false,"prevItem":{"title":"Integrate your application logs to Cloudwatch","permalink":"/guides/tutorial/cloudwatch-integration"},"nextItem":{"title":"Managing Environment Variables in React (create-react-app)","permalink":"/guides/tutorial/managing-env-variables-in-create-react-app"}};/* @jsx mdx */const rightToc=[{value:'Installation',id:'installation',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog. Datadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{name:"guide",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Qovery cluster running`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a dedicated Qovery project and environment to deploy Datadog (example: Project=Tooling, Environment=Production)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Datadog account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have already created a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://docs.datadoghq.com/account_management/api-app-keys/#api-keys"}),`Datadog API Key`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"installation"},`Installation`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"add-the-datadog-helm-repository"},`Add the Datadog helm repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add the Datadog helm repository in your Qovery settings by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`this documentation`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Datadog`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kind: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTPS`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository URL: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://helm.datadoghq.com`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"create-the-datadog-service-within-qovery"},`Create the datadog service within Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` and these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`General:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Application name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Datadog`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Source:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Helm repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Datadog`),` (the name given during the datadog helm repository added in the previous step)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`datadog`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Version: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`3.49.5`),` (this is the version we used for this setup, update it based on the chosen version)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Allow cluster-wide resources ✔️`))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values override as file:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`File source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Raw YAML`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Raw YAML:`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`# The following YAML contains the minimum configuration required to deploy the Datadog Agent # on your cluster. Update it accordingly to your needs datadog: @@ -55189,38 +55166,6 @@ datadog: site: datadoghq.eu # Update the cluster name with the name of your choice clusterName: qoverycluster - -# in the section below, we are adding Qovery macros in order to automatically add a set -# of labels and annotations to the deployed Pods/Deployments/services etc.. This is not -# mandatory to install Datadog itself but it allows you to fully benefit from the Qovery -# functionalities (Display application logs, restart pods etc..). See the official Qovery -# Helm documentation for more information. -commonLabels: - qovery.labels.service - -clusterAgent: - deploymentAnnotations: - qovery.annotations.service - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service - -agents: - daemonsetAnnotations: - qovery.annotations.service - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service - -clusterChecksRunner: - deploymentAnnotations: - qovery.annotations.service - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml"}),`https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Now get to the last step and just `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create`),` the service on Qovery.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"store-the-datadog-api-key-as-secret"},`Store the Datadog API Key as secret`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the previous step we have assigned the macro `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery.env.DD_API_KEY`),` to the API Key value. In this step we will create this secret within the Qovery console.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Open the service overview of the created Datadog service`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Enter the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Variables`),` section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Add a new Variable with:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Variable = DD_API_KEY`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value = `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Scope = Service (so that it is accessible only to this service)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Secret variable ✔️`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-secret.png",alt:"Datadog - API Key"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you need more information on how to manage your environment variables, have a look at `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/environment-variable/"}),`this documentation`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deploy-your-chart"},`Deploy your chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Play`),` button and trigger the deployment of your chart (see point 1 in the picture below).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/deploy.png",alt:"Datadog - Deploy"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can follow the deployment and access the deployment logs by pressing the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Log`),` button (see point 2 in the picutre above).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-pods.png",alt:"Datadog - Pods"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can also look at the Pod logs by pressing the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Log`),` button.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"verify-the-setup-on-datadog"},`Verify the setup on Datadog`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-console.png",alt:"Datadog - Console"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"conclusion"},`Conclusion`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You now have Datadog agent running on your Qovery cluster. You can check their `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Getting Started`),` guide to familiarize yourself with the product: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://docs.datadoghq.com/fr/getting_started"}),`https://docs.datadoghq.com/fr/getting_started`),`.`));};MDXContent.isMDXComponent=true; /***/ }), @@ -55506,7 +55451,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7); -const frontMatter={last_modified_on:'2024-01-05',$schema:'/.meta/.schemas/guides.json',title:'Kubernetes observability and monitoring with Datadog',description:'How to integrate Datadog with Kubernetes on Qovery.',author_github:'https://github.com/acarranoqovery',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Kubernetes observability and monitoring with Datadog","description":"How to integrate Datadog with Kubernetes on Qovery.","permalink":"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog","readingTime":"4 min read","source":"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Kubernetes observability and monitoring with Datadog","truncated":false,"prevItem":{"title":"Integrate your application logs to Cloudwatch","permalink":"/guides/tutorial/cloudwatch-integration"},"nextItem":{"title":"Managing Environment Variables in React (create-react-app)","permalink":"/guides/tutorial/managing-env-variables-in-create-react-app"}};/* @jsx mdx */const rightToc=[{value:'Installation',id:'installation',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog. +const frontMatter={last_modified_on:'2024-04-10',$schema:'/.meta/.schemas/guides.json',title:'Kubernetes observability and monitoring with Datadog',description:'How to integrate Datadog with Kubernetes on Qovery.',author_github:'https://github.com/acarranoqovery',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Kubernetes observability and monitoring with Datadog","description":"How to integrate Datadog with Kubernetes on Qovery.","permalink":"/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog","readingTime":"4 min read","source":"@site/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Kubernetes observability and monitoring with Datadog","truncated":false,"prevItem":{"title":"Integrate your application logs to Cloudwatch","permalink":"/guides/tutorial/cloudwatch-integration"},"nextItem":{"title":"Managing Environment Variables in React (create-react-app)","permalink":"/guides/tutorial/managing-env-variables-in-create-react-app"}};/* @jsx mdx */const rightToc=[{value:'Installation',id:'installation',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`While Qovery will soon provide basic metrics on apps resources usage, you might need a more advanced view on what happens on your infrastructure. There are many solutions on the market, one of them being Datadog. Datadog is one of the leading platforms for monitoring and observability, and it's pretty easy to integrate it with Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{name:"guide",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Qovery cluster running`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a dedicated Qovery project and environment to deploy Datadog (example: Project=Tooling, Environment=Production)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Datadog account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have already created a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://docs.datadoghq.com/account_management/api-app-keys/#api-keys"}),`Datadog API Key`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"installation"},`Installation`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this tutorial, we will install the Datadog agent on a Qovery cluster to gather metrics about infrastructure and applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"add-the-datadog-helm-repository"},`Add the Datadog helm repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add the Datadog helm repository in your Qovery settings by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`this documentation`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Datadog`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kind: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTPS`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository URL: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://helm.datadoghq.com`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"create-the-datadog-service-within-qovery"},`Create the datadog service within Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create the Datadog helm service in the Qovery environment of your choice (preferrably within a dedicated Tooling project) by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` and these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`General:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Application name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Datadog`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Source:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Helm repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Datadog`),` (the name given during the datadog helm repository added in the previous step)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`datadog`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Version: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`3.49.5`),` (this is the version we used for this setup, update it based on the chosen version)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Allow cluster-wide resources ✔️`))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values override as file:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`File source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Raw YAML`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Raw YAML:`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`# The following YAML contains the minimum configuration required to deploy the Datadog Agent # on your cluster. Update it accordingly to your needs datadog: @@ -55516,38 +55461,6 @@ datadog: site: datadoghq.eu # Update the cluster name with the name of your choice clusterName: qoverycluster - -# in the section below, we are adding Qovery macros in order to automatically add a set -# of labels and annotations to the deployed Pods/Deployments/services etc.. This is not -# mandatory to install Datadog itself but it allows you to fully benefit from the Qovery -# functionalities (Display application logs, restart pods etc..). See the official Qovery -# Helm documentation for more information. -commonLabels: - qovery.labels.service - -clusterAgent: - deploymentAnnotations: - qovery.annotations.service - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service - -agents: - daemonsetAnnotations: - qovery.annotations.service - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service - -clusterChecksRunner: - deploymentAnnotations: - qovery.annotations.service - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`There are many other values you can set and modify the Datadog agent behaviour. For advanced usage, check: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml"}),`https://github.com/Datadog/helm-charts/blob/main/charts/datadog/values.yaml`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Now get to the last step and just `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create`),` the service on Qovery.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"store-the-datadog-api-key-as-secret"},`Store the Datadog API Key as secret`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the previous step we have assigned the macro `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery.env.DD_API_KEY`),` to the API Key value. In this step we will create this secret within the Qovery console.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Open the service overview of the created Datadog service`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Enter the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Variables`),` section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Add a new Variable with:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Variable = DD_API_KEY`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Value = `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Scope = Service (so that it is accessible only to this service)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Secret variable ✔️`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-secret.png",alt:"Datadog - API Key"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you need more information on how to manage your environment variables, have a look at `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/environment-variable/"}),`this documentation`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deploy-your-chart"},`Deploy your chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Play`),` button and trigger the deployment of your chart (see point 1 in the picture below).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/deploy.png",alt:"Datadog - Deploy"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can follow the deployment and access the deployment logs by pressing the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Log`),` button (see point 2 in the picutre above).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the deployment is completed, you should see the Datadog agent pods and their status directly within the Qovery console.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-pods.png",alt:"Datadog - Pods"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can also look at the Pod logs by pressing the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Log`),` button.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"verify-the-setup-on-datadog"},`Verify the setup on Datadog`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Access again your Datadog interface and access the Infrastructure > Containers > Kubernetes sections. You should now see the data coming from your Qovery cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/kubernetes-observability-and-monitoring-with-datadog/datadog-console.png",alt:"Datadog - Console"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"conclusion"},`Conclusion`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You now have Datadog agent running on your Qovery cluster. You can check their `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Getting Started`),` guide to familiarize yourself with the product: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://docs.datadoghq.com/fr/getting_started"}),`https://docs.datadoghq.com/fr/getting_started`),`.`));};MDXContent.isMDXComponent=true; /***/ }), @@ -58368,14 +58281,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7); -const frontMatter={last_modified_on:'2024-01-12',$schema:'/.meta/.schemas/guides.json',title:'Monitor and reduce Kubernetes spend with Kubecost',description:'How to deploy Kubecost with Qovery',author_github:'https://github.com/jul-dan',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Monitor and reduce Kubernetes spend with Kubecost","description":"How to deploy Kubecost with Qovery","permalink":"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost","readingTime":"3 min read","source":"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Monitor and reduce Kubernetes spend with Kubecost","truncated":false,"prevItem":{"title":"Migration","permalink":"/guides/advanced/migration"},"nextItem":{"title":"Monitoring","permalink":"/guides/advanced/monitoring"}};/* @jsx mdx */const rightToc=[{value:'Goal',id:'goal',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{name:"guide",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Qovery cluster running`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"goal"},`Goal`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"add-the-kubecost-helm-repository"},`Add the Kubecost helm repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add the Kubecost helm repository in your Qovery settings by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kind: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTPS`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository URL: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://kubecost.github.io/cost-analyzer/`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deploy-the-kubecost-helm-chart"},`Deploy the Kubecost helm chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If have a Kubecost token, first create a Qovery environment variable: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`variable: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`KUBECOST_TOKEN`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`value: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},``)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`scope: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Environment`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Secret variable ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Deploy the Kubecost helm chart in your Qovery environment by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`General:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Application name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Source:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Helm repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`),` (the name given during the kubecost helm repository added in the previous step)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Version: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`1.108.0`),` (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Allow cluster-wide resources ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values override as file:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`File source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Raw YAML`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Raw YAML:`)))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token - -global: - podAnnotations: - qovery.annotations.service - additionalLabels: - qovery.labels.service -`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`These are necessary to get all Qovery features, check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` for more information.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Currently it is not possible to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Stop`),` the Kubecost helm service. You can Start/Update/Delete it.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Deploy`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"expose-kubecost"},`Expose Kubecost`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Check the cost-analyzer service name in the deployment logs, example: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`helm-z325f0565-kubecost-cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Go in your helm chart settings under the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Networking`),` section and add a new port by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add port`),`, and set these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`helm-z325f0565-kubecost-cost-analyzer`),` (the service name taken from the deployment logs)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service port: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`9090`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select protocol: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTP`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Port name: You can customize it or let the default port name.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on Create and redeploy your helm in Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A URL will be generated to access the Kubecost frontend application:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"conclusion"},`Conclusion`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You now have Kubecost running on your Qovery cluster. You can check their `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Getting Started`),` guide to familiarize yourself with the product: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://docs.kubecost.com/#getting-started"}),`https://docs.kubecost.com/#getting-started`),`.`));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2024-04-10',$schema:'/.meta/.schemas/guides.json',title:'Monitor and reduce Kubernetes spend with Kubecost',description:'How to deploy Kubecost with Qovery',author_github:'https://github.com/jul-dan',tags:['type: tutorial','technology: qovery'],hide_pagination:true};const metadata={"categories":[{"name":"tutorial","title":"Tutorial","description":"Additional step-by-step resources to leverage even more Qovery","permalink":"/guides/tutorial"}],"coverLabel":"Monitor and reduce Kubernetes spend with Kubecost","description":"How to deploy Kubecost with Qovery","permalink":"/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost","readingTime":"3 min read","source":"@site/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost.md","tags":[{"label":"type: tutorial","permalink":"/guides/tags/type-tutorial"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Monitor and reduce Kubernetes spend with Kubecost","truncated":false,"prevItem":{"title":"Migration","permalink":"/guides/advanced/migration"},"nextItem":{"title":"Monitoring","permalink":"/guides/advanced/monitoring"}};/* @jsx mdx */const rightToc=[{value:'Goal',id:'goal',children:[]},{value:'Conclusion',id:'conclusion',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{name:"guide",mdxType:"Assumptions"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Qovery cluster running`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"goal"},`Goal`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this tutorial, we will install Kubecost on a Qovery cluster to monitor the Kubernetes costs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"add-the-kubecost-helm-repository"},`Add the Kubecost helm repository`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Add the Kubecost helm repository in your Qovery settings by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/organization/helm-repository/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kind: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTPS`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository URL: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://kubecost.github.io/cost-analyzer/`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deploy-the-kubecost-helm-chart"},`Deploy the Kubecost helm chart`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If have a Kubecost token, first create a Qovery environment variable: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`variable: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`KUBECOST_TOKEN`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`value: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},``)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`scope: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Environment`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Secret variable ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Deploy the Kubecost helm chart in your Qovery environment by following `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/helm/"}),`this documentation`),` with these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`General:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Application name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Source:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Helm source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Helm repository`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Repository: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Kubecost`),` (the name given during the kubecost helm repository added in the previous step)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Chart name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Version: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`1.108.0`),` (this guide works with the version 1.108.0 and that needs to be adapted if you use another version)`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Allow cluster-wide resources ✔️`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Values override as file:`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",{parentName:"li"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`File source: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Raw YAML`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Raw YAML:`)))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{"className":"language-yaml"}),`kubecostToken: qovery.env.KUBECOST_TOKEN #Used only if you have a Kubecost Token + +`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Deploy`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"expose-kubecost"},`Expose Kubecost`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Check the cost-analyzer service name in the deployment logs, example: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`helm-z325f0565-kubecost-cost-analyzer`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/service-name.png",alt:"Service name"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Go in your helm chart settings under the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Networking`),` section and add a new port by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add port`),`, and set these values:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service name: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`helm-z325f0565-kubecost-cost-analyzer`),` (the service name taken from the deployment logs)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Service port: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`9090`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Select protocol: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`HTTP`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Port name: You can customize it or let the default port name.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/add-port.png",alt:"Add port"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then click on Create and redeploy your helm in Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A URL will be generated to access the Kubecost frontend application:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/monitor-and-reduce-kubernetes-spend-with-kubecost/link.png",alt:"Link"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"conclusion"},`Conclusion`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You now have Kubecost running on your Qovery cluster. You can check their `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Getting Started`),` guide to familiarize yourself with the product: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://docs.kubecost.com/#getting-started"}),`https://docs.kubecost.com/#getting-started`),`.`));};MDXContent.isMDXComponent=true; /***/ }), /* 452 */