From bd66a2863f4226721c6b0b5a8bf9a390719f1237 Mon Sep 17 00:00:00 2001 From: jul-dan Date: Fri, 29 Dec 2023 08:44:51 +0000 Subject: [PATCH] deploy: 7d6f39dfbc0e050d12f88fec1826484145d7297f --- 36676680.51c977e4.js => 36676680.3eca5f0e.js | 4 +-- ...SE.txt => 36676680.3eca5f0e.js.LICENSE.txt | 0 3a03b8f9.752e8ecb.js => 3a03b8f9.0ec51a9c.js | 4 +-- ...SE.txt => 3a03b8f9.0ec51a9c.js.LICENSE.txt | 0 404.html | 4 +-- 43a5f55b.402e8b54.js | 2 ++ ...SE.txt => 43a5f55b.402e8b54.js.LICENSE.txt | 0 43a5f55b.76e7cba8.js | 2 -- 68c0e7f9.278f19fd.js => 68c0e7f9.1d73352c.js | 4 +-- ...SE.txt => 68c0e7f9.1d73352c.js.LICENSE.txt | 0 93701b40.26edd580.js => 93701b40.7aebaaf1.js | 4 +-- ...SE.txt => 93701b40.7aebaaf1.js.LICENSE.txt | 0 9ab61bc5.3c1c0317.js | 2 -- 9ab61bc5.ce6e76ee.js | 2 ++ ...SE.txt => 9ab61bc5.ce6e76ee.js.LICENSE.txt | 0 community/index.html | 4 +-- components/index.html | 4 +-- contact/index.html | 4 +-- d3437d81.8e8ba2ce.js | 2 ++ ...SE.txt => d3437d81.8e8ba2ce.js.LICENSE.txt | 0 d3437d81.e3573bd2.js | 2 -- dc00a797.30a8be50.js | 2 ++ ...SE.txt => dc00a797.30a8be50.js.LICENSE.txt | 0 dc00a797.df29b8a3.js | 2 -- .../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 +-- .../getting-started/install-qovery/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 +-- .../amazon-web-services/index.html | 10 +++--- .../digital-ocean/index.html | 4 +-- .../google-cloud-platform/index.html | 12 ++++--- .../cloud-service-provider/index.html | 4 +-- .../microsoft-azure/index.html | 4 +-- .../other-csps/index.html | 4 +-- .../scaleway/index.html | 12 +++---- .../cluster-advanced-settings/index.html | 4 +-- .../configuration/clusters/index.html | 10 +++--- .../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 | 4 +-- 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 +-- .../provider/kubernetes/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 | 8 ++--- .../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 +-- e7d0ec68.e83bd0dc.js => e7d0ec68.a84c7d87.js | 4 +-- ...SE.txt => e7d0ec68.a84c7d87.js.LICENSE.txt | 0 files/create_credentials_gcp.sh | 32 ++++++++++++++++++ .../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 | 10 +++--- guides/advanced/deploy-frontend/index.html | 4 +-- guides/advanced/helm-chart/index.html | 4 +-- guides/advanced/index.html | 12 +++---- 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 | 10 +++--- guides/advanced/seed-database/index.html | 4 +-- guides/advanced/terraform/index.html | 4 +-- .../use-preview-environments/index.html | 4 +-- .../guide-amazon-web-services/index.html | 4 +-- .../guide-google-cloud-platform/index.html | 4 +-- .../guide-microsoft-azure/index.html | 4 +-- .../cloud-provider/guide-scaleway/index.html | 4 +-- guides/cloud-provider/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 +++---- guides/provider/guide-kubernetes/index.html | 4 +-- guides/provider/index.html | 4 +-- guides/tags/cloud-provider-aws/index.html | 4 +-- guides/tags/cloud-provider-azure/index.html | 4 +-- guides/tags/cloud-provider-gcp/index.html | 4 +-- .../tags/cloud-provider-scaleway/index.html | 4 +-- guides/tags/database-postgresql/index.html | 4 +-- guides/tags/framework-rails/index.html | 4 +-- guides/tags/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/provider-kubernetes/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 | 12 +++---- guides/tags/type-tutorial/index.html | 4 +-- .../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 +-- .../how-to-deploy-helm-charts/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 | 4 +-- .../index.html | 4 +-- .../index.html | 4 +-- .../index.html | 4 +-- .../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 +-- img/gcp-credentials/gcp_project.png | Bin 0 -> 47771 bytes img/gcp-credentials/gcp_shell_1.png | Bin 0 -> 103102 bytes img/gcp-credentials/gcp_shell_5.png | Bin 0 -> 34560 bytes img/gcp-credentials/gcp_shell_6.png | Bin 0 -> 15692 bytes index.html | 4 +-- mailing_list/index.html | 4 +-- ...in.703bd2be.js => runtime~main.3c65e49c.js | 2 +- server.bundle.js | 30 +++++++++------- 217 files changed, 483 insertions(+), 445 deletions(-) rename 36676680.51c977e4.js => 36676680.3eca5f0e.js (98%) rename 36676680.51c977e4.js.LICENSE.txt => 36676680.3eca5f0e.js.LICENSE.txt (100%) rename 3a03b8f9.752e8ecb.js => 3a03b8f9.0ec51a9c.js (97%) rename 3a03b8f9.752e8ecb.js.LICENSE.txt => 3a03b8f9.0ec51a9c.js.LICENSE.txt (100%) create mode 100644 43a5f55b.402e8b54.js rename 43a5f55b.76e7cba8.js.LICENSE.txt => 43a5f55b.402e8b54.js.LICENSE.txt (100%) delete mode 100644 43a5f55b.76e7cba8.js rename 68c0e7f9.278f19fd.js => 68c0e7f9.1d73352c.js (98%) rename 68c0e7f9.278f19fd.js.LICENSE.txt => 68c0e7f9.1d73352c.js.LICENSE.txt (100%) rename 93701b40.26edd580.js => 93701b40.7aebaaf1.js (98%) rename 93701b40.26edd580.js.LICENSE.txt => 93701b40.7aebaaf1.js.LICENSE.txt (100%) delete mode 100644 9ab61bc5.3c1c0317.js create mode 100644 9ab61bc5.ce6e76ee.js rename 9ab61bc5.3c1c0317.js.LICENSE.txt => 9ab61bc5.ce6e76ee.js.LICENSE.txt (100%) create mode 100644 d3437d81.8e8ba2ce.js rename d3437d81.e3573bd2.js.LICENSE.txt => d3437d81.8e8ba2ce.js.LICENSE.txt (100%) delete mode 100644 d3437d81.e3573bd2.js create mode 100644 dc00a797.30a8be50.js rename dc00a797.df29b8a3.js.LICENSE.txt => dc00a797.30a8be50.js.LICENSE.txt (100%) delete mode 100644 dc00a797.df29b8a3.js rename e7d0ec68.e83bd0dc.js => e7d0ec68.a84c7d87.js (98%) rename e7d0ec68.e83bd0dc.js.LICENSE.txt => e7d0ec68.a84c7d87.js.LICENSE.txt (100%) create mode 100644 files/create_credentials_gcp.sh create mode 100644 img/gcp-credentials/gcp_project.png create mode 100644 img/gcp-credentials/gcp_shell_1.png create mode 100644 img/gcp-credentials/gcp_shell_5.png create mode 100644 img/gcp-credentials/gcp_shell_6.png rename runtime~main.703bd2be.js => runtime~main.3c65e49c.js (97%) diff --git a/36676680.51c977e4.js b/36676680.3eca5f0e.js similarity index 98% rename from 36676680.51c977e4.js rename to 36676680.3eca5f0e.js index d50e144cdd..06522d2b2b 100644 --- a/36676680.51c977e4.js +++ b/36676680.3eca5f0e.js @@ -1,2 +1,2 @@ -/*! For license information please see 36676680.51c977e4.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{213:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return p}));var r=n(1),a=n(9),o=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-06-05",$schema:"/.meta/.schemas/guides.json",title:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",permalink:"/guides/advanced/deploy-external-services",readingTime:"1 min read",source:"@site/guides/advanced/deploy-external-services.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Deploy External Services",truncated:!1,prevItem:{title:"Deploy AWS Services",permalink:"/guides/advanced/deploy-aws-services"},nextItem:{title:"Deploy Frontend App",permalink:"/guides/advanced/deploy-frontend"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function p(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(o.b)("h2",{id:"qa"},"Q&A"),Object(o.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}p.isMDXComponent=!0},422: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 s=a.a.createContext({}),l=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=l(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=l(n),d=r,m=p["".concat(i,".").concat(d)]||p[d]||f[d]||o;return n?a.a.createElement(m,c({ref:t},s,{components:n})):a.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:a(u,n);s>c;)t[c++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),a=n.n(r),o=n(423);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)}},432:function(e,t,n){"use strict";var r=n(434),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("&"):""}},433:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(422),n(432)),i=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),p=l[0],f=l[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!p&&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 f("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==p&&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"),"."))}},434: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 +/*! For license information please see 36676680.3eca5f0e.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{213:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return p}));var r=n(1),a=n(9),o=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-12-27",$schema:"/.meta/.schemas/guides.json",title:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",permalink:"/guides/advanced/deploy-external-services",readingTime:"1 min read",source:"@site/guides/advanced/deploy-external-services.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Deploy External Services",truncated:!1,prevItem:{title:"Deploy AWS Services",permalink:"/guides/advanced/deploy-aws-services"},nextItem:{title:"Deploy Frontend App",permalink:"/guides/advanced/deploy-frontend"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function p(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(o.b)("h2",{id:"qa"},"Q&A"),Object(o.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}p.isMDXComponent=!0},422: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 s=a.a.createContext({}),l=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=l(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=l(n),d=r,m=p["".concat(i,".").concat(d)]||p[d]||f[d]||o;return n?a.a.createElement(m,c({ref:t},s,{components:n})):a.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:a(u,n);s>c;)t[c++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),a=n.n(r),o=n(423);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)}},432:function(e,t,n){"use strict";var r=n(434),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("&"):""}},433:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(422),n(432)),i=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),p=l[0],f=l[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!p&&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 f("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==p&&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"),"."))}},434: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/36676680.51c977e4.js.LICENSE.txt b/36676680.3eca5f0e.js.LICENSE.txt similarity index 100% rename from 36676680.51c977e4.js.LICENSE.txt rename to 36676680.3eca5f0e.js.LICENSE.txt diff --git a/3a03b8f9.752e8ecb.js b/3a03b8f9.0ec51a9c.js similarity index 97% rename from 3a03b8f9.752e8ecb.js rename to 3a03b8f9.0ec51a9c.js index 4ab656bc52..cac5dcae81 100644 --- a/3a03b8f9.752e8ecb.js +++ b/3a03b8f9.0ec51a9c.js @@ -1,2 +1,2 @@ -/*! For license information please see 3a03b8f9.752e8ecb.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{218:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return l}));var r=n(1),a=n(9),o=(n(0),n(424)),c=n(430),i={last_modified_on:"2023-03-17",title:"Interface",description:"Everything you need to know to use Qovery",sidebar_label:"hidden",hide_pagination:!0},u={id:"using-qovery/interface",title:"Interface",description:"Everything you need to know to use Qovery",source:"@site/docs/using-qovery/interface.md",permalink:"/docs/using-qovery/interface",sidebar_label:"hidden",sidebar:"docs",previous:{title:"Using Qovery",permalink:"/docs/using-qovery"},next:{title:"Web interface",permalink:"/docs/using-qovery/interface/web-interface"}},s=[],f={rightToc:s};function l(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},f,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery."),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/cli/",mdxType:"Jump"},"Cli"),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/rest-api/",mdxType:"Jump"},"Rest api"),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/terraform-interface/",mdxType:"Jump"},"Terraform interface"),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/web-interface/",mdxType:"Jump"},"Web interface"))}l.isMDXComponent=!0},422: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 s=a.a.createContext({}),f=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},l=function(e){var t=f(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)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),l=f(n),d=r,m=l["".concat(c,".").concat(d)]||l[d]||p[d]||o;return n?a.a.createElement(m,i({ref:t},s,{components:n})):a.a.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,c=new Array(o);c[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:r,c[1]=i;for(var s=2;s0)&&(t.unobserve(n),t.disconnect(),r())}))}))).observe(n))},to:f})):o.a.createElement("a",Object(r.a)({},e,{href:f}))}},430:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=n(429),c=n(422),i=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.className,r=e.badge,c=e.leftIcon,u=e.rightIcon,s=e.size,f=e.target,l=e.to,p=i()("jump-to","jump-to--"+s,n),d=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},c&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+c})),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-"+(u||"chevron-right")+" arrow"}))));return f?a.a.createElement("a",{href:l,target:f,className:p},d):a.a.createElement(o.a,{to:l,className:p},d)}},431:function(e,t,n){"use strict";function r(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return r}))}}]); \ No newline at end of file +/*! For license information please see 3a03b8f9.0ec51a9c.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{218:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return l}));var r=n(1),a=n(9),o=(n(0),n(424)),c=n(430),i={last_modified_on:"2023-12-27",title:"Interface",description:"Everything you need to know to use Qovery",sidebar_label:"hidden",hide_pagination:!0},u={id:"using-qovery/interface",title:"Interface",description:"Everything you need to know to use Qovery",source:"@site/docs/using-qovery/interface.md",permalink:"/docs/using-qovery/interface",sidebar_label:"hidden",sidebar:"docs",previous:{title:"Using Qovery",permalink:"/docs/using-qovery"},next:{title:"Web interface",permalink:"/docs/using-qovery/interface/web-interface"}},s=[],f={rightToc:s};function l(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},f,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery."),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/cli/",mdxType:"Jump"},"Cli"),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/rest-api/",mdxType:"Jump"},"Rest api"),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/terraform-interface/",mdxType:"Jump"},"Terraform interface"),Object(o.b)(c.a,{to:"/docs/using-qovery/interface/web-interface/",mdxType:"Jump"},"Web interface"))}l.isMDXComponent=!0},422: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 s=a.a.createContext({}),f=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},l=function(e){var t=f(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)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),l=f(n),d=r,m=l["".concat(c,".").concat(d)]||l[d]||p[d]||o;return n?a.a.createElement(m,i({ref:t},s,{components:n})):a.a.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,c=new Array(o);c[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:r,c[1]=i;for(var s=2;s0)&&(t.unobserve(n),t.disconnect(),r())}))}))).observe(n))},to:f})):o.a.createElement("a",Object(r.a)({},e,{href:f}))}},430:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=n(429),c=n(422),i=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.className,r=e.badge,c=e.leftIcon,u=e.rightIcon,s=e.size,f=e.target,l=e.to,p=i()("jump-to","jump-to--"+s,n),d=a.a.createElement("div",{className:"jump-to--inner"},a.a.createElement("div",{className:"jump-to--inner-2"},c&&a.a.createElement("div",{className:"jump-to--left"},a.a.createElement("i",{className:"feather icon-"+c})),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-"+(u||"chevron-right")+" arrow"}))));return f?a.a.createElement("a",{href:l,target:f,className:p},d):a.a.createElement(o.a,{to:l,className:p},d)}},431:function(e,t,n){"use strict";function r(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return r}))}}]); \ No newline at end of file diff --git a/3a03b8f9.752e8ecb.js.LICENSE.txt b/3a03b8f9.0ec51a9c.js.LICENSE.txt similarity index 100% rename from 3a03b8f9.752e8ecb.js.LICENSE.txt rename to 3a03b8f9.0ec51a9c.js.LICENSE.txt diff --git a/404.html b/404.html index 2b2d7bbb3b..75566f8ef9 100644 --- a/404.html +++ b/404.html @@ -26,7 +26,7 @@ - + @@ -39,7 +39,7 @@ - + diff --git a/43a5f55b.402e8b54.js b/43a5f55b.402e8b54.js new file mode 100644 index 0000000000..6e183b29b3 --- /dev/null +++ b/43a5f55b.402e8b54.js @@ -0,0 +1,2 @@ +/*! For license information please see 43a5f55b.402e8b54.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{229: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 p}));var a=n(1),r=n(9),c=(n(0),n(424)),o=n(433),i=n(423),l=n(428),s={last_modified_on:"2023-12-28",title:"Amazon Web Services (AWS)",description:"Learn how to configure and plug your Amazon Web Services (AWS) account"},b={id:"using-qovery/configuration/cloud-service-provider/amazon-web-services",title:"Amazon Web Services (AWS)",description:"Learn how to configure and plug your Amazon Web Services (AWS) account",source:"@site/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services.md",permalink:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services",sidebar:"docs",previous:{title:"Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider"},next:{title:"Google Cloud Platform (GCP)",permalink:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform"}},u=[{value:"Getting started",id:"getting-started",children:[{value:"Connect your AWS account",id:"connect-your-aws-account",children:[]},{value:"Install a new cluster on Qovery",id:"install-a-new-cluster-on-qovery",children:[]},{value:"Deployed AWS components",id:"deployed-aws-components",children:[]},{value:"Remove Qovery from your AWS account",id:"remove-qovery-from-your-aws-account",children:[]},{value:"IAM permissions",id:"iam-permissions",children:[]}]},{value:"Regions",id:"regions",children:[]},{value:"Manually configure VPC subnet",id:"manually-configure-vpc-subnet",children:[]},{value:"Configure routing table",id:"configure-routing-table",children:[]},{value:"How Qovery works on AWS",id:"how-qovery-works-on-aws",children:[{value:"Kubernetes",id:"kubernetes",children:[]},{value:"Managed services",id:"managed-services",children:[]},{value:"Security and compliance",id:"security-and-compliance",children:[]}]},{value:"FAQ",id:"faq",children:[{value:"How to choose a region?",id:"how-to-choose-a-region",children:[]},{value:"I don't find a region that is provided by AWS",id:"i-dont-find-a-region-that-is-provided-by-aws",children:[]},{value:"Migrate between Cloud providers and regions",id:"migrate-between-cloud-providers-and-regions",children:[]}]}],d={rightToc:u};function p(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(c.b)("wrapper",Object(a.a)({},d,n,{components:t,mdxType:"MDXLayout"}),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"Please refer to ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/provider/kubernetes/"}),"this page")," if you want to install Qovery on your own Kubernetes cluster (BYOK).")),Object(c.b)("p",null,"Qovery lets you quickly deploy applications to your ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://aws.amazon.com"}),"Amazon Web Services (AWS)")," account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your AWS account."),Object(c.b)("h2",{id:"getting-started"},"Getting started"),Object(c.b)(l.a,{mdxType:"Assumptions"},Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"You have a Qovery account"),Object(c.b)("li",{parentName:"ul"},"You have created an ",Object(c.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/organization/"}),"Organization")),Object(c.b)("li",{parentName:"ul"},"You have an AWS account"))),Object(c.b)("h3",{id:"connect-your-aws-account"},"Connect your AWS account"),Object(c.b)("p",null,"To link your AWS account to Qovery you need to provide an AWS ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key")," with the ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#iam-permissions"}),"required IAM permissions"),"."),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"You can link more than one AWS account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers.")),Object(c.b)("h4",{id:"create-your-aws-credentials---access-key-id-and-secret-access-key"},"Create your AWS credentials - ",Object(c.b)("inlineCode",{parentName:"h4"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"h4"},"secret access key")),Object(c.b)(o.a,{headingDepth:3,mdxType:"Steps"},Object(c.b)("ol",null,Object(c.b)("li",null,Object(c.b)("p",null,Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.aws.amazon.com"}),"Connect to your AWS console"))),Object(c.b)("li",null,Object(c.b)("p",null,"Go to ",Object(c.b)("inlineCode",{parentName:"p"},"IAM")),Object(c.b)("img",{src:"/img/aws/aws-my-security-credentials.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Create ",Object(c.b)("inlineCode",{parentName:"p"},"Admins")," group ",Object(c.b)("strong",{parentName:"p"},"without any permissions")),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,"The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#iam"}),"aws.iam.admin_group")," BEFORE launching the cluster installation process")),Object(c.b)("img",{src:"/img/aws/aws-create-group-1.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-create-group-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-group-3.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Create one IAM user called ",Object(c.b)("inlineCode",{parentName:"p"},"qovery"),"."),Object(c.b)("img",{src:"/img/aws/aws-create-user-1.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-create-user-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-user-3.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-create-user-4.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Setup",Object(c.b)("a",{href:"/files/qovery-iam-aws.json"}," IAM permissions")," to the ",Object(c.b)("inlineCode",{parentName:"p"},"qovery")," user."),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("a",{href:"/files/qovery-iam-aws.json"},"Download IAM permissions JSON"),Object(c.b)("hr",null),Object(c.b)("p",null,"Or copy it from below:"),Object(c.b)("pre",null,Object(c.b)("code",Object(a.a)({parentName:"pre"},{className:"language-json"}),'{\n "Statement": [\n {\n "Action": [\n "dynamodb:*",\n "iam:*",\n "ec2:*",\n "autoscaling:*",\n "application-autoscaling:*",\n "elasticloadbalancing:*",\n "ecr:*",\n "ecs:*",\n "eks:*",\n "rds:*",\n "elasticache:*",\n "kms:*",\n "logs:*",\n "cloudwatch:*",\n "cloudtrail:LookupEvents",\n "events:DescribeRule",\n "events:DeleteRule",\n "events:ListRuleNamesByTarget",\n "events:ListTargetsByRule",\n "events:PutRule",\n "events:PutTargets",\n "events:RemoveTargets",\n "es:AddTags",\n "es:RemoveTags",\n "es:ListTags",\n "es:DeleteElasticsearchDomain",\n "es:DescribeElasticsearchDomain",\n "es:CreateElasticsearchDomain",\n "s3:*",\n "tag:GetResources"\n ],\n "Effect": "Allow",\n "Resource": "*"\n }\n ],\n "Version": "2012-10-17"\n}\n'))),Object(c.b)("p",null,Object(c.b)("strong",{parentName:"p"},"Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:")),Object(c.b)("img",{src:"/img/aws/aws-add-policy-1.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-add-policy-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-add-policy-3.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-add-policy-4.jpg"})),Object(c.b)("li",null,Object(c.b)("p",null,"To create an ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key"),", go to the Security Credentials tab of the ",Object(c.b)("inlineCode",{parentName:"p"},"Qovery")," user and press ",Object(c.b)("inlineCode",{parentName:"p"},"Create access key")),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-1.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-3.png"}),Object(c.b)("p",null,"You can now save the ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key")),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-4.png"})))),Object(c.b)("p",null,"Well done!! You now have your AWS ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key")," and your permissions are setups; It is time to connect Qovery to your AWS account."),Object(c.b)("h3",{id:"install-a-new-cluster-on-qovery"},"Install a new cluster on Qovery"),Object(c.b)("p",null,"You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.\nFollow ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"this documentation")," to create a new cluster on your organization."),Object(c.b)("h3",{id:"deployed-aws-components"},"Deployed AWS components"),Object(c.b)("img",{src:"/img/aws-deployed-infra.png"}),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Network Services"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"A dedicated multi AZ VPC"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Everything Qovery will deploy, will be deployed inside this VPC")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for RDS (multi AZ)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for RDS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for DocumentDB (multi AZ)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for DocumentDB")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for Elasticache (multi AZ)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for Elasticache")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"An internet gateway for the VPC"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to let containers having access to Internet")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated NLB to redirect 443 traffic to Nginx Ingress"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"High Availability network load balancer, pointing to Nginx Ingress inside EKS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"NAT gateways (multi AZ) + EIP addresses (multi AZ) + subnet groups + routing table"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Useful to get outgoing static IP")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated VPC routes for VPC peering"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Useful to perform VPC peering with others VPC on the same or different account")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Kubernetes Services"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"A dedicated EKS cluster (multi AZ) for this VPC"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated Kubernetes cluster managed by AWS with nodes (instances type) defined by the customer")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS EBS CSI to access EC2 volumes + a dedicated policy"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to allow EKS cluster having access to volume and mount them to containers")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS IAM User Sync + a dedicated policy"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to sync desired IAM account to EKS to let them connect directly ot Kubernetes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated user for a Cluster Autoscaler+ a dedicated policy"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to let autoscaler having access to EC2 autoscaling groups")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated policies for AWS EKS CNI, EC2 container registry + EKS worker nodes"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to let EKS having access to container registry and configure the Kubernetes network")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Security group for EKS remote access (dual authentication: TLS + IAM authenticator)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to have a secure remote access on the Kubernetes cluster")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Security group for 443 port pointing to Nginx ingress inside EKS"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"External access to web services inside the Kubernetes cluster")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Other Services"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Cloudwatch log groups for the EKS cluster"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Kubernetes logs, useful for the AWS and EKS support to diagnose an issue")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket for application's logs + a dedicated IAM account"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Application's logs are stored in an KMS encrypted S3 pivate bucket")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket to store the kubeconfig"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Kubernetes Kubeconfig is stored in an KMS encrypted, private and versionned bucket, used by Qovery for application's deployment")))),Object(c.b)("h3",{id:"remove-qovery-from-your-aws-account"},"Remove Qovery from your AWS account"),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,"Your applications and your data will be deleted.")),Object(c.b)("p",null,"To delete Qovery from your AWS account you must be the owner of the Qovery Organization and you have to delete everything in this order:"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"Environments"),Object(c.b)("li",{parentName:"ul"},"Clusters")),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,'If you remove the access to your AWS account before deleting all the resources on the Qovery platform, you will have to manually delete them by yourself by following the guide "I don\'t have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?" in ',Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/troubleshoot/"}),"this section"),".")),Object(c.b)("h3",{id:"iam-permissions"},"IAM permissions"),Object(c.b)("p",null,"Qovery required IAM permissions to create, update and managed the infrastructure."),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"IAM is used to create IAM roles"),Object(c.b)("li",{parentName:"ul"},"S3 is used to store our generated configuration files"),Object(c.b)("li",{parentName:"ul"},"Cloudwatch, for creating a group stream for each Kubernetes clusters"),Object(c.b)("li",{parentName:"ul"},"Autoscaling for RDS and autoscaling rules for the Kubernetes cluster"),Object(c.b)("li",{parentName:"ul"},"Elastic load-balancing for ELB / ALB / NLB."),Object(c.b)("li",{parentName:"ul"},"DynamoDB to have a distributed lock on infrastructure deployment."),Object(c.b)("li",{parentName:"ul"},"ECR for managing the container registry, create/update/delete repository."),Object(c.b)("li",{parentName:"ul"},"KMS to load and store keys (RDS, SSH, \u2026)"),Object(c.b)("li",{parentName:"ul"},"EKS to create and update the Kubernetes cluster.")),Object(c.b)("details",null,Object(c.b)("summary",null,"Minimum IAM permission set"),Object(c.b)("blockquote",null,"Last update: 2023-06-08"),Object(c.b)(i.a,{type:"alert",mdxType:"Alert"},Object(c.b)("p",null,"This is purely informative and we strongly recommend you to NOT use this configuration within your IAM permissions since it might not reflect the latest product update. Please use the one provided in the section above.")),Object(c.b)("p",null,"Below you can find the minimum permission set required by Qovery to run and deploy your applications."),Object(c.b)("p",null,"Policies lengths are limited regarding which object they\u2019re attached to but the one Qovery needs represent more than the maximum (~6000 characters)."),Object(c.b)("p",null,"In order to setup it up, you need to create two IAM groups, each one with one of the following policies."),Object(c.b)("p",null,"Then we must create a user added to each of the previously created groups."),Object(c.b)("p",null,"Once it\u2019s done, the user\u2019s access key and secret key can be used in Qovery."),Object(c.b)("pre",null,Object(c.b)("code",Object(a.a)({parentName:"pre"},{className:"language-json"}),'\n{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "autoscaling:SuspendProcesses",\n "ec2:AllocateAddress",\n "ec2:AssociateAddress",\n "ec2:AssociateRouteTable",\n "ec2:AttachVolume",\n "ec2:AttachInternetGateway",\n "ec2:AuthorizeSecurityGroupEgress",\n "ec2:AuthorizeSecurityGroupIngress",\n "ec2:CreateInternetGateway",\n "ec2:CreateKeyPair",\n "ec2:CreateLaunchTemplate",\n "ec2:CreateLaunchTemplateVersion",\n "ec2:CreateNatGateway",\n "ec2:CreateRoute",\n "ec2:CreateRouteTable",\n "ec2:CreateSecurityGroup",\n "ec2:CreateSubnet",\n "ec2:CreateTags",\n "ec2:CreateVolume",\n "ec2:CreateVpc",\n "ec2:DeleteInternetGateway",\n "ec2:DeleteKeyPair",\n "ec2:DeleteLaunchTemplate",\n "ec2:DeleteNatGateway",\n "ec2:DeleteRouteTable",\n "ec2:DeleteSecurityGroup",\n "ec2:DeleteSubnet",\n "ec2:DeleteVolume",\n "ec2:DeleteVpc",\n "ec2:DescribeAddresses",\n "ec2:DescribeAvailabilityZones",\n "ec2:DescribeImages",\n "ec2:DescribeInstanceAttribute",\n "ec2:DescribeInstanceCreditSpecifications",\n "ec2:DescribeInstances",\n "ec2:DescribeInstanceTypes",\n "ec2:DescribeInternetGateways",\n "ec2:DescribeKeyPairs",\n "ec2:DescribeLaunchTemplateVersions",\n "ec2:DescribeLaunchTemplates",\n "ec2:DescribeNatGateways",\n "ec2:DescribeNetworkAcls",\n "ec2:DescribeNetworkInterfaces",\n "ec2:DescribeRouteTables",\n "ec2:DescribeSecurityGroupRules",\n "ec2:DescribeSecurityGroups",\n "ec2:DescribeSubnets",\n "ec2:DescribeTags",\n "ec2:DescribeVolumes",\n "ec2:DescribeVpcAttribute",\n "ec2:DescribeVpcClassicLink",\n "ec2:DescribeVpcClassicLinkDnsSupport",\n "ec2:DescribeVpcs",\n "ec2:DetachInternetGateway",\n "ec2:DetachVolume",\n "ec2:DisassociateAddress",\n "ec2:DisassociateRouteTable",\n "ec2:ImportKeyPair",\n "ec2:ModifySubnetAttribute",\n "ec2:ModifyVpcAttribute",\n "ec2:ReleaseAddress",\n "ec2:RevokeSecurityGroupEgress",\n "ec2:RevokeSecurityGroupIngress",\n "ec2:RunInstances",\n "ec2:StopInstances",\n "ec2:TerminateInstances",\n "ecr:BatchCheckLayerAvailability",\n "ecr:BatchGetImage",\n "ecr:CompleteLayerUpload",\n "ecr:CreateRepository",\n "ecr:DeleteRepository",\n "ecr:DescribeImages",\n "ecr:DescribeRepositories",\n "ecr:GetAuthorizationToken",\n "ecr:GetDownloadUrlForLayer",\n "ecr:InitiateLayerUpload",\n "ecr:PutImage",\n "ecr:PutLifecyclePolicy",\n "ecr:TagResource",\n "ecr:UploadLayerPart",\n "eks:CreateAddon",\n "eks:CreateCluster",\n "eks:CreateNodegroup",\n "eks:DeleteAddon",\n "eks:DeleteCluster",\n "eks:DeleteNodegroup",\n "eks:DescribeAddon",\n "eks:DescribeCluster",\n "eks:DescribeNodegroup",\n "eks:DescribeUpdate",\n "eks:ListClusters",\n "eks:ListNodegroups",\n "eks:TagResource",\n "eks:UpdateAddon",\n "eks:UpdateClusterConfig",\n "eks:UpdateClusterVersion",\n "eks:UpdateNodegroupConfig",\n "eks:UpdateNodegroupVersion",\n "elasticache:AddTagsToResource",\n "elasticache:CreateCacheSubnetGroup",\n "elasticache:CreateReplicationGroup",\n "elasticache:DeleteCacheSubnetGroup",\n "elasticache:DeleteReplicationGroup",\n "elasticache:DescribeCacheClusters",\n "elasticache:DescribeCacheSubnetGroups",\n "elasticache:DescribeReplicationGroups",\n "elasticache:ListTagsForResource",\n "elasticloadbalancing:DescribeLoadBalancers",\n "elasticloadbalancing:DescribeTags"\n ],\n "Resource": "*"\n }\n ]\n}\n\n')),Object(c.b)("pre",null,Object(c.b)("code",Object(a.a)({parentName:"pre"},{className:"language-json"}),'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "iam:AddRoleToInstanceProfile",\n "iam:AttachRolePolicy",\n "iam:AttachUserPolicy",\n "iam:CreateAccessKey",\n "iam:CreateInstanceProfile",\n "iam:CreateOpenIDConnectProvider",\n "iam:CreatePolicy",\n "iam:CreateRole",\n "iam:CreateServiceLinkedRole",\n "iam:CreateUser",\n "iam:DeleteAccessKey",\n "iam:DeleteInstanceProfile",\n "iam:DeleteOpenIDConnectProvider",\n "iam:DeletePolicy",\n "iam:DeleteRole",\n "iam:DeleteRolePolicy",\n "iam:DeleteUser",\n "iam:DeleteUserPolicy",\n "iam:DetachRolePolicy",\n "iam:DetachUserPolicy",\n "iam:GetInstanceProfile",\n "iam:GetOpenIDConnectProvider",\n "iam:GetPolicy",\n "iam:GetPolicyVersion",\n "iam:GetRole",\n "iam:GetRolePolicy",\n "iam:GetUser",\n "iam:GetUserPolicy",\n "iam:ListAccessKeys",\n "iam:ListAttachedRolePolicies",\n "iam:ListAttachedUserPolicies",\n "iam:ListGroupsForUser",\n "iam:ListInstanceProfilesForRole",\n "iam:ListPolicyVersions",\n "iam:ListRolePolicies",\n "iam:PassRole",\n "iam:PutRolePolicy",\n "iam:PutUserPolicy",\n "iam:RemoveRoleFromInstanceProfile",\n "iam:TagInstanceProfile",\n "iam:TagOpenIDConnectProvider",\n "iam:TagRole",\n "iam:TagUser",\n "kms:CreateGrant",\n "kms:CreateKey",\n "kms:Decrypt",\n "kms:DescribeKey",\n "kms:GenerateDataKey",\n "kms:GetKeyPolicy",\n "kms:GetKeyRotationStatus",\n "kms:ListResourceTags",\n "kms:PutKeyPolicy",\n "kms:ScheduleKeyDeletion",\n "kms:TagResource",\n "logs:CreateLogGroup",\n "logs:DeleteLogGroup",\n "logs:DescribeLogGroups",\n "logs:ListTagsLogGroup",\n "logs:PutRetentionPolicy",\n "logs:TagLogGroup",\n "rds:AddTagsToResource",\n "rds:CreateDBCluster",\n "rds:CreateDBInstance",\n "rds:CreateDBParameterGroup",\n "rds:CreateDBSubnetGroup",\n "rds:DeleteDBCluster",\n "rds:DeleteDBInstance",\n "rds:DeleteDBParameterGroup",\n "rds:DeleteDBSubnetGroup",\n "rds:DescribeDBClusters",\n "rds:DescribeDBInstances",\n "rds:DescribeDBParameterGroups",\n "rds:DescribeDBParameters",\n "rds:DescribeDBSubnetGroups",\n "rds:DescribeGlobalClusters",\n "rds:ListTagsForResource",\n "rds:ModifyDBInstance",\n "rds:ModifyDBParameterGroup",\n "rds:StartDBCluster",\n "rds:StartDBInstance",\n "rds:StopDBCluster",\n "rds:StopDBInstance",\n "s3:CreateBucket",\n "s3:DeleteBucket",\n "s3:DeleteObject",\n "s3:DeleteObjectVersion",\n "s3:DeleteBucketPolicy",\n "s3:GetAccelerateConfiguration",\n "s3:GetBucketAcl",\n "s3:GetBucketCORS",\n "s3:GetBucketLogging",\n "s3:GetBucketObjectLockConfiguration",\n "s3:GetBucketOwnershipControls",\n "s3:GetBucketPolicy",\n "s3:GetBucketPublicAccessBlock",\n "s3:GetBucketRequestPayment",\n "s3:GetBucketTagging",\n "s3:GetBucketVersioning",\n "s3:GetBucketWebsite",\n "s3:GetEncryptionConfiguration",\n "s3:GetLifecycleConfiguration",\n "s3:GetObject",\n "s3:GetReplicationConfiguration",\n "s3:ListAccessPoints",\n "s3:ListAllMyBuckets",\n "s3:ListBucket",\n "s3:ListBucketMultipartUploads",\n "s3:ListBucketVersions",\n "s3:ListMultiRegionAccessPoints",\n "s3:ListMultipartUploadParts",\n "s3:ListStorageLensConfigurations",\n "s3:PutBucketAcl",\n "s3:PutBucketOwnershipControls",\n "s3:PutBucketPolicy",\n "s3:PutBucketPublicAccessBlock",\n "s3:PutBucketTagging",\n "s3:PutBucketVersioning",\n "s3:PutEncryptionConfiguration",\n "s3:PutLifecycleConfiguration",\n "s3:PutObject",\n "s3:PutObjectRetention",\n "secretsmanager:CreateSecret",\n "secretsmanager:TagResource",\n "sts:GetCallerIdentity"\n ],\n "Resource": "*"\n }\n ]\n}\n'))),Object(c.b)("h2",{id:"regions"},"Regions"),Object(c.b)("p",null,"Qovery supports the following AWS regions:"),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null})),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"name"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"description"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"supported"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-west-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US West (Oregon)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-east-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US East (Ohio)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-east-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US East (N. Virginia)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-west-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US West (N. California)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"No (Only 2 Availability Zone)")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddff\ud83c\udde6"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"af-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Africa (Cape Town)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udded\ud83c\uddf0"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-east-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Hong Kong)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddee\ud83c\uddf3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Mumbai)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddef\ud83c\uddf5"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-northeast-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Tokyo)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf0\ud83c\uddf7"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-northeast-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Seoul)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddef\ud83c\uddf5"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-northeast-3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Osaka)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf8\ud83c\uddec"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-southeast-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Singapore)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde6\ud83c\uddfa"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-southeast-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Sydney)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde8\ud83c\udde6"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ca-central-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Canada (Toronto)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde8\ud83c\uddf3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"cn-north-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"China (Beijing)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde8\ud83c\uddf3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"cn-northwest-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"China (Ningxia)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde9\ud83c\uddea"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-central-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Frankfurt)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddee\ud83c\uddea"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-west-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Ireland)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-west-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (London)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-west-3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Paris)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddee\ud83c\uddf9"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Milan)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf8\ud83c\uddea"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-north-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Stockholm)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde7\ud83c\udded"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"me-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Middle East (Bahrain)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde7\ud83c\uddf7"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"sa-east-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"South America (S\xe3o Paulo)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")))),Object(c.b)("p",null,"Qovery supports regions where ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://aws.amazon.com/eks"}),"Amazon EKS")," is supported."),Object(c.b)("h2",{id:"manually-configure-vpc-subnet"},"Manually configure VPC subnet"),Object(c.b)("p",null,"VPC subnet is automatically defined by Qovery on cluster creation. However, you may want to choose your own VPC subnet, for example to perform VPC Peering."),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"If you want to perform VPC Peering with Qovery, please refer to our guide ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/tutorial/aws-vpc-peering-with-qovery/"}),"VPC Peering with Qovery")," to be assisted step by step.")),Object(c.b)("p",null,"Have a look at ","[this section]","[docs.using-qovery.configuration.clusters#custom-vpc-subnet]","] to know more on how to set the VPC Subnet."),Object(c.b)("h2",{id:"configure-routing-table"},"Configure routing table"),Object(c.b)("p",null,"You may want to create and edit a network routing table to perform VPC peering. This can be done by accessing to the parameters of a cluster, in the settings of your organization."),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"If you want to perform VPC Peering with Qovery, please refer to our guide ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/tutorial/aws-vpc-peering-with-qovery/"}),"VPC Peering with Qovery")," to be assisted step by step.")),Object(c.b)("p",null,"Have a look at ","[this section]","[docs.using-qovery.configuration.clusters#network]","] to know more on how to set the routing table."),Object(c.b)("h2",{id:"how-qovery-works-on-aws"},"How Qovery works on AWS"),Object(c.b)("p",null,"Qovery is an abstraction layer on top of AWS and Kubernetes. Qovery manages the configuration of AWS account, and helps you to deploy production ready apps in seconds.\nTo make it works, Qovery rely on Kubernetes for stateless apps (containers), and AWS for stateful apps (databases, storage...)."),Object(c.b)("p",null,Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/how-qovery-works/"}),"Read more")," on how Qovery works behind the scene."),Object(c.b)("h3",{id:"kubernetes"},"Kubernetes"),Object(c.b)("p",null,"The first time you set up your AWS account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications."),Object(c.b)("h3",{id:"managed-services"},"Managed services"),Object(c.b)("p",null,"AWS provides managed services for ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/postgresql/"}),"PostgreSQL"),", ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mysql/"}),"MySQL"),", ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/redis/"}),"Redis"),", ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mongodb/"}),"MongoDB"),". Qovery gives you access to those services when you set the ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/deployment-rule/#environment-deployment-rules"}),"environment mode")," to ",Object(c.b)("inlineCode",{parentName:"p"},"Production"),". In ",Object(c.b)("inlineCode",{parentName:"p"},"Development")," mode, Qovery provides containers equivalent, which is cheaper and faster to start."),Object(c.b)("h3",{id:"security-and-compliance"},"Security and compliance"),Object(c.b)("p",null,"Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"Your configuration are stored on your AWS account."),Object(c.b)("li",{parentName:"ul"},"Your configuration is encrypted on your AWS account."),Object(c.b)("li",{parentName:"ul"},"Qovery can't access to your data."),Object(c.b)("li",{parentName:"ul"},"Suppose Qovery stops to run, your applications are not impacted.")),Object(c.b)("h2",{id:"faq"},"FAQ"),Object(c.b)("h3",{id:"how-to-choose-a-region"},"How to choose a region?"),Object(c.b)("p",null,"Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency."),Object(c.b)("h3",{id:"i-dont-find-a-region-that-is-provided-by-aws"},"I don't find a region that is provided by AWS"),Object(c.b)("p",null,"We are probably testing the support of this region, please ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.qovery.com/contact"}),"contact us")," to know what's the status"),Object(c.b)("h3",{id:"migrate-between-cloud-providers-and-regions"},"Migrate between Cloud providers and regions"),Object(c.b)("p",null,"Today, you can't migrate an environment from one region to another after it has been created. Vote ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://roadmap.qovery.com/"}),"here")," if you need this feature."))}p.isMDXComponent=!0},422: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 c=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({}),b=function(e){var t=r.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},u=function(e){var t=b(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,c=e.originalType,o=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=b(n),p=a,m=u["".concat(o,".").concat(p)]||u[p]||d[p]||c;return n?r.a.createElement(m,i({ref:t},s,{components:n})):r.a.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var c=n.length,o=new Array(c);o[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var s=2;s1?arguments[1]:void 0,n),l=o>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>i;)t[i++]=e;return t}},427:function(e,t,n){var a=n(28).f,r=Function.prototype,c=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(c)[1]}catch(e){return""}}})},428:function(e,t,n){"use strict";n(427);var a=n(0),r=n.n(a),c=n(423);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(c.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)}},432:function(e,t,n){"use strict";var a=n(434),r=n(51);function c(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(),c=t.length>0?t.join("="):void 0;c=void 0===c?null:decodeURIComponent(c),n(decodeURIComponent(r),c,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?[c(t,e),"[",a,"]"].join(""):[c(t,e),"[",c(a,e),"]=",c(n,e)].join("")};case"bracket":return function(t,n){return null===n?c(t,e):[c(t,e),"[]=",c(n,e)].join("")};default:return function(t,n){return null===n?c(t,e):[c(t,e),"=",c(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 c(a,t);if(Array.isArray(r)){var o=[];return r.slice().forEach((function(e){void 0!==e&&o.push(n(a,e,o.length))})),o.join("&")}return c(a,t)+"="+c(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var a=n(0),r=n.n(a),c=(n(422),n(432)),o=n.n(c);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,c=e.hideFeedbackQuestion,i="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+i+" failed",body:"The tutorial on:\n\n"+i+"\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?"+o.a.stringify(l),b=Object(a.useState)(null),u=b[0],d=b[1];return r.a.createElement("div",{className:"steps steps--h"+n},t,!c&&!u&&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"==u&&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"),"."))}},434: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/43a5f55b.76e7cba8.js.LICENSE.txt b/43a5f55b.402e8b54.js.LICENSE.txt similarity index 100% rename from 43a5f55b.76e7cba8.js.LICENSE.txt rename to 43a5f55b.402e8b54.js.LICENSE.txt diff --git a/43a5f55b.76e7cba8.js b/43a5f55b.76e7cba8.js deleted file mode 100644 index d22797022b..0000000000 --- a/43a5f55b.76e7cba8.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 43a5f55b.76e7cba8.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{229: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 p}));var a=n(1),r=n(9),c=(n(0),n(424)),o=n(433),i=n(423),l=n(428),s={last_modified_on:"2023-11-28",title:"Amazon Web Services (AWS)",description:"Learn how to configure and plug your Amazon Web Services (AWS) account"},b={id:"using-qovery/configuration/cloud-service-provider/amazon-web-services",title:"Amazon Web Services (AWS)",description:"Learn how to configure and plug your Amazon Web Services (AWS) account",source:"@site/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services.md",permalink:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services",sidebar:"docs",previous:{title:"Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider"},next:{title:"Google Cloud Platform (GCP)",permalink:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform"}},u=[{value:"Getting started",id:"getting-started",children:[{value:"Connect your AWS account",id:"connect-your-aws-account",children:[]},{value:"Install a new cluster on Qovery",id:"install-a-new-cluster-on-qovery",children:[]},{value:"Deployed AWS components",id:"deployed-aws-components",children:[]},{value:"Remove Qovery from your AWS account",id:"remove-qovery-from-your-aws-account",children:[]},{value:"IAM permissions",id:"iam-permissions",children:[]}]},{value:"Regions",id:"regions",children:[]},{value:"Manually configure VPC subnet",id:"manually-configure-vpc-subnet",children:[]},{value:"Configure routing table",id:"configure-routing-table",children:[]},{value:"How Qovery works on AWS",id:"how-qovery-works-on-aws",children:[{value:"Kubernetes",id:"kubernetes",children:[]},{value:"Managed services",id:"managed-services",children:[]},{value:"Security and compliance",id:"security-and-compliance",children:[]}]},{value:"FAQ",id:"faq",children:[{value:"How to choose a region?",id:"how-to-choose-a-region",children:[]},{value:"I don't find a region that is provided by AWS",id:"i-dont-find-a-region-that-is-provided-by-aws",children:[]},{value:"Migrate between Cloud providers and regions",id:"migrate-between-cloud-providers-and-regions",children:[]}]}],d={rightToc:u};function p(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(c.b)("wrapper",Object(a.a)({},d,n,{components:t,mdxType:"MDXLayout"}),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"Please refer to ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/provider/kubernetes/"}),"this page")," if you want to install Qovery on your own Kubernetes cluster (BYOK).")),Object(c.b)("p",null,"Qovery lets you quickly deploy applications to your ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://aws.amazon.com"}),"Amazon Web Services (AWS)")," account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your AWS account."),Object(c.b)("h2",{id:"getting-started"},"Getting started"),Object(c.b)(l.a,{mdxType:"Assumptions"},Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"You have a ",Object(c.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/interface/"}),"Qovery")," account"),Object(c.b)("li",{parentName:"ul"},"You have created an ",Object(c.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/organization/"}),"Organization")),Object(c.b)("li",{parentName:"ul"},"You have an AWS account"))),Object(c.b)("h3",{id:"connect-your-aws-account"},"Connect your AWS account"),Object(c.b)("p",null,"To link your AWS account to Qovery you need to provide an AWS ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key")," with the ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#iam-permissions"}),"required IAM permissions"),"."),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"You can link more than one AWS account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers. ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/advanced/"}),"Read more"),".")),Object(c.b)("h4",{id:"create-your-aws-credentials---access-key-id-and-secret-access-key"},"Create your AWS credentials - ",Object(c.b)("inlineCode",{parentName:"h4"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"h4"},"secret access key")),Object(c.b)(o.a,{headingDepth:3,mdxType:"Steps"},Object(c.b)("ol",null,Object(c.b)("li",null,Object(c.b)("p",null,Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.aws.amazon.com"}),"Connect to your AWS console"))),Object(c.b)("li",null,Object(c.b)("p",null,"Go to ",Object(c.b)("inlineCode",{parentName:"p"},"IAM")),Object(c.b)("img",{src:"/img/aws/aws-my-security-credentials.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Create ",Object(c.b)("inlineCode",{parentName:"p"},"Admins")," group ",Object(c.b)("strong",{parentName:"p"},"without any permissions")),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,"The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#iam"}),"aws.iam.admin_group")," BEFORE launching the cluster installation process")),Object(c.b)("img",{src:"/img/aws/aws-create-group-1.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-create-group-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-group-3.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Create one IAM user called ",Object(c.b)("inlineCode",{parentName:"p"},"qovery"),"."),Object(c.b)("img",{src:"/img/aws/aws-create-user-1.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-create-user-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-user-3.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-create-user-4.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Setup",Object(c.b)("a",{href:"/files/qovery-iam-aws.json"}," IAM permissions")," to the ",Object(c.b)("inlineCode",{parentName:"p"},"qovery")," user."),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("a",{href:"/files/qovery-iam-aws.json"},"Download IAM permissions JSON"),Object(c.b)("hr",null),Object(c.b)("p",null,"Or copy it from below:"),Object(c.b)("pre",null,Object(c.b)("code",Object(a.a)({parentName:"pre"},{className:"language-json"}),'{\n "Statement": [\n {\n "Action": [\n "dynamodb:*",\n "iam:*",\n "ec2:*",\n "autoscaling:*",\n "application-autoscaling:*",\n "elasticloadbalancing:*",\n "ecr:*",\n "ecs:*",\n "eks:*",\n "rds:*",\n "elasticache:*",\n "kms:*",\n "logs:*",\n "cloudwatch:*",\n "cloudtrail:LookupEvents",\n "events:DescribeRule",\n "events:DeleteRule",\n "events:ListRuleNamesByTarget",\n "events:ListTargetsByRule",\n "events:PutRule",\n "events:PutTargets",\n "events:RemoveTargets",\n "es:AddTags",\n "es:RemoveTags",\n "es:ListTags",\n "es:DeleteElasticsearchDomain",\n "es:DescribeElasticsearchDomain",\n "es:CreateElasticsearchDomain",\n "s3:*",\n "tag:GetResources"\n ],\n "Effect": "Allow",\n "Resource": "*"\n }\n ],\n "Version": "2012-10-17"\n}\n'))),Object(c.b)("p",null,Object(c.b)("strong",{parentName:"p"},"Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:")),Object(c.b)("img",{src:"/img/aws/aws-add-policy-1.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-add-policy-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-add-policy-3.jpg"}),Object(c.b)("img",{src:"/img/aws/aws-add-policy-4.jpg"})),Object(c.b)("li",null,Object(c.b)("p",null,"To create an ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key"),", go to the Security Credentials tab of the ",Object(c.b)("inlineCode",{parentName:"p"},"Qovery")," user and press ",Object(c.b)("inlineCode",{parentName:"p"},"Create access key")),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-1.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-2.png"}),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-3.png"}),Object(c.b)("p",null,"You can now save the ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key")),Object(c.b)("img",{src:"/img/aws/aws-create-credentials-4.png"})))),Object(c.b)("p",null,"Well done!! You now have your AWS ",Object(c.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(c.b)("inlineCode",{parentName:"p"},"secret access key")," and your permissions are setups; It is time to connect Qovery to your AWS account."),Object(c.b)("h3",{id:"install-a-new-cluster-on-qovery"},"Install a new cluster on Qovery"),Object(c.b)("p",null,"You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.\nFollow ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"this documentation")," to create a new cluster on your organization."),Object(c.b)("h3",{id:"deployed-aws-components"},"Deployed AWS components"),Object(c.b)("img",{src:"/img/aws-deployed-infra.png"}),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Network Services"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"A dedicated multi AZ VPC"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Everything Qovery will deploy, will be deployed inside this VPC")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for RDS (multi AZ)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for RDS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for DocumentDB (multi AZ)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for DocumentDB")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Subnets, routing tables, subnet groups and security groups for Elasticache (multi AZ)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated network fand security rules for Elasticache")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"An internet gateway for the VPC"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to let containers having access to Internet")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated NLB to redirect 443 traffic to Nginx Ingress"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"High Availability network load balancer, pointing to Nginx Ingress inside EKS")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"NAT gateways (multi AZ) + EIP addresses (multi AZ) + subnet groups + routing table"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Useful to get outgoing static IP")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated VPC routes for VPC peering"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"yes"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Useful to perform VPC peering with others VPC on the same or different account")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Kubernetes Services"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"A dedicated EKS cluster (multi AZ) for this VPC"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated Kubernetes cluster managed by AWS with nodes (instances type) defined by the customer")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS EBS CSI to access EC2 volumes + a dedicated policy"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to allow EKS cluster having access to volume and mount them to containers")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated user for AWS IAM User Sync + a dedicated policy"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to sync desired IAM account to EKS to let them connect directly ot Kubernetes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated user for a Cluster Autoscaler+ a dedicated policy"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to let autoscaler having access to EC2 autoscaling groups")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"IAM dedicated policies for AWS EKS CNI, EC2 container registry + EKS worker nodes"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to let EKS having access to container registry and configure the Kubernetes network")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Security group for EKS remote access (dual authentication: TLS + IAM authenticator)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Required to have a secure remote access on the Kubernetes cluster")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Security group for 443 port pointing to Nginx ingress inside EKS"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"External access to web services inside the Kubernetes cluster")))),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Other Services"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Optional"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Cloudwatch log groups for the EKS cluster"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Kubernetes logs, useful for the AWS and EKS support to diagnose an issue")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket for application's logs + a dedicated IAM account"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Application's logs are stored in an KMS encrypted S3 pivate bucket")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Dedicated S3 bucket to store the kubeconfig"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"no"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Kubernetes Kubeconfig is stored in an KMS encrypted, private and versionned bucket, used by Qovery for application's deployment")))),Object(c.b)("h3",{id:"remove-qovery-from-your-aws-account"},"Remove Qovery from your AWS account"),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,"Your applications and your data will be deleted.")),Object(c.b)("p",null,"To delete Qovery from your AWS account you must be the owner of the Qovery Organization and you have to delete everything in this order:"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"Environments"),Object(c.b)("li",{parentName:"ul"},"Clusters")),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,'If you remove the access to your AWS account before deleting all the resources on the Qovery platform, you will have to manually delete them by yourself by following the guide "I don\'t have Qovery access anymore, how could I delete Qovery deployed resources on my AWS account?" in ',Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/troubleshoot/"}),"this section"),".")),Object(c.b)("h3",{id:"iam-permissions"},"IAM permissions"),Object(c.b)("p",null,"Qovery required IAM permissions to create, update and managed the infrastructure."),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"IAM is used to create IAM roles"),Object(c.b)("li",{parentName:"ul"},"S3 is used to store our generated configuration files"),Object(c.b)("li",{parentName:"ul"},"Cloudwatch, for creating a group stream for each Kubernetes clusters"),Object(c.b)("li",{parentName:"ul"},"Autoscaling for RDS and autoscaling rules for the Kubernetes cluster"),Object(c.b)("li",{parentName:"ul"},"Elastic load-balancing for ELB / ALB / NLB."),Object(c.b)("li",{parentName:"ul"},"DynamoDB to have a distributed lock on infrastructure deployment."),Object(c.b)("li",{parentName:"ul"},"ECR for managing the container registry, create/update/delete repository."),Object(c.b)("li",{parentName:"ul"},"KMS to load and store keys (RDS, SSH, \u2026)"),Object(c.b)("li",{parentName:"ul"},"EKS to create and update the Kubernetes cluster.")),Object(c.b)("details",null,Object(c.b)("summary",null,"Minimum IAM permission set"),Object(c.b)("blockquote",null,"Last update: 2023-06-08"),Object(c.b)(i.a,{type:"alert",mdxType:"Alert"},Object(c.b)("p",null,"This is purely informative and we strongly recommend you to NOT use this configuration within your IAM permissions since it might not reflect the latest product update. Please use the one provided in the section above.")),Object(c.b)("p",null,"Below you can find the minimum permission set required by Qovery to run and deploy your applications."),Object(c.b)("p",null,"Policies lengths are limited regarding which object they\u2019re attached to but the one Qovery needs represent more than the maximum (~6000 characters)."),Object(c.b)("p",null,"In order to setup it up, you need to create two IAM groups, each one with one of the following policies."),Object(c.b)("p",null,"Then we must create a user added to each of the previously created groups."),Object(c.b)("p",null,"Once it\u2019s done, the user\u2019s access key and secret key can be used in Qovery."),Object(c.b)("pre",null,Object(c.b)("code",Object(a.a)({parentName:"pre"},{className:"language-json"}),'\n{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "autoscaling:SuspendProcesses",\n "ec2:AllocateAddress",\n "ec2:AssociateAddress",\n "ec2:AssociateRouteTable",\n "ec2:AttachVolume",\n "ec2:AttachInternetGateway",\n "ec2:AuthorizeSecurityGroupEgress",\n "ec2:AuthorizeSecurityGroupIngress",\n "ec2:CreateInternetGateway",\n "ec2:CreateKeyPair",\n "ec2:CreateLaunchTemplate",\n "ec2:CreateLaunchTemplateVersion",\n "ec2:CreateNatGateway",\n "ec2:CreateRoute",\n "ec2:CreateRouteTable",\n "ec2:CreateSecurityGroup",\n "ec2:CreateSubnet",\n "ec2:CreateTags",\n "ec2:CreateVolume",\n "ec2:CreateVpc",\n "ec2:DeleteInternetGateway",\n "ec2:DeleteKeyPair",\n "ec2:DeleteLaunchTemplate",\n "ec2:DeleteNatGateway",\n "ec2:DeleteRouteTable",\n "ec2:DeleteSecurityGroup",\n "ec2:DeleteSubnet",\n "ec2:DeleteVolume",\n "ec2:DeleteVpc",\n "ec2:DescribeAddresses",\n "ec2:DescribeAvailabilityZones",\n "ec2:DescribeImages",\n "ec2:DescribeInstanceAttribute",\n "ec2:DescribeInstanceCreditSpecifications",\n "ec2:DescribeInstances",\n "ec2:DescribeInstanceTypes",\n "ec2:DescribeInternetGateways",\n "ec2:DescribeKeyPairs",\n "ec2:DescribeLaunchTemplateVersions",\n "ec2:DescribeLaunchTemplates",\n "ec2:DescribeNatGateways",\n "ec2:DescribeNetworkAcls",\n "ec2:DescribeNetworkInterfaces",\n "ec2:DescribeRouteTables",\n "ec2:DescribeSecurityGroupRules",\n "ec2:DescribeSecurityGroups",\n "ec2:DescribeSubnets",\n "ec2:DescribeTags",\n "ec2:DescribeVolumes",\n "ec2:DescribeVpcAttribute",\n "ec2:DescribeVpcClassicLink",\n "ec2:DescribeVpcClassicLinkDnsSupport",\n "ec2:DescribeVpcs",\n "ec2:DetachInternetGateway",\n "ec2:DetachVolume",\n "ec2:DisassociateAddress",\n "ec2:DisassociateRouteTable",\n "ec2:ImportKeyPair",\n "ec2:ModifySubnetAttribute",\n "ec2:ModifyVpcAttribute",\n "ec2:ReleaseAddress",\n "ec2:RevokeSecurityGroupEgress",\n "ec2:RevokeSecurityGroupIngress",\n "ec2:RunInstances",\n "ec2:StopInstances",\n "ec2:TerminateInstances",\n "ecr:BatchCheckLayerAvailability",\n "ecr:BatchGetImage",\n "ecr:CompleteLayerUpload",\n "ecr:CreateRepository",\n "ecr:DeleteRepository",\n "ecr:DescribeImages",\n "ecr:DescribeRepositories",\n "ecr:GetAuthorizationToken",\n "ecr:GetDownloadUrlForLayer",\n "ecr:InitiateLayerUpload",\n "ecr:PutImage",\n "ecr:PutLifecyclePolicy",\n "ecr:TagResource",\n "ecr:UploadLayerPart",\n "eks:CreateAddon",\n "eks:CreateCluster",\n "eks:CreateNodegroup",\n "eks:DeleteAddon",\n "eks:DeleteCluster",\n "eks:DeleteNodegroup",\n "eks:DescribeAddon",\n "eks:DescribeCluster",\n "eks:DescribeNodegroup",\n "eks:DescribeUpdate",\n "eks:ListClusters",\n "eks:ListNodegroups",\n "eks:TagResource",\n "eks:UpdateAddon",\n "eks:UpdateClusterConfig",\n "eks:UpdateClusterVersion",\n "eks:UpdateNodegroupConfig",\n "eks:UpdateNodegroupVersion",\n "elasticache:AddTagsToResource",\n "elasticache:CreateCacheSubnetGroup",\n "elasticache:CreateReplicationGroup",\n "elasticache:DeleteCacheSubnetGroup",\n "elasticache:DeleteReplicationGroup",\n "elasticache:DescribeCacheClusters",\n "elasticache:DescribeCacheSubnetGroups",\n "elasticache:DescribeReplicationGroups",\n "elasticache:ListTagsForResource",\n "elasticloadbalancing:DescribeLoadBalancers",\n "elasticloadbalancing:DescribeTags"\n ],\n "Resource": "*"\n }\n ]\n}\n\n')),Object(c.b)("pre",null,Object(c.b)("code",Object(a.a)({parentName:"pre"},{className:"language-json"}),'{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": [\n "iam:AddRoleToInstanceProfile",\n "iam:AttachRolePolicy",\n "iam:AttachUserPolicy",\n "iam:CreateAccessKey",\n "iam:CreateInstanceProfile",\n "iam:CreateOpenIDConnectProvider",\n "iam:CreatePolicy",\n "iam:CreateRole",\n "iam:CreateServiceLinkedRole",\n "iam:CreateUser",\n "iam:DeleteAccessKey",\n "iam:DeleteInstanceProfile",\n "iam:DeleteOpenIDConnectProvider",\n "iam:DeletePolicy",\n "iam:DeleteRole",\n "iam:DeleteRolePolicy",\n "iam:DeleteUser",\n "iam:DeleteUserPolicy",\n "iam:DetachRolePolicy",\n "iam:DetachUserPolicy",\n "iam:GetInstanceProfile",\n "iam:GetOpenIDConnectProvider",\n "iam:GetPolicy",\n "iam:GetPolicyVersion",\n "iam:GetRole",\n "iam:GetRolePolicy",\n "iam:GetUser",\n "iam:GetUserPolicy",\n "iam:ListAccessKeys",\n "iam:ListAttachedRolePolicies",\n "iam:ListAttachedUserPolicies",\n "iam:ListGroupsForUser",\n "iam:ListInstanceProfilesForRole",\n "iam:ListPolicyVersions",\n "iam:ListRolePolicies",\n "iam:PassRole",\n "iam:PutRolePolicy",\n "iam:PutUserPolicy",\n "iam:RemoveRoleFromInstanceProfile",\n "iam:TagInstanceProfile",\n "iam:TagOpenIDConnectProvider",\n "iam:TagRole",\n "iam:TagUser",\n "kms:CreateGrant",\n "kms:CreateKey",\n "kms:Decrypt",\n "kms:DescribeKey",\n "kms:GenerateDataKey",\n "kms:GetKeyPolicy",\n "kms:GetKeyRotationStatus",\n "kms:ListResourceTags",\n "kms:PutKeyPolicy",\n "kms:ScheduleKeyDeletion",\n "kms:TagResource",\n "logs:CreateLogGroup",\n "logs:DeleteLogGroup",\n "logs:DescribeLogGroups",\n "logs:ListTagsLogGroup",\n "logs:PutRetentionPolicy",\n "logs:TagLogGroup",\n "rds:AddTagsToResource",\n "rds:CreateDBCluster",\n "rds:CreateDBInstance",\n "rds:CreateDBParameterGroup",\n "rds:CreateDBSubnetGroup",\n "rds:DeleteDBCluster",\n "rds:DeleteDBInstance",\n "rds:DeleteDBParameterGroup",\n "rds:DeleteDBSubnetGroup",\n "rds:DescribeDBClusters",\n "rds:DescribeDBInstances",\n "rds:DescribeDBParameterGroups",\n "rds:DescribeDBParameters",\n "rds:DescribeDBSubnetGroups",\n "rds:DescribeGlobalClusters",\n "rds:ListTagsForResource",\n "rds:ModifyDBInstance",\n "rds:ModifyDBParameterGroup",\n "rds:StartDBCluster",\n "rds:StartDBInstance",\n "rds:StopDBCluster",\n "rds:StopDBInstance",\n "s3:CreateBucket",\n "s3:DeleteBucket",\n "s3:DeleteObject",\n "s3:DeleteObjectVersion",\n "s3:DeleteBucketPolicy",\n "s3:GetAccelerateConfiguration",\n "s3:GetBucketAcl",\n "s3:GetBucketCORS",\n "s3:GetBucketLogging",\n "s3:GetBucketObjectLockConfiguration",\n "s3:GetBucketOwnershipControls",\n "s3:GetBucketPolicy",\n "s3:GetBucketPublicAccessBlock",\n "s3:GetBucketRequestPayment",\n "s3:GetBucketTagging",\n "s3:GetBucketVersioning",\n "s3:GetBucketWebsite",\n "s3:GetEncryptionConfiguration",\n "s3:GetLifecycleConfiguration",\n "s3:GetObject",\n "s3:GetReplicationConfiguration",\n "s3:ListAccessPoints",\n "s3:ListAllMyBuckets",\n "s3:ListBucket",\n "s3:ListBucketMultipartUploads",\n "s3:ListBucketVersions",\n "s3:ListMultiRegionAccessPoints",\n "s3:ListMultipartUploadParts",\n "s3:ListStorageLensConfigurations",\n "s3:PutBucketAcl",\n "s3:PutBucketOwnershipControls",\n "s3:PutBucketPolicy",\n "s3:PutBucketPublicAccessBlock",\n "s3:PutBucketTagging",\n "s3:PutBucketVersioning",\n "s3:PutEncryptionConfiguration",\n "s3:PutLifecycleConfiguration",\n "s3:PutObject",\n "s3:PutObjectRetention",\n "secretsmanager:CreateSecret",\n "secretsmanager:TagResource",\n "sts:GetCallerIdentity"\n ],\n "Resource": "*"\n }\n ]\n}\n'))),Object(c.b)("h2",{id:"regions"},"Regions"),Object(c.b)("p",null,"Qovery supports the following AWS regions:"),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null})),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"name"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"description"),Object(c.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"supported"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-west-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US West (Oregon)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-east-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US East (Ohio)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-east-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US East (N. Virginia)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddfa\ud83c\uddf8"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"us-west-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"US West (N. California)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"No (Only 2 Availability Zone)")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddff\ud83c\udde6"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"af-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Africa (Cape Town)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udded\ud83c\uddf0"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-east-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Hong Kong)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddee\ud83c\uddf3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Mumbai)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddef\ud83c\uddf5"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-northeast-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Tokyo)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf0\ud83c\uddf7"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-northeast-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Seoul)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddef\ud83c\uddf5"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-northeast-3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Osaka)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf8\ud83c\uddec"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-southeast-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Singapore)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde6\ud83c\uddfa"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ap-southeast-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Asia Pacific (Sydney)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde8\ud83c\udde6"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"ca-central-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Canada (Toronto)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde8\ud83c\uddf3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"cn-north-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"China (Beijing)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde8\ud83c\uddf3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"cn-northwest-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"China (Ningxia)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde9\ud83c\uddea"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-central-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Frankfurt)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddee\ud83c\uddea"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-west-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Ireland)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-west-2"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (London)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-west-3"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Paris)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddee\ud83c\uddf9"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Milan)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf8\ud83c\uddea"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"eu-north-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Europe (Stockholm)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde7\ud83c\udded"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"me-south-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Middle East (Bahrain)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\udde7\ud83c\uddf7"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"sa-east-1"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"South America (S\xe3o Paulo)"),Object(c.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Yes")))),Object(c.b)("p",null,"Qovery supports regions where ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://aws.amazon.com/eks"}),"Amazon EKS")," is supported."),Object(c.b)("h2",{id:"manually-configure-vpc-subnet"},"Manually configure VPC subnet"),Object(c.b)("p",null,"VPC subnet is automatically defined by Qovery on cluster creation. However, you may want to choose your own VPC subnet, for example to perform VPC Peering."),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"If you want to perform VPC Peering with Qovery, please refer to our guide ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/tutorial/aws-vpc-peering-with-qovery/"}),"VPC Peering with Qovery")," to be assisted step by step.")),Object(c.b)("p",null,"Have a look at ","[this section]","[docs.using-qovery.configuration.clusters#custom-vpc-subnet]","] to know more on how to set the VPC Subnet."),Object(c.b)("h2",{id:"configure-routing-table"},"Configure routing table"),Object(c.b)("p",null,"You may want to create and edit a network routing table to perform VPC peering. This can be done by accessing to the parameters of a cluster, in the settings of your organization."),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"If you want to perform VPC Peering with Qovery, please refer to our guide ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/tutorial/aws-vpc-peering-with-qovery/"}),"VPC Peering with Qovery")," to be assisted step by step.")),Object(c.b)("p",null,"Have a look at ","[this section]","[docs.using-qovery.configuration.clusters#network]","] to know more on how to set the routing table."),Object(c.b)("h2",{id:"how-qovery-works-on-aws"},"How Qovery works on AWS"),Object(c.b)("p",null,"Qovery is an abstraction layer on top of AWS and Kubernetes. Qovery manages the configuration of AWS account, and helps you to deploy production ready apps in seconds.\nTo make it works, Qovery rely on Kubernetes for stateless apps (containers), and AWS for stateful apps (databases, storage...)."),Object(c.b)("p",null,Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/how-qovery-works/"}),"Read more")," on how Qovery works behind the scene."),Object(c.b)("h3",{id:"kubernetes"},"Kubernetes"),Object(c.b)("p",null,"The first time you set up your AWS account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications."),Object(c.b)("h3",{id:"managed-services"},"Managed services"),Object(c.b)("p",null,"AWS provides managed services for ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/postgresql/"}),"PostgreSQL"),", ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mysql/"}),"MySQL"),", ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/redis/"}),"Redis"),", ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mongodb/"}),"MongoDB"),". Qovery gives you access to those services when you set the ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/deployment-rule/#environment-deployment-rules"}),"environment mode")," to ",Object(c.b)("inlineCode",{parentName:"p"},"Production"),". In ",Object(c.b)("inlineCode",{parentName:"p"},"Development")," mode, Qovery provides containers equivalent, which is cheaper and faster to start."),Object(c.b)("h3",{id:"security-and-compliance"},"Security and compliance"),Object(c.b)("p",null,"Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"Your configuration are stored on your AWS account."),Object(c.b)("li",{parentName:"ul"},"Your configuration is encrypted on your AWS account."),Object(c.b)("li",{parentName:"ul"},"Qovery can't access to your data."),Object(c.b)("li",{parentName:"ul"},"Suppose Qovery stops to run, your applications are not impacted.")),Object(c.b)("h2",{id:"faq"},"FAQ"),Object(c.b)("h3",{id:"how-to-choose-a-region"},"How to choose a region?"),Object(c.b)("p",null,"Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency."),Object(c.b)("h3",{id:"i-dont-find-a-region-that-is-provided-by-aws"},"I don't find a region that is provided by AWS"),Object(c.b)("p",null,"We are probably testing the support of this region, please ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.qovery.com/contact"}),"contact us")," to know what's the status"),Object(c.b)("h3",{id:"migrate-between-cloud-providers-and-regions"},"Migrate between Cloud providers and regions"),Object(c.b)("p",null,"Today, you can't migrate an environment from one region to another after it has been created. Vote ",Object(c.b)("a",Object(a.a)({parentName:"p"},{href:"https://roadmap.qovery.com/"}),"here")," if you need this feature."))}p.isMDXComponent=!0},422: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 c=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({}),b=function(e){var t=r.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},u=function(e){var t=b(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,c=e.originalType,o=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=b(n),p=a,m=u["".concat(o,".").concat(p)]||u[p]||d[p]||c;return n?r.a.createElement(m,i({ref:t},s,{components:n})):r.a.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var c=n.length,o=new Array(c);o[0]=p;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var s=2;s1?arguments[1]:void 0,n),l=o>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>i;)t[i++]=e;return t}},427:function(e,t,n){var a=n(28).f,r=Function.prototype,c=/^\s*function ([^ (]*)/;"name"in r||n(10)&&a(r,"name",{configurable:!0,get:function(){try{return(""+this).match(c)[1]}catch(e){return""}}})},428:function(e,t,n){"use strict";n(427);var a=n(0),r=n.n(a),c=n(423);t.a=function(e){var t=e.children,n=e.name;return r.a.createElement(c.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)}},432:function(e,t,n){"use strict";var a=n(434),r=n(51);function c(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(),c=t.length>0?t.join("="):void 0;c=void 0===c?null:decodeURIComponent(c),n(decodeURIComponent(r),c,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?[c(t,e),"[",a,"]"].join(""):[c(t,e),"[",c(a,e),"]=",c(n,e)].join("")};case"bracket":return function(t,n){return null===n?c(t,e):[c(t,e),"[]=",c(n,e)].join("")};default:return function(t,n){return null===n?c(t,e):[c(t,e),"=",c(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 c(a,t);if(Array.isArray(r)){var o=[];return r.slice().forEach((function(e){void 0!==e&&o.push(n(a,e,o.length))})),o.join("&")}return c(a,t)+"="+c(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var a=n(0),r=n.n(a),c=(n(422),n(432)),o=n.n(c);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,c=e.hideFeedbackQuestion,i="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+i+" failed",body:"The tutorial on:\n\n"+i+"\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?"+o.a.stringify(l),b=Object(a.useState)(null),u=b[0],d=b[1];return r.a.createElement("div",{className:"steps steps--h"+n},t,!c&&!u&&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"==u&&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"),"."))}},434: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/68c0e7f9.278f19fd.js b/68c0e7f9.1d73352c.js similarity index 98% rename from 68c0e7f9.278f19fd.js rename to 68c0e7f9.1d73352c.js index eaf64af703..30a82b844f 100644 --- a/68c0e7f9.278f19fd.js +++ b/68c0e7f9.1d73352c.js @@ -1,2 +1,2 @@ -/*! For license information please see 68c0e7f9.278f19fd.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{272:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return f}));var r=n(1),o=n(9),a=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-06-05",$schema:"/.meta/.schemas/guides.json",title:"Production",description:"Learn how to run your Production with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Production",description:"Learn how to run your Production with Qovery",permalink:"/guides/advanced/production",readingTime:"1 min read",source:"@site/guides/advanced/production.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Production",truncated:!1,prevItem:{title:"Preview Environments",permalink:"/guides/advanced/use-preview-environments"},nextItem:{title:"Seed Database",permalink:"/guides/advanced/seed-database"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function f(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(a.b)("h2",{id:"qa"},"Q&A"),Object(a.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}f.isMDXComponent=!0},422:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=o.a.createContext({}),l=function(e){var t=o.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},f=function(e){var t=l(e.components);return o.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),f=l(n),d=r,m=f["".concat(i,".").concat(d)]||f[d]||p[d]||a;return n?o.a.createElement(m,c({ref:t},s,{components:n})):o.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:o(u,n);s>c;)t[c++]=e;return t}},427:function(e,t,n){var r=n(28).f,o=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in o||n(10)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),o=n.n(r),a=n(423);t.a=function(e){var t=e.children,n=e.name;return o.a.createElement(a.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},o.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},432:function(e,t,n){"use strict";var r=n(434),o=n(51);function a(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=o({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("="),o=t.shift(),a=t.length>0?t.join("="):void 0;a=void 0===a?null:decodeURIComponent(a),n(decodeURIComponent(o),a,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?[a(t,e),"[",r,"]"].join(""):[a(t,e),"[",a(r,e),"]=",a(n,e)].join("")};case"bracket":return function(t,n){return null===n?a(t,e):[a(t,e),"[]=",a(n,e)].join("")};default:return function(t,n){return null===n?a(t,e):[a(t,e),"=",a(n,e)].join("")}}}(t=o({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var o=e[r];if(void 0===o)return"";if(null===o)return a(r,t);if(Array.isArray(o)){var i=[];return o.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return a(r,t)+"="+a(o,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var r=n(0),o=n.n(r),a=(n(422),n(432)),i=n.n(a);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,a=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),f=l[0],p=l[1];return o.a.createElement("div",{className:"steps steps--h"+n},t,!a&&!f&&o.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",o.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",o.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==f&&o.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",o.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},434: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 +/*! For license information please see 68c0e7f9.1d73352c.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{272:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return f}));var r=n(1),o=n(9),a=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-12-27",$schema:"/.meta/.schemas/guides.json",title:"Production",description:"Learn how to run your Production with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Production",description:"Learn how to run your Production with Qovery",permalink:"/guides/advanced/production",readingTime:"1 min read",source:"@site/guides/advanced/production.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Production",truncated:!1,prevItem:{title:"Preview Environments",permalink:"/guides/advanced/use-preview-environments"},nextItem:{title:"Seed Database",permalink:"/guides/advanced/seed-database"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function f(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(a.b)("h2",{id:"qa"},"Q&A"),Object(a.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}f.isMDXComponent=!0},422:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=o.a.createContext({}),l=function(e){var t=o.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},f=function(e){var t=l(e.components);return o.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),f=l(n),d=r,m=f["".concat(i,".").concat(d)]||f[d]||p[d]||a;return n?o.a.createElement(m,c({ref:t},s,{components:n})):o.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:o(u,n);s>c;)t[c++]=e;return t}},427:function(e,t,n){var r=n(28).f,o=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in o||n(10)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),o=n.n(r),a=n(423);t.a=function(e){var t=e.children,n=e.name;return o.a.createElement(a.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},o.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},432:function(e,t,n){"use strict";var r=n(434),o=n(51);function a(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=o({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("="),o=t.shift(),a=t.length>0?t.join("="):void 0;a=void 0===a?null:decodeURIComponent(a),n(decodeURIComponent(o),a,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?[a(t,e),"[",r,"]"].join(""):[a(t,e),"[",a(r,e),"]=",a(n,e)].join("")};case"bracket":return function(t,n){return null===n?a(t,e):[a(t,e),"[]=",a(n,e)].join("")};default:return function(t,n){return null===n?a(t,e):[a(t,e),"=",a(n,e)].join("")}}}(t=o({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var o=e[r];if(void 0===o)return"";if(null===o)return a(r,t);if(Array.isArray(o)){var i=[];return o.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return a(r,t)+"="+a(o,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var r=n(0),o=n.n(r),a=(n(422),n(432)),i=n.n(a);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,a=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),f=l[0],p=l[1];return o.a.createElement("div",{className:"steps steps--h"+n},t,!a&&!f&&o.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",o.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",o.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==f&&o.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",o.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},434: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/68c0e7f9.278f19fd.js.LICENSE.txt b/68c0e7f9.1d73352c.js.LICENSE.txt similarity index 100% rename from 68c0e7f9.278f19fd.js.LICENSE.txt rename to 68c0e7f9.1d73352c.js.LICENSE.txt diff --git a/93701b40.26edd580.js b/93701b40.7aebaaf1.js similarity index 98% rename from 93701b40.26edd580.js rename to 93701b40.7aebaaf1.js index 97b2f9ca37..8742183e0e 100644 --- a/93701b40.26edd580.js +++ b/93701b40.7aebaaf1.js @@ -1,2 +1,2 @@ -/*! For license information please see 93701b40.26edd580.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[147],{299:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return f}));var r=n(1),o=n(9),a=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-06-05",$schema:"/.meta/.schemas/guides.json",title:"Production",description:"Learn how to run your Production with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Production",description:"Learn how to run your Production with Qovery",permalink:"/guides/advanced/production",readingTime:"1 min read",source:"@site/guides/advanced/production.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Production",truncated:!1,prevItem:{title:"Preview Environments",permalink:"/guides/advanced/use-preview-environments"},nextItem:{title:"Seed Database",permalink:"/guides/advanced/seed-database"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function f(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(a.b)("h2",{id:"qa"},"Q&A"),Object(a.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}f.isMDXComponent=!0},422:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=o.a.createContext({}),l=function(e){var t=o.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},f=function(e){var t=l(e.components);return o.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),f=l(n),d=r,m=f["".concat(i,".").concat(d)]||f[d]||p[d]||a;return n?o.a.createElement(m,c({ref:t},s,{components:n})):o.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:o(u,n);s>c;)t[c++]=e;return t}},427:function(e,t,n){var r=n(28).f,o=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in o||n(10)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),o=n.n(r),a=n(423);t.a=function(e){var t=e.children,n=e.name;return o.a.createElement(a.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},o.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},432:function(e,t,n){"use strict";var r=n(434),o=n(51);function a(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=o({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("="),o=t.shift(),a=t.length>0?t.join("="):void 0;a=void 0===a?null:decodeURIComponent(a),n(decodeURIComponent(o),a,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?[a(t,e),"[",r,"]"].join(""):[a(t,e),"[",a(r,e),"]=",a(n,e)].join("")};case"bracket":return function(t,n){return null===n?a(t,e):[a(t,e),"[]=",a(n,e)].join("")};default:return function(t,n){return null===n?a(t,e):[a(t,e),"=",a(n,e)].join("")}}}(t=o({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var o=e[r];if(void 0===o)return"";if(null===o)return a(r,t);if(Array.isArray(o)){var i=[];return o.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return a(r,t)+"="+a(o,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var r=n(0),o=n.n(r),a=(n(422),n(432)),i=n.n(a);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,a=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),f=l[0],p=l[1];return o.a.createElement("div",{className:"steps steps--h"+n},t,!a&&!f&&o.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",o.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",o.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==f&&o.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",o.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},434: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 +/*! For license information please see 93701b40.7aebaaf1.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[147],{299:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return f}));var r=n(1),o=n(9),a=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-12-27",$schema:"/.meta/.schemas/guides.json",title:"Production",description:"Learn how to run your Production with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Production",description:"Learn how to run your Production with Qovery",permalink:"/guides/advanced/production",readingTime:"1 min read",source:"@site/guides/advanced/production.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Production",truncated:!1,prevItem:{title:"Preview Environments",permalink:"/guides/advanced/use-preview-environments"},nextItem:{title:"Seed Database",permalink:"/guides/advanced/seed-database"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function f(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(a.b)("h2",{id:"qa"},"Q&A"),Object(a.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}f.isMDXComponent=!0},422:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=o.a.createContext({}),l=function(e){var t=o.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},f=function(e){var t=l(e.components);return o.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),f=l(n),d=r,m=f["".concat(i,".").concat(d)]||f[d]||p[d]||a;return n?o.a.createElement(m,c({ref:t},s,{components:n})):o.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:o(u,n);s>c;)t[c++]=e;return t}},427:function(e,t,n){var r=n(28).f,o=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in o||n(10)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),o=n.n(r),a=n(423);t.a=function(e){var t=e.children,n=e.name;return o.a.createElement(a.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},o.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},432:function(e,t,n){"use strict";var r=n(434),o=n(51);function a(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=o({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("="),o=t.shift(),a=t.length>0?t.join("="):void 0;a=void 0===a?null:decodeURIComponent(a),n(decodeURIComponent(o),a,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?[a(t,e),"[",r,"]"].join(""):[a(t,e),"[",a(r,e),"]=",a(n,e)].join("")};case"bracket":return function(t,n){return null===n?a(t,e):[a(t,e),"[]=",a(n,e)].join("")};default:return function(t,n){return null===n?a(t,e):[a(t,e),"=",a(n,e)].join("")}}}(t=o({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var o=e[r];if(void 0===o)return"";if(null===o)return a(r,t);if(Array.isArray(o)){var i=[];return o.slice().forEach((function(e){void 0!==e&&i.push(n(r,e,i.length))})),i.join("&")}return a(r,t)+"="+a(o,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var r=n(0),o=n.n(r),a=(n(422),n(432)),i=n.n(a);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,a=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),f=l[0],p=l[1];return o.a.createElement("div",{className:"steps steps--h"+n},t,!a&&!f&&o.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",o.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return p("yes")}},"Yes"),"\xa0\xa0",o.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==f&&o.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",o.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},434: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/93701b40.26edd580.js.LICENSE.txt b/93701b40.7aebaaf1.js.LICENSE.txt similarity index 100% rename from 93701b40.26edd580.js.LICENSE.txt rename to 93701b40.7aebaaf1.js.LICENSE.txt diff --git a/9ab61bc5.3c1c0317.js b/9ab61bc5.3c1c0317.js deleted file mode 100644 index a4f3162faa..0000000000 --- a/9ab61bc5.3c1c0317.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 9ab61bc5.3c1c0317.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[153],{305:function(e,r,t){"use strict";t.r(r),t.d(r,"frontMatter",(function(){return u})),t.d(r,"metadata",(function(){return l})),t.d(r,"rightToc",(function(){return s})),t.d(r,"default",(function(){return f}));var o=t(1),n=t(9),a=(t(0),t(424)),c=t(423),i=t(430),u={last_modified_on:"2023-11-25",title:"Google Cloud Platform (GCP)",description:"Learn how to configure and plug your Google Cloud Platform (GCP) account"},l={id:"using-qovery/configuration/cloud-service-provider/google-cloud-platform",title:"Google Cloud Platform (GCP)",description:"Learn how to configure and plug your Google Cloud Platform (GCP) account",source:"@site/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform.md",permalink:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform",sidebar:"docs",previous:{title:"Amazon Web Services (AWS)",permalink:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services"},next:{title:"Microsoft Azure",permalink:"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"}},s=[{value:"Managed Kubernetes by Qovery",id:"managed-kubernetes-by-qovery",children:[]},{value:"Available Cloud Service Providers",id:"available-cloud-service-providers",children:[]}],p={rightToc:s};function f(e){var r=e.components,t=Object(n.a)(e,["components"]);return Object(a.b)("wrapper",Object(o.a)({},p,t,{components:r,mdxType:"MDXLayout"}),Object(a.b)(c.a,{type:"info",mdxType:"Alert"},Object(a.b)("p",null,"Please refer to ",Object(a.b)("a",Object(o.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/provider/kubernetes/"}),"this page")," if you want to install Qovery on your own Kubernetes cluster (BYOK).")),Object(a.b)("h2",{id:"managed-kubernetes-by-qovery"},"Managed Kubernetes by Qovery"),Object(a.b)("p",null,Object(a.b)("a",Object(o.a)({parentName:"p"},{href:"https://www.qovery.com/blog/early-access-for-google-cloud-platform/"}),"We currently work on supporting Google Cloud Platform (GCP)")," as a managed Kubernetes provider. Stay tuned!"),Object(a.b)("p",null,"Google Cloud Platform is coming soon (",Object(a.b)("a",Object(o.a)({parentName:"p"},{href:"https://roadmap.qovery.com/roadmap/support-google-cloud-platform-gcp"}),"see when"),"). Vote ",Object(a.b)("a",Object(o.a)({parentName:"p"},{href:"https://roadmap.qovery.com/roadmap/support-google-cloud-platform-gcp"}),"here")," to make it happen faster."),Object(a.b)("h2",{id:"available-cloud-service-providers"},"Available Cloud Service Providers"),Object(a.b)(i.a,{to:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services",mdxType:"Jump"},"Amazon Web Services (AWS)"),Object(a.b)(i.a,{to:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform",mdxType:"Jump"},"Google Cloud Platform (GCP)"),Object(a.b)(i.a,{to:"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure",mdxType:"Jump"},"Azure"),Object(a.b)(i.a,{to:"/docs/using-qovery/configuration/cloud-service-provider/scaleway",mdxType:"Jump"},"Scaleway"),Object(a.b)(i.a,{to:"/docs/using-qovery/configuration/cloud-service-provider/other-csps",mdxType:"Jump"},"Others"))}f.isMDXComponent=!0},422:function(e,r,t){var o;!function(){"use strict";var t={}.hasOwnProperty;function n(){for(var e=[],r=0;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=n.a.createContext({}),s=function(e){var r=n.a.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):i({},r,{},e)),t},p=function(e){var r=s(e.components);return n.a.createElement(l.Provider,{value:r},e.children)},f={inlineCode:"code",wrapper:function(e){var r=e.children;return n.a.createElement(n.a.Fragment,{},r)}},d=Object(o.forwardRef)((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),p=s(t),d=o,m=p["".concat(c,".").concat(d)]||p[d]||f[d]||a;return t?n.a.createElement(m,i({ref:r},l,{components:t})):n.a.createElement(m,i({ref:r},l))}));function m(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=d;var i={};for(var u in r)hasOwnProperty.call(r,u)&&(i[u]=r[u]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var l=2;l1?arguments[1]:void 0,t),u=c>2?arguments[2]:void 0,l=void 0===u?t:n(u,t);l>i;)r[i++]=e;return r}},429:function(e,r,t){"use strict";var o=t(1),n=t(0),a=t.n(n),c=t(39),i=t(431),u=t(20),l=t.n(u);r.a=function(e){var r,t=e.to,u=e.href,s=t||u,p=Object(i.a)(s),f=Object(n.useRef)(!1),d=l.a.canUseIntersectionObserver;return Object(n.useEffect)((function(){return!d&&p&&window.docusaurus.prefetch(s),function(){d&&r&&r.disconnect()}}),[s,d,p]),s&&p?a.a.createElement(c.b,Object(o.a)({},e,{onMouseEnter:function(){f.current||(window.docusaurus.preload(s),f.current=!0)},innerRef:function(e){var t,o;d&&e&&p&&(t=e,o=function(){window.docusaurus.prefetch(s)},(r=new window.IntersectionObserver((function(e){e.forEach((function(e){t===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(r.unobserve(t),r.disconnect(),o())}))}))).observe(t))},to:s})):a.a.createElement("a",Object(o.a)({},e,{href:s}))}},430:function(e,r,t){"use strict";var o=t(0),n=t.n(o),a=t(429),c=t(422),i=t.n(c);t(133);r.a=function(e){var r=e.children,t=e.className,o=e.badge,c=e.leftIcon,u=e.rightIcon,l=e.size,s=e.target,p=e.to,f=i()("jump-to","jump-to--"+l,t),d=n.a.createElement("div",{className:"jump-to--inner"},n.a.createElement("div",{className:"jump-to--inner-2"},c&&n.a.createElement("div",{className:"jump-to--left"},n.a.createElement("i",{className:"feather icon-"+c})),n.a.createElement("div",{className:"jump-to--main"},o?n.a.createElement("span",{className:"badge badge--primary badge--right"},o):"",r),n.a.createElement("div",{className:"jump-to--right"},n.a.createElement("i",{className:"feather icon-"+(u||"chevron-right")+" arrow"}))));return s?n.a.createElement("a",{href:p,target:s,className:f},d):n.a.createElement(a.a,{to:p,className:f},d)}},431:function(e,r,t){"use strict";function o(e){return!1===/^(https?:|\/\/)/.test(e)}t.d(r,"a",(function(){return o}))}}]); \ No newline at end of file diff --git a/9ab61bc5.ce6e76ee.js b/9ab61bc5.ce6e76ee.js new file mode 100644 index 0000000000..075476d198 --- /dev/null +++ b/9ab61bc5.ce6e76ee.js @@ -0,0 +1,2 @@ +/*! For license information please see 9ab61bc5.ce6e76ee.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[153],{305: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 p})),n.d(t,"default",(function(){return b}));var r=n(1),o=n(9),c=(n(0),n(424)),a=n(433),i=n(423),l=n(428),u={last_modified_on:"2023-12-29",title:"Google Cloud Platform (GCP)",description:"Learn how to configure and plug your Google Cloud Platform (GCP) account"},s={id:"using-qovery/configuration/cloud-service-provider/google-cloud-platform",title:"Google Cloud Platform (GCP)",description:"Learn how to configure and plug your Google Cloud Platform (GCP) account",source:"@site/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform.md",permalink:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform",sidebar:"docs",previous:{title:"Amazon Web Services (AWS)",permalink:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services"},next:{title:"Microsoft Azure",permalink:"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"}},p=[{value:"Getting started",id:"getting-started",children:[{value:"Connect your GCP account",id:"connect-your-gcp-account",children:[]},{value:"Install a new cluster on Qovery",id:"install-a-new-cluster-on-qovery",children:[]},{value:"Remove your GCP account",id:"remove-your-gcp-account",children:[]}]}],d={rightToc:p};function b(e){var t=e.components,n=Object(o.a)(e,["components"]);return Object(c.b)("wrapper",Object(r.a)({},d,n,{components:t,mdxType:"MDXLayout"}),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"Please refer to ",Object(c.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/provider/kubernetes/"}),"this page")," if you want to install Qovery on your own Kubernetes cluster (BYOK).")),Object(c.b)("p",null,"Qovery lets you quickly deploy applications to your ",Object(c.b)("a",Object(r.a)({parentName:"p"},{href:"https://cloud.google.com"}),"GCP (GCP)")," account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your GCP account."),Object(c.b)("h2",{id:"getting-started"},"Getting started"),Object(c.b)(l.a,{mdxType:"Assumptions"},Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"You have a Qovery account"),Object(c.b)("li",{parentName:"ul"},"You have created an ",Object(c.b)("a",Object(r.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/organization/"}),"Organization")),Object(c.b)("li",{parentName:"ul"},"You have a GCP account"))),Object(c.b)("h3",{id:"connect-your-gcp-account"},"Connect your GCP account"),Object(c.b)("p",null,"To link your GCP account to Qovery you need to provide a GCP JSON credentials key."),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"You can link more than one GCP account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers.")),Object(c.b)("h4",{id:"create-your-gcp-credentials"},"Create your GCP credentials"),Object(c.b)(a.a,{headingDepth:3,mdxType:"Steps"},Object(c.b)("ol",null,Object(c.b)("li",null,Object(c.b)("p",null,Object(c.b)("a",Object(r.a)({parentName:"p"},{href:"https://console.cloud.google.com"}),"Connect to your GCP console"))),Object(c.b)("li",null,Object(c.b)("p",null,"Create a new ",Object(c.b)("inlineCode",{parentName:"p"},"Project")," or open an exiting one"),Object(c.b)("img",{src:"/img/gcp-credentials/gcp_project.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Open the embedded Google shell"),Object(c.b)("img",{src:"/img/gcp-credentials/gcp_shell_1.png"})),Object(c.b)("li",null,Object(c.b)("p",null,"Run the following command in the Google Shell to create the service account and generate the json key:"),Object(c.b)("pre",null,Object(c.b)("code",Object(r.a)({parentName:"pre"},{className:"language-bash"}),"wget https://hub.qovery.com/files/create_credentials_gcp.sh && chmod +x create_credentials_gcp.sh && ./create_credentials_gcp.sh $GOOGLE_CLOUD_PROJECT qovery-service-account\n")),Object(c.b)(i.a,{type:"info",mdxType:"Alert"},Object(c.b)("p",null,"You can modify the service account name by replacing ",Object(c.b)("inlineCode",{parentName:"p"},"qovery-service-account")," by the name of your choice."))),Object(c.b)("li",null,Object(c.b)("p",null,"Once the script is done. A GCP JSON credentials key has been created and you can download it."),Object(c.b)("img",{src:"/img/gcp-credentials/gcp_shell_5.png"}),Object(c.b)("img",{src:"/img/gcp-credentials/gcp_shell_6.png"})))),Object(c.b)("p",null,"Well done!! You now have your GCP ",Object(c.b)("inlineCode",{parentName:"p"},"JSON credentials key"),"; It is time to connect Qovery to your GCP account."),Object(c.b)("h3",{id:"install-a-new-cluster-on-qovery"},"Install a new cluster on Qovery"),Object(c.b)("p",null,"You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.\nFollow ",Object(c.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"this documentation")," to create a new cluster on your organization."),Object(c.b)("h3",{id:"remove-your-gcp-account"},"Remove your GCP account"),Object(c.b)(i.a,{type:"warning",mdxType:"Alert"},Object(c.b)("p",null,"Your applications and your data will be deleted.")),Object(c.b)("p",null,"To delete Qovery from your GCP account you must be the owner of the Organization and delete the cluster on Qovery side. Follow ",Object(c.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"this documentation"),"\nOnce your GCP account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever."))}b.isMDXComponent=!0},422:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function o(){for(var e=[],t=0;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=o.a.createContext({}),s=function(e){var t=o.a.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):i({},t,{},e)),n},p=function(e){var t=s(e.components);return o.a.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},b=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,c=e.originalType,a=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=s(n),b=r,f=p["".concat(a,".").concat(b)]||p[b]||d[b]||c;return n?o.a.createElement(f,i({ref:t},u,{components:n})):o.a.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,a=new Array(c);a[0]=b;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,a[1]=i;for(var u=2;u1?arguments[1]:void 0,n),l=a>2?arguments[2]:void 0,u=void 0===l?n:o(l,n);u>i;)t[i++]=e;return t}},427:function(e,t,n){var r=n(28).f,o=Function.prototype,c=/^\s*function ([^ (]*)/;"name"in o||n(10)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(c)[1]}catch(e){return""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),o=n.n(r),c=n(423);t.a=function(e){var t=e.children,n=e.name;return o.a.createElement(c.a,{type:"info",fill:!0,icon:!1,rounded:!0,className:"list--icons list--icons--arrow list--tight list--indent margin-bottom--lg"},o.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},432:function(e,t,n){"use strict";var r=n(434),o=n(51);function c(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=o({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("="),o=t.shift(),c=t.length>0?t.join("="):void 0;c=void 0===c?null:decodeURIComponent(c),n(decodeURIComponent(o),c,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?[c(t,e),"[",r,"]"].join(""):[c(t,e),"[",c(r,e),"]=",c(n,e)].join("")};case"bracket":return function(t,n){return null===n?c(t,e):[c(t,e),"[]=",c(n,e)].join("")};default:return function(t,n){return null===n?c(t,e):[c(t,e),"=",c(n,e)].join("")}}}(t=o({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(r){var o=e[r];if(void 0===o)return"";if(null===o)return c(r,t);if(Array.isArray(o)){var a=[];return o.slice().forEach((function(e){void 0!==e&&a.push(n(r,e,a.length))})),a.join("&")}return c(r,t)+"="+c(o,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var r=n(0),o=n.n(r),c=(n(422),n(432)),a=n.n(c);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,c=e.hideFeedbackQuestion,i="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+i+" failed",body:"The tutorial on:\n\n"+i+"\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?"+a.a.stringify(l),s=Object(r.useState)(null),p=s[0],d=s[1];return o.a.createElement("div",{className:"steps steps--h"+n},t,!c&&!p&&o.a.createElement("div",{className:"steps--feedback"},"How was it? Did this tutorial work?\xa0\xa0",o.a.createElement("span",{className:"button button--sm button--primary",onClick:function(){return d("yes")}},"Yes"),"\xa0\xa0",o.a.createElement("a",{href:u,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==p&&o.a.createElement("div",{className:"steps--feedback steps--feedback--success"},"Thanks! If you're enjoying Qovery please consider ",o.a.createElement("a",{href:"https://github.com/qovery/documentation/",target:"_blank"},"starring our Github repo"),"."))}},434: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/9ab61bc5.3c1c0317.js.LICENSE.txt b/9ab61bc5.ce6e76ee.js.LICENSE.txt similarity index 100% rename from 9ab61bc5.3c1c0317.js.LICENSE.txt rename to 9ab61bc5.ce6e76ee.js.LICENSE.txt diff --git a/community/index.html b/community/index.html index 4e30cdc0fa..dc8f7ecfc7 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 a5cf040e09..126f6c3f9d 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 9b32d6ac9b..945fdc0b7f 100644 --- a/contact/index.html +++ b/contact/index.html @@ -26,7 +26,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/d3437d81.8e8ba2ce.js b/d3437d81.8e8ba2ce.js new file mode 100644 index 0000000000..0a96e48569 --- /dev/null +++ b/d3437d81.8e8ba2ce.js @@ -0,0 +1,2 @@ +/*! For license information please see d3437d81.8e8ba2ce.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[221],{373: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 d}));var a=n(1),r=n(9),o=(n(0),n(424)),c=n(433),i=n(423),l=n(428),s={last_modified_on:"2023-12-28",title:"Scaleway (SCW)",description:"Learn how to configure and plug your Scaleway (SCW) account"},u={id:"using-qovery/configuration/cloud-service-provider/scaleway",title:"Scaleway (SCW)",description:"Learn how to configure and plug your Scaleway (SCW) account",source:"@site/docs/using-qovery/configuration/cloud-service-provider/scaleway.md",permalink:"/docs/using-qovery/configuration/cloud-service-provider/scaleway",sidebar:"docs",previous:{title:"Microsoft Azure",permalink:"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"},next:{title:"Other Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider/other-csps"}},b=[{value:"Getting started",id:"getting-started",children:[{value:"Connect your Scaleway account",id:"connect-your-scaleway-account",children:[]},{value:"Install a new cluster on Qovery",id:"install-a-new-cluster-on-qovery",children:[]},{value:"Remove your Scaleway account",id:"remove-your-scaleway-account",children:[]},{value:"Delete Qovery from your Scaleway account",id:"delete-qovery-from-your-scaleway-account",children:[]}]},{value:"Regions",id:"regions",children:[]},{value:"How Qovery works on Scaleway",id:"how-qovery-works-on-scaleway",children:[{value:"Kubernetes",id:"kubernetes",children:[]},{value:"Managed services",id:"managed-services",children:[]},{value:"Security and compliance",id:"security-and-compliance",children:[]}]},{value:"FAQ",id:"faq",children:[{value:"How to choose a region?",id:"how-to-choose-a-region",children:[]},{value:"I don't find a region that is provided by Scaleway",id:"i-dont-find-a-region-that-is-provided-by-scaleway",children:[]},{value:"Migrate between Cloud providers and regions",id:"migrate-between-cloud-providers-and-regions",children:[]}]}],p={rightToc:b};function d(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(i.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"Please refer to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/provider/kubernetes/"}),"this page")," if you want to install Qovery on your own Kubernetes cluster (BYOK).")),Object(o.b)("p",null,"Qovery lets you quickly deploy applications to your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.scaleway.com"}),"Scaleway (Scaleway)")," account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your Scaleway account."),Object(o.b)("h2",{id:"getting-started"},"Getting started"),Object(o.b)(l.a,{mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a Qovery account"),Object(o.b)("li",{parentName:"ul"},"You have created an ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/organization/"}),"Organization")),Object(o.b)("li",{parentName:"ul"},"You have a Scaleway account"))),Object(o.b)("h3",{id:"connect-your-scaleway-account"},"Connect your Scaleway account"),Object(o.b)("p",null,"To link your Scaleway account to Qovery you need to provide a Scaleway ",Object(o.b)("inlineCode",{parentName:"p"},"access key id"),", ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),", ",Object(o.b)("inlineCode",{parentName:"p"},"organization id")," and a ",Object(o.b)("inlineCode",{parentName:"p"},"project id"),"."),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,'If your Scaleway account is new, you need to open a ticket to Scaleway support to unlock your quota. You can post the following message:\n"Hello, I am going to deploy my applications on Scaleway with Qovery. Can you increase my quota for current Kubernetes nodes type, to 10 please? Thanks"')),Object(o.b)(i.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You can link more than one Scaleway account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers.")),Object(o.b)("h4",{id:"create-your-scaleway-credentials---access-key-id-secret-access-key-organization-id-and-project-id"},"Create your Scaleway credentials - ",Object(o.b)("inlineCode",{parentName:"h4"},"access key id"),", ",Object(o.b)("inlineCode",{parentName:"h4"},"secret access key"),", ",Object(o.b)("inlineCode",{parentName:"h4"},"organization id")," and ",Object(o.b)("inlineCode",{parentName:"h4"},"project id"),"."),Object(o.b)(c.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.scaleway.com"}),"Connect to your Scaleway console"))),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"IAM")),Object(o.b)("img",{src:"/img/scw-api-key/scw_IAM.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"Applications")),Object(o.b)("img",{src:"/img/scw-api-key/scw_applications.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create a new application for your project"),Object(o.b)("img",{src:"/img/scw-api-key/scw_create_app.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Generate your new API key from your application view"),Object(o.b)("img",{src:"/img/scw-api-key/scw_create_key_1.png"}),"Set up the the preferred `Project` for `Object Storage` with your Scaleway Project",Object(o.b)("img",{src:"/img/scw-api-key/scw_create_key_2.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Save the generated ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),"."),Object(o.b)("img",{src:"/img/scw-api-key/scw_creds.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"Policies")),Object(o.b)("img",{src:"/img/scw-api-key/scw_policies.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create a new policy with ",Object(o.b)("inlineCode",{parentName:"p"},"Principal")," linked to the application you just created."),Object(o.b)("img",{src:"/img/scw-api-key/scw_create_policy.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Set the scope of the policy to your project"),Object(o.b)("img",{src:"/img/scw-api-key/scw_policy_scope.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Select the following rules for your policy"),Object(o.b)("ul",null,Object(o.b)("li",null,"Containers permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_containers.png"})),Object(o.b)("li",null,"Network Service permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_network.png"})),Object(o.b)("li",null,"Compute permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_compute.png"})),Object(o.b)("li",null,"Storage permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_storage.png"})),Object(o.b)("li",null,"VPC permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_vpc.png"})))),Object(o.b)("li",null,Object(o.b)("p",null,"Create your policy"),Object(o.b)("img",{src:"/img/scw-api-key/scw_apply_policy.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Get your ",Object(o.b)("inlineCode",{parentName:"p"},"organization id")," in your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.scaleway.com/organization/settings"}),"organization settings")),Object(o.b)("img",{src:"/img/scw-api-key/scw_organization_id.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Get your ",Object(o.b)("inlineCode",{parentName:"p"},"project id")," on your project dashboard"),Object(o.b)("img",{src:"/img/scw-api-key/scw_project_id.png"})))),Object(o.b)("p",null,"Well done!! You now have your Scaleway ",Object(o.b)("inlineCode",{parentName:"p"},"access key id"),", ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),", ",Object(o.b)("inlineCode",{parentName:"p"},"organization_id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"project id"),"; It is time to connect Qovery to your Scaleway account."),Object(o.b)("h3",{id:"install-a-new-cluster-on-qovery"},"Install a new cluster on Qovery"),Object(o.b)("p",null,"You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.\nFollow ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"this documentation")," to create a new cluster on your organization."),Object(o.b)("h3",{id:"remove-your-scaleway-account"},"Remove your Scaleway account"),Object(o.b)("p",null,Object(o.b)("em",{parentName:"p"},"this section is under development - ",Object(o.b)("a",Object(a.a)({parentName:"em"},{href:"https://discord.qovery.com"}),"join us")," and be part of the first to try it")),Object(o.b)("h3",{id:"delete-qovery-from-your-scaleway-account"},"Delete Qovery from your Scaleway account"),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Your applications and your data will be deleted.")),Object(o.b)("p",null,"To delete Qovery from your Scaleway account you must be the owner of the Organization.\nOnce your Scaleway account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever."),Object(o.b)("h2",{id:"regions"},"Regions"),Object(o.b)("p",null,"Qovery supports the following Scalewav regions:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null})),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"name"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"fr-par-1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Paris DC1 (France)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"fr-par-2"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Paris DC2 (France)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"fr-par-3"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Paris DC3 (France)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf3\ud83c\uddf1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"nl-ams-1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Amsterdam DC1 (Netherlands)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf5\ud83c\uddf1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"pl-waw-1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Warsaw DC1 (Poland)")))),Object(o.b)("p",null,"Qovery supports regions where ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.scaleway.com/en/kubernetes-kapsule/"}),"Scaleway Kubernetes (Kapsule)")," is supported."),Object(o.b)("h2",{id:"how-qovery-works-on-scaleway"},"How Qovery works on Scaleway"),Object(o.b)("p",null,"Qovery is an abstraction layer on top of Scaleway and Kubernetes. Qovery manages the configuration of Scaleway account, and helps you to deploy production ready apps in seconds.\nTo make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...)."),Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/how-qovery-works/"}),"Read more")," on how Qovery works behind the scene."),Object(o.b)("h3",{id:"kubernetes"},"Kubernetes"),Object(o.b)("p",null,"The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications."),Object(o.b)("h3",{id:"managed-services"},"Managed services"),Object(o.b)("p",null,"Scaleway provides managed services for ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/postgresql/"}),"PostgreSQL"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mysql/"}),"MySQL"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/redis/"}),"Redis"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mongodb/"}),"MongoDB"),". Qovery gives you access to those services when you set the ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/deployment-rule/#environment-deployment-rules"}),"environment mode")," to ",Object(o.b)("inlineCode",{parentName:"p"},"Production"),". In ",Object(o.b)("inlineCode",{parentName:"p"},"Development")," mode, Qovery provides containers equivalent, which is cheaper and faster to start."),Object(o.b)("h3",{id:"security-and-compliance"},"Security and compliance"),Object(o.b)("p",null,"Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Your configuration are stored on your Scaleway account."),Object(o.b)("li",{parentName:"ul"},"Your configuration is encrypted on your Scaleway account."),Object(o.b)("li",{parentName:"ul"},"Qovery can't access to your data."),Object(o.b)("li",{parentName:"ul"},"Suppose Qovery stops to run, your applications are not impacted.")),Object(o.b)("h2",{id:"faq"},"FAQ"),Object(o.b)("h3",{id:"how-to-choose-a-region"},"How to choose a region?"),Object(o.b)("p",null,"Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency."),Object(o.b)("h3",{id:"i-dont-find-a-region-that-is-provided-by-scaleway"},"I don't find a region that is provided by Scaleway"),Object(o.b)("p",null,"We are probably testing the support of this region, please ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.qovery.com/contact"}),"contact us")," to know what's the status"),Object(o.b)("h3",{id:"migrate-between-cloud-providers-and-regions"},"Migrate between Cloud providers and regions"),Object(o.b)("p",null,"Today, you can't migrate an environment from one region to another after it has been created. Vote ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://roadmap.qovery.com/"}),"here")," if you need this feature."))}d.isMDXComponent=!0},422: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):i({},t,{},e)),n},b=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),b=u(n),d=a,y=b["".concat(c,".").concat(d)]||b[d]||p[d]||o;return n?r.a.createElement(y,i({ref:t},s,{components:n})):r.a.createElement(y,i({ref:t},s))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,c=new Array(o);c[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,c[1]=i;for(var s=2;s1?arguments[1]:void 0,n),l=c>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>i;)t[i++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var a=n(0),r=n.n(a),o=n(423);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)}},432:function(e,t,n){"use strict";var a=n(434),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 c=[];return r.slice().forEach((function(e){void 0!==e&&c.push(n(a,e,c.length))})),c.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(422),n(432)),c=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,i="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+i+" failed",body:"The tutorial on:\n\n"+i+"\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?"+c.a.stringify(l),u=Object(a.useState)(null),b=u[0],p=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 p("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"),"."))}},434: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/d3437d81.e3573bd2.js.LICENSE.txt b/d3437d81.8e8ba2ce.js.LICENSE.txt similarity index 100% rename from d3437d81.e3573bd2.js.LICENSE.txt rename to d3437d81.8e8ba2ce.js.LICENSE.txt diff --git a/d3437d81.e3573bd2.js b/d3437d81.e3573bd2.js deleted file mode 100644 index f8c236a9f0..0000000000 --- a/d3437d81.e3573bd2.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see d3437d81.e3573bd2.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[221],{373: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 d}));var a=n(1),r=n(9),o=(n(0),n(424)),c=n(433),i=n(423),l=n(428),s={last_modified_on:"2023-12-11",title:"Scaleway (SCW)",description:"Learn how to configure and plug your Scaleway (SCW) account"},u={id:"using-qovery/configuration/cloud-service-provider/scaleway",title:"Scaleway (SCW)",description:"Learn how to configure and plug your Scaleway (SCW) account",source:"@site/docs/using-qovery/configuration/cloud-service-provider/scaleway.md",permalink:"/docs/using-qovery/configuration/cloud-service-provider/scaleway",sidebar:"docs",previous:{title:"Microsoft Azure",permalink:"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"},next:{title:"Other Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider/other-csps"}},b=[{value:"Getting started",id:"getting-started",children:[{value:"Connect your Scaleway account",id:"connect-your-scaleway-account",children:[]},{value:"Install a new cluster on Qovery",id:"install-a-new-cluster-on-qovery",children:[]},{value:"Remove your Scaleway account",id:"remove-your-scaleway-account",children:[]},{value:"Delete Qovery from your Scaleway account",id:"delete-qovery-from-your-scaleway-account",children:[]}]},{value:"Regions",id:"regions",children:[]},{value:"How Qovery works on Scaleway",id:"how-qovery-works-on-scaleway",children:[{value:"Kubernetes",id:"kubernetes",children:[]},{value:"Managed services",id:"managed-services",children:[]},{value:"Security and compliance",id:"security-and-compliance",children:[]}]},{value:"FAQ",id:"faq",children:[{value:"How to choose a region?",id:"how-to-choose-a-region",children:[]},{value:"I don't find a region that is provided by Scaleway",id:"i-dont-find-a-region-that-is-provided-by-scaleway",children:[]},{value:"Migrate between Cloud providers and regions",id:"migrate-between-cloud-providers-and-regions",children:[]}]}],p={rightToc:b};function d(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},p,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(i.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"Please refer to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/provider/kubernetes/"}),"this page")," if you want to install Qovery on your own Kubernetes cluster (BYOK).")),Object(o.b)("p",null,"Qovery lets you quickly deploy applications to your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.scaleway.com"}),"Scaleway (Scaleway)")," account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your Scaleway account."),Object(o.b)("h2",{id:"getting-started"},"Getting started"),Object(o.b)(l.a,{mdxType:"Assumptions"},Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You have a ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/interface/"}),"Qovery")," account"),Object(o.b)("li",{parentName:"ul"},"You have created an ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/organization/"}),"Organization")),Object(o.b)("li",{parentName:"ul"},"You have a Scaleway account"))),Object(o.b)("h3",{id:"connect-your-scaleway-account"},"Connect your Scaleway account"),Object(o.b)("p",null,"To link your Scaleway account to Qovery you need to provide a Scaleway ",Object(o.b)("inlineCode",{parentName:"p"},"access key id"),", ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),", ",Object(o.b)("inlineCode",{parentName:"p"},"organization id")," and a ",Object(o.b)("inlineCode",{parentName:"p"},"project id"),"."),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,'If your Scaleway account is new, you need to open a ticket to Scaleway support to unlock your quota. You can post the following message:\n"Hello, I am going to deploy my applications on Scaleway with Qovery. Can you increase my quota for current Kubernetes nodes type, to 10 please? Thanks"')),Object(o.b)(i.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You can link more than one Scaleway account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers. ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/advanced/"}),"Read more"),".")),Object(o.b)("h4",{id:"create-your-scaleway-credentials---access-key-id-secret-access-key-organization-id-and-project-id"},"Create your Scaleway credentials - ",Object(o.b)("inlineCode",{parentName:"h4"},"access key id"),", ",Object(o.b)("inlineCode",{parentName:"h4"},"secret access key"),", ",Object(o.b)("inlineCode",{parentName:"h4"},"organization id")," and ",Object(o.b)("inlineCode",{parentName:"h4"},"project id"),"."),Object(o.b)(c.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.scaleway.com"}),"Connect to your Scaleway console"))),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"IAM")),Object(o.b)("img",{src:"/img/scw-api-key/scw_IAM.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"Applications")),Object(o.b)("img",{src:"/img/scw-api-key/scw_applications.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create a new application for your project"),Object(o.b)("img",{src:"/img/scw-api-key/scw_create_app.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Generate your new API key from your application view"),Object(o.b)("img",{src:"/img/scw-api-key/scw_create_key_1.png"}),"Set up the the preferred `Project` for `Object Storage` with your Scaleway Project",Object(o.b)("img",{src:"/img/scw-api-key/scw_create_key_2.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Save the generated ",Object(o.b)("inlineCode",{parentName:"p"},"access key id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),"."),Object(o.b)("img",{src:"/img/scw-api-key/scw_creds.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Go to ",Object(o.b)("inlineCode",{parentName:"p"},"Policies")),Object(o.b)("img",{src:"/img/scw-api-key/scw_policies.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Create a new policy with ",Object(o.b)("inlineCode",{parentName:"p"},"Principal")," linked to the application you just created."),Object(o.b)("img",{src:"/img/scw-api-key/scw_create_policy.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Set the scope of the policy to your project"),Object(o.b)("img",{src:"/img/scw-api-key/scw_policy_scope.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Select the following rules for your policy"),Object(o.b)("ul",null,Object(o.b)("li",null,"Containers permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_containers.png"})),Object(o.b)("li",null,"Network Service permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_network.png"})),Object(o.b)("li",null,"Compute permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_compute.png"})),Object(o.b)("li",null,"Storage permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_storage.png"})),Object(o.b)("li",null,"VPC permissions",Object(o.b)("br",null),Object(o.b)("img",{src:"/img/scw-api-key/scw_perms_vpc.png"})))),Object(o.b)("li",null,Object(o.b)("p",null,"Create your policy"),Object(o.b)("img",{src:"/img/scw-api-key/scw_apply_policy.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Get your ",Object(o.b)("inlineCode",{parentName:"p"},"organization id")," in your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.scaleway.com/organization/settings"}),"organization settings")),Object(o.b)("img",{src:"/img/scw-api-key/scw_organization_id.png"})),Object(o.b)("li",null,Object(o.b)("p",null,"Get your ",Object(o.b)("inlineCode",{parentName:"p"},"project id")," on your project dashboard"),Object(o.b)("img",{src:"/img/scw-api-key/scw_project_id.png"})))),Object(o.b)("p",null,"Well done!! You now have your Scaleway ",Object(o.b)("inlineCode",{parentName:"p"},"access key id"),", ",Object(o.b)("inlineCode",{parentName:"p"},"secret access key"),", ",Object(o.b)("inlineCode",{parentName:"p"},"organization_id")," and ",Object(o.b)("inlineCode",{parentName:"p"},"project id"),"; It is time to connect Qovery to your Scaleway account."),Object(o.b)("h3",{id:"install-a-new-cluster-on-qovery"},"Install a new cluster on Qovery"),Object(o.b)("p",null,"You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization.\nFollow ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"this documentation")," to create a new cluster on your organization."),Object(o.b)("h3",{id:"remove-your-scaleway-account"},"Remove your Scaleway account"),Object(o.b)("p",null,Object(o.b)("em",{parentName:"p"},"this section is under development - ",Object(o.b)("a",Object(a.a)({parentName:"em"},{href:"https://discord.qovery.com"}),"join us")," and be part of the first to try it")),Object(o.b)("h3",{id:"delete-qovery-from-your-scaleway-account"},"Delete Qovery from your Scaleway account"),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Your applications and your data will be deleted.")),Object(o.b)("p",null,"To delete Qovery from your Scaleway account you must be the owner of the Organization.\nOnce your Scaleway account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever."),Object(o.b)("h2",{id:"regions"},"Regions"),Object(o.b)("p",null,"Qovery supports the following Scalewav regions:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null})),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"name"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"fr-par-1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Paris DC1 (France)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"fr-par-2"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Paris DC2 (France)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddeb\ud83c\uddf7"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"fr-par-3"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Paris DC3 (France)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf3\ud83c\uddf1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"nl-ams-1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Amsterdam DC1 (Netherlands)")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"\ud83c\uddf5\ud83c\uddf1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"pl-waw-1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Warsaw DC1 (Poland)")))),Object(o.b)("p",null,"Qovery supports regions where ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.scaleway.com/en/kubernetes-kapsule/"}),"Scaleway Kubernetes (Kapsule)")," is supported."),Object(o.b)("h2",{id:"how-qovery-works-on-scaleway"},"How Qovery works on Scaleway"),Object(o.b)("p",null,"Qovery is an abstraction layer on top of Scaleway and Kubernetes. Qovery manages the configuration of Scaleway account, and helps you to deploy production ready apps in seconds.\nTo make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...)."),Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/how-qovery-works/"}),"Read more")," on how Qovery works behind the scene."),Object(o.b)("h3",{id:"kubernetes"},"Kubernetes"),Object(o.b)("p",null,"The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications."),Object(o.b)("h3",{id:"managed-services"},"Managed services"),Object(o.b)("p",null,"Scaleway provides managed services for ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/postgresql/"}),"PostgreSQL"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mysql/"}),"MySQL"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/redis/"}),"Redis"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/database/mongodb/"}),"MongoDB"),". Qovery gives you access to those services when you set the ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/deployment-rule/#environment-deployment-rules"}),"environment mode")," to ",Object(o.b)("inlineCode",{parentName:"p"},"Production"),". In ",Object(o.b)("inlineCode",{parentName:"p"},"Development")," mode, Qovery provides containers equivalent, which is cheaper and faster to start."),Object(o.b)("h3",{id:"security-and-compliance"},"Security and compliance"),Object(o.b)("p",null,"Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Your configuration are stored on your Scaleway account."),Object(o.b)("li",{parentName:"ul"},"Your configuration is encrypted on your Scaleway account."),Object(o.b)("li",{parentName:"ul"},"Qovery can't access to your data."),Object(o.b)("li",{parentName:"ul"},"Suppose Qovery stops to run, your applications are not impacted.")),Object(o.b)("h2",{id:"faq"},"FAQ"),Object(o.b)("h3",{id:"how-to-choose-a-region"},"How to choose a region?"),Object(o.b)("p",null,"Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency."),Object(o.b)("h3",{id:"i-dont-find-a-region-that-is-provided-by-scaleway"},"I don't find a region that is provided by Scaleway"),Object(o.b)("p",null,"We are probably testing the support of this region, please ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.qovery.com/contact"}),"contact us")," to know what's the status"),Object(o.b)("h3",{id:"migrate-between-cloud-providers-and-regions"},"Migrate between Cloud providers and regions"),Object(o.b)("p",null,"Today, you can't migrate an environment from one region to another after it has been created. Vote ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://roadmap.qovery.com/"}),"here")," if you need this feature."))}d.isMDXComponent=!0},422: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):i({},t,{},e)),n},b=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),b=u(n),d=a,y=b["".concat(c,".").concat(d)]||b[d]||p[d]||o;return n?r.a.createElement(y,i({ref:t},s,{components:n})):r.a.createElement(y,i({ref:t},s))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,c=new Array(o);c[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,c[1]=i;for(var s=2;s1?arguments[1]:void 0,n),l=c>2?arguments[2]:void 0,s=void 0===l?n:r(l,n);s>i;)t[i++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var a=n(0),r=n.n(a),o=n(423);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)}},432:function(e,t,n){"use strict";var a=n(434),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 c=[];return r.slice().forEach((function(e){void 0!==e&&c.push(n(a,e,c.length))})),c.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(422),n(432)),c=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,i="undefined"!=typeof window?window.location:null,l={title:"Tutorial on "+i+" failed",body:"The tutorial on:\n\n"+i+"\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?"+c.a.stringify(l),u=Object(a.useState)(null),b=u[0],p=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 p("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"),"."))}},434: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/dc00a797.30a8be50.js b/dc00a797.30a8be50.js new file mode 100644 index 0000000000..6e6d7bbec7 --- /dev/null +++ b/dc00a797.30a8be50.js @@ -0,0 +1,2 @@ +/*! For license information please see dc00a797.30a8be50.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[234],{386:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return u})),n.d(t,"default",(function(){return p}));var a=n(1),r=n(9),o=(n(0),n(424)),l=n(433),c=(n(430),n(423)),i=(n(428),{last_modified_on:"2023-12-27",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery"}),s={id:"using-qovery/configuration/clusters",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery",source:"@site/docs/using-qovery/configuration/clusters.md",permalink:"/docs/using-qovery/configuration/clusters",sidebar:"docs",previous:{title:"API Token",permalink:"/docs/using-qovery/configuration/organization/api-token"},next:{title:"Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider"}},u=[{value:"What is a cluster?",id:"what-is-a-cluster",children:[]},{value:"Why do I need a cluster?",id:"why-do-i-need-a-cluster",children:[]},{value:"What are the different instance types available when creating a cluster?",id:"what-are-the-different-instance-types-available-when-creating-a-cluster",children:[]},{value:"How does Qovery handle cluster updates and upgrades?",id:"how-does-qovery-handle-cluster-updates-and-upgrades",children:[]},{value:"What do you do when a vulnerability is found?",id:"what-do-you-do-when-a-vulnerability-is-found",children:[]},{value:"Managing your Clusters with Qovery",id:"managing-your-clusters-with-qovery",children:[{value:"Creating a Cluster",id:"creating-a-cluster",children:[]},{value:"Managing your Cluster Settings",id:"managing-your-cluster-settings",children:[]},{value:"Performing Actions on your Clusters",id:"performing-actions-on-your-clusters",children:[]}]},{value:"Logs",id:"logs",children:[]},{value:"Generating an SSH Key for Your Cluster",id:"generating-an-ssh-key-for-your-cluster",children:[]},{value:"Use custom domain and wildcard TLS for the whole cluster (beta)",id:"use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta",children:[]},{value:"Cleaning up a Cluster from your AWS Account",id:"cleaning-up-a-cluster-from-your-aws-account",children:[]}],b={rightToc:u};function p(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)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If you are looking to install Qovery on your Kubernetes cluster, please refer to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/provider/guide-kubernetes/"}),"this guide"),".")),Object(o.b)("p",null,"This section brings you answers to all the questions our users usually ask about clusters:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"What is a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),"Why do I need a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),"What are the different instance types available when creating a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#how-does-qovery-handle-cluster-updates-and-upgrades"}),"How does Qovery handle cluster updates and upgrades?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"How do I set up a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#managing-your-cluster-settings"}),"How do I update my cluster settings?"))),Object(o.b)("h3",{id:"what-is-a-cluster"},"What is a cluster?"),Object(o.b)("p",null,"At Qovery, when we refer to cluster, we mean ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://kubernetes.io/"}),"Kubernetes")," cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications. It is usually made up of:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Pods"),": think of a pod as one instance of your application. Pods are the smallest deployable objects in Kubernetes, and they are hosted by worker nodes."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Worker Nodes"),": worker nodes essentially run your applications and workloads. When you create a cluster from your Qovery Console, it generates the set up of worker nodes (also called \u201cinstances\u201d, \u201cEC2 instances\u201d for AWS users, or \u201cdroplets\u201d for DigitalOcean users).\nQovery allows you to define worker nodes settings, so that you end up deploying the right type of instances on your infrastructure based on your CPU, memory, storage and network performance needs."),Object(o.b)("li",{parentName:"ul"},"a ",Object(o.b)("strong",{parentName:"li"},"Control Plane")," (or ",Object(o.b)("strong",{parentName:"li"},"Master Node"),"): the control plane manages the worker nodes. Since we deploy managed Kubernetes services, the control plane is handled exclusively by your cloud provider, and left untouched by Qovery.")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster-overview.jpg",alt:"Application"})),Object(o.b)("p",null,"For more information on Kubernetes clusters, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://kubernetes.io/docs/concepts/overview/components/"}),"the Kubernetes documentation"),"."),Object(o.b)("h3",{id:"why-do-i-need-a-cluster"},"Why do I need a cluster?"),Object(o.b)("p",null,"Qovery is built on top of Kubernetes, which means we need Kubernetes clusters to be able to deploy and run your applications."),Object(o.b)("p",null,"Thanks to clusters, you can easily deploy several (and many) instances of the same application, so that if one fails, the others can instantly take over. Also, clusters can auto-scale, meaning that the number of worker nodes in a cluster can automatically go up or down as traffic fluctuates on your application(s), thus ensuring high availability and performance. Clusters are also extremely useful ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.qovery.com/blog/how-to-isolate-your-production-from-staging-with-kubernetes"}),"to isolate your production environment from your staging environment"),"."),Object(o.b)("p",null,"In short, through the use of clusters, Kubernetes provides you with a resilient, flexible and powerful infrastructure, fit for production environment needs and requirements. And with the help of Qovery, setting up and maintaining your Kubernetes clusters has never been easier."),Object(o.b)("p",null,"Qovery allows you to create and manage two types of clusters:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null})),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"th"},"Managed K8S ")),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"th"}," BETA - Single EC2 (K3s)")))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"td"},"Description")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"A multi-node Kubernetes cluster managed by your cloud provider (EKS, Kapsule etc..)"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"K3s Cluster running on a single EC2 instance (single-node) ",Object(o.b)("strong",{parentName:"td"},"Available only on AWS and still in BETA"))),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"td"},"Usage")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Hosting professional applications in production (resilient, scalable and powerful infrastructure). Scalable staging / preview / dev environments"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Hobby projects, trying out Qovery, ephemeral environments deployment")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"td"},"Cloud provider cost")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Starting from 200$/month, based on the chosen instance type"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"starting from 20$/month, based on the chosen instance type")))),Object(o.b)("br",null),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},"Single EC2 (K3s) is still in BETA phase and has the following limitations",Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You can\u2019t access the historical logs and thus you can access your application logs only if it's running (Since we don\u2019t have loki installed)"),Object(o.b)("li",{parentName:"ul"},"No public accessibility for DB container (we do not manage the public DNS entry for db). We will work on it in the upcoming weeks, in the meantime we will write a guide on how to connect to the DB via the ssh key / kubeconf"),Object(o.b)("li",{parentName:"ul"},"You can configure only 1 instance per application. Thus you can\u2019t change the number of instances nor activate the sticky session feature"),Object(o.b)("li",{parentName:"ul"},"Stop instance feature not ready YET"),Object(o.b)("li",{parentName:"ul"},"You can\u2019t change the cluster settings without a service downtime since we kill the instance and we spawn a new one"),Object(o.b)("li",{parentName:"ul"},"We do not manage YET the external storage"),Object(o.b)("li",{parentName:"ul"},"We do not support YET the VPC setting"),Object(o.b)("li",{parentName:"ul"},"If you want to connect via SSH, you can't get YET the instance hostname directly in the Qovery console, you need to get it from the AWS console"))),Object(o.b)("br",null),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"K3s clusters are ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones"}),"deployed on one AWS availability zone"),". Therefore, if a network or power disruption happens on the availability zone where your K3s instance is running, your applications will no longer be available until it is solved."),Object(o.b)("p",null,"This is why we do not recommend installing K3s clusters to run professional applications in a production environment.")),Object(o.b)("h3",{id:"what-are-the-different-instance-types-available-when-creating-a-cluster"},"What are the different instance types available when creating a cluster?"),Object(o.b)("p",null,"The range of instance types available at cluster creation depends on your cloud provider:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"AWS offers over 400 instance types. You can ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://aws.amazon.com/ec2/instance-types/"}),"view their details on the official AWS website"),", as well as ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://aws.amazon.com/ec2/pricing/on-demand/"}),"their pricing"),"."),Object(o.b)("li",{parentName:"ul"},"Scaleway also offers a wide range of instance types, ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://www.scaleway.com/en/pricing/"}),"whose details and pricing you can view on the official Scaleway website"),".")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"Qovery supports only instance types having an x86_64 or ARM architecture.")),Object(o.b)("h4",{id:"what-is-the-default-cluster"},"What is the default cluster?"),Object(o.b)("p",null,"The default cluster is the first cluster you installed in your organization."),Object(o.b)("p",null,"When you create a new environment and leave the ",Object(o.b)("inlineCode",{parentName:"p"},"mode")," and ",Object(o.b)("inlineCode",{parentName:"p"},"cluster")," parameters set to the value ",Object(o.b)("inlineCode",{parentName:"p"},"Automatic"),", your environment is deployed to:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"the cluster defined in one of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/deployment-rule/#environment-deployment-rules"}),"your project rules"),","),Object(o.b)("li",{parentName:"ul"},"or to the default cluster if no project rule applies.")),Object(o.b)("p",null,"For more information on deployment rules, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/project/"}),"Project"),"."),Object(o.b)("h3",{id:"how-does-qovery-handle-cluster-updates-and-upgrades"},"How does Qovery handle cluster updates and upgrades?"),Object(o.b)("p",null,"As far as cluster updates and upgrades to a newer version of Kubernetes are concerned, our Qovery engineering team handles everything in due time, so you don\u2019t even need to think about it!"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You may notice that Qovery does not provide you with the latest Kubernetes version offered by your cloud provider. This is due to the high amount of testing we need to perform to ensure smooth upgrades with no interruptions for your applications. Our priority is always to guarantee you maximum uptime.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please ",Object(o.b)("strong",{parentName:"p"},"DO NOT")," upgrade the cluster version by yourself from the cloud provider console."),Object(o.b)("p",null,"That's the whole point of Qovery, we manage this task for you so you don't have to bother.\nIf you did update by mistake, then you need to reach to Qovery team in order to get some help."),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Proceeding with a cluster version upgrade outside of Qovery will prevent any future update on this cluster")," and might be irreversible preventing Qovery from properly deploying on this cluster. Most importantly will expose you to some unknown / untested areas which can put your application stability at risks.")),Object(o.b)("p",null,"Usually, we work on a given upgrade for one month of intensive testing on our end in order to make sure everything will be smooth for you. Once we are pretty confident our stack is stable, we move on with the following steps which last approximately 3 weeks:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},"Notify users about new version coming in approximatively 1 month before"),Object(o.b)("li",{parentName:"ol"},"Upgrade clusters for a handful of beta-tester customers (1 week)"),Object(o.b)("li",{parentName:"ol"},"Upgrade all non-production flagged clusters (1-2 week(s))"),Object(o.b)("li",{parentName:"ol"},"Upgrade all clusters")),Object(o.b)("p",null,"If, somehow the planning or timeframe for the upgrade is clashing with your business needs, you will be able to contact us so we can arrange the best timeframe for you."),Object(o.b)("h3",{id:"what-do-you-do-when-a-vulnerability-is-found"},"What do you do when a vulnerability is found?"),Object(o.b)("p",null,"Security is our main concern. When a vulnerability is found, here are the actions that we take:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},"We quickly identify how significant is the impact of the vulnerability."),Object(o.b)("li",{parentName:"ol"},"We look at how we can solve or mitigate the vulnerability."),Object(o.b)("li",{parentName:"ol"},"We transparently communicate with our customers about the vulnerability to help them take the right actions.")),Object(o.b)("h2",{id:"managing-your-clusters-with-qovery"},"Managing your Clusters with Qovery"),Object(o.b)("p",null,"From the ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),", you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them."),Object(o.b)("h3",{id:"creating-a-cluster"},"Creating a Cluster"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"here for AWS"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"here for Scaleway"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/#connect-your-gcp-account"}),"here for GCP"),".")),Object(o.b)("p",null,"To create a cluster:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"Click ",Object(o.b)("inlineCode",{parentName:"p"},"Add Cluster"),":"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/add-cluster-button.png",alt:"Add Cluster Button"}))),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Create Cluster")," window enter:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster name"),": enter the name of your choice for your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Description"),": enter a description to identify better your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Production cluster"),": select this option if your cluster will be used for production."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cloud provider"),": select your cloud provider."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Region"),": select the geographical area in which you want your cluster to be hosted."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Credentials"),": select one of the existing cloud provider credentials or add a new one by clicking on ",Object(o.b)("inlineCode",{parentName:"li"},"New Credentials"),". In the New credentials window, add the credentials that you have generated on your cloud provider console (",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/#connect-your-gcp-account"}),"Procedure for GCP account"),"). Added credentials can be used later to create and manage additional cluster.")),Object(o.b)("p",null,"To confirm, click ",Object(o.b)("inlineCode",{parentName:"p"},"Next"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Set Resources")," window, select:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster"),": select the cluster type to use. Please refer to this section for ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),"more information"),"."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Instance type"),": select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker nodes")," you want to deploy to your cluster:"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Disk size"),": select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Node auto-scaling"),": define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.")),Object(o.b)("br",null),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(o.b)("p",null,"Please be aware that changing the instance type or disk size might cause a downtime for your service."),Object(o.b)("p",null,"For more information on the instance types provided by each cloud provider and their associated pricing, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),"What are the different instance types available when creating a cluster?")),Object(o.b)("p",null,"Also, before downsizing, you need to ensure that your applications will still have enough resources to run correctly.")),Object(o.b)("br",null),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"At the bottom of the window, you can see an estimate of the cost associated with the selected instance type.")),Object(o.b)("p",null,"To confirm, click ",Object(o.b)("inlineCode",{parentName:"p"},"Next"),".")),Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("em",{parentName:"p"},"(Only for AWS K8S Clusters)")," In the ",Object(o.b)("inlineCode",{parentName:"p"},"Features")," window, select the features you want to enable on your cluster."),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#features"}),"Features"),"."))),Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("em",{parentName:"p"},"(Only for Single EC2 K3S Clusters)")," In the ",Object(o.b)("inlineCode",{parentName:"p"},"Set SSH Key")," window:"),Object(o.b)("p",null,"The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#generating-an-ssh-key-for-your-cluster"}),"Generating an SSH Key for Your Cluster"),"."),Object(o.b)("p",null,"You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.")),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Ready to install your cluster")," window, check that the services needed to install your cluster are correct."),Object(o.b)("p",null,"You can now press the ",Object(o.b)("inlineCode",{parentName:"p"},"Create and Install")," button."),Object(o.b)("p",null,"Your cluster is now displayed in your organization settings, featuring the ",Object(o.b)("inlineCode",{parentName:"p"},"Installing...")," status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.")))),Object(o.b)("h3",{id:"managing-your-cluster-settings"},"Managing your Cluster Settings"),Object(o.b)("p",null,"To manage the settings of an existing cluster:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"To access your cluster settings, click on the wheel button:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(o.b)("p",null,"Below you can find a description of each section"),Object(o.b)("h4",{id:"general"},"General"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"General")," tab allows you to define high-level information on your cluster:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Item"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Cluster Name"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To edit the name of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Description"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the description of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Production Cluster"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the production flag of your cluster.")))),Object(o.b)("h4",{id:"credentials"},"Credentials"),Object(o.b)("p",null,"Here you can manage here the cloud provider credentials associated with your cluster."),Object(o.b)("p",null,"If you need to change the credentials:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"generate a new set of credentials on your cloud provider(",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/#connect-your-gcp-account"}),"Procedure for GCP account"),")"),Object(o.b)("li",{parentName:"ul"},'create the new credential on the Qovery by opening the drop-down and selecting "New Credentials"')),Object(o.b)("p",null,"In the dedicated fields, enter the credentials you created on your cloud provider account:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Account Provider"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Field Labels"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"AWS"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Access Key")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Secret Access Key"))),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Scaleway"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Access Key"),", ",Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Secret Key"),", ",Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Project ID")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Organization ID"))),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"GCP"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"GCP JSON key"))))),Object(o.b)("p",null,"Once created and associated, you need to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"updating your cluster")," to apply the change."),Object(o.b)("h4",{id:"resources"},"Resources"),Object(o.b)("p",null,"Qovery allows you to modify the resources allocated for your cluster:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"In the ",Object(o.b)("inlineCode",{parentName:"li"},"Instance type")," dropdown menu, select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker node(s)")," you want to deploy to your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(AWS users only)")," In the ",Object(o.b)("inlineCode",{parentName:"li"},"Node disk size (GB)")," field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold)."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(EKS users only)")," On the ",Object(o.b)("inlineCode",{parentName:"li"},"Nodes auto-scaling"),", define the range of worker nodes you want to deploy to your cluster.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(o.b)("p",null,"For more information on the instance types provided by each cloud provider and their associated pricing, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),"What are the different instance types available when creating a cluster?"))),Object(o.b)("br",null),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows."),Object(o.b)("p",null,"Please note that a minimum of 3 worker nodes is required to deploy your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"EKS cluster"),"."),Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"K3s clusters")," can only have one node.")),Object(o.b)("h4",{id:"features"},"Features"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Features")," tab in your cluster settings allows you to check if the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," and ",Object(o.b)("strong",{parentName:"p"},"Custom VPC subnet")," features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster."),Object(o.b)("h5",{id:"static-ip"},"Static IP"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses."),Object(o.b)("p",null,"Here is what will be deployed on AWS:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Nat Gateways"),Object(o.b)("li",{parentName:"ul"},"Elastic IPs"),Object(o.b)("li",{parentName:"ul"},"Private subnets")),Object(o.b)("p",null,"Once set up, here is the procedure to find your static IP addresses:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"On your AWS account, select the VPC service."),Object(o.b)("li",{parentName:"ul"},"On the left menu, you\u2019ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you\u2019ll have your public IPs.")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If you work in a sensitive business area such as financial technology, enabling the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature can help fulfil the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.")),Object(o.b)("h5",{id:"custom-vpc-subnet"},"Custom VPC Subnet"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"VPC")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications."),Object(o.b)("p",null,"A VPC can only be used if it has at least one range of IP addresses called a ",Object(o.b)("strong",{parentName:"p"},"subnet"),". When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the ",Object(o.b)("strong",{parentName:"p"},"Custom VPC Subnet")," feature on your cluster. For more information on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h4",{id:"network"},"Network"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Network")," tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h3",{id:"performing-actions-on-your-clusters"},"Performing Actions on your Clusters"),Object(o.b)("p",null,"Qovery allows you to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"update"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"stop"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"restart")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"delete")," your clusters at organization level."),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Action"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"Updating a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To redeploy your cluster after a change has been made to it.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"Restarting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To restart your cluster after it has been temporarily stopped.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster"),".")))),Object(o.b)("p",null,"To access these actions:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"To view your cluster actions, click ",Object(o.b)("inlineCode",{parentName:"p"},"Play")," button:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_actions.png",alt:"Cluster Actions Menu"})),Object(o.b)("p",null,"A dropdown menu unfolds, featuring all the actions available on your cluster.")))),Object(o.b)("p",null,"You can follow the execution of the action via the cluster status and/or by accessing the ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#logs"}),"Cluster Logs")),Object(o.b)("h4",{id:"updating-a-cluster"},"Updating a Cluster"),Object(o.b)("p",null,"If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration."),Object(o.b)("p",null,"To update your cluster, select the action ",Object(o.b)("inlineCode",{parentName:"p"},"Update")," from the drop-down menu."),Object(o.b)("p",null,"A confirmation pop-up window opens before triggering the action."),Object(o.b)("p",null,"Once confirmed, the status of your cluster turns ",Object(o.b)("inlineCode",{parentName:"p"},"Updating...")," (orange status)."),Object(o.b)("p",null,"Once the update is complete, the status dot next to your cluster turns green."),Object(o.b)("h4",{id:"stopping-a-cluster"},"Stopping a Cluster"),Object(o.b)("p",null,"Qovery allows you to temporarily stop your cluster instead of deleting it."),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"When you stop a cluster from the Qovery console, only the workers nodes managed by Qovery are stopped. If you have subscribed to services via your cloud provider (load balancing, storage system, or any other managed services), they will remain active and you will be charged for them.\nFor more information, please contact your cloud provider.\nTo permanently delete a cluster and all its associated costs, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a Cluster"),".")),Object(o.b)("p",null,"To temporarily stop a cluster, select the ",Object(o.b)("inlineCode",{parentName:"p"},"Stop")," action from the drop-down menu.\nA confirmation pop-up window opens before triggering the action."),Object(o.b)("p",null,"Once confirmed, the status of your cluster turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Pausing...")," (orange status)."),Object(o.b)("p",null,"Once the stop is complete, the status dot next to your cluster turns to grey, and the status of your cluster turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Paused")," (gray status)."),Object(o.b)("h4",{id:"restarting-a-cluster"},"Restarting a Cluster"),Object(o.b)("p",null,"You can restart a cluster after it has been temporarily stopped."),Object(o.b)("p",null,"To restart your cluster, select the action ",Object(o.b)("inlineCode",{parentName:"p"},"Resume")," from the drop-down menu."),Object(o.b)("p",null,"A confirmation pop-up window opens before triggering the action."),Object(o.b)("p",null,"Once confirmed, the status of your cluster turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Updating...")," (orange status)."),Object(o.b)("p",null,"Once your cluster has restarted, the status dot next to your cluster turns to green."),Object(o.b)("h4",{id:"deleting-a-cluster"},"Deleting a Cluster"),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Deleting a cluster from the Qovery console is final and cannot be reverted."),Object(o.b)("p",null,"To only temporarily stop a cluster, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a Cluster"),".")),Object(o.b)("p",null,"To delete a cluster, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"Delete Cluster"),"."),Object(o.b)("p",null,"3 options can be chosen to delete a cluster:"),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"}," 1) Default "),"\nThis is the default behaviour, this option shall be chosen every time you want to delete properly a cluster from the Qovery console AND your cloud provider account."),Object(o.b)("p",null,"This operation will delete:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Cloud provider"),": any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Qovery organization"),": the configuration of this cluster and any linked environment.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please note that you will have to manually delete on your cloud account:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"the S3 bucket created at cluster installation"),Object(o.b)("li",{parentName:"ul"},"the image registry linked to this cluster"),Object(o.b)("li",{parentName:"ul"},"any resource created by a lifecycle job that will not be properly deleted during the ",Object(o.b)("inlineCode",{parentName:"li"},"environment deletion")," event.")),Object(o.b)("p",null,"Check ","[this section][#cleaning-up-a-cluster-from-your-aws-account]"," to find these elements and delete them.")),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"}," 2) Delete Cluster on cloud provider and Qovery configuration ")),Object(o.b)("p",null,"This option shall be chosen when the cluster delete operation with the ",Object(o.b)("inlineCode",{parentName:"p"},"Default")," option fails since you have manually modified/deleted the RDS instances created by Qovery on your cloud provider account."),Object(o.b)("p",null,"This operation will delete:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Cloud provider"),": any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Qovery organization"),": the configuration of this cluster and any linked environment.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please note that you will have to manually delete on your cloud account:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"the S3 bucket created at cluster installation"),Object(o.b)("li",{parentName:"ul"},"the image registry linked to this cluster"),Object(o.b)("li",{parentName:"ul"},"any managed database that was created via Qovery"),Object(o.b)("li",{parentName:"ul"},"any resource created by a lifecycle job that will not be properly deleted during the ",Object(o.b)("inlineCode",{parentName:"li"},"environment deletion")," event.")),Object(o.b)("p",null,"Check ","[this section][#cleaning-up-a-cluster-from-your-aws-account]"," to find these elements and delete them.")),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"}," 3) Delete Qovery config only ")),Object(o.b)("p",null,"This option shall be chosen when you have already deleted any Qovery resource on your cloud account and you want to delete the cluster object from your Qovery console."),Object(o.b)("p",null,"This operation will delete:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Cloud provider"),": nothing will be removed from your cloud account. You will have to manually delete any resource created by Qovery directly from your cloud provider console."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Qovery organization"),": the configuration of this cluster and any linked environment.")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"Check ","[this section][#cleaning-up-a-cluster-from-your-aws-account]"," to find these elements and delete them.")),Object(o.b)("p",null,"Once confirmed, the cluster status turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Deleting...")," (red status) and once the deletion is complete, the cluster is removed from your organization settings."),Object(o.b)("h4",{id:"audit-logs"},"Audit logs"),Object(o.b)("p",null,"To get the cluster filtered audit logs, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"See audit logs"),"."),Object(o.b)("p",null,"You will be redirected to the audit logs section. A filter on the dedicated cluster will be applied. You only see the audit logs regarding cluster operations."),Object(o.b)("h4",{id:"get-your-cluster-id"},"Get your cluster id"),Object(o.b)("p",null,"To get your Qovery cluster id, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"Copy identifier"),"."),Object(o.b)("p",null,"The cluster id in Qovery will be in your clipboard."),Object(o.b)("h4",{id:"get-your-cluster-kubeconfig-file"},"Get your cluster kubeconfig file"),Object(o.b)("p",null,"If you need to get your kubeconfig file, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"Get Kubeconfig"),"."),Object(o.b)("p",null,"Then the kubeconfig yaml file will be automatically downloaded."),Object(o.b)("h2",{id:"logs"},"Logs"),Object(o.b)("p",null,"Qovery allows you to access the logs of your cluster in order to follow its installation or investigate any issue happening on it."),Object(o.b)("p",null,"To access the logs you need to open the cluster, click the log button"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_logs_access.png",alt:"Cluster Logs"})),Object(o.b)("p",null,"A new window is opened, displaying the logs of the cluster."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/ok-infra-logs.jpg",alt:"Cluster Logs"})),Object(o.b)("p",null,"The tab system on the right allows you to access the cluster information and, if an error occurs, the detail of the error."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/error-infra-logs.jpg",alt:"Cluster Logs"})),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The error message should provide you enough information to solve the issue. If that's not the case, feel free to ask for support on our ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"forum")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discord.com/channels/688766934917185556/688826155611979807"}),"discord channel"))),Object(o.b)("h2",{id:"generating-an-ssh-key-for-your-cluster"},"Generating an SSH Key for Your Cluster"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You need a public SSH key for your K3s clusters only.")),Object(o.b)("p",null," To allow Qovery or yourself to connect remotely to your K3s instance and manage it, you need to generate an SSH key and add it to your cluster settings. To do so:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null," On your computer, open a terminal.")),Object(o.b)("li",null,Object(o.b)("p",null," Run ",Object(o.b)("inlineCode",{parentName:"p"},"ssh-keygen -t"),", followed by the key type and an optional comment."),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"This comment is included in the .pub file that is created. You may want to use an email address for the comment.")),Object(o.b)("p",null,"For example, you can enter ",Object(o.b)("inlineCode",{parentName:"p"},'ssh-keygen -t rsa -b 2048 -C ""'),".")),Object(o.b)("li",null,Object(o.b)("p",null,"Press ",Object(o.b)("inlineCode",{parentName:"p"},"Enter"),"."),Object(o.b)("p",null,"You should get an output similar to:"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{}),"{\n Generating public/private ed25519 key pair.\n Enter file in which to save the key (/home/user/.ssh/id_ed25519):\n}\n"))),Object(o.b)("li",null,Object(o.b)("p",null," Accept the suggested filename and directory, unless you want to save your SSH key in a specific directory where you store other keys.")),Object(o.b)("li",null,Object(o.b)("p",null," Enter a passphrase:"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{}),"{\n Enter passphrase (empty for no passphrase):\n Enter same passphrase again:\n}\n")),Object(o.b)("p",null," A confirmation is displayed, including information about where your files are stored.")),Object(o.b)("li",null,"Access the public key and copy its value",Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{}),"{\n cat /home/user/.ssh/id_ed25519.pub | pbcopy\n}\n")),Object(o.b)("p",null," Note: Replace the .pub key path with the one where is located the key you have previously generated")))),Object(o.b)("p",null," You can add the generated public SSH key at cluster creation (see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"Creating a Cluster"),"), or later from your cluster settings."),Object(o.b)("p",null," To do so:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"on your ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://console.qovery.com"}),"Qovery Console"),", access your ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#managing-your-cluster-settings"}),"cluster settings"),"."),Object(o.b)("li",{parentName:"ul"},"In the ",Object(o.b)("inlineCode",{parentName:"li"},"Remote Access")," tab, enter your SSH key and click ",Object(o.b)("inlineCode",{parentName:"li"},"Save"),"."),Object(o.b)("li",{parentName:"ul"},"Launch the ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/"}),"Update Cluster")," action to propagate the new key.")),Object(o.b)("h2",{id:"use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta"},"Use custom domain and wildcard TLS for the whole cluster (beta)"),Object(o.b)("p",null,"By default, Qovery provides a domain (ex ",Object(o.b)("inlineCode",{parentName:"p"},"bool.sh"),") on every deployed cluster. It is used to provide a DNS and TLS certificate to every application requiring external access on a cluster."),Object(o.b)("p",null,"You can customize the domain for every application. However, when it comes to having more than 100 custom domains with the same domain you will hit ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://letsencrypt.org/docs/rate-limits/"}),"Let's Encrypt quotas"),"."),Object(o.b)("p",null,"To overcome this issue, you can use a wildcard TLS certificate for the whole cluster. It will allow you to have as many DNS records for a single domain as you want on the same cluster with a single TLS certificate."),Object(o.b)("p",null,"At the moment, Qovery only supports wildcard TLS certificates with ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.cloudflare.com/"}),"Cloudflare"),". To use it, you need to have a Cloudflare account and a domain name managed by Cloudflare. If you don't have one, you can create a free account and transfer your domain to Cloudflare."),Object(o.b)("p",null,"Once you have a Cloudflare account and a domain name managed by Cloudflare, you need to create a Cloudflare API token. Go into your Cloudflare account, click on your profile picture, then ",Object(o.b)("inlineCode",{parentName:"p"},"My Profile"),". In the ",Object(o.b)("inlineCode",{parentName:"p"},"API Tokens")," section, click on ",Object(o.b)("inlineCode",{parentName:"p"},"Create Token"),". In the ",Object(o.b)("inlineCode",{parentName:"p"},"Create Custom Token")," section, select the following permissions:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"API token a descriptive name: Qovery domain ",Object(o.b)("inlineCode",{parentName:"li"},"your domain name")),Object(o.b)("li",{parentName:"ul"},"Permissions:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Zone - DNS - Edit"),Object(o.b)("li",{parentName:"ul"},"Zone - Zone - Read"))),Object(o.b)("li",{parentName:"ul"},"Zone Resources:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Include - Specific zone - ",Object(o.b)("inlineCode",{parentName:"li"},"your domain name"))))),Object(o.b)("p",null,"To finish, click on ",Object(o.b)("inlineCode",{parentName:"p"},"Continue to Summary")," and ",Object(o.b)("inlineCode",{parentName:"p"},"Create Token"),". Save the token somewhere safe, you will need it later."),Object(o.b)("p",null,"Prepare the Token, the Cloudflare account email and the domain to be set on your cluster. Now contact Qovery and request to use your domain."),Object(o.b)("h2",{id:"cleaning-up-a-cluster-from-your-aws-account"},"Cleaning up a Cluster from your AWS Account"),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"The following troubleshooting procedure is intended for AWS users who did not properly delete their cluster before revoking Qovery's access to their platform."),Object(o.b)("p",null,"To properly delete your clusters and avoid any unexpected issues or costs, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a Cluster"),".")),Object(o.b)("p",null,"To clean up a Qovery cluster from your cloud provider account, go to ",Object(o.b)("inlineCode",{parentName:"p"},"AWS Console"),">",Object(o.b)("inlineCode",{parentName:"p"},"Services"),">",Object(o.b)("inlineCode",{parentName:"p"},"Management & Governance"),">",Object(o.b)("inlineCode",{parentName:"p"},"Resource Groups & Tag Editor"),"> ",Object(o.b)("inlineCode",{parentName:"p"},"Create Resource Group"),":"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/aws-console-cluster-cleanup.jpg",alt:"AWS Console Cluster Cleanup"})),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Step"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"In the ",Object(o.b)("inlineCode",{parentName:"td"},"Group type")," area, select ",Object(o.b)("inlineCode",{parentName:"td"},"Tag based"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"2"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"In the ",Object(o.b)("inlineCode",{parentName:"td"},"Tags")," field of the ",Object(o.b)("inlineCode",{parentName:"td"},"Grouping criteria")," area, enter ",Object(o.b)("inlineCode",{parentName:"td"},"ClusterId"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"3"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Click ",Object(o.b)("inlineCode",{parentName:"td"},"Add"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"4"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Click ",Object(o.b)("inlineCode",{parentName:"td"},"Preview Resources"),". ",Object(o.b)("br",null)," All your Qovery clusters are now displayed in the ",Object(o.b)("inlineCode",{parentName:"td"},"Group resources")," table, and you can delete them by hand.")))))}p.isMDXComponent=!0},422: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)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),b=u(n),d=a,y=b["".concat(l,".").concat(d)]||b[d]||p[d]||o;return n?r.a.createElement(y,c({ref:t},s,{components:n})):r.a.createElement(y,c({ref:t},s))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,l[1]=c;for(var s=2;s1?arguments[1]:void 0,n),i=l>2?arguments[2]:void 0,s=void 0===i?n:r(i,n);s>c;)t[c++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var a=n(0),r=n.n(a),o=n(423);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)}},429:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),l=n(39),c=n(431),i=n(20),s=n.n(i);t.a=function(e){var t,n=e.to,i=e.href,u=n||i,b=Object(c.a)(u),p=Object(r.useRef)(!1),d=s.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!d&&b&&window.docusaurus.prefetch(u),function(){d&&t&&t.disconnect()}}),[u,d,b]),u&&b?o.a.createElement(l.b,Object(a.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(u),p.current=!0)},innerRef:function(e){var n,a;d&&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}))}},430:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(429),l=n(422),c=n.n(l);n(133);t.a=function(e){var t=e.children,n=e.className,a=e.badge,l=e.leftIcon,i=e.rightIcon,s=e.size,u=e.target,b=e.to,p=c()("jump-to","jump-to--"+s,n),d=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},l&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+l})),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-"+(i||"chevron-right")+" arrow"}))));return u?r.a.createElement("a",{href:b,target:u,className:p},d):r.a.createElement(o.a,{to:b,className:p},d)}},431:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},432:function(e,t,n){"use strict";var a=n(434),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 l=[];return r.slice().forEach((function(e){void 0!==e&&l.push(n(a,e,l.length))})),l.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(422),n(432)),l=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,i={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?"+l.a.stringify(i),u=Object(a.useState)(null),b=u[0],p=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 p("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"),"."))}},434: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/dc00a797.df29b8a3.js.LICENSE.txt b/dc00a797.30a8be50.js.LICENSE.txt similarity index 100% rename from dc00a797.df29b8a3.js.LICENSE.txt rename to dc00a797.30a8be50.js.LICENSE.txt diff --git a/dc00a797.df29b8a3.js b/dc00a797.df29b8a3.js deleted file mode 100644 index ed83811be9..0000000000 --- a/dc00a797.df29b8a3.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see dc00a797.df29b8a3.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[234],{386:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return u})),n.d(t,"default",(function(){return p}));var a=n(1),r=n(9),o=(n(0),n(424)),l=n(433),c=(n(430),n(423)),i=(n(428),{last_modified_on:"2023-12-20",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery"}),s={id:"using-qovery/configuration/clusters",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery",source:"@site/docs/using-qovery/configuration/clusters.md",permalink:"/docs/using-qovery/configuration/clusters",sidebar:"docs",previous:{title:"API Token",permalink:"/docs/using-qovery/configuration/organization/api-token"},next:{title:"Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider"}},u=[{value:"What is a cluster?",id:"what-is-a-cluster",children:[]},{value:"Why do I need a cluster?",id:"why-do-i-need-a-cluster",children:[]},{value:"What are the different instance types available when creating a cluster?",id:"what-are-the-different-instance-types-available-when-creating-a-cluster",children:[]},{value:"How does Qovery handle cluster updates and upgrades?",id:"how-does-qovery-handle-cluster-updates-and-upgrades",children:[]},{value:"What do you do when a vulnerability is found?",id:"what-do-you-do-when-a-vulnerability-is-found",children:[]},{value:"Managing your Clusters with Qovery",id:"managing-your-clusters-with-qovery",children:[{value:"Creating a Cluster",id:"creating-a-cluster",children:[]},{value:"Managing your Cluster Settings",id:"managing-your-cluster-settings",children:[]},{value:"Performing Actions on your Clusters",id:"performing-actions-on-your-clusters",children:[]}]},{value:"Logs",id:"logs",children:[]},{value:"Generating an SSH Key for Your Cluster",id:"generating-an-ssh-key-for-your-cluster",children:[]},{value:"Use custom domain and wildcard TLS for the whole cluster (beta)",id:"use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta",children:[]},{value:"Cleaning up a Cluster from your AWS Account",id:"cleaning-up-a-cluster-from-your-aws-account",children:[]}],b={rightToc:u};function p(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)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If you are looking to install Qovery on your Kubernetes cluster, please refer to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/guides/provider/guide-kubernetes/"}),"this guide"),".")),Object(o.b)("p",null,"This section brings you answers to all the questions our users usually ask about clusters:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"What is a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),"Why do I need a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),"What are the different instance types available when creating a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#how-does-qovery-handle-cluster-updates-and-upgrades"}),"How does Qovery handle cluster updates and upgrades?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"How do I set up a cluster?")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#managing-your-cluster-settings"}),"How do I update my cluster settings?"))),Object(o.b)("h3",{id:"what-is-a-cluster"},"What is a cluster?"),Object(o.b)("p",null,"At Qovery, when we refer to cluster, we mean ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://kubernetes.io/"}),"Kubernetes")," cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications. It is usually made up of:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Pods"),": think of a pod as one instance of your application. Pods are the smallest deployable objects in Kubernetes, and they are hosted by worker nodes."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Worker Nodes"),": worker nodes essentially run your applications and workloads. When you create a cluster from your Qovery Console, it generates the set up of worker nodes (also called \u201cinstances\u201d, \u201cEC2 instances\u201d for AWS users, or \u201cdroplets\u201d for DigitalOcean users).\nQovery allows you to define worker nodes settings, so that you end up deploying the right type of instances on your infrastructure based on your CPU, memory, storage and network performance needs."),Object(o.b)("li",{parentName:"ul"},"a ",Object(o.b)("strong",{parentName:"li"},"Control Plane")," (or ",Object(o.b)("strong",{parentName:"li"},"Master Node"),"): the control plane manages the worker nodes. Since we deploy managed Kubernetes services, the control plane is handled exclusively by your cloud provider, and left untouched by Qovery.")),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster-overview.jpg",alt:"Application"})),Object(o.b)("p",null,"For more information on Kubernetes clusters, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://kubernetes.io/docs/concepts/overview/components/"}),"the Kubernetes documentation"),"."),Object(o.b)("h3",{id:"why-do-i-need-a-cluster"},"Why do I need a cluster?"),Object(o.b)("p",null,"Qovery is built on top of Kubernetes, which means we need Kubernetes clusters to be able to deploy and run your applications."),Object(o.b)("p",null,"Thanks to clusters, you can easily deploy several (and many) instances of the same application, so that if one fails, the others can instantly take over. Also, clusters can auto-scale, meaning that the number of worker nodes in a cluster can automatically go up or down as traffic fluctuates on your application(s), thus ensuring high availability and performance. Clusters are also extremely useful ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.qovery.com/blog/how-to-isolate-your-production-from-staging-with-kubernetes"}),"to isolate your production environment from your staging environment"),"."),Object(o.b)("p",null,"In short, through the use of clusters, Kubernetes provides you with a resilient, flexible and powerful infrastructure, fit for production environment needs and requirements. And with the help of Qovery, setting up and maintaining your Kubernetes clusters has never been easier."),Object(o.b)("p",null,"Qovery allows you to create and manage two types of clusters:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null})),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"th"},"Managed K8S ")),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"th"}," BETA - Single EC2 (K3s)")))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"td"},"Description")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"A multi-node Kubernetes cluster managed by your cloud provider (EKS, Kapsule etc..)"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"K3s Cluster running on a single EC2 instance (single-node) ",Object(o.b)("strong",{parentName:"td"},"Available only on AWS and still in BETA"))),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"td"},"Usage")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Hosting professional applications in production (resilient, scalable and powerful infrastructure). Scalable staging / preview / dev environments"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Hobby projects, trying out Qovery, ephemeral environments deployment")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("strong",{parentName:"td"},"Cloud provider cost")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Starting from 200$/month, based on the chosen instance type"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"starting from 20$/month, based on the chosen instance type")))),Object(o.b)("br",null),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},"Single EC2 (K3s) is still in BETA phase and has the following limitations",Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"You can\u2019t access the historical logs and thus you can access your application logs only if it's running (Since we don\u2019t have loki installed)"),Object(o.b)("li",{parentName:"ul"},"No public accessibility for DB container (we do not manage the public DNS entry for db). We will work on it in the upcoming weeks, in the meantime we will write a guide on how to connect to the DB via the ssh key / kubeconf"),Object(o.b)("li",{parentName:"ul"},"You can configure only 1 instance per application. Thus you can\u2019t change the number of instances nor activate the sticky session feature"),Object(o.b)("li",{parentName:"ul"},"Stop instance feature not ready YET"),Object(o.b)("li",{parentName:"ul"},"You can\u2019t change the cluster settings without a service downtime since we kill the instance and we spawn a new one"),Object(o.b)("li",{parentName:"ul"},"We do not manage YET the external storage"),Object(o.b)("li",{parentName:"ul"},"We do not support YET the VPC setting"),Object(o.b)("li",{parentName:"ul"},"If you want to connect via SSH, you can't get YET the instance hostname directly in the Qovery console, you need to get it from the AWS console"))),Object(o.b)("br",null),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"K3s clusters are ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones"}),"deployed on one AWS availability zone"),". Therefore, if a network or power disruption happens on the availability zone where your K3s instance is running, your applications will no longer be available until it is solved."),Object(o.b)("p",null,"This is why we do not recommend installing K3s clusters to run professional applications in a production environment.")),Object(o.b)("h3",{id:"what-are-the-different-instance-types-available-when-creating-a-cluster"},"What are the different instance types available when creating a cluster?"),Object(o.b)("p",null,"The range of instance types available at cluster creation depends on your cloud provider:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"AWS offers over 400 instance types. You can ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://aws.amazon.com/ec2/instance-types/"}),"view their details on the official AWS website"),", as well as ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://aws.amazon.com/ec2/pricing/on-demand/"}),"their pricing"),"."),Object(o.b)("li",{parentName:"ul"},"Scaleway also offers a wide range of instance types, ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://www.scaleway.com/en/pricing/"}),"whose details and pricing you can view on the official Scaleway website"),".")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"Qovery supports only instance types having an x86_64 or ARM architecture.")),Object(o.b)("h4",{id:"what-is-the-default-cluster"},"What is the default cluster?"),Object(o.b)("p",null,"The default cluster is the first cluster you installed in your organization."),Object(o.b)("p",null,"When you create a new environment and leave the ",Object(o.b)("inlineCode",{parentName:"p"},"mode")," and ",Object(o.b)("inlineCode",{parentName:"p"},"cluster")," parameters set to the value ",Object(o.b)("inlineCode",{parentName:"p"},"Automatic"),", your environment is deployed to:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"the cluster defined in one of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/deployment-rule/#environment-deployment-rules"}),"your project rules"),","),Object(o.b)("li",{parentName:"ul"},"or to the default cluster if no project rule applies.")),Object(o.b)("p",null,"For more information on deployment rules, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/project/"}),"Project"),"."),Object(o.b)("h3",{id:"how-does-qovery-handle-cluster-updates-and-upgrades"},"How does Qovery handle cluster updates and upgrades?"),Object(o.b)("p",null,"As far as cluster updates and upgrades to a newer version of Kubernetes are concerned, our Qovery engineering team handles everything in due time, so you don\u2019t even need to think about it!"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You may notice that Qovery does not provide you with the latest Kubernetes version offered by your cloud provider. This is due to the high amount of testing we need to perform to ensure smooth upgrades with no interruptions for your applications. Our priority is always to guarantee you maximum uptime.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please ",Object(o.b)("strong",{parentName:"p"},"DO NOT")," upgrade the cluster version by yourself from the cloud provider console."),Object(o.b)("p",null,"That's the whole point of Qovery, we manage this task for you so you don't have to bother.\nIf you did update by mistake, then you need to reach to Qovery team in order to get some help."),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Proceeding with a cluster version upgrade outside of Qovery will prevent any future update on this cluster")," and might be irreversible preventing Qovery from properly deploying on this cluster. Most importantly will expose you to some unknown / untested areas which can put your application stability at risks.")),Object(o.b)("p",null,"Usually, we work on a given upgrade for one month of intensive testing on our end in order to make sure everything will be smooth for you. Once we are pretty confident our stack is stable, we move on with the following steps which last approximately 3 weeks:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},"Notify users about new version coming in approximatively 1 month before"),Object(o.b)("li",{parentName:"ol"},"Upgrade clusters for a handful of beta-tester customers (1 week)"),Object(o.b)("li",{parentName:"ol"},"Upgrade all non-production flagged clusters (1-2 week(s))"),Object(o.b)("li",{parentName:"ol"},"Upgrade all clusters")),Object(o.b)("p",null,"If, somehow the planning or timeframe for the upgrade is clashing with your business needs, you will be able to contact us so we can arrange the best timeframe for you."),Object(o.b)("h3",{id:"what-do-you-do-when-a-vulnerability-is-found"},"What do you do when a vulnerability is found?"),Object(o.b)("p",null,"Security is our main concern. When a vulnerability is found, here are the actions that we take:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},"We quickly identify how significant is the impact of the vulnerability."),Object(o.b)("li",{parentName:"ol"},"We look at how we can solve or mitigate the vulnerability."),Object(o.b)("li",{parentName:"ol"},"We transparently communicate with our customers about the vulnerability to help them take the right actions.")),Object(o.b)("h2",{id:"managing-your-clusters-with-qovery"},"Managing your Clusters with Qovery"),Object(o.b)("p",null,"From the ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),", you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them."),Object(o.b)("h3",{id:"creating-a-cluster"},"Creating a Cluster"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"here for AWS"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"here for Scaleway"),".")),Object(o.b)("p",null,"To create a cluster:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"Click ",Object(o.b)("inlineCode",{parentName:"p"},"Add Cluster"),":"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/add-cluster-button.png",alt:"Add Cluster Button"}))),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Create Cluster")," window enter:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster name"),": enter the name of your choice for your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Description"),": enter a description to identify better your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Production cluster"),": select this option if your cluster will be used for production."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cloud provider"),": select your cloud provider."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Region"),": select the geographical area in which you want your cluster to be hosted."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Credentials"),": select one of the existing cloud provider credentials or add a new one by clicking on ",Object(o.b)("inlineCode",{parentName:"li"},"New Credentials"),". In the New credentials window, add the credentials that you have generated on your cloud provider console (",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),"). Added credentials can be used later to create and manage additional cluster.")),Object(o.b)("p",null,"To confirm, click ",Object(o.b)("inlineCode",{parentName:"p"},"Next"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Set Resources")," window, select:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster"),": select the cluster type to use. Please refer to this section for ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),"more information"),"."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Instance type"),": select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker nodes")," you want to deploy to your cluster:"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Disk size"),": select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Node auto-scaling"),": define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.")),Object(o.b)("br",null),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(o.b)("p",null,"Please be aware that changing the instance type or disk size might cause a downtime for your service."),Object(o.b)("p",null,"For more information on the instance types provided by each cloud provider and their associated pricing, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),"What are the different instance types available when creating a cluster?")),Object(o.b)("p",null,"Also, before downsizing, you need to ensure that your applications will still have enough resources to run correctly.")),Object(o.b)("br",null),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"At the bottom of the window, you can see an estimate of the cost associated with the selected instance type.")),Object(o.b)("p",null,"To confirm, click ",Object(o.b)("inlineCode",{parentName:"p"},"Next"),".")),Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("em",{parentName:"p"},"(Only for AWS K8S Clusters)")," In the ",Object(o.b)("inlineCode",{parentName:"p"},"Features")," window, select the features you want to enable on your cluster."),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#features"}),"Features"),"."))),Object(o.b)("li",null,Object(o.b)("p",null,Object(o.b)("em",{parentName:"p"},"(Only for Single EC2 K3S Clusters)")," In the ",Object(o.b)("inlineCode",{parentName:"p"},"Set SSH Key")," window:"),Object(o.b)("p",null,"The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#generating-an-ssh-key-for-your-cluster"}),"Generating an SSH Key for Your Cluster"),"."),Object(o.b)("p",null,"You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.")),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Ready to install your cluster")," window, check that the services needed to install your cluster are correct."),Object(o.b)("p",null,"You can now press the ",Object(o.b)("inlineCode",{parentName:"p"},"Create and Install")," button."),Object(o.b)("p",null,"Your cluster is now displayed in your organization settings, featuring the ",Object(o.b)("inlineCode",{parentName:"p"},"Installing...")," status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.")))),Object(o.b)("h3",{id:"managing-your-cluster-settings"},"Managing your Cluster Settings"),Object(o.b)("p",null,"To manage the settings of an existing cluster:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"To access your cluster settings, click on the wheel button:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(o.b)("p",null,"Below you can find a description of each section"),Object(o.b)("h4",{id:"general"},"General"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"General")," tab allows you to define high-level information on your cluster:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Item"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Cluster Name"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To edit the name of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Description"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the description of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Production Cluster"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the production flag of your cluster.")))),Object(o.b)("h4",{id:"credentials"},"Credentials"),Object(o.b)("p",null,"Here you can manage here the cloud provider credentials associated with your cluster."),Object(o.b)("p",null,"If you need to change the credentials:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"generate a new set of credentials on your cloud provider(",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),")"),Object(o.b)("li",{parentName:"ul"},'create the new credential on the Qovery by opening the drop-down and selecting "New Credentials"')),Object(o.b)("p",null,"In the two dedicated fields, enter the credentials you created on your cloud provider account:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Account Provider"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Field Labels"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"AWS"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Access Key")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Secret Access Key"))),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Scaleway"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Access Key")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Project ID"))))),Object(o.b)("p",null,"Once created and associated, you need to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"updating your cluster")," to apply the change."),Object(o.b)("h4",{id:"resources"},"Resources"),Object(o.b)("p",null,"Qovery allows you to modify the resources allocated for your cluster:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"In the ",Object(o.b)("inlineCode",{parentName:"li"},"Instance type")," dropdown menu, select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker node(s)")," you want to deploy to your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(AWS users only)")," In the ",Object(o.b)("inlineCode",{parentName:"li"},"Node disk size (GB)")," field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold)."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(EKS users only)")," On the ",Object(o.b)("inlineCode",{parentName:"li"},"Nodes auto-scaling"),", define the range of worker nodes you want to deploy to your cluster.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(o.b)("p",null,"For more information on the instance types provided by each cloud provider and their associated pricing, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),"What are the different instance types available when creating a cluster?"))),Object(o.b)("br",null),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows."),Object(o.b)("p",null,"Please note that a minimum of 3 worker nodes is required to deploy your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"EKS cluster"),"."),Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"K3s clusters")," can only have one node.")),Object(o.b)("h4",{id:"features"},"Features"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Features")," tab in your cluster settings allows you to check if the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," and ",Object(o.b)("strong",{parentName:"p"},"Custom VPC subnet")," features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster."),Object(o.b)("h5",{id:"static-ip"},"Static IP"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses."),Object(o.b)("p",null,"Here is what will be deployed on AWS:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Nat Gateways"),Object(o.b)("li",{parentName:"ul"},"Elastic IPs"),Object(o.b)("li",{parentName:"ul"},"Private subnets")),Object(o.b)("p",null,"Once set up, here is the procedure to find your static IP addresses:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"On your AWS account, select the VPC service."),Object(o.b)("li",{parentName:"ul"},"On the left menu, you\u2019ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you\u2019ll have your public IPs.")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If you work in a sensitive business area such as financial technology, enabling the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature can help fulfil the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.")),Object(o.b)("h5",{id:"custom-vpc-subnet"},"Custom VPC Subnet"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"VPC")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications."),Object(o.b)("p",null,"A VPC can only be used if it has at least one range of IP addresses called a ",Object(o.b)("strong",{parentName:"p"},"subnet"),". When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the ",Object(o.b)("strong",{parentName:"p"},"Custom VPC Subnet")," feature on your cluster. For more information on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h4",{id:"network"},"Network"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Network")," tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h3",{id:"performing-actions-on-your-clusters"},"Performing Actions on your Clusters"),Object(o.b)("p",null,"Qovery allows you to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"update"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"stop"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"restart")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"delete")," your clusters at organization level."),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Action"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"Updating a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To redeploy your cluster after a change has been made to it.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"Restarting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To restart your cluster after it has been temporarily stopped.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster"),".")))),Object(o.b)("p",null,"To access these actions:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"To view your cluster actions, click ",Object(o.b)("inlineCode",{parentName:"p"},"Play")," button:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_actions.png",alt:"Cluster Actions Menu"})),Object(o.b)("p",null,"A dropdown menu unfolds, featuring all the actions available on your cluster.")))),Object(o.b)("p",null,"You can follow the execution of the action via the cluster status and/or by accessing the ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#logs"}),"Cluster Logs")),Object(o.b)("h4",{id:"updating-a-cluster"},"Updating a Cluster"),Object(o.b)("p",null,"If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration."),Object(o.b)("p",null,"To update your cluster, select the action ",Object(o.b)("inlineCode",{parentName:"p"},"Update")," from the drop-down menu."),Object(o.b)("p",null,"A confirmation pop-up window opens before triggering the action."),Object(o.b)("p",null,"Once confirmed, the status of your cluster turns ",Object(o.b)("inlineCode",{parentName:"p"},"Updating...")," (orange status)."),Object(o.b)("p",null,"Once the update is complete, the status dot next to your cluster turns green."),Object(o.b)("h4",{id:"stopping-a-cluster"},"Stopping a Cluster"),Object(o.b)("p",null,"Qovery allows you to temporarily stop your cluster instead of deleting it."),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"When you stop a cluster from the Qovery console, only the workers nodes managed by Qovery are stopped. If you have subscribed to services via your cloud provider (load balancing, storage system, or any other managed services), they will remain active and you will be charged for them.\nFor more information, please contact your cloud provider.\nTo permanently delete a cluster and all its associated costs, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a Cluster"),".")),Object(o.b)("p",null,"To temporarily stop a cluster, select the ",Object(o.b)("inlineCode",{parentName:"p"},"Stop")," action from the drop-down menu.\nA confirmation pop-up window opens before triggering the action."),Object(o.b)("p",null,"Once confirmed, the status of your cluster turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Pausing...")," (orange status)."),Object(o.b)("p",null,"Once the stop is complete, the status dot next to your cluster turns to grey, and the status of your cluster turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Paused")," (gray status)."),Object(o.b)("h4",{id:"restarting-a-cluster"},"Restarting a Cluster"),Object(o.b)("p",null,"You can restart a cluster after it has been temporarily stopped."),Object(o.b)("p",null,"To restart your cluster, select the action ",Object(o.b)("inlineCode",{parentName:"p"},"Resume")," from the drop-down menu."),Object(o.b)("p",null,"A confirmation pop-up window opens before triggering the action."),Object(o.b)("p",null,"Once confirmed, the status of your cluster turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Updating...")," (orange status)."),Object(o.b)("p",null,"Once your cluster has restarted, the status dot next to your cluster turns to green."),Object(o.b)("h4",{id:"deleting-a-cluster"},"Deleting a Cluster"),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Deleting a cluster from the Qovery console is final and cannot be reverted."),Object(o.b)("p",null,"To only temporarily stop a cluster, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a Cluster"),".")),Object(o.b)("p",null,"To delete a cluster, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"Delete Cluster"),"."),Object(o.b)("p",null,"3 options can be chosen to delete a cluster:"),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"}," 1) Default "),"\nThis is the default behaviour, this option shall be chosen every time you want to delete properly a cluster from the Qovery console AND your cloud provider account."),Object(o.b)("p",null,"This operation will delete:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Cloud provider"),": any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Qovery organization"),": the configuration of this cluster and any linked environment.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please note that you will have to manually delete on your cloud account:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"the S3 bucket created at cluster installation"),Object(o.b)("li",{parentName:"ul"},"the image registry linked to this cluster"),Object(o.b)("li",{parentName:"ul"},"any resource created by a lifecycle job that will not be properly deleted during the ",Object(o.b)("inlineCode",{parentName:"li"},"environment deletion")," event.")),Object(o.b)("p",null,"Check ","[this section][#cleaning-up-a-cluster-from-your-aws-account]"," to find these elements and delete them.")),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"}," 2) Delete Cluster on cloud provider and Qovery configuration ")),Object(o.b)("p",null,"This option shall be chosen when the cluster delete operation with the ",Object(o.b)("inlineCode",{parentName:"p"},"Default")," option fails since you have manually modified/deleted the RDS instances created by Qovery on your cloud provider account."),Object(o.b)("p",null,"This operation will delete:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Cloud provider"),": any resource created by Qovery on your cloud provider account to run this cluster will be deleted, including any application running on it."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Qovery organization"),": the configuration of this cluster and any linked environment.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please note that you will have to manually delete on your cloud account:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"the S3 bucket created at cluster installation"),Object(o.b)("li",{parentName:"ul"},"the image registry linked to this cluster"),Object(o.b)("li",{parentName:"ul"},"any managed database that was created via Qovery"),Object(o.b)("li",{parentName:"ul"},"any resource created by a lifecycle job that will not be properly deleted during the ",Object(o.b)("inlineCode",{parentName:"li"},"environment deletion")," event.")),Object(o.b)("p",null,"Check ","[this section][#cleaning-up-a-cluster-from-your-aws-account]"," to find these elements and delete them.")),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"}," 3) Delete Qovery config only ")),Object(o.b)("p",null,"This option shall be chosen when you have already deleted any Qovery resource on your cloud account and you want to delete the cluster object from your Qovery console."),Object(o.b)("p",null,"This operation will delete:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Cloud provider"),": nothing will be removed from your cloud account. You will have to manually delete any resource created by Qovery directly from your cloud provider console."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"Qovery organization"),": the configuration of this cluster and any linked environment.")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"Check ","[this section][#cleaning-up-a-cluster-from-your-aws-account]"," to find these elements and delete them.")),Object(o.b)("p",null,"Once confirmed, the cluster status turns to ",Object(o.b)("inlineCode",{parentName:"p"},"Deleting...")," (red status) and once the deletion is complete, the cluster is removed from your organization settings."),Object(o.b)("h4",{id:"audit-logs"},"Audit logs"),Object(o.b)("p",null,"To get the cluster filtered audit logs, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"See audit logs"),"."),Object(o.b)("p",null,"You will be redirected to the audit logs section. A filter on the dedicated cluster will be applied. You only see the audit logs regarding cluster operations."),Object(o.b)("h4",{id:"get-your-cluster-id"},"Get your cluster id"),Object(o.b)("p",null,"To get your Qovery cluster id, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"Copy identifier"),"."),Object(o.b)("p",null,"The cluster id in Qovery will be in your clipboard."),Object(o.b)("h4",{id:"get-your-cluster-kubeconfig-file"},"Get your cluster kubeconfig file"),Object(o.b)("p",null,"If you need to get your kubeconfig file, open the ",Object(o.b)("inlineCode",{parentName:"p"},"...")," section and press ",Object(o.b)("inlineCode",{parentName:"p"},"Get Kubeconfig"),"."),Object(o.b)("p",null,"Then the kubeconfig yaml file will be automatically downloaded."),Object(o.b)("h2",{id:"logs"},"Logs"),Object(o.b)("p",null,"Qovery allows you to access the logs of your cluster in order to follow its installation or investigate any issue happening on it."),Object(o.b)("p",null,"To access the logs you need to open the cluster, click the log button"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_logs_access.png",alt:"Cluster Logs"})),Object(o.b)("p",null,"A new window is opened, displaying the logs of the cluster."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/ok-infra-logs.jpg",alt:"Cluster Logs"})),Object(o.b)("p",null,"The tab system on the right allows you to access the cluster information and, if an error occurs, the detail of the error."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/error-infra-logs.jpg",alt:"Cluster Logs"})),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The error message should provide you enough information to solve the issue. If that's not the case, feel free to ask for support on our ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"forum")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discord.com/channels/688766934917185556/688826155611979807"}),"discord channel"))),Object(o.b)("h2",{id:"generating-an-ssh-key-for-your-cluster"},"Generating an SSH Key for Your Cluster"),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You need a public SSH key for your K3s clusters only.")),Object(o.b)("p",null," To allow Qovery or yourself to connect remotely to your K3s instance and manage it, you need to generate an SSH key and add it to your cluster settings. To do so:"),Object(o.b)(l.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null," On your computer, open a terminal.")),Object(o.b)("li",null,Object(o.b)("p",null," Run ",Object(o.b)("inlineCode",{parentName:"p"},"ssh-keygen -t"),", followed by the key type and an optional comment."),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"This comment is included in the .pub file that is created. You may want to use an email address for the comment.")),Object(o.b)("p",null,"For example, you can enter ",Object(o.b)("inlineCode",{parentName:"p"},'ssh-keygen -t rsa -b 2048 -C ""'),".")),Object(o.b)("li",null,Object(o.b)("p",null,"Press ",Object(o.b)("inlineCode",{parentName:"p"},"Enter"),"."),Object(o.b)("p",null,"You should get an output similar to:"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{}),"{\n Generating public/private ed25519 key pair.\n Enter file in which to save the key (/home/user/.ssh/id_ed25519):\n}\n"))),Object(o.b)("li",null,Object(o.b)("p",null," Accept the suggested filename and directory, unless you want to save your SSH key in a specific directory where you store other keys.")),Object(o.b)("li",null,Object(o.b)("p",null," Enter a passphrase:"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{}),"{\n Enter passphrase (empty for no passphrase):\n Enter same passphrase again:\n}\n")),Object(o.b)("p",null," A confirmation is displayed, including information about where your files are stored.")),Object(o.b)("li",null,"Access the public key and copy its value",Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{}),"{\n cat /home/user/.ssh/id_ed25519.pub | pbcopy\n}\n")),Object(o.b)("p",null," Note: Replace the .pub key path with the one where is located the key you have previously generated")))),Object(o.b)("p",null," You can add the generated public SSH key at cluster creation (see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"Creating a Cluster"),"), or later from your cluster settings."),Object(o.b)("p",null," To do so:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"on your ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"https://console.qovery.com"}),"Qovery Console"),", access your ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#managing-your-cluster-settings"}),"cluster settings"),"."),Object(o.b)("li",{parentName:"ul"},"In the ",Object(o.b)("inlineCode",{parentName:"li"},"Remote Access")," tab, enter your SSH key and click ",Object(o.b)("inlineCode",{parentName:"li"},"Save"),"."),Object(o.b)("li",{parentName:"ul"},"Launch the ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/"}),"Update Cluster")," action to propagate the new key.")),Object(o.b)("h2",{id:"use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta"},"Use custom domain and wildcard TLS for the whole cluster (beta)"),Object(o.b)("p",null,"By default, Qovery provides a domain (ex ",Object(o.b)("inlineCode",{parentName:"p"},"bool.sh"),") on every deployed cluster. It is used to provide a DNS and TLS certificate to every application requiring external access on a cluster."),Object(o.b)("p",null,"You can customize the domain for every application. However, when it comes to having more than 100 custom domains with the same domain you will hit ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://letsencrypt.org/docs/rate-limits/"}),"Let's Encrypt quotas"),"."),Object(o.b)("p",null,"To overcome this issue, you can use a wildcard TLS certificate for the whole cluster. It will allow you to have as many DNS records for a single domain as you want on the same cluster with a single TLS certificate."),Object(o.b)("p",null,"At the moment, Qovery only supports wildcard TLS certificates with ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://www.cloudflare.com/"}),"Cloudflare"),". To use it, you need to have a Cloudflare account and a domain name managed by Cloudflare. If you don't have one, you can create a free account and transfer your domain to Cloudflare."),Object(o.b)("p",null,"Once you have a Cloudflare account and a domain name managed by Cloudflare, you need to create a Cloudflare API token. Go into your Cloudflare account, click on your profile picture, then ",Object(o.b)("inlineCode",{parentName:"p"},"My Profile"),". In the ",Object(o.b)("inlineCode",{parentName:"p"},"API Tokens")," section, click on ",Object(o.b)("inlineCode",{parentName:"p"},"Create Token"),". In the ",Object(o.b)("inlineCode",{parentName:"p"},"Create Custom Token")," section, select the following permissions:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"API token a descriptive name: Qovery domain ",Object(o.b)("inlineCode",{parentName:"li"},"your domain name")),Object(o.b)("li",{parentName:"ul"},"Permissions:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Zone - DNS - Edit"),Object(o.b)("li",{parentName:"ul"},"Zone - Zone - Read"))),Object(o.b)("li",{parentName:"ul"},"Zone Resources:",Object(o.b)("ul",{parentName:"li"},Object(o.b)("li",{parentName:"ul"},"Include - Specific zone - ",Object(o.b)("inlineCode",{parentName:"li"},"your domain name"))))),Object(o.b)("p",null,"To finish, click on ",Object(o.b)("inlineCode",{parentName:"p"},"Continue to Summary")," and ",Object(o.b)("inlineCode",{parentName:"p"},"Create Token"),". Save the token somewhere safe, you will need it later."),Object(o.b)("p",null,"Prepare the Token, the Cloudflare account email and the domain to be set on your cluster. Now contact Qovery and request to use your domain."),Object(o.b)("h2",{id:"cleaning-up-a-cluster-from-your-aws-account"},"Cleaning up a Cluster from your AWS Account"),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"The following troubleshooting procedure is intended for AWS users who did not properly delete their cluster before revoking Qovery's access to their platform."),Object(o.b)("p",null,"To properly delete your clusters and avoid any unexpected issues or costs, see ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a Cluster"),".")),Object(o.b)("p",null,"To clean up a Qovery cluster from your cloud provider account, go to ",Object(o.b)("inlineCode",{parentName:"p"},"AWS Console"),">",Object(o.b)("inlineCode",{parentName:"p"},"Services"),">",Object(o.b)("inlineCode",{parentName:"p"},"Management & Governance"),">",Object(o.b)("inlineCode",{parentName:"p"},"Resource Groups & Tag Editor"),"> ",Object(o.b)("inlineCode",{parentName:"p"},"Create Resource Group"),":"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/aws-console-cluster-cleanup.jpg",alt:"AWS Console Cluster Cleanup"})),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Step"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"1"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"In the ",Object(o.b)("inlineCode",{parentName:"td"},"Group type")," area, select ",Object(o.b)("inlineCode",{parentName:"td"},"Tag based"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"2"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"In the ",Object(o.b)("inlineCode",{parentName:"td"},"Tags")," field of the ",Object(o.b)("inlineCode",{parentName:"td"},"Grouping criteria")," area, enter ",Object(o.b)("inlineCode",{parentName:"td"},"ClusterId"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"3"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Click ",Object(o.b)("inlineCode",{parentName:"td"},"Add"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"4"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Click ",Object(o.b)("inlineCode",{parentName:"td"},"Preview Resources"),". ",Object(o.b)("br",null)," All your Qovery clusters are now displayed in the ",Object(o.b)("inlineCode",{parentName:"td"},"Group resources")," table, and you can delete them by hand.")))))}p.isMDXComponent=!0},422: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)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),b=u(n),d=a,y=b["".concat(l,".").concat(d)]||b[d]||p[d]||o;return n?r.a.createElement(y,c({ref:t},s,{components:n})):r.a.createElement(y,c({ref:t},s))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,l[1]=c;for(var s=2;s1?arguments[1]:void 0,n),i=l>2?arguments[2]:void 0,s=void 0===i?n:r(i,n);s>c;)t[c++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var a=n(0),r=n.n(a),o=n(423);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)}},429:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),l=n(39),c=n(431),i=n(20),s=n.n(i);t.a=function(e){var t,n=e.to,i=e.href,u=n||i,b=Object(c.a)(u),p=Object(r.useRef)(!1),d=s.a.canUseIntersectionObserver;return Object(r.useEffect)((function(){return!d&&b&&window.docusaurus.prefetch(u),function(){d&&t&&t.disconnect()}}),[u,d,b]),u&&b?o.a.createElement(l.b,Object(a.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(u),p.current=!0)},innerRef:function(e){var n,a;d&&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}))}},430:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(429),l=n(422),c=n.n(l);n(133);t.a=function(e){var t=e.children,n=e.className,a=e.badge,l=e.leftIcon,i=e.rightIcon,s=e.size,u=e.target,b=e.to,p=c()("jump-to","jump-to--"+s,n),d=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},l&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+l})),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-"+(i||"chevron-right")+" arrow"}))));return u?r.a.createElement("a",{href:b,target:u,className:p},d):r.a.createElement(o.a,{to:b,className:p},d)}},431:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},432:function(e,t,n){"use strict";var a=n(434),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 l=[];return r.slice().forEach((function(e){void 0!==e&&l.push(n(a,e,l.length))})),l.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},433:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(422),n(432)),l=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,i={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?"+l.a.stringify(i),u=Object(a.useState)(null),b=u[0],p=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 p("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"),"."))}},434: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/docs/getting-started/basic-concepts/index.html b/docs/getting-started/basic-concepts/index.html index 75b89e80c6..24c788c0c1 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 bd5ff2692b..e128a259d5 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 488f8db4c4..098e31a6ed 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 b001999af0..36a420948d 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/index.html b/docs/getting-started/install-qovery/index.html index 023fcf3b31..b32b23e8ae 100644 --- a/docs/getting-started/install-qovery/index.html +++ b/docs/getting-started/install-qovery/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 85e355af10..3d9b7fc5b5 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 7256bc482d..b4cce994b3 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 f46ce12317..60e475513f 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 c9a2166019..90dc3f86da 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 daec71b688..fd5a3df1e3 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 6841a49651..ede7c60b31 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 391797a9e3..64b5b8a005 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 951534a511..f3bc389022 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 cae47587a5..84f0a8a45a 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 9839844453..fc3498bf7d 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 04b09b2f50..dc98d4b193 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 377fc6b416..2f371f485e 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 5bd4c364af..4f2f19b001 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 bc3dece937..144195cf72 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/amazon-web-services/index.html b/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html index 7a031fef4c..c414352923 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html @@ -26,7 +26,7 @@ - + @@ -44,20 +44,20 @@ - +
-

Amazon Web Services (AWS)

Qovery lets you quickly deploy applications to your Amazon Web Services (AWS) account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your AWS account.

Getting started

Connect your AWS account

To link your AWS account to Qovery you need to provide an AWS access key id and secret access key with the required IAM permissions.

Create your AWS credentials - access key id and secret access key

  1. Connect to your AWS console

  2. Go to IAM

  3. Create Admins group without any permissions

  4. Create one IAM user called qovery.

  5. Setup IAM permissions to the qovery user.

    Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:

  6. To create an access key id and secret access key, go to the Security Credentials tab of the Qovery user and press Create access key

    You can now save the access key id and secret access key

Well done!! You now have your AWS access key id and secret access key and your permissions are setups; It is time to connect Qovery to your AWS account.

Install a new cluster on Qovery

You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. +

Amazon Web Services (AWS)

Qovery lets you quickly deploy applications to your Amazon Web Services (AWS) account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your AWS account.

Getting started

Connect your AWS account

To link your AWS account to Qovery you need to provide an AWS access key id and secret access key with the required IAM permissions.

Create your AWS credentials - access key id and secret access key

  1. Connect to your AWS console

  2. Go to IAM

  3. Create Admins group without any permissions

  4. Create one IAM user called qovery.

  5. Setup IAM permissions to the qovery user.

    Then, follow the arrows in AWS console to create AWS credentials with required IAM permissions:

  6. To create an access key id and secret access key, go to the Security Credentials tab of the Qovery user and press Create access key

    You can now save the access key id and secret access key

Well done!! You now have your AWS access key id and secret access key and your permissions are setups; It is time to connect Qovery to your AWS account.

Install a new cluster on Qovery

You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. Follow this documentation to create a new cluster on your organization.

Deployed AWS components

Network ServicesOptionalDescription
A dedicated multi AZ VPCnoEverything Qovery will deploy, will be deployed inside this VPC
Subnets, routing tables, subnet groups and security groups for RDS (multi AZ)noDedicated network fand security rules for RDS
Subnets, routing tables, subnet groups and security groups for DocumentDB (multi AZ)noDedicated network fand security rules for DocumentDB
Subnets, routing tables, subnet groups and security groups for Elasticache (multi AZ)noDedicated network fand security rules for Elasticache
An internet gateway for the VPCnoRequired to let containers having access to Internet
Dedicated NLB to redirect 443 traffic to Nginx IngressnoHigh Availability network load balancer, pointing to Nginx Ingress inside EKS
NAT gateways (multi AZ) + EIP addresses (multi AZ) + subnet groups + routing tableyesUseful to get outgoing static IP
Dedicated VPC routes for VPC peeringyesUseful to perform VPC peering with others VPC on the same or different account
Kubernetes ServicesOptionalDescription
A dedicated EKS cluster (multi AZ) for this VPCnoDedicated Kubernetes cluster managed by AWS with nodes (instances type) defined by the customer
IAM dedicated user for AWS EBS CSI to access EC2 volumes + a dedicated policynoRequired to allow EKS cluster having access to volume and mount them to containers
IAM dedicated user for AWS IAM User Sync + a dedicated policynoRequired to sync desired IAM account to EKS to let them connect directly ot Kubernetes
IAM dedicated user for a Cluster Autoscaler+ a dedicated policynoRequired to let autoscaler having access to EC2 autoscaling groups
IAM dedicated policies for AWS EKS CNI, EC2 container registry + EKS worker nodesnoRequired to let EKS having access to container registry and configure the Kubernetes network
Security group for EKS remote access (dual authentication: TLS + IAM authenticator)noRequired to have a secure remote access on the Kubernetes cluster
Security group for 443 port pointing to Nginx ingress inside EKSnoExternal access to web services inside the Kubernetes cluster
Other ServicesOptionalDescription
Cloudwatch log groups for the EKS clusternoKubernetes logs, useful for the AWS and EKS support to diagnose an issue
Dedicated S3 bucket for application's logs + a dedicated IAM accountnoApplication's logs are stored in an KMS encrypted S3 pivate bucket
Dedicated S3 bucket to store the kubeconfignoKubernetes Kubeconfig is stored in an KMS encrypted, private and versionned bucket, used by Qovery for application's deployment

Remove Qovery from your AWS account

To delete Qovery from your AWS account you must be the owner of the Qovery Organization and you have to delete everything in this order:

  • Environments
  • Clusters

IAM permissions

Qovery required IAM permissions to create, update and managed the infrastructure.

  • IAM is used to create IAM roles
  • S3 is used to store our generated configuration files
  • Cloudwatch, for creating a group stream for each Kubernetes clusters
  • Autoscaling for RDS and autoscaling rules for the Kubernetes cluster
  • Elastic load-balancing for ELB / ALB / NLB.
  • DynamoDB to have a distributed lock on infrastructure deployment.
  • ECR for managing the container registry, create/update/delete repository.
  • KMS to load and store keys (RDS, SSH, …)
  • EKS to create and update the Kubernetes cluster.
Minimum IAM permission set
Last update: 2023-06-08

Below you can find the minimum permission set required by Qovery to run and deploy your applications.

Policies lengths are limited regarding which object they’re attached to but the one Qovery needs represent more than the maximum (~6000 characters).

In order to setup it up, you need to create two IAM groups, each one with one of the following policies.

Then we must create a user added to each of the previously created groups.

Once it’s done, the user’s access key and secret key can be used in Qovery.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:SuspendProcesses",
"ec2:AllocateAddress",
"ec2:AssociateAddress",
"ec2:AssociateRouteTable",
"ec2:AttachVolume",
"ec2:AttachInternetGateway",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateInternetGateway",
"ec2:CreateKeyPair",
"ec2:CreateLaunchTemplate",
"ec2:CreateLaunchTemplateVersion",
"ec2:CreateNatGateway",
"ec2:CreateRoute",
"ec2:CreateRouteTable",
"ec2:CreateSecurityGroup",
"ec2:CreateSubnet",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:CreateVpc",
"ec2:DeleteInternetGateway",
"ec2:DeleteKeyPair",
"ec2:DeleteLaunchTemplate",
"ec2:DeleteNatGateway",
"ec2:DeleteRouteTable",
"ec2:DeleteSecurityGroup",
"ec2:DeleteSubnet",
"ec2:DeleteVolume",
"ec2:DeleteVpc",
"ec2:DescribeAddresses",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeImages",
"ec2:DescribeInstanceAttribute",
"ec2:DescribeInstanceCreditSpecifications",
"ec2:DescribeInstances",
"ec2:DescribeInstanceTypes",
"ec2:DescribeInternetGateways",
"ec2:DescribeKeyPairs",
"ec2:DescribeLaunchTemplateVersions",
"ec2:DescribeLaunchTemplates",
"ec2:DescribeNatGateways",
"ec2:DescribeNetworkAcls",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeRouteTables",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeTags",
"ec2:DescribeVolumes",
"ec2:DescribeVpcAttribute",
"ec2:DescribeVpcClassicLink",
"ec2:DescribeVpcClassicLinkDnsSupport",
"ec2:DescribeVpcs",
"ec2:DetachInternetGateway",
"ec2:DetachVolume",
"ec2:DisassociateAddress",
"ec2:DisassociateRouteTable",
"ec2:ImportKeyPair",
"ec2:ModifySubnetAttribute",
"ec2:ModifyVpcAttribute",
"ec2:ReleaseAddress",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress",
"ec2:RunInstances",
"ec2:StopInstances",
"ec2:TerminateInstances",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:CreateRepository",
"ecr:DeleteRepository",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:GetAuthorizationToken",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:PutLifecyclePolicy",
"ecr:TagResource",
"ecr:UploadLayerPart",
"eks:CreateAddon",
"eks:CreateCluster",
"eks:CreateNodegroup",
"eks:DeleteAddon",
"eks:DeleteCluster",
"eks:DeleteNodegroup",
"eks:DescribeAddon",
"eks:DescribeCluster",
"eks:DescribeNodegroup",
"eks:DescribeUpdate",
"eks:ListClusters",
"eks:ListNodegroups",
"eks:TagResource",
"eks:UpdateAddon",
"eks:UpdateClusterConfig",
"eks:UpdateClusterVersion",
"eks:UpdateNodegroupConfig",
"eks:UpdateNodegroupVersion",
"elasticache:AddTagsToResource",
"elasticache:CreateCacheSubnetGroup",
"elasticache:CreateReplicationGroup",
"elasticache:DeleteCacheSubnetGroup",
"elasticache:DeleteReplicationGroup",
"elasticache:DescribeCacheClusters",
"elasticache:DescribeCacheSubnetGroups",
"elasticache:DescribeReplicationGroups",
"elasticache:ListTagsForResource",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeTags"
],
"Resource": "*"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:AddRoleToInstanceProfile",
"iam:AttachRolePolicy",
"iam:AttachUserPolicy",
"iam:CreateAccessKey",
"iam:CreateInstanceProfile",
"iam:CreateOpenIDConnectProvider",
"iam:CreatePolicy",
"iam:CreateRole",
"iam:CreateServiceLinkedRole",
"iam:CreateUser",
"iam:DeleteAccessKey",
"iam:DeleteInstanceProfile",
"iam:DeleteOpenIDConnectProvider",
"iam:DeletePolicy",
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:DeleteUser",
"iam:DeleteUserPolicy",
"iam:DetachRolePolicy",
"iam:DetachUserPolicy",
"iam:GetInstanceProfile",
"iam:GetOpenIDConnectProvider",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:GetUser",
"iam:GetUserPolicy",
"iam:ListAccessKeys",
"iam:ListAttachedRolePolicies",
"iam:ListAttachedUserPolicies",
"iam:ListGroupsForUser",
"iam:ListInstanceProfilesForRole",
"iam:ListPolicyVersions",
"iam:ListRolePolicies",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:PutUserPolicy",
"iam:RemoveRoleFromInstanceProfile",
"iam:TagInstanceProfile",
"iam:TagOpenIDConnectProvider",
"iam:TagRole",
"iam:TagUser",
"kms:CreateGrant",
"kms:CreateKey",
"kms:Decrypt",
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:GetKeyPolicy",
"kms:GetKeyRotationStatus",
"kms:ListResourceTags",
"kms:PutKeyPolicy",
"kms:ScheduleKeyDeletion",
"kms:TagResource",
"logs:CreateLogGroup",
"logs:DeleteLogGroup",
"logs:DescribeLogGroups",
"logs:ListTagsLogGroup",
"logs:PutRetentionPolicy",
"logs:TagLogGroup",
"rds:AddTagsToResource",
"rds:CreateDBCluster",
"rds:CreateDBInstance",
"rds:CreateDBParameterGroup",
"rds:CreateDBSubnetGroup",
"rds:DeleteDBCluster",
"rds:DeleteDBInstance",
"rds:DeleteDBParameterGroup",
"rds:DeleteDBSubnetGroup",
"rds:DescribeDBClusters",
"rds:DescribeDBInstances",
"rds:DescribeDBParameterGroups",
"rds:DescribeDBParameters",
"rds:DescribeDBSubnetGroups",
"rds:DescribeGlobalClusters",
"rds:ListTagsForResource",
"rds:ModifyDBInstance",
"rds:ModifyDBParameterGroup",
"rds:StartDBCluster",
"rds:StartDBInstance",
"rds:StopDBCluster",
"rds:StopDBInstance",
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:DeleteBucketPolicy",
"s3:GetAccelerateConfiguration",
"s3:GetBucketAcl",
"s3:GetBucketCORS",
"s3:GetBucketLogging",
"s3:GetBucketObjectLockConfiguration",
"s3:GetBucketOwnershipControls",
"s3:GetBucketPolicy",
"s3:GetBucketPublicAccessBlock",
"s3:GetBucketRequestPayment",
"s3:GetBucketTagging",
"s3:GetBucketVersioning",
"s3:GetBucketWebsite",
"s3:GetEncryptionConfiguration",
"s3:GetLifecycleConfiguration",
"s3:GetObject",
"s3:GetReplicationConfiguration",
"s3:ListAccessPoints",
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions",
"s3:ListMultiRegionAccessPoints",
"s3:ListMultipartUploadParts",
"s3:ListStorageLensConfigurations",
"s3:PutBucketAcl",
"s3:PutBucketOwnershipControls",
"s3:PutBucketPolicy",
"s3:PutBucketPublicAccessBlock",
"s3:PutBucketTagging",
"s3:PutBucketVersioning",
"s3:PutEncryptionConfiguration",
"s3:PutLifecycleConfiguration",
"s3:PutObject",
"s3:PutObjectRetention",
"secretsmanager:CreateSecret",
"secretsmanager:TagResource",
"sts:GetCallerIdentity"
],
"Resource": "*"
}
]
}

Regions

Qovery supports the following AWS regions:

namedescriptionsupported
🇺🇸us-west-2US West (Oregon)Yes
🇺🇸us-east-2US East (Ohio)Yes
🇺🇸us-east-1US East (N. Virginia)Yes
🇺🇸us-west-1US West (N. California)No (Only 2 Availability Zone)
🇿🇦af-south-1Africa (Cape Town)Yes
🇭🇰ap-east-1Asia Pacific (Hong Kong)Yes
🇮🇳ap-south-1Asia Pacific (Mumbai)Yes
🇯🇵ap-northeast-1Asia Pacific (Tokyo)Yes
🇰🇷ap-northeast-2Asia Pacific (Seoul)Yes
🇯🇵ap-northeast-3Asia Pacific (Osaka)Yes
🇸🇬ap-southeast-1Asia Pacific (Singapore)Yes
🇦🇺ap-southeast-2Asia Pacific (Sydney)Yes
🇨🇦ca-central-1Canada (Toronto)Yes
🇨🇳cn-north-1China (Beijing)Yes
🇨🇳cn-northwest-1China (Ningxia)Yes
🇩🇪eu-central-1Europe (Frankfurt)Yes
🇮🇪eu-west-1Europe (Ireland)Yes
🏴󠁧󠁢󠁥󠁮󠁧󠁿eu-west-2Europe (London)Yes
🇫🇷eu-west-3Europe (Paris)Yes
🇮🇹eu-south-1Europe (Milan)Yes
🇸🇪eu-north-1Europe (Stockholm)Yes
🇧🇭me-south-1Middle East (Bahrain)Yes
🇧🇷sa-east-1South America (São Paulo)Yes

Qovery supports regions where Amazon EKS is supported.

Manually configure VPC subnet

VPC subnet is automatically defined by Qovery on cluster creation. However, you may want to choose your own VPC subnet, for example to perform VPC Peering.

Have a look at [this section][docs.using-qovery.configuration.clusters#custom-vpc-subnet]] to know more on how to set the VPC Subnet.

Configure routing table

You may want to create and edit a network routing table to perform VPC peering. This can be done by accessing to the parameters of a cluster, in the settings of your organization.

Have a look at [this section][docs.using-qovery.configuration.clusters#network]] to know more on how to set the routing table.

How Qovery works on AWS

Qovery is an abstraction layer on top of AWS and Kubernetes. Qovery manages the configuration of AWS account, and helps you to deploy production ready apps in seconds. To make it works, Qovery rely on Kubernetes for stateless apps (containers), and AWS for stateful apps (databases, storage...).

Read more on how Qovery works behind the scene.

Kubernetes

The first time you set up your AWS account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

Managed services

AWS provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

Security and compliance

Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

  • Your configuration are stored on your AWS account.
  • Your configuration is encrypted on your AWS account.
  • Qovery can't access to your data.
  • Suppose Qovery stops to run, your applications are not impacted.

FAQ

How to choose a region?

Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

I don't find a region that is provided by AWS

We are probably testing the support of this region, please contact us to know what's the status

Migrate between Cloud providers and regions

Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

- + @@ -75,7 +75,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html b/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html index a087ad3b72..6b63dc2f62 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html b/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html index fe9b1f63b1..5ac7470491 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html @@ -26,7 +26,7 @@ - + @@ -44,18 +44,20 @@ - +
-
+

Google Cloud Platform (GCP)

Qovery lets you quickly deploy applications to your GCP (GCP) account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your GCP account.

Getting started

Connect your GCP account

To link your GCP account to Qovery you need to provide a GCP JSON credentials key.

Create your GCP credentials

  1. Connect to your GCP console

  2. Create a new Project or open an exiting one

  3. Open the embedded Google shell

  4. Run the following command in the Google Shell to create the service account and generate the json key:

    wget https://hub.qovery.com/files/create_credentials_gcp.sh && chmod +x create_credentials_gcp.sh && ./create_credentials_gcp.sh $GOOGLE_CLOUD_PROJECT qovery-service-account
  5. Once the script is done. A GCP JSON credentials key has been created and you can download it.

Well done!! You now have your GCP JSON credentials key; It is time to connect Qovery to your GCP account.

Install a new cluster on Qovery

You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. +Follow this documentation to create a new cluster on your organization.

Remove your GCP account

To delete Qovery from your GCP account you must be the owner of the Organization and delete the cluster on Qovery side. Follow this documentation +Once your GCP account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever.

- + @@ -73,7 +75,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/index.html b/docs/using-qovery/configuration/cloud-service-provider/index.html index 111392ebbe..4307fe9433 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/cloud-service-provider/microsoft-azure/index.html b/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html index 515e781008..329dc5d945 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/other-csps/index.html b/docs/using-qovery/configuration/cloud-service-provider/other-csps/index.html index 00d6f34dfc..e1b24ec8a1 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/other-csps/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/other-csps/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html b/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html index 0b5d93ab17..438ff814fc 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -44,14 +44,14 @@ - +
-

Scaleway (SCW)

Qovery lets you quickly deploy applications to your Scaleway (Scaleway) account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your Scaleway account.

Getting started

Connect your Scaleway account

To link your Scaleway account to Qovery you need to provide a Scaleway access key id, secret access key, organization id and a project id.

Create your Scaleway credentials - access key id, secret access key, organization id and project id.

  1. Connect to your Scaleway console

  2. Go to IAM

  3. Go to Applications

  4. Create a new application for your project

  5. Generate your new API key from your application view

    Set up the the preferred `Project` for `Object Storage` with your Scaleway Project
  6. Save the generated access key id and secret access key.

  7. Go to Policies

  8. Create a new policy with Principal linked to the application you just created.

  9. Set the scope of the policy to your project

  10. Select the following rules for your policy

    • Containers permissions
    • Network Service permissions
    • Compute permissions
    • Storage permissions
    • VPC permissions
  11. Create your policy

  12. Get your organization id in your organization settings

  13. Get your project id on your project dashboard

Well done!! You now have your Scaleway access key id, secret access key, organization_id and project id; It is time to connect Qovery to your Scaleway account.

Install a new cluster on Qovery

You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. +

Scaleway (SCW)

Qovery lets you quickly deploy applications to your Scaleway (Scaleway) account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your Scaleway account.

Getting started

Connect your Scaleway account

To link your Scaleway account to Qovery you need to provide a Scaleway access key id, secret access key, organization id and a project id.

Create your Scaleway credentials - access key id, secret access key, organization id and project id.

  1. Connect to your Scaleway console

  2. Go to IAM

  3. Go to Applications

  4. Create a new application for your project

  5. Generate your new API key from your application view

    Set up the the preferred `Project` for `Object Storage` with your Scaleway Project
  6. Save the generated access key id and secret access key.

  7. Go to Policies

  8. Create a new policy with Principal linked to the application you just created.

  9. Set the scope of the policy to your project

  10. Select the following rules for your policy

    • Containers permissions
    • Network Service permissions
    • Compute permissions
    • Storage permissions
    • VPC permissions
  11. Create your policy

  12. Get your organization id in your organization settings

  13. Get your project id on your project dashboard

Well done!! You now have your Scaleway access key id, secret access key, organization_id and project id; It is time to connect Qovery to your Scaleway account.

Install a new cluster on Qovery

You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. Follow this documentation to create a new cluster on your organization.

Remove your Scaleway account

this section is under development - join us and be part of the first to try it

Delete Qovery from your Scaleway account

To delete Qovery from your Scaleway account you must be the owner of the Organization. Once your Scaleway account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever.

Regions

Qovery supports the following Scalewav regions:

namedescription
🇫🇷fr-par-1Paris DC1 (France)
🇫🇷fr-par-2Paris DC2 (France)
🇫🇷fr-par-3Paris DC3 (France)
🇳🇱nl-ams-1Amsterdam DC1 (Netherlands)
🇵🇱pl-waw-1Warsaw DC1 (Poland)

Qovery supports regions where Scaleway Kubernetes (Kapsule) is supported.

How Qovery works on Scaleway

Qovery is an abstraction layer on top of Scaleway and Kubernetes. Qovery manages the configuration of Scaleway account, and helps you to deploy production ready apps in seconds. To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...).

Read more on how Qovery works behind the scene.

Kubernetes

The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.

Managed services

Scaleway provides managed services for PostgreSQL, MySQL, Redis, MongoDB. Qovery gives you access to those services when you set the environment mode to Production. In Development mode, Qovery provides containers equivalent, which is cheaper and faster to start.

Security and compliance

Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:

  • Your configuration are stored on your Scaleway account.
  • Your configuration is encrypted on your Scaleway account.
  • Qovery can't access to your data.
  • Suppose Qovery stops to run, your applications are not impacted.

FAQ

How to choose a region?

Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.

I don't find a region that is provided by Scaleway

We are probably testing the support of this region, please contact us to know what's the status

Migrate between Cloud providers and regions

Today, you can't migrate an environment from one region to another after it has been created. Vote here if you need this feature.

@@ -59,7 +59,7 @@ - + @@ -77,7 +77,7 @@ - + diff --git a/docs/using-qovery/configuration/cluster-advanced-settings/index.html b/docs/using-qovery/configuration/cluster-advanced-settings/index.html index b62325f00d..c059c0e226 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 1def298854..0093dd90a2 100644 --- a/docs/using-qovery/configuration/clusters/index.html +++ b/docs/using-qovery/configuration/clusters/index.html @@ -26,7 +26,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -52,7 +52,7 @@

Clusters

This section brings you answers to all the questions our users usually ask about clusters:

What is a cluster?

At Qovery, when we refer to cluster, we mean Kubernetes cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications. It is usually made up of:

  • Pods: think of a pod as one instance of your application. Pods are the smallest deployable objects in Kubernetes, and they are hosted by worker nodes.
  • Worker Nodes: worker nodes essentially run your applications and workloads. When you create a cluster from your Qovery Console, it generates the set up of worker nodes (also called “instances”, “EC2 instances” for AWS users, or “droplets” for DigitalOcean users). Qovery allows you to define worker nodes settings, so that you end up deploying the right type of instances on your infrastructure based on your CPU, memory, storage and network performance needs.
  • a Control Plane (or Master Node): the control plane manages the worker nodes. Since we deploy managed Kubernetes services, the control plane is handled exclusively by your cloud provider, and left untouched by Qovery.

Application

For more information on Kubernetes clusters, see the Kubernetes documentation.

Why do I need a cluster?

Qovery is built on top of Kubernetes, which means we need Kubernetes clusters to be able to deploy and run your applications.

Thanks to clusters, you can easily deploy several (and many) instances of the same application, so that if one fails, the others can instantly take over. Also, clusters can auto-scale, meaning that the number of worker nodes in a cluster can automatically go up or down as traffic fluctuates on your application(s), thus ensuring high availability and performance. Clusters are also extremely useful to isolate your production environment from your staging environment.

In short, through the use of clusters, Kubernetes provides you with a resilient, flexible and powerful infrastructure, fit for production environment needs and requirements. And with the help of Qovery, setting up and maintaining your Kubernetes clusters has never been easier.

Qovery allows you to create and manage two types of clusters:

Managed K8S BETA - Single EC2 (K3s)
DescriptionA multi-node Kubernetes cluster managed by your cloud provider (EKS, Kapsule etc..)K3s Cluster running on a single EC2 instance (single-node) Available only on AWS and still in BETA
UsageHosting professional applications in production (resilient, scalable and powerful infrastructure). Scalable staging / preview / dev environmentsHobby projects, trying out Qovery, ephemeral environments deployment
Cloud provider costStarting from 200$/month, based on the chosen instance typestarting from 20$/month, based on the chosen instance type


What are the different instance types available when creating a cluster?

The range of instance types available at cluster creation depends on your cloud provider:

What is the default cluster?

The default cluster is the first cluster you installed in your organization.

When you create a new environment and leave the mode and cluster parameters set to the value Automatic, your environment is deployed to:

  • the cluster defined in one of your project rules,
  • or to the default cluster if no project rule applies.

For more information on deployment rules, see Project.

How does Qovery handle cluster updates and upgrades?

As far as cluster updates and upgrades to a newer version of Kubernetes are concerned, our Qovery engineering team handles everything in due time, so you don’t even need to think about it!

Usually, we work on a given upgrade for one month of intensive testing on our end in order to make sure everything will be smooth for you. Once we are pretty confident our stack is stable, we move on with the following steps which last approximately 3 weeks:

  1. Notify users about new version coming in approximatively 1 month before
  2. Upgrade clusters for a handful of beta-tester customers (1 week)
  3. Upgrade all non-production flagged clusters (1-2 week(s))
  4. Upgrade all clusters

If, somehow the planning or timeframe for the upgrade is clashing with your business needs, you will be able to contact us so we can arrange the best timeframe for you.

What do you do when a vulnerability is found?

Security is our main concern. When a vulnerability is found, here are the actions that we take:

  1. We quickly identify how significant is the impact of the vulnerability.
  2. We look at how we can solve or mitigate the vulnerability.
  3. We transparently communicate with our customers about the vulnerability to help them take the right actions.

Managing your Clusters with Qovery

From the Qovery Console, you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them.

Creating a Cluster

To create a cluster:

  1. Open your Qovery Console.

  2. On the left menu bar, click on the Cluster page:

    Cluster Access

  3. Click Add Cluster:

    Add Cluster Button

  4. In the Create Cluster window enter:

    • Cluster name: enter the name of your choice for your cluster.
    • Description: enter a description to identify better your cluster.
    • Production cluster: select this option if your cluster will be used for production.
    • Cloud provider: select your cloud provider.
    • Region: select the geographical area in which you want your cluster to be hosted.
    • Credentials: select one of the existing cloud provider credentials or add a new one by clicking on New Credentials. In the New credentials window, add the credentials that you have generated on your cloud provider console (Procedure for AWS account, Procedure for Scaleway account). Added credentials can be used later to create and manage additional cluster.

    To confirm, click Next.

  5. In the Set Resources window, select:

    • Cluster: select the cluster type to use. Please refer to this section for more information.
    • Instance type: select the type of worker nodes you want to deploy to your cluster:
    • Disk size: select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS.
    • Node auto-scaling: define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.


    To confirm, click Next.

  6. (Only for AWS K8S Clusters) In the Features window, select the features you want to enable on your cluster.

  7. (Only for Single EC2 K3S Clusters) In the Set SSH Key window:

    The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, see Generating an SSH Key for Your Cluster.

    You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.

  8. In the Ready to install your cluster window, check that the services needed to install your cluster are correct.

    You can now press the Create and Install button.

    Your cluster is now displayed in your organization settings, featuring the Installing... status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.

Managing your Cluster Settings

To manage the settings of an existing cluster:

  1. Open your Qovery Console.

  2. On the left menu bar, click on the Cluster page:

    Cluster Access

  3. To access your cluster settings, click on the wheel button:

    Display Cluster Settings

Below you can find a description of each section

General

The General tab allows you to define high-level information on your cluster:

ItemDescription
Cluster NameTo edit the name of your cluster.
DescriptionTo enter or edit the description of your cluster.
Production ClusterTo enter or edit the production flag of your cluster.

Credentials

Here you can manage here the cloud provider credentials associated with your cluster.

If you need to change the credentials:

In the two dedicated fields, enter the credentials you created on your cloud provider account:

Account ProviderField Labels
AWSAccess Key and Secret Access Key
ScalewayScaleway Access Key and Scaleway Project ID

Once created and associated, you need to updating your cluster to apply the change.

Resources

Qovery allows you to modify the resources allocated for your cluster:

  • In the Instance type dropdown menu, select the type of worker node(s) you want to deploy to your cluster.
  • (AWS users only) In the Node disk size (GB) field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold).
  • (EKS users only) On the Nodes auto-scaling, define the range of worker nodes you want to deploy to your cluster.

Features

The Features tab in your cluster settings allows you to check if the Static IP and Custom VPC subnet features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster.

Static IP

The Static IP feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.

By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the Static IP feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses.

Here is what will be deployed on AWS:

  • Nat Gateways
  • Elastic IPs
  • Private subnets

Once set up, here is the procedure to find your static IP addresses:

  • On your AWS account, select the VPC service.
  • On the left menu, you’ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you’ll have your public IPs.
Custom VPC Subnet

The VPC feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.

Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications.

A VPC can only be used if it has at least one range of IP addresses called a subnet. When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the Custom VPC Subnet feature on your cluster. For more information on how to set up VPC peering, see our dedicated tutorial.

Network

The Network tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, see our dedicated tutorial.

Performing Actions on your Clusters

Qovery allows you to update, stop, restart or delete your clusters at organization level.

ActionDescription
Updating a clusterTo redeploy your cluster after a change has been made to it.
Stopping a clusterTo temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see Stopping a cluster.
Restarting a clusterTo restart your cluster after it has been temporarily stopped.
Deleting a clusterTo delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see Deleting a cluster.

To access these actions:

  1. Open your Qovery Console.

  2. On the left menu bar, click on the Cluster page:

    Cluster Access

  3. To view your cluster actions, click Play button:

    Cluster Actions Menu

    A dropdown menu unfolds, featuring all the actions available on your cluster.

You can follow the execution of the action via the cluster status and/or by accessing the Cluster Logs

Updating a Cluster

If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration.

To update your cluster, select the action Update from the drop-down menu.

A confirmation pop-up window opens before triggering the action.

Once confirmed, the status of your cluster turns Updating... (orange status).

Once the update is complete, the status dot next to your cluster turns green.

Stopping a Cluster

Qovery allows you to temporarily stop your cluster instead of deleting it.

Usually, we work on a given upgrade for one month of intensive testing on our end in order to make sure everything will be smooth for you. Once we are pretty confident our stack is stable, we move on with the following steps which last approximately 3 weeks:

  1. Notify users about new version coming in approximatively 1 month before
  2. Upgrade clusters for a handful of beta-tester customers (1 week)
  3. Upgrade all non-production flagged clusters (1-2 week(s))
  4. Upgrade all clusters

If, somehow the planning or timeframe for the upgrade is clashing with your business needs, you will be able to contact us so we can arrange the best timeframe for you.

What do you do when a vulnerability is found?

Security is our main concern. When a vulnerability is found, here are the actions that we take:

  1. We quickly identify how significant is the impact of the vulnerability.
  2. We look at how we can solve or mitigate the vulnerability.
  3. We transparently communicate with our customers about the vulnerability to help them take the right actions.

Managing your Clusters with Qovery

From the Qovery Console, you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them.

Creating a Cluster

To create a cluster:

  1. Open your Qovery Console.

  2. On the left menu bar, click on the Cluster page:

    Cluster Access

  3. Click Add Cluster:

    Add Cluster Button

  4. In the Create Cluster window enter:

    • Cluster name: enter the name of your choice for your cluster.
    • Description: enter a description to identify better your cluster.
    • Production cluster: select this option if your cluster will be used for production.
    • Cloud provider: select your cloud provider.
    • Region: select the geographical area in which you want your cluster to be hosted.
    • Credentials: select one of the existing cloud provider credentials or add a new one by clicking on New Credentials. In the New credentials window, add the credentials that you have generated on your cloud provider console (Procedure for AWS account, Procedure for Scaleway account, Procedure for GCP account). Added credentials can be used later to create and manage additional cluster.

    To confirm, click Next.

  5. In the Set Resources window, select:

    • Cluster: select the cluster type to use. Please refer to this section for more information.
    • Instance type: select the type of worker nodes you want to deploy to your cluster:
    • Disk size: select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS.
    • Node auto-scaling: define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.


    To confirm, click Next.

  6. (Only for AWS K8S Clusters) In the Features window, select the features you want to enable on your cluster.

  7. (Only for Single EC2 K3S Clusters) In the Set SSH Key window:

    The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, see Generating an SSH Key for Your Cluster.

    You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.

  8. In the Ready to install your cluster window, check that the services needed to install your cluster are correct.

    You can now press the Create and Install button.

    Your cluster is now displayed in your organization settings, featuring the Installing... status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.

Managing your Cluster Settings

To manage the settings of an existing cluster:

  1. Open your Qovery Console.

  2. On the left menu bar, click on the Cluster page:

    Cluster Access

  3. To access your cluster settings, click on the wheel button:

    Display Cluster Settings

Below you can find a description of each section

General

The General tab allows you to define high-level information on your cluster:

ItemDescription
Cluster NameTo edit the name of your cluster.
DescriptionTo enter or edit the description of your cluster.
Production ClusterTo enter or edit the production flag of your cluster.

Credentials

Here you can manage here the cloud provider credentials associated with your cluster.

If you need to change the credentials:

In the dedicated fields, enter the credentials you created on your cloud provider account:

Account ProviderField Labels
AWSAccess Key and Secret Access Key
ScalewayScaleway Access Key, Scaleway Secret Key, Scaleway Project ID and Scaleway Organization ID
GCPGCP JSON key

Once created and associated, you need to updating your cluster to apply the change.

Resources

Qovery allows you to modify the resources allocated for your cluster:

  • In the Instance type dropdown menu, select the type of worker node(s) you want to deploy to your cluster.
  • (AWS users only) In the Node disk size (GB) field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold).
  • (EKS users only) On the Nodes auto-scaling, define the range of worker nodes you want to deploy to your cluster.

Features

The Features tab in your cluster settings allows you to check if the Static IP and Custom VPC subnet features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster.

Static IP

The Static IP feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.

By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the Static IP feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses.

Here is what will be deployed on AWS:

  • Nat Gateways
  • Elastic IPs
  • Private subnets

Once set up, here is the procedure to find your static IP addresses:

  • On your AWS account, select the VPC service.
  • On the left menu, you’ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you’ll have your public IPs.
Custom VPC Subnet

The VPC feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.

Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications.

A VPC can only be used if it has at least one range of IP addresses called a subnet. When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the Custom VPC Subnet feature on your cluster. For more information on how to set up VPC peering, see our dedicated tutorial.

Network

The Network tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, see our dedicated tutorial.

Performing Actions on your Clusters

Qovery allows you to update, stop, restart or delete your clusters at organization level.

ActionDescription
Updating a clusterTo redeploy your cluster after a change has been made to it.
Stopping a clusterTo temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see Stopping a cluster.
Restarting a clusterTo restart your cluster after it has been temporarily stopped.
Deleting a clusterTo delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see Deleting a cluster.

To access these actions:

  1. Open your Qovery Console.

  2. On the left menu bar, click on the Cluster page:

    Cluster Access

  3. To view your cluster actions, click Play button:

    Cluster Actions Menu

    A dropdown menu unfolds, featuring all the actions available on your cluster.

You can follow the execution of the action via the cluster status and/or by accessing the Cluster Logs

Updating a Cluster

If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration.

To update your cluster, select the action Update from the drop-down menu.

A confirmation pop-up window opens before triggering the action.

Once confirmed, the status of your cluster turns Updating... (orange status).

Once the update is complete, the status dot next to your cluster turns green.

Stopping a Cluster

Qovery allows you to temporarily stop your cluster instead of deleting it.

To temporarily stop a cluster, select the Stop action from the drop-down menu. A confirmation pop-up window opens before triggering the action.

Once confirmed, the status of your cluster turns to Pausing... (orange status).

Once the stop is complete, the status dot next to your cluster turns to grey, and the status of your cluster turns to Paused (gray status).

Restarting a Cluster

You can restart a cluster after it has been temporarily stopped.

To restart your cluster, select the action Resume from the drop-down menu.

A confirmation pop-up window opens before triggering the action.

Once confirmed, the status of your cluster turns to Updating... (orange status).

Once your cluster has restarted, the status dot next to your cluster turns to green.

Deleting a Cluster

To delete a cluster, open the ... section and press Delete Cluster.

3 options can be chosen to delete a cluster:

1) Default @@ -61,7 +61,7 @@ - + @@ -79,7 +79,7 @@ - + diff --git a/docs/using-qovery/configuration/cronjob/index.html b/docs/using-qovery/configuration/cronjob/index.html index 817b17fadd..08db6eb0e0 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 fd09011336..d5bd3e41bc 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 4b64de301a..3c4d6f922c 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 b999c9e0d1..428cb8c73e 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 ca9faf2d3d..c41c4e2b2c 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 3aa43134eb..324374de70 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 2a6322a563..8562c7971a 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 fdc16a02d5..1ce6c516c5 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 fc59702cb3..ff369ccbdb 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 c6f22132a6..94256fbf7f 100644 --- a/docs/using-qovery/configuration/helm/index.html +++ b/docs/using-qovery/configuration/helm/index.html @@ -26,7 +26,7 @@ - + @@ -61,7 +61,7 @@ - + diff --git a/docs/using-qovery/configuration/index.html b/docs/using-qovery/configuration/index.html index 36873e5d26..dbc574f703 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 c70e34cf69..76e1c0c849 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 0b33e4122e..94ec562dc2 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 54216984e0..7dc4d72ef3 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 949df8e588..d82ca8f449 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 c56178dc15..717448cc44 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 ddccaa95dd..5f1635ccb8 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 34968ddaf7..412a77b538 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 95c7251c5d..aea7453777 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 b4f195bbfa..cb22c4de01 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 09bdd8a411..99bdba3991 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/provider/kubernetes/index.html b/docs/using-qovery/configuration/provider/kubernetes/index.html index b1668e53b0..b9b0925ceb 100644 --- a/docs/using-qovery/configuration/provider/kubernetes/index.html +++ b/docs/using-qovery/configuration/provider/kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -63,7 +63,7 @@ - + diff --git a/docs/using-qovery/configuration/service-health-checks/index.html b/docs/using-qovery/configuration/service-health-checks/index.html index 9e7b9605cd..a15f78cb47 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 208065c327..ce91fad6ec 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 fb8192f6f2..1356aa08df 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 @@ - + @@ -55,7 +55,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 a0a7ba4172..f61ebd67b5 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 d05c7bed4c..1df1167958 100644 --- a/docs/using-qovery/deployment/deployment-actions/index.html +++ b/docs/using-qovery/deployment/deployment-actions/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-history/index.html b/docs/using-qovery/deployment/deployment-history/index.html index c306f4dda1..b46ab1bb10 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 61c89dbcf6..b35adbe9c2 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 193c53c298..c0c6927b17 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 10a5674992..ff83afe639 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 72786b3c24..151ee20df4 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 50526ee2dd..3925806ce7 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 b6d83730ae..1ee0c45be4 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 f78b872b9c..91ade37a72 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 0968f77cbf..fcda2c6c7a 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 2c470346d7..6f97e79dd1 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 a1cb954223..9db818158b 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 d9c9436396..41e68520fc 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 ef3006dd10..03164793e3 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 38fe6480e3..2fe864752d 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 16c0dfdd1b..ab3b4e0358 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 7f9f18f926..36a89a9742 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 ac4f2cae08..acd38a8b1e 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 36669360e7..5856838b15 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 39eba9f274..4ab3dcf475 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 a0de241943..bcd0ad06e3 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 4130533fd0..e8428b0842 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 cbc8803b8e..106ce73592 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 95d46bd722..718ce603d7 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 69a06798dd..f74dfbcc6b 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 1922bc0829..c7bfa3d2c1 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 72d806631e..dc1f2f9aa2 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 9de2e00a55..33099bd223 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 099976b8dd..99628c692c 100644 --- a/docs/using-qovery/interface/cli/index.html +++ b/docs/using-qovery/interface/cli/index.html @@ -26,7 +26,7 @@ - + @@ -84,7 +84,7 @@ - + diff --git a/docs/using-qovery/interface/index.html b/docs/using-qovery/interface/index.html index 81644dd9e6..80d2122fa1 100644 --- a/docs/using-qovery/interface/index.html +++ b/docs/using-qovery/interface/index.html @@ -26,7 +26,7 @@ - + @@ -44,7 +44,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -73,7 +73,7 @@ - + diff --git a/docs/using-qovery/interface/rest-api/index.html b/docs/using-qovery/interface/rest-api/index.html index 473b52d622..1a55e81a71 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 629862454a..4883589efb 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 a9bbbf1005..2710af9157 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 734abe2000..d8bfdff06c 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 a333ece9b5..b104c346f0 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 c2ed298b96..1dc59625fa 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 aac29b0570..847c7a2ada 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 5ab93c08d0..047b44341d 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/e7d0ec68.e83bd0dc.js b/e7d0ec68.a84c7d87.js similarity index 98% rename from e7d0ec68.e83bd0dc.js rename to e7d0ec68.a84c7d87.js index 08abeb738e..4d68f34777 100644 --- a/e7d0ec68.e83bd0dc.js +++ b/e7d0ec68.a84c7d87.js @@ -1,2 +1,2 @@ -/*! For license information please see e7d0ec68.e83bd0dc.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[248],{400:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return p}));var r=n(1),a=n(9),o=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-06-05",$schema:"/.meta/.schemas/guides.json",title:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",permalink:"/guides/advanced/deploy-external-services",readingTime:"1 min read",source:"@site/guides/advanced/deploy-external-services.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Deploy External Services",truncated:!1,prevItem:{title:"Deploy AWS Services",permalink:"/guides/advanced/deploy-aws-services"},nextItem:{title:"Deploy Frontend App",permalink:"/guides/advanced/deploy-frontend"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function p(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(o.b)("h2",{id:"qa"},"Q&A"),Object(o.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}p.isMDXComponent=!0},422: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 s=a.a.createContext({}),l=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=l(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=l(n),d=r,m=p["".concat(i,".").concat(d)]||p[d]||f[d]||o;return n?a.a.createElement(m,c({ref:t},s,{components:n})):a.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:a(u,n);s>c;)t[c++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),a=n.n(r),o=n(423);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)}},432:function(e,t,n){"use strict";var r=n(434),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("&"):""}},433:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(422),n(432)),i=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),p=l[0],f=l[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!p&&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 f("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==p&&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"),"."))}},434: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 +/*! For license information please see e7d0ec68.a84c7d87.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[248],{400:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return u})),n.d(t,"rightToc",(function(){return s})),n.d(t,"default",(function(){return p}));var r=n(1),a=n(9),o=(n(0),n(424)),i=(n(433),n(428),n(423)),c={last_modified_on:"2023-12-27",$schema:"/.meta/.schemas/guides.json",title:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",author_github:"https://github.com/evoxmusic",tags:["type: guide","technology: qovery"]},u={categories:[{name:"advanced",title:"Advanced",description:"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.",permalink:"/guides/advanced"}],coverLabel:"Deploy External Services",description:"Learn how to deploy any external services with Qovery",permalink:"/guides/advanced/deploy-external-services",readingTime:"1 min read",source:"@site/guides/advanced/deploy-external-services.md",tags:[{label:"type: guide",permalink:"/guides/tags/type-guide"},{label:"technology: qovery",permalink:"/guides/tags/technology-qovery"}],title:"Deploy External Services",truncated:!1,prevItem:{title:"Deploy AWS Services",permalink:"/guides/advanced/deploy-aws-services"},nextItem:{title:"Deploy Frontend App",permalink:"/guides/advanced/deploy-frontend"}},s=[{value:"Q&A",id:"qa",children:[]}],l={rightToc:s};function p(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(o.b)("wrapper",Object(r.a)({},l,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)(i.a,{type:"warning",mdxType:"Alert"},"WIP"),Object(o.b)("h2",{id:"qa"},"Q&A"),Object(o.b)("p",null,"Do you need more examples? Do you have any questions? Feel free to ask on our ",Object(o.b)("a",Object(r.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"Community forum"),"."))}p.isMDXComponent=!0},422: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 s=a.a.createContext({}),l=function(e){var t=a.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=l(e.components);return a.a.createElement(s.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},d=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),p=l(n),d=r,m=p["".concat(i,".").concat(d)]||p[d]||f[d]||o;return n?a.a.createElement(m,c({ref:t},s,{components:n})):a.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var s=2;s1?arguments[1]:void 0,n),u=i>2?arguments[2]:void 0,s=void 0===u?n:a(u,n);s>c;)t[c++]=e;return t}},427: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""}}})},428:function(e,t,n){"use strict";n(427);var r=n(0),a=n.n(r),o=n(423);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)}},432:function(e,t,n){"use strict";var r=n(434),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("&"):""}},433:function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=(n(422),n(432)),i=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,u={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(u),l=Object(r.useState)(null),p=l[0],f=l[1];return a.a.createElement("div",{className:"steps steps--h"+n},t,!o&&!p&&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 f("yes")}},"Yes"),"\xa0\xa0",a.a.createElement("a",{href:s,target:"_blank",className:"button button--sm button--primary"},"No")),"yes"==p&&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"),"."))}},434: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/e7d0ec68.e83bd0dc.js.LICENSE.txt b/e7d0ec68.a84c7d87.js.LICENSE.txt similarity index 100% rename from e7d0ec68.e83bd0dc.js.LICENSE.txt rename to e7d0ec68.a84c7d87.js.LICENSE.txt diff --git a/files/create_credentials_gcp.sh b/files/create_credentials_gcp.sh new file mode 100644 index 0000000000..5736677dfb --- /dev/null +++ b/files/create_credentials_gcp.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Checking the arguments +if [ "$#" -lt 2 ]; then + echo "Usage: $0 " + exit 1 +fi + +project_name=$1 +service_account_name=$2 + +# List of roles +roles=("roles/artifactregistry.admin" "roles/artifactregistry.writer" "roles/compute.networkAdmin" "roles/iam.serviceAccountCreator" "roles/iam.serviceAccountDeleter" "roles/container.admin" "roles/container.clusterAdmin" "roles/resourcemanager.projectIamAdmin" "roles/artifactregistry.createOnPushRepoAdmin" "roles/iam.serviceAccountAdmin" "roles/iam.serviceAccountUser" "roles/source.admin" "roles/storage.admin") + +# Create the service account +echo "Creating service account: $service_account_name" +gcloud iam service-accounts create $service_account_name --display-name="$service_account_name" --project=$project_name + +# Assign roles to the service account +for role in "${roles[@]}"; do + echo "Assigning role $role to service account $service_account_name" + gcloud projects add-iam-policy-binding $project_name \ + --member="serviceAccount:$service_account_name@$project_name.iam.gserviceaccount.com" \ + --role=$role +done + +# Generate key for the service account +echo "Generating key for the service account" +gcloud iam service-accounts keys create key.json \ + --iam-account="$service_account_name@$project_name.iam.gserviceaccount.com" + +echo "Operations completed. You can now download your json key to upload in Qovery" \ No newline at end of file diff --git a/guides/advanced/continuous-integration/index.html b/guides/advanced/continuous-integration/index.html index cca1e189c0..41d25f03bf 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 959054e5a7..7c67d2103c 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 8e60f61a86..702a0a239d 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 cb376f76ba..e08441a632 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 42ff40ae8b..64b1b6a014 100644 --- a/guides/advanced/deploy-external-services/index.html +++ b/guides/advanced/deploy-external-services/index.html @@ -26,7 +26,7 @@ - + @@ -38,19 +38,19 @@ - +

Deploy External Services

Learn how to deploy any external services with Qovery

Q&A

Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

+
Stats
1 min read
Updated
Contents

Q&A

Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

- + @@ -62,7 +62,7 @@ - + diff --git a/guides/advanced/deploy-frontend/index.html b/guides/advanced/deploy-frontend/index.html index 69c39621dd..96353b6cd1 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 6d7a9c0771..1651ca10b4 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 48021765fa..375993683c 100644 --- a/guides/advanced/index.html +++ b/guides/advanced/index.html @@ -26,7 +26,7 @@ - + @@ -46,7 +46,7 @@ - + @@ -62,7 +62,7 @@ - + @@ -79,7 +79,7 @@ - + @@ -99,7 +99,7 @@ - + @@ -115,7 +115,7 @@ - + diff --git a/guides/advanced/microservices/index.html b/guides/advanced/microservices/index.html index e302632a7d..769ef9bd29 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 581be2bddc..f9482c33dc 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 1c93da0640..fc654dc527 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 d3d053f8e1..c92794209f 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 56f091e25b..37bbb72da0 100644 --- a/guides/advanced/production/index.html +++ b/guides/advanced/production/index.html @@ -26,7 +26,7 @@ - + @@ -38,19 +38,19 @@ - +

Production

Learn how to run your Production with Qovery

Q&A

Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

+
Stats
1 min read
Updated
Contents

Q&A

Do you need more examples? Do you have any questions? Feel free to ask on our Community forum.

- + @@ -62,7 +62,7 @@ - + diff --git a/guides/advanced/seed-database/index.html b/guides/advanced/seed-database/index.html index a63633a646..5215b5c9e4 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 5018ea315d..a1a8679003 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 61a9ed9a4a..28f73af1fb 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/cloud-provider/guide-amazon-web-services/index.html b/guides/cloud-provider/guide-amazon-web-services/index.html index cb61f2b822..af3ec95f27 100644 --- a/guides/cloud-provider/guide-amazon-web-services/index.html +++ b/guides/cloud-provider/guide-amazon-web-services/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/cloud-provider/guide-google-cloud-platform/index.html b/guides/cloud-provider/guide-google-cloud-platform/index.html index 6f0105e643..83d8917aca 100644 --- a/guides/cloud-provider/guide-google-cloud-platform/index.html +++ b/guides/cloud-provider/guide-google-cloud-platform/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/cloud-provider/guide-microsoft-azure/index.html b/guides/cloud-provider/guide-microsoft-azure/index.html index c359f735d9..3e1dae44a0 100644 --- a/guides/cloud-provider/guide-microsoft-azure/index.html +++ b/guides/cloud-provider/guide-microsoft-azure/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/cloud-provider/guide-scaleway/index.html b/guides/cloud-provider/guide-scaleway/index.html index 138edfe4a2..78cb2d1a45 100644 --- a/guides/cloud-provider/guide-scaleway/index.html +++ b/guides/cloud-provider/guide-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/cloud-provider/index.html b/guides/cloud-provider/index.html index 92c4c6e393..7baf793931 100644 --- a/guides/cloud-provider/index.html +++ b/guides/cloud-provider/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/guides/getting-started/create-a-database/index.html b/guides/getting-started/create-a-database/index.html index 7e5a5904a9..c7c9c0a7f6 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 f8de6ff55c..a90eb04198 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 472b143c97..0de69018e4 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 ed5fe852d2..a93411b4f8 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 c7749f3bef..a5fb42e82f 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 51d6716c74..cd99e63df9 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 682e0936ff..b9daabcc69 100644 --- a/guides/index.html +++ b/guides/index.html @@ -26,7 +26,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -148,7 +148,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -227,7 +227,7 @@ - + @@ -303,7 +303,7 @@ - + diff --git a/guides/provider/guide-kubernetes/index.html b/guides/provider/guide-kubernetes/index.html index 85f280fd54..6b559ea89b 100644 --- a/guides/provider/guide-kubernetes/index.html +++ b/guides/provider/guide-kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/provider/index.html b/guides/provider/index.html index f27d1a302c..22c97874ae 100644 --- a/guides/provider/index.html +++ b/guides/provider/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/cloud-provider-aws/index.html b/guides/tags/cloud-provider-aws/index.html index 935484c14b..e18af738e2 100644 --- a/guides/tags/cloud-provider-aws/index.html +++ b/guides/tags/cloud-provider-aws/index.html @@ -26,7 +26,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/guides/tags/cloud-provider-azure/index.html b/guides/tags/cloud-provider-azure/index.html index fd919e7f9a..b103fcfec5 100644 --- a/guides/tags/cloud-provider-azure/index.html +++ b/guides/tags/cloud-provider-azure/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/cloud-provider-gcp/index.html b/guides/tags/cloud-provider-gcp/index.html index 1da7f89acc..dc520d05ce 100644 --- a/guides/tags/cloud-provider-gcp/index.html +++ b/guides/tags/cloud-provider-gcp/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/cloud-provider-scaleway/index.html b/guides/tags/cloud-provider-scaleway/index.html index bcc90e2a72..c1e744c371 100644 --- a/guides/tags/cloud-provider-scaleway/index.html +++ b/guides/tags/cloud-provider-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/database-postgresql/index.html b/guides/tags/database-postgresql/index.html index 18ae703ef5..952fd85745 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 14c7929118..9f82cd070a 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 9ffeaa0b7c..0132b38256 100644 --- a/guides/tags/index.html +++ b/guides/tags/index.html @@ -26,7 +26,7 @@ - + @@ -49,7 +49,7 @@ - + diff --git a/guides/tags/language-javascript/index.html b/guides/tags/language-javascript/index.html index c79131bb01..f5942ddcd9 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 9d574af824..dc2b062fc5 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 800912c490..f691753a5c 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 fc1507b802..f1f5369eff 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/provider-kubernetes/index.html b/guides/tags/provider-kubernetes/index.html index 264bb85cdc..87c2c3225c 100644 --- a/guides/tags/provider-kubernetes/index.html +++ b/guides/tags/provider-kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/technology-docker/index.html b/guides/tags/technology-docker/index.html index 70fd10bf2e..688d9c9065 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 cd70c079e9..3e22039e05 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 783390ef11..20f74c5ffa 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 f2d1bb19cd..9356dbaec9 100644 --- a/guides/tags/technology-qovery/index.html +++ b/guides/tags/technology-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -106,7 +106,7 @@ - + @@ -129,7 +129,7 @@ - + @@ -169,7 +169,7 @@ - + @@ -209,7 +209,7 @@ - + diff --git a/guides/tags/technology-terraform/index.html b/guides/tags/technology-terraform/index.html index 37c1577f4b..1e82237ee0 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 49e95a95bb..ee8d7eaeec 100644 --- a/guides/tags/type-guide/index.html +++ b/guides/tags/type-guide/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -99,7 +99,7 @@ - + @@ -129,7 +129,7 @@ - + @@ -155,7 +155,7 @@ - + diff --git a/guides/tags/type-tutorial/index.html b/guides/tags/type-tutorial/index.html index e89f48e77e..6b1218dd56 100644 --- a/guides/tags/type-tutorial/index.html +++ b/guides/tags/type-tutorial/index.html @@ -26,7 +26,7 @@ - + @@ -131,7 +131,7 @@ - + diff --git a/guides/tutorial/aws-sqs-lambda-with-qovery/index.html b/guides/tutorial/aws-sqs-lambda-with-qovery/index.html index c47fa59729..9722581678 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 e6d47969a3..75a7b1a1aa 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 22325aac5e..289457ace1 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 f2a5812ade..859c421b33 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 6dfa99075f..8e58ced05a 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 9bc81062a3..9ec74c3e3d 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 d8f80f22b7..434c910eae 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 baf0bae448..133dbbe253 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 296094f012..bb4640f49f 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 247a53d257..87ab066e34 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 1cebd91c38..4779c41d20 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 eb1631100a..f9eba02ac7 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 94a87df2a7..1d7d2db514 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 f9a1f1b412..515fa633b5 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 d449c50d19..8ef95d4de0 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 b763a3cada..9c9d819351 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 d4b73828f0..a06a5af0ae 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 3aafbaf0fa..0911316535 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 d3014766cd..62d0d2a9de 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 a9a7248b5c..8adaea93d9 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 4cf27ff971..5548108730 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 6cea54e2a0..503c27515a 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 19b60be010..3eb658bff6 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 c3537b7857..ab867ee37b 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-helm-charts/index.html b/guides/tutorial/how-to-deploy-helm-charts/index.html index c72e013878..526a2a7fbe 100644 --- a/guides/tutorial/how-to-deploy-helm-charts/index.html +++ b/guides/tutorial/how-to-deploy-helm-charts/index.html @@ -26,7 +26,7 @@ - + @@ -54,7 +54,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 3a2afe86bc..620d5b4aff 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 @@ - + @@ -53,7 +53,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 bc1c6cd9b6..48e28c75e2 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 50b2c12e55..0c7d06a7c5 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 0c0277e21b..1831838b0b 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 a929360e4d..f1e2f8c259 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 dc7f1c79c4..03333d0026 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 8835cf5f34..694f76149f 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 c8fa0aa3ba..2cd34405b1 100644 --- a/guides/tutorial/index.html +++ b/guides/tutorial/index.html @@ -26,7 +26,7 @@ - + @@ -131,7 +131,7 @@ - + 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 0fed3fab54..bdbb9f1f24 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 @@ - + @@ -57,7 +57,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 9350564235..5cfd39aa7b 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 136dff166d..805ffc4026 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/setting-up-cloudflare-and-custom-domain-on-qovery/index.html b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html index 739afacb77..931171b2eb 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 a9400a6ccd..3d57418458 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 2a06a1262a..847d596aa6 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 ee27f0a678..eb3fab9650 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 609c4284ff..407365ea3d 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/img/gcp-credentials/gcp_project.png b/img/gcp-credentials/gcp_project.png new file mode 100644 index 0000000000000000000000000000000000000000..d676506f9944b559e8b34cd5242c325a71763fab GIT binary patch literal 47771 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 literal 0 HcmV?d00001 diff --git a/img/gcp-credentials/gcp_shell_1.png b/img/gcp-credentials/gcp_shell_1.png new file mode 100644 index 0000000000000000000000000000000000000000..adbc2085724a25d8cafa86414dbe616d867a00b9 GIT binary patch literal 103102 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 literal 0 HcmV?d00001 diff --git a/img/gcp-credentials/gcp_shell_5.png b/img/gcp-credentials/gcp_shell_5.png new file mode 100644 index 0000000000000000000000000000000000000000..68c05e18d7e507d317b1dbec9a9d6d41d3087222 GIT binary patch literal 34560 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

7#FNDNrjX6k4kkVEQE zym%;Xg|{{T{q@S;TVBhJF5cZp176hQ02Oon8)REucjnl%jL-S)mk0^B)#zETyM z4Xg+$k7k-#Q3uvu=9hLPjlXVu zfJx>{COxdwPNMBr=He?Cz&aT{9odIMF~LNfrlMPm=J}r#@`C4xs&a*X{>(uauV)nZ>Jo!7E@jpj9y5uC#0|w z1)35l&Fct>>8VL%6WEwh|G<^?Dx{6-AX#gFP-9*|yd&{+=QFs!=Yt)sp=xg=p`F-~ z9M`d0{x%gAT-x_ES|*gtr3?@3+nXWqU#CfT8Llz4mr|xom9cLS3GR^j9izrI=PpZW zL)X5cxREuA%0VOK(>!0i=G?eW1MP~A;Zo`er32^MNqZ zf1IDcqn9m6QSCcW=%kw&4|)W>*|4W-#|M5N_#<7QN0aD6ttnpVI!bHIf@;1#s#LHUDRp~q);f+E zFF)hNb2l#A>1)Cpk<_#iIcOp@jaE?{Z$1j(QF0E2&%S;s5X(fq)I-BUSZM1=t7UB> zIw*IWrc{ljam3ib|F}+2XJ!4nX|&l|5?6&}86m0ivs3ep;1C>c>n9dA1snPS?->b@ zEBXOz5zqE}cW7xP)Zsf$%jhk!EjAfnS)DT1h*#}=Ua-zzQ}M|{*Q zss8oyY9h8pyw>YdyI8mFy46qO<6? zBei(9k2cNYWyM&Zu3>btwUqGy`cHW_!?7=ASyQyCP_J*xAqsV#yT#7d|HNeNIb!jcU9qwg-hAh~{2wI14^n$r*# zy@xznzxgZfmZsyfqK5#Rf#eq)WPr*V9o5&-6< z_?%v)e##}-w&CpQeJ1{&PAQN`_(qSJbH+=tZr0?s+u+29*9S2nv^kbCB~;#xSp;kC zf9;M33w!$C3lD`utbhICl7za;R14=xi!n{$o#<=Uu`D|;TJZB?lHzKqN@pUnVfT2T zb?AI^YCpQi%LyaH0xNEmjC)1sb8?puT{BY1!Gaq3^EbiWLnEee_R+>tYlFAZK|<#h z;+>bIrlJ`4osBm%4av@yL$R2v9i=g?@`(L*PrcrgaB~lZQ(Au0u@tbttSOZkvQzP_ z?K?AdpU5aI*TKiQi)XpEeK?GRCe`z5OruZ2{Spk?_OZXdzxB4C6cDE^F}hI@-M{}O zyEIiFb-7*G8obq*iHSh?@SF=|UqhrX|4;p$-2WN||DPfI1-VUdbu#wma4-CIWW>wo La^fY(*YExpymxUF literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 62799ba970..7bbc5747a4 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 72d5a55ce8..e3758ec80f 100644 --- a/mailing_list/index.html +++ b/mailing_list/index.html @@ -22,7 +22,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/runtime~main.703bd2be.js b/runtime~main.3c65e49c.js similarity index 97% rename from runtime~main.703bd2be.js rename to runtime~main.3c65e49c.js index 77af55c6f2..9044e4905f 100644 --- a/runtime~main.703bd2be.js +++ b/runtime~main.3c65e49c.js @@ -1 +1 @@ -!function(e){function d(d){for(var f,a,r=d[0],n=d[1],o=d[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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2023-12-27',$schema:'/.meta/.schemas/guides.json',title:'Deploy External Services',description:'Learn how to deploy any external services with Qovery',author_github:'https://github.com/evoxmusic',tags:['type: guide','technology: qovery']};const metadata={"categories":[{"name":"advanced","title":"Advanced","description":"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.","permalink":"/guides/advanced"}],"coverLabel":"Deploy External Services","description":"Learn how to deploy any external services with Qovery","permalink":"/guides/advanced/deploy-external-services","readingTime":"1 min read","source":"@site/guides/advanced/deploy-external-services.md","tags":[{"label":"type: guide","permalink":"/guides/tags/type-guide"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Deploy External Services","truncated":false,"prevItem":{"title":"Deploy AWS Services","permalink":"/guides/advanced/deploy-aws-services"},"nextItem":{"title":"Deploy Frontend App","permalink":"/guides/advanced/deploy-frontend"}};/* @jsx mdx */const rightToc=[{value:'Q&A',id:'qa',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; /***/ }), /* 251 */ @@ -49479,7 +49479,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(0); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5); -const frontMatter={last_modified_on:'2023-03-17',title:'Interface',description:'Everything you need to know to use Qovery',sidebar_label:'hidden',hide_pagination:true};const metadata={"id":"using-qovery/interface","title":"Interface","description":"Everything you need to know to use Qovery","source":"@site/docs/using-qovery/interface.md","permalink":"/docs/using-qovery/interface","sidebar_label":"hidden","sidebar":"docs","previous":{"title":"Using Qovery","permalink":"/docs/using-qovery"},"next":{"title":"Web interface","permalink":"/docs/using-qovery/interface/web-interface"}};/* @jsx mdx */const rightToc=[];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,`In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/cli/",mdxType:"Jump"},"Cli"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/rest-api/",mdxType:"Jump"},"Rest api"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/terraform-interface/",mdxType:"Jump"},"Terraform interface"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/web-interface/",mdxType:"Jump"},"Web interface"));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2023-12-27',title:'Interface',description:'Everything you need to know to use Qovery',sidebar_label:'hidden',hide_pagination:true};const metadata={"id":"using-qovery/interface","title":"Interface","description":"Everything you need to know to use Qovery","source":"@site/docs/using-qovery/interface.md","permalink":"/docs/using-qovery/interface","sidebar_label":"hidden","sidebar":"docs","previous":{"title":"Using Qovery","permalink":"/docs/using-qovery"},"next":{"title":"Web interface","permalink":"/docs/using-qovery/interface/web-interface"}};/* @jsx mdx */const rightToc=[];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,`In the following subsections, you'll learn how to use the web interface, the CLI (Command Line Interface) and other interfaces to deploy your application with Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/cli/",mdxType:"Jump"},"Cli"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/rest-api/",mdxType:"Jump"},"Rest api"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/terraform-interface/",mdxType:"Jump"},"Terraform interface"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{to:"/docs/using-qovery/interface/web-interface/",mdxType:"Jump"},"Web interface"));};MDXContent.isMDXComponent=true; /***/ }), /* 256 */ @@ -50032,7 +50032,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8); /* 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__(6); -const frontMatter={last_modified_on:'2023-11-28',title:'Amazon Web Services (AWS)',description:'Learn how to configure and plug your Amazon Web Services (AWS) account'};const metadata={"id":"using-qovery/configuration/cloud-service-provider/amazon-web-services","title":"Amazon Web Services (AWS)","description":"Learn how to configure and plug your Amazon Web Services (AWS) account","source":"@site/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services.md","permalink":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services","sidebar":"docs","previous":{"title":"Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider"},"next":{"title":"Google Cloud Platform (GCP)","permalink":"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform"}};/* @jsx mdx */const rightToc=[{value:'Getting started',id:'getting-started',children:[{value:'Connect your AWS account',id:'connect-your-aws-account',children:[]},{value:'Install a new cluster on Qovery',id:'install-a-new-cluster-on-qovery',children:[]},{value:'Deployed AWS components',id:'deployed-aws-components',children:[]},{value:'Remove Qovery from your AWS account',id:'remove-qovery-from-your-aws-account',children:[]},{value:'IAM permissions',id:'iam-permissions',children:[]}]},{value:'Regions',id:'regions',children:[]},{value:'Manually configure VPC subnet',id:'manually-configure-vpc-subnet',children:[]},{value:'Configure routing table',id:'configure-routing-table',children:[]},{value:'How Qovery works on AWS',id:'how-qovery-works-on-aws',children:[{value:'Kubernetes',id:'kubernetes',children:[]},{value:'Managed services',id:'managed-services',children:[]},{value:'Security and compliance',id:'security-and-compliance',children:[]}]},{value:'FAQ',id:'faq',children:[{value:'How to choose a region?',id:'how-to-choose-a-region',children:[]},{value:'I don't find a region that is provided by AWS',id:'i-dont-find-a-region-that-is-provided-by-aws',children:[]},{value:'Migrate between Cloud providers and regions',id:'migrate-between-cloud-providers-and-regions',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_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please refer to `,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/provider/kubernetes/"}),`this page`),` if you want to install Qovery on your own Kubernetes cluster (BYOK).`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery lets you quickly deploy applications to your `,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://aws.amazon.com"}),`Amazon Web Services (AWS)`),` account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your AWS account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"getting-started"},`Getting started`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{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 `,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/interface/"}),`Qovery`),` account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`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:"li"},{"href":"/docs/using-qovery/configuration/organization/"}),`Organization`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have an AWS account`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"connect-your-aws-account"},`Connect your AWS account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To link your AWS account to Qovery you need to provide an AWS `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),` with 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/cloud-service-provider/amazon-web-services/#iam-permissions"}),`required IAM permissions`),`.`),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,`You can link more than one AWS account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers. `,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/"}),`Read more`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"create-your-aws-credentials---access-key-id-and-secret-access-key"},`Create your AWS credentials - `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`access key id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`secret access key`)),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,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://console.aws.amazon.com"}),`Connect to your AWS console`))),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`IAM`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-my-security-credentials.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Admins`),` group `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`without any permissions`)),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,`The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings `,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/cluster-advanced-settings/#iam"}),`aws.iam.admin_group`),` BEFORE launching the cluster installation process`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-group-1.jpg"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-group-2.png"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-group-3.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create one IAM user called `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-1.jpg"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-2.png"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-3.jpg"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-4.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Setup`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",{href:"/files/qovery-iam-aws.json"},` IAM permissions`),` to the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery`),` user.`),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"])("a",{href:"/files/qovery-iam-aws.json"},"Download IAM permissions JSON"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("hr",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Or copy it from below:`),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-json"}),`{ +const frontMatter={last_modified_on:'2023-12-28',title:'Amazon Web Services (AWS)',description:'Learn how to configure and plug your Amazon Web Services (AWS) account'};const metadata={"id":"using-qovery/configuration/cloud-service-provider/amazon-web-services","title":"Amazon Web Services (AWS)","description":"Learn how to configure and plug your Amazon Web Services (AWS) account","source":"@site/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services.md","permalink":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services","sidebar":"docs","previous":{"title":"Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider"},"next":{"title":"Google Cloud Platform (GCP)","permalink":"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform"}};/* @jsx mdx */const rightToc=[{value:'Getting started',id:'getting-started',children:[{value:'Connect your AWS account',id:'connect-your-aws-account',children:[]},{value:'Install a new cluster on Qovery',id:'install-a-new-cluster-on-qovery',children:[]},{value:'Deployed AWS components',id:'deployed-aws-components',children:[]},{value:'Remove Qovery from your AWS account',id:'remove-qovery-from-your-aws-account',children:[]},{value:'IAM permissions',id:'iam-permissions',children:[]}]},{value:'Regions',id:'regions',children:[]},{value:'Manually configure VPC subnet',id:'manually-configure-vpc-subnet',children:[]},{value:'Configure routing table',id:'configure-routing-table',children:[]},{value:'How Qovery works on AWS',id:'how-qovery-works-on-aws',children:[{value:'Kubernetes',id:'kubernetes',children:[]},{value:'Managed services',id:'managed-services',children:[]},{value:'Security and compliance',id:'security-and-compliance',children:[]}]},{value:'FAQ',id:'faq',children:[{value:'How to choose a region?',id:'how-to-choose-a-region',children:[]},{value:'I don't find a region that is provided by AWS',id:'i-dont-find-a-region-that-is-provided-by-aws',children:[]},{value:'Migrate between Cloud providers and regions',id:'migrate-between-cloud-providers-and-regions',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_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please refer to `,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/provider/kubernetes/"}),`this page`),` if you want to install Qovery on your own Kubernetes cluster (BYOK).`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery lets you quickly deploy applications to your `,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://aws.amazon.com"}),`Amazon Web Services (AWS)`),` account. No knowledge needed, and it takes less than 20 minutes to install Qovery on your AWS account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"getting-started"},`Getting started`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{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 account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`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:"li"},{"href":"/docs/using-qovery/configuration/organization/"}),`Organization`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have an AWS account`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"connect-your-aws-account"},`Connect your AWS account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To link your AWS account to Qovery you need to provide an AWS `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),` with 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/cloud-service-provider/amazon-web-services/#iam-permissions"}),`required IAM permissions`),`.`),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,`You can link more than one AWS account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"create-your-aws-credentials---access-key-id-and-secret-access-key"},`Create your AWS credentials - `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`access key id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`secret access key`)),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,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://console.aws.amazon.com"}),`Connect to your AWS console`))),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`IAM`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-my-security-credentials.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Admins`),` group `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`without any permissions`)),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,`The default name required by Qovery is Admins. If you want to use another name, you have to change the cluster advanced settings `,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/cluster-advanced-settings/#iam"}),`aws.iam.admin_group`),` BEFORE launching the cluster installation process`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-group-1.jpg"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-group-2.png"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-group-3.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create one IAM user called `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-1.jpg"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-2.png"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-3.jpg"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/aws/aws-create-user-4.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Setup`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",{href:"/files/qovery-iam-aws.json"},` IAM permissions`),` to the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery`),` user.`),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"])("a",{href:"/files/qovery-iam-aws.json"},"Download IAM permissions JSON"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("hr",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Or copy it from below:`),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-json"}),`{ "Statement": [ { "Action": [ @@ -52402,7 +52402,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3); -const frontMatter={last_modified_on:'2023-06-05',$schema:'/.meta/.schemas/guides.json',title:'Production',description:'Learn how to run your Production with Qovery',author_github:'https://github.com/evoxmusic',tags:['type: guide','technology: qovery']};const metadata={"categories":[{"name":"advanced","title":"Advanced","description":"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.","permalink":"/guides/advanced"}],"coverLabel":"Production","description":"Learn how to run your Production with Qovery","permalink":"/guides/advanced/production","readingTime":"1 min read","source":"@site/guides/advanced/production.md","tags":[{"label":"type: guide","permalink":"/guides/tags/type-guide"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Production","truncated":false,"prevItem":{"title":"Preview Environments","permalink":"/guides/advanced/use-preview-environments"},"nextItem":{"title":"Seed Database","permalink":"/guides/advanced/seed-database"}};/* @jsx mdx */const rightToc=[{value:'Q&A',id:'qa',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2023-12-27',$schema:'/.meta/.schemas/guides.json',title:'Production',description:'Learn how to run your Production with Qovery',author_github:'https://github.com/evoxmusic',tags:['type: guide','technology: qovery']};const metadata={"categories":[{"name":"advanced","title":"Advanced","description":"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.","permalink":"/guides/advanced"}],"coverLabel":"Production","description":"Learn how to run your Production with Qovery","permalink":"/guides/advanced/production","readingTime":"1 min read","source":"@site/guides/advanced/production.md","tags":[{"label":"type: guide","permalink":"/guides/tags/type-guide"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Production","truncated":false,"prevItem":{"title":"Preview Environments","permalink":"/guides/advanced/use-preview-environments"},"nextItem":{"title":"Seed Database","permalink":"/guides/advanced/seed-database"}};/* @jsx mdx */const rightToc=[{value:'Q&A',id:'qa',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; /***/ }), /* 312 */ @@ -53583,7 +53583,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3); -const frontMatter={last_modified_on:'2023-06-05',$schema:'/.meta/.schemas/guides.json',title:'Production',description:'Learn how to run your Production with Qovery',author_github:'https://github.com/evoxmusic',tags:['type: guide','technology: qovery']};const metadata={"categories":[{"name":"advanced","title":"Advanced","description":"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.","permalink":"/guides/advanced"}],"coverLabel":"Production","description":"Learn how to run your Production with Qovery","permalink":"/guides/advanced/production","readingTime":"1 min read","source":"@site/guides/advanced/production.md","tags":[{"label":"type: guide","permalink":"/guides/tags/type-guide"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Production","truncated":false,"prevItem":{"title":"Preview Environments","permalink":"/guides/advanced/use-preview-environments"},"nextItem":{"title":"Seed Database","permalink":"/guides/advanced/seed-database"}};/* @jsx mdx */const rightToc=[{value:'Q&A',id:'qa',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2023-12-27',$schema:'/.meta/.schemas/guides.json',title:'Production',description:'Learn how to run your Production with Qovery',author_github:'https://github.com/evoxmusic',tags:['type: guide','technology: qovery']};const metadata={"categories":[{"name":"advanced","title":"Advanced","description":"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.","permalink":"/guides/advanced"}],"coverLabel":"Production","description":"Learn how to run your Production with Qovery","permalink":"/guides/advanced/production","readingTime":"1 min read","source":"@site/guides/advanced/production.md","tags":[{"label":"type: guide","permalink":"/guides/tags/type-guide"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Production","truncated":false,"prevItem":{"title":"Preview Environments","permalink":"/guides/advanced/use-preview-environments"},"nextItem":{"title":"Seed Database","permalink":"/guides/advanced/seed-database"}};/* @jsx mdx */const rightToc=[{value:'Q&A',id:'qa',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; /***/ }), /* 338 */ @@ -53773,9 +53773,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(0); -/* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3); -/* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5); -const frontMatter={last_modified_on:'2023-11-25',title:'Google Cloud Platform (GCP)',description:'Learn how to configure and plug your Google Cloud Platform (GCP) account'};const metadata={"id":"using-qovery/configuration/cloud-service-provider/google-cloud-platform","title":"Google Cloud Platform (GCP)","description":"Learn how to configure and plug your Google Cloud Platform (GCP) account","source":"@site/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform.md","permalink":"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform","sidebar":"docs","previous":{"title":"Amazon Web Services (AWS)","permalink":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services"},"next":{"title":"Microsoft Azure","permalink":"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"}};/* @jsx mdx */const rightToc=[{value:'Managed Kubernetes by Qovery',id:'managed-kubernetes-by-qovery',children:[]},{value:'Available Cloud Service Providers',id:'available-cloud-service-providers',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_Alert__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please refer to `,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/provider/kubernetes/"}),`this page`),` if you want to install Qovery on your own Kubernetes cluster (BYOK).`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"managed-kubernetes-by-qovery"},`Managed Kubernetes by Qovery`),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":"https://www.qovery.com/blog/early-access-for-google-cloud-platform/"}),`We currently work on supporting Google Cloud Platform (GCP)`),` as a managed Kubernetes provider. Stay tuned!`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Google Cloud Platform is coming soon (`,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://roadmap.qovery.com/roadmap/support-google-cloud-platform-gcp"}),`see when`),`). Vote `,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://roadmap.qovery.com/roadmap/support-google-cloud-platform-gcp"}),`here`),` to make it happen faster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"available-cloud-service-providers"},`Available Cloud Service Providers`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{to:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services",mdxType:"Jump"},"Amazon Web Services (AWS)"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{to:"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform",mdxType:"Jump"},"Google Cloud Platform (GCP)"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{to:"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure",mdxType:"Jump"},"Azure"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{to:"/docs/using-qovery/configuration/cloud-service-provider/scaleway",mdxType:"Jump"},"Scaleway"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{to:"/docs/using-qovery/configuration/cloud-service-provider/other-csps",mdxType:"Jump"},"Others"));};MDXContent.isMDXComponent=true; +/* harmony import */ var _site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8); +/* 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__(6); +const frontMatter={last_modified_on:'2023-12-29',title:'Google Cloud Platform (GCP)',description:'Learn how to configure and plug your Google Cloud Platform (GCP) account'};const metadata={"id":"using-qovery/configuration/cloud-service-provider/google-cloud-platform","title":"Google Cloud Platform (GCP)","description":"Learn how to configure and plug your Google Cloud Platform (GCP) account","source":"@site/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform.md","permalink":"/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform","sidebar":"docs","previous":{"title":"Amazon Web Services (AWS)","permalink":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services"},"next":{"title":"Microsoft Azure","permalink":"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"}};/* @jsx mdx */const rightToc=[{value:'Getting started',id:'getting-started',children:[{value:'Connect your GCP account',id:'connect-your-gcp-account',children:[]},{value:'Install a new cluster on Qovery',id:'install-a-new-cluster-on-qovery',children:[]},{value:'Remove your GCP account',id:'remove-your-gcp-account',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_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please refer to `,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/provider/kubernetes/"}),`this page`),` if you want to install Qovery on your own Kubernetes cluster (BYOK).`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery lets you quickly deploy applications to your `,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://cloud.google.com"}),`GCP (GCP)`),` account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your GCP account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"getting-started"},`Getting started`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{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 account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`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:"li"},{"href":"/docs/using-qovery/configuration/organization/"}),`Organization`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a GCP account`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"connect-your-gcp-account"},`Connect your GCP account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To link your GCP account to Qovery you need to provide a GCP JSON credentials key.`),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,`You can link more than one GCP account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"create-your-gcp-credentials"},`Create your GCP credentials`),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,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://console.cloud.google.com"}),`Connect to your GCP console`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create a new `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Project`),` or open an exiting one`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/gcp-credentials/gcp_project.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open the embedded Google shell`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/gcp-credentials/gcp_shell_1.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Run the following command in the Google Shell to create the service account and generate the json key:`),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-bash"}),`wget https://hub.qovery.com/files/create_credentials_gcp.sh && chmod +x create_credentials_gcp.sh && ./create_credentials_gcp.sh $GOOGLE_CLOUD_PROJECT qovery-service-account +`)),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,`You can modify the service account name by replacing `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`qovery-service-account`),` by the name of your choice.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the script is done. A GCP JSON credentials key has been created and you can download it.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/gcp-credentials/gcp_shell_5.png"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/gcp-credentials/gcp_shell_6.png"})))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Well done!! You now have your GCP `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`JSON credentials key`),`; It is time to connect Qovery to your GCP account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"install-a-new-cluster-on-qovery"},`Install a new cluster on Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. +Follow `,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/clusters/#creating-a-cluster"}),`this documentation`),` to create a new cluster on your organization.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"remove-your-gcp-account"},`Remove your GCP account`),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,`Your applications and your data will be deleted.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To delete Qovery from your GCP account you must be the owner of the Organization and delete the cluster on Qovery side. Follow `,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/clusters/#deleting-a-cluster"}),`this documentation`),` +Once your GCP account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever.`));};MDXContent.isMDXComponent=true; /***/ }), /* 344 */ @@ -56935,8 +56939,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8); /* 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__(6); -const frontMatter={last_modified_on:'2023-12-11',title:'Scaleway (SCW)',description:'Learn how to configure and plug your Scaleway (SCW) account'};const metadata={"id":"using-qovery/configuration/cloud-service-provider/scaleway","title":"Scaleway (SCW)","description":"Learn how to configure and plug your Scaleway (SCW) account","source":"@site/docs/using-qovery/configuration/cloud-service-provider/scaleway.md","permalink":"/docs/using-qovery/configuration/cloud-service-provider/scaleway","sidebar":"docs","previous":{"title":"Microsoft Azure","permalink":"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"},"next":{"title":"Other Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider/other-csps"}};/* @jsx mdx */const rightToc=[{value:'Getting started',id:'getting-started',children:[{value:'Connect your Scaleway account',id:'connect-your-scaleway-account',children:[]},{value:'Install a new cluster on Qovery',id:'install-a-new-cluster-on-qovery',children:[]},{value:'Remove your Scaleway account',id:'remove-your-scaleway-account',children:[]},{value:'Delete Qovery from your Scaleway account',id:'delete-qovery-from-your-scaleway-account',children:[]}]},{value:'Regions',id:'regions',children:[]},{value:'How Qovery works on Scaleway',id:'how-qovery-works-on-scaleway',children:[{value:'Kubernetes',id:'kubernetes',children:[]},{value:'Managed services',id:'managed-services',children:[]},{value:'Security and compliance',id:'security-and-compliance',children:[]}]},{value:'FAQ',id:'faq',children:[{value:'How to choose a region?',id:'how-to-choose-a-region',children:[]},{value:'I don't find a region that is provided by Scaleway',id:'i-dont-find-a-region-that-is-provided-by-scaleway',children:[]},{value:'Migrate between Cloud providers and regions',id:'migrate-between-cloud-providers-and-regions',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_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please refer to `,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/provider/kubernetes/"}),`this page`),` if you want to install Qovery on your own Kubernetes cluster (BYOK).`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery lets you quickly deploy applications to your `,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://www.scaleway.com"}),`Scaleway (Scaleway)`),` account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your Scaleway account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"getting-started"},`Getting started`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{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 `,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/interface/"}),`Qovery`),` account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`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:"li"},{"href":"/docs/using-qovery/configuration/organization/"}),`Organization`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Scaleway account`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"connect-your-scaleway-account"},`Connect your Scaleway account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To link your Scaleway account to Qovery you need to provide a Scaleway `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`organization id`),` and a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`project id`),`.`),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,`If your Scaleway account is new, you need to open a ticket to Scaleway support to unlock your quota. You can post the following message: -"Hello, I am going to deploy my applications on Scaleway with Qovery. Can you increase my quota for current Kubernetes nodes type, to 10 please? Thanks"`)),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,`You can link more than one Scaleway account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers. `,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/"}),`Read more`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"create-your-scaleway-credentials---access-key-id-secret-access-key-organization-id-and-project-id"},`Create your Scaleway credentials - `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`access key id`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`secret access key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`organization id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`project id`),`.`),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,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://console.scaleway.com"}),`Connect to your Scaleway console`))),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`IAM`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_IAM.png"})),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Applications`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_applications.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create a new application for your project`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_app.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Generate your new API key from your application view`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_key_1.png"}),"Set up the the preferred `Project` for `Object Storage` with your Scaleway Project",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_key_2.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Save the generated `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_creds.png"})),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Policies`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_policies.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create a new policy with `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Principal`),` linked to the application you just created.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_policy.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Set the scope of the policy to your project`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_policy_scope.png"})),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 rules for your policy`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Containers permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_containers.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Network Service permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_network.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Compute permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_compute.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Storage permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_storage.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"VPC permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_vpc.png"})))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create your policy`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_apply_policy.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Get your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`organization id`),` in your `,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://console.scaleway.com/organization/settings"}),`organization settings`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_organization_id.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Get your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`project id`),` on your project dashboard`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_project_id.png"})))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Well done!! You now have your Scaleway `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`organization_id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`project id`),`; It is time to connect Qovery to your Scaleway account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"install-a-new-cluster-on-qovery"},`Install a new cluster on Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. +const frontMatter={last_modified_on:'2023-12-28',title:'Scaleway (SCW)',description:'Learn how to configure and plug your Scaleway (SCW) account'};const metadata={"id":"using-qovery/configuration/cloud-service-provider/scaleway","title":"Scaleway (SCW)","description":"Learn how to configure and plug your Scaleway (SCW) account","source":"@site/docs/using-qovery/configuration/cloud-service-provider/scaleway.md","permalink":"/docs/using-qovery/configuration/cloud-service-provider/scaleway","sidebar":"docs","previous":{"title":"Microsoft Azure","permalink":"/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure"},"next":{"title":"Other Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider/other-csps"}};/* @jsx mdx */const rightToc=[{value:'Getting started',id:'getting-started',children:[{value:'Connect your Scaleway account',id:'connect-your-scaleway-account',children:[]},{value:'Install a new cluster on Qovery',id:'install-a-new-cluster-on-qovery',children:[]},{value:'Remove your Scaleway account',id:'remove-your-scaleway-account',children:[]},{value:'Delete Qovery from your Scaleway account',id:'delete-qovery-from-your-scaleway-account',children:[]}]},{value:'Regions',id:'regions',children:[]},{value:'How Qovery works on Scaleway',id:'how-qovery-works-on-scaleway',children:[{value:'Kubernetes',id:'kubernetes',children:[]},{value:'Managed services',id:'managed-services',children:[]},{value:'Security and compliance',id:'security-and-compliance',children:[]}]},{value:'FAQ',id:'faq',children:[{value:'How to choose a region?',id:'how-to-choose-a-region',children:[]},{value:'I don't find a region that is provided by Scaleway',id:'i-dont-find-a-region-that-is-provided-by-scaleway',children:[]},{value:'Migrate between Cloud providers and regions',id:'migrate-between-cloud-providers-and-regions',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_Alert__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please refer to `,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/provider/kubernetes/"}),`this page`),` if you want to install Qovery on your own Kubernetes cluster (BYOK).`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery lets you quickly deploy applications to your `,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://www.scaleway.com"}),`Scaleway (Scaleway)`),` account. No knowledge needed, and it takes less than 10 minutes to install Qovery on your Scaleway account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"getting-started"},`Getting started`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{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 account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`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:"li"},{"href":"/docs/using-qovery/configuration/organization/"}),`Organization`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You have a Scaleway account`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"connect-your-scaleway-account"},`Connect your Scaleway account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To link your Scaleway account to Qovery you need to provide a Scaleway `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`organization id`),` and a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`project id`),`.`),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,`If your Scaleway account is new, you need to open a ticket to Scaleway support to unlock your quota. You can post the following message: +"Hello, I am going to deploy my applications on Scaleway with Qovery. Can you increase my quota for current Kubernetes nodes type, to 10 please? Thanks"`)),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,`You can link more than one Scaleway account. Qovery also support multiple Cloud providers within the same Organization. Meaning, you can balance your workload on different Cloud providers.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"create-your-scaleway-credentials---access-key-id-secret-access-key-organization-id-and-project-id"},`Create your Scaleway credentials - `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`access key id`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`secret access key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`organization id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"h4"},`project id`),`.`),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,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://console.scaleway.com"}),`Connect to your Scaleway console`))),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`IAM`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_IAM.png"})),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Applications`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_applications.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create a new application for your project`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_app.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Generate your new API key from your application view`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_key_1.png"}),"Set up the the preferred `Project` for `Object Storage` with your Scaleway Project",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_key_2.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Save the generated `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_creds.png"})),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 to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Policies`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_policies.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create a new policy with `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Principal`),` linked to the application you just created.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_create_policy.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Set the scope of the policy to your project`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_policy_scope.png"})),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 rules for your policy`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Containers permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_containers.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Network Service permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_network.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Compute permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_compute.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"Storage permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_storage.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,"VPC permissions",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_perms_vpc.png"})))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Create your policy`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_apply_policy.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Get your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`organization id`),` in your `,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://console.scaleway.com/organization/settings"}),`organization settings`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_organization_id.png"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Get your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`project id`),` on your project dashboard`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/scw-api-key/scw_project_id.png"})))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Well done!! You now have your Scaleway `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`access key id`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`secret access key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`organization_id`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`project id`),`; It is time to connect Qovery to your Scaleway account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"install-a-new-cluster-on-qovery"},`Install a new cluster on Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You will be able to use the credentials you just generated when creating a cluster via the Qovery console. This cluster will be linked to your Qovery organization. Follow `,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/clusters/#creating-a-cluster"}),`this documentation`),` to create a new cluster on your organization.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"remove-your-scaleway-account"},`Remove your Scaleway account`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`this section is under development - `,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:"em"},{"href":"https://discord.qovery.com"}),`join us`),` and be part of the first to try it`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"delete-qovery-from-your-scaleway-account"},`Delete Qovery from your Scaleway account`),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,`Your applications and your data will be deleted.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To delete Qovery from your Scaleway account you must be the owner of the Organization. Once your Scaleway account removed from Qovery, everything configured (VPC, Kubernetes, databases, ...) by Qovery will be deleted forever.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"regions"},`Regions`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery supports the following Scalewav regions:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`🇫🇷`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`fr-par-1`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Paris DC1 (France)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`🇫🇷`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`fr-par-2`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Paris DC2 (France)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`🇫🇷`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`fr-par-3`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Paris DC3 (France)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`🇳🇱`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`nl-ams-1`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Amsterdam DC1 (Netherlands)`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`🇵🇱`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`pl-waw-1`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Warsaw DC1 (Poland)`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery supports regions where `,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://www.scaleway.com/en/kubernetes-kapsule/"}),`Scaleway Kubernetes (Kapsule)`),` is supported.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"how-qovery-works-on-scaleway"},`How Qovery works on Scaleway`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery is an abstraction layer on top of Scaleway and Kubernetes. Qovery manages the configuration of Scaleway account, and helps you to deploy production ready apps in seconds. To make it works, Qovery rely on Kubernetes for stateless apps (containers), and Scaleway for stateful apps (databases, storage...).`),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":"/docs/getting-started/how-qovery-works/"}),`Read more`),` on how Qovery works behind the scene.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"kubernetes"},`Kubernetes`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The first time you set up your Scaleway account, Qovery creates a Kubernetes cluster in your chosen region. Qovery managed it for you - no action required. It takes ~15 minutes to configure and bootstrap a Kubernetes cluster. Once bootstrapped, your Kubernetes cluster runs the Qovery app and is ready to deploy your applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"managed-services"},`Managed services`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Scaleway provides managed services for `,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/database/postgresql/"}),`PostgreSQL`),`, `,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/database/mysql/"}),`MySQL`),`, `,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/database/redis/"}),`Redis`),`, `,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/database/mongodb/"}),`MongoDB`),`. Qovery gives you access to those services when you set 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/deployment-rule/#environment-deployment-rules"}),`environment mode`),` to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Production`),`. In `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Development`),` mode, Qovery provides containers equivalent, which is cheaper and faster to start.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"security-and-compliance"},`Security and compliance`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery runs your Kubernetes cluster and is autonomous to manage your applications, which means:`),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 configuration are stored on your Scaleway account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Your configuration is encrypted on your Scaleway account.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Qovery can't access to your data.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Suppose Qovery stops to run, your applications are not impacted.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"faq"},`FAQ`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"how-to-choose-a-region"},`How to choose a region?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Different datacenters are located in different geographic areas, and you may want to keep your site physically close to the bulk of your user base for reduced latency.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"i-dont-find-a-region-that-is-provided-by-scaleway"},`I don't find a region that is provided by Scaleway`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`We are probably testing the support of this region, please `,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://www.qovery.com/contact"}),`contact us`),` to know what's the status`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"migrate-between-cloud-providers-and-regions"},`Migrate between Cloud providers and regions`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Today, you can't migrate an environment from one region to another after it has been created. Vote `,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://roadmap.qovery.com/"}),`here`),` if you need this feature.`));};MDXContent.isMDXComponent=true; @@ -57748,9 +57752,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6); -const frontMatter={last_modified_on:'2023-12-20',title:'Clusters',description:'Learn how to configure your Kubernetes clusters on Qovery'};const metadata={"id":"using-qovery/configuration/clusters","title":"Clusters","description":"Learn how to configure your Kubernetes clusters on Qovery","source":"@site/docs/using-qovery/configuration/clusters.md","permalink":"/docs/using-qovery/configuration/clusters","sidebar":"docs","previous":{"title":"API Token","permalink":"/docs/using-qovery/configuration/organization/api-token"},"next":{"title":"Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider"}};/* @jsx mdx */const rightToc=[{value:'What is a cluster?',id:'what-is-a-cluster',children:[]},{value:'Why do I need a cluster?',id:'why-do-i-need-a-cluster',children:[]},{value:'What are the different instance types available when creating a cluster?',id:'what-are-the-different-instance-types-available-when-creating-a-cluster',children:[]},{value:'How does Qovery handle cluster updates and upgrades?',id:'how-does-qovery-handle-cluster-updates-and-upgrades',children:[]},{value:'What do you do when a vulnerability is found?',id:'what-do-you-do-when-a-vulnerability-is-found',children:[]},{value:'Managing your Clusters with Qovery',id:'managing-your-clusters-with-qovery',children:[{value:'Creating a Cluster',id:'creating-a-cluster',children:[]},{value:'Managing your Cluster Settings',id:'managing-your-cluster-settings',children:[]},{value:'Performing Actions on your Clusters',id:'performing-actions-on-your-clusters',children:[]}]},{value:'Logs',id:'logs',children:[]},{value:'Generating an SSH Key for Your Cluster',id:'generating-an-ssh-key-for-your-cluster',children:[]},{value:'Use custom domain and wildcard TLS for the whole cluster (beta)',id:'use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta',children:[]},{value:'Cleaning up a Cluster from your AWS Account',id:'cleaning-up-a-cluster-from-your-aws-account',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you are looking to install Qovery on your Kubernetes cluster, please refer to `,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/provider/guide-kubernetes/"}),`this guide`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This section brings you answers to all the questions our users usually ask about clusters:`),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"])("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/clusters/#what-is-a-cluster"}),`What is a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#why-do-i-need-a-cluster"}),`Why do I need a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#how-does-qovery-handle-cluster-updates-and-upgrades"}),`How does Qovery handle cluster updates and upgrades?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#creating-a-cluster"}),`How do I set up a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#managing-your-cluster-settings"}),`How do I update my cluster settings?`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"what-is-a-cluster"},`What is a cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At Qovery, when we refer to cluster, we mean `,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://kubernetes.io/"}),`Kubernetes`),` cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications. It is usually made up of:`),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"])("strong",{parentName:"li"},`Pods`),`: think of a pod as one instance of your application. Pods are the smallest deployable objects in Kubernetes, and they are hosted by worker nodes.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Worker Nodes`),`: worker nodes essentially run your applications and workloads. When you create a cluster from your Qovery Console, it generates the set up of worker nodes (also called “instances”, “EC2 instances” for AWS users, or “droplets” for DigitalOcean users). +const frontMatter={last_modified_on:'2023-12-27',title:'Clusters',description:'Learn how to configure your Kubernetes clusters on Qovery'};const metadata={"id":"using-qovery/configuration/clusters","title":"Clusters","description":"Learn how to configure your Kubernetes clusters on Qovery","source":"@site/docs/using-qovery/configuration/clusters.md","permalink":"/docs/using-qovery/configuration/clusters","sidebar":"docs","previous":{"title":"API Token","permalink":"/docs/using-qovery/configuration/organization/api-token"},"next":{"title":"Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider"}};/* @jsx mdx */const rightToc=[{value:'What is a cluster?',id:'what-is-a-cluster',children:[]},{value:'Why do I need a cluster?',id:'why-do-i-need-a-cluster',children:[]},{value:'What are the different instance types available when creating a cluster?',id:'what-are-the-different-instance-types-available-when-creating-a-cluster',children:[]},{value:'How does Qovery handle cluster updates and upgrades?',id:'how-does-qovery-handle-cluster-updates-and-upgrades',children:[]},{value:'What do you do when a vulnerability is found?',id:'what-do-you-do-when-a-vulnerability-is-found',children:[]},{value:'Managing your Clusters with Qovery',id:'managing-your-clusters-with-qovery',children:[{value:'Creating a Cluster',id:'creating-a-cluster',children:[]},{value:'Managing your Cluster Settings',id:'managing-your-cluster-settings',children:[]},{value:'Performing Actions on your Clusters',id:'performing-actions-on-your-clusters',children:[]}]},{value:'Logs',id:'logs',children:[]},{value:'Generating an SSH Key for Your Cluster',id:'generating-an-ssh-key-for-your-cluster',children:[]},{value:'Use custom domain and wildcard TLS for the whole cluster (beta)',id:'use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta',children:[]},{value:'Cleaning up a Cluster from your AWS Account',id:'cleaning-up-a-cluster-from-your-aws-account',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you are looking to install Qovery on your Kubernetes cluster, please refer to `,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/provider/guide-kubernetes/"}),`this guide`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This section brings you answers to all the questions our users usually ask about clusters:`),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"])("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/clusters/#what-is-a-cluster"}),`What is a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#why-do-i-need-a-cluster"}),`Why do I need a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#how-does-qovery-handle-cluster-updates-and-upgrades"}),`How does Qovery handle cluster updates and upgrades?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#creating-a-cluster"}),`How do I set up a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},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/clusters/#managing-your-cluster-settings"}),`How do I update my cluster settings?`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"what-is-a-cluster"},`What is a cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At Qovery, when we refer to cluster, we mean `,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://kubernetes.io/"}),`Kubernetes`),` cluster. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications. It is usually made up of:`),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"])("strong",{parentName:"li"},`Pods`),`: think of a pod as one instance of your application. Pods are the smallest deployable objects in Kubernetes, and they are hosted by worker nodes.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Worker Nodes`),`: worker nodes essentially run your applications and workloads. When you create a cluster from your Qovery Console, it generates the set up of worker nodes (also called “instances”, “EC2 instances” for AWS users, or “droplets” for DigitalOcean users). Qovery allows you to define worker nodes settings, so that you end up deploying the right type of instances on your infrastructure based on your CPU, memory, storage and network performance needs.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Control Plane`),` (or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Master Node`),`): the control plane manages the worker nodes. Since we deploy managed Kubernetes services, the control plane is handled exclusively by your cloud provider, and left untouched by Qovery.`)),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/clusters/cluster-overview.jpg",alt:"Application"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on Kubernetes clusters, 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":"https://kubernetes.io/docs/concepts/overview/components/"}),`the Kubernetes documentation`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"why-do-i-need-a-cluster"},`Why do I need a cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery is built on top of Kubernetes, which means we need Kubernetes clusters to be able to deploy and run your applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Thanks to clusters, you can easily deploy several (and many) instances of the same application, so that if one fails, the others can instantly take over. Also, clusters can auto-scale, meaning that the number of worker nodes in a cluster can automatically go up or down as traffic fluctuates on your application(s), thus ensuring high availability and performance. Clusters are also extremely useful `,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://www.qovery.com/blog/how-to-isolate-your-production-from-staging-with-kubernetes"}),`to isolate your production environment from your staging environment`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In short, through the use of clusters, Kubernetes provides you with a resilient, flexible and powerful infrastructure, fit for production environment needs and requirements. And with the help of Qovery, setting up and maintaining your Kubernetes clusters has never been easier.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to create and manage two types of clusters:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"th"},`Managed K8S `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"th"},` BETA - Single EC2 (K3s)`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Description`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`A multi-node Kubernetes cluster managed by your cloud provider (EKS, Kapsule etc..)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`K3s Cluster running on a single EC2 instance (single-node) `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Available only on AWS and still in BETA`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Usage`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Hosting professional applications in production (resilient, scalable and powerful infrastructure). Scalable staging / preview / dev environments`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Hobby projects, trying out Qovery, ephemeral environments deployment`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Cloud provider cost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Starting from 200$/month, based on the chosen instance type`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`starting from 20$/month, based on the chosen instance type`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Single EC2 (K3s) is still in BETA phase and has the following limitations",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’t access the historical logs and thus you can access your application logs only if it's running (Since we don’t have loki installed)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`No public accessibility for DB container (we do not manage the public DNS entry for db). We will work on it in the upcoming weeks, in the meantime we will write a guide on how to connect to the DB via the ssh key / kubeconf`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can configure only 1 instance per application. Thus you can’t change the number of instances nor activate the sticky session feature`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Stop instance feature not ready YET`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can’t change the cluster settings without a service downtime since we kill the instance and we spawn a new one`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`We do not manage YET the external storage`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`We do not support YET the VPC setting`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`If you want to connect via SSH, you can't get YET the instance hostname directly in the Qovery console, you need to get it from the AWS console`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),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,`K3s clusters are `,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.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones"}),`deployed on one AWS availability zone`),`. Therefore, if a network or power disruption happens on the availability zone where your K3s instance is running, your applications will no longer be available until it is solved.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This is why we do not recommend installing K3s clusters to run professional applications in a production environment.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"what-are-the-different-instance-types-available-when-creating-a-cluster"},`What are the different instance types available when creating a cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The range of instance types available at cluster creation depends on your cloud provider:`),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"},`AWS offers over 400 instance types. You can `,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://aws.amazon.com/ec2/instance-types/"}),`view their details on the official AWS website`),`, as well as `,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://aws.amazon.com/ec2/pricing/on-demand/"}),`their pricing`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Scaleway also offers a wide range of instance types, `,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://www.scaleway.com/en/pricing/"}),`whose details and pricing you can view on the official Scaleway website`),`.`)),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 only instance types having an x86_64 or ARM architecture.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"what-is-the-default-cluster"},`What is the default cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The default cluster is the first cluster you installed in your organization.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`When you create a new environment and leave the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`mode`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`cluster`),` parameters set to the value `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Automatic`),`, your environment is deployed 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"},`the cluster defined in one of `,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/deployment-rule/#environment-deployment-rules"}),`your project rules`),`,`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`or to the default cluster if no project rule applies.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on deployment rules, 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":"/docs/using-qovery/configuration/project/"}),`Project`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"how-does-qovery-handle-cluster-updates-and-upgrades"},`How does Qovery handle cluster updates and upgrades?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`As far as cluster updates and upgrades to a newer version of Kubernetes are concerned, our Qovery engineering team handles everything in due time, so you don’t even need to think about it!`),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,`You may notice that Qovery does not provide you with the latest Kubernetes version offered by your cloud provider. This is due to the high amount of testing we need to perform to ensure smooth upgrades with no interruptions for your applications. Our priority is always to guarantee you maximum uptime.`)),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,`Please `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`DO NOT`),` upgrade the cluster version by yourself from the cloud provider console.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`That's the whole point of Qovery, we manage this task for you so you don't have to bother. -If you did update by mistake, then you need to reach to Qovery team in order to get some help.`),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"},`Proceeding with a cluster version upgrade outside of Qovery will prevent any future update on this cluster`),` and might be irreversible preventing Qovery from properly deploying on this cluster. Most importantly will expose you to some unknown / untested areas which can put your application stability at risks.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Usually, we work on a given upgrade for one month of intensive testing on our end in order to make sure everything will be smooth for you. Once we are pretty confident our stack is stable, we move on with the following steps which last approximately 3 weeks:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Notify users about new version coming in approximatively 1 month before`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade clusters for a handful of beta-tester customers (1 week)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade all non-production flagged clusters (1-2 week(s))`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade all clusters`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If, somehow the planning or timeframe for the upgrade is clashing with your business needs, you will be able to contact us so we can arrange the best timeframe for you.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"what-do-you-do-when-a-vulnerability-is-found"},`What do you do when a vulnerability is found?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Security is our main concern. When a vulnerability is found, here are the actions that we take:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We quickly identify how significant is the impact of the vulnerability.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We look at how we can solve or mitigate the vulnerability.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We transparently communicate with our customers about the vulnerability to help them take the right actions.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"managing-your-clusters-with-qovery"},`Managing your Clusters with Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`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":"https://console.qovery.com"}),`Qovery Console`),`, you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"creating-a-cluster"},`Creating a Cluster`),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,`To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: `,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/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`here for AWS`),`, `,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/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`here for Scaleway`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To create a cluster:`),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,`Open your `,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://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),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/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add 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/configuration/clusters/add-cluster-button.png",alt:"Add Cluster 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,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create Cluster`),` window enter:`),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"])("inlineCode",{parentName:"li"},`Cluster name`),`: enter the name of your choice for your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Description`),`: enter a description to identify better your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Production cluster`),`: select this option if your cluster will be used for production.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cloud provider`),`: select your cloud provider.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Region`),`: select the geographical area in which you want your cluster to be hosted.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Credentials`),`: select one of the existing cloud provider credentials or add a new one by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`New Credentials`),`. In the New credentials window, add the credentials that you have generated on your cloud provider console (`,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/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,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/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`). Added credentials can be used later to create and manage additional cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set Resources`),` window, 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"])("inlineCode",{parentName:"li"},`Cluster`),`: select the cluster type to use. Please refer to this section for `,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/clusters/#why-do-i-need-a-cluster"}),`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"])("inlineCode",{parentName:"li"},`Instance type`),`: select the type of `,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/clusters/#what-is-a-cluster"}),`worker nodes`),` you want to deploy to your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Disk size`),`: select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node auto-scaling`),`: define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please be aware that changing the instance type or disk size might cause a downtime for your service.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, 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":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Also, before downsizing, you need to ensure that your applications will still have enough resources to run correctly.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),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,`At the bottom of the window, you can see an estimate of the cost associated with the selected instance type.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for AWS K8S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` window, select the features you want to enable on your cluster.`),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,`For more information, 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":"/docs/using-qovery/configuration/clusters/#features"}),`Features`),`.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for Single EC2 K3S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set SSH Key`),` window:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, 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":"/docs/using-qovery/configuration/clusters/#generating-an-ssh-key-for-your-cluster"}),`Generating an SSH Key for Your Cluster`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Ready to install your cluster`),` window, check that the services needed to install your cluster are correct.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can now press the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Install`),` button.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Your cluster is now displayed in your organization settings, featuring the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Installing...`),` status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"managing-your-cluster-settings"},`Managing your Cluster Settings`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To manage the settings of an existing cluster:`),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,`Open your `,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://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),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/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access your cluster settings, click on the wheel 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/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Below you can find a description of each section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"general"},`General`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`General`),` tab allows you to define high-level information on your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Item`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Cluster Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To edit the name of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the description of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Production Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the production flag of your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"credentials"},`Credentials`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Here you can manage here the cloud provider credentials associated with your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you need to change the credentials:`),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"},`generate a new set of credentials on your cloud provider(`,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/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,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/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`create the new credential on the Qovery by opening the drop-down and selecting "New Credentials"`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the two dedicated fields, enter the credentials you created on your cloud provider account:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Account Provider`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Field Labels`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`AWS`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Access Key`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Secret Access Key`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Scaleway`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Access Key`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Project ID`))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once created and associated, you need to `,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/clusters/#updating-a-cluster"}),`updating your cluster`),` to apply the change.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"resources"},`Resources`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to modify the resources allocated for your cluster:`),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"},`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Instance type`),` dropdown menu, select the type of `,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/clusters/#what-is-a-cluster"}),`worker node(s)`),` you want to deploy to your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(AWS users only)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node disk size (GB)`),` field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(EKS users only)`),` On the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Nodes auto-scaling`),`, define the range of worker nodes you want to deploy to your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, 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":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),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,`The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please note that a minimum of 3 worker nodes is required to deploy your `,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/clusters/#creating-a-cluster"}),`EKS cluster`),`.`),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":"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),`K3s clusters`),` can only have one node.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"features"},`Features`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` tab in your cluster settings allows you to check if the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC subnet`),` features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"static-ip"},`Static IP`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Here is what will be deployed on AWS:`),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"},`Nat Gateways`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Elastic IPs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Private subnets`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once set up, here is the procedure to find your static IP addresses:`),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"},`On your AWS account, select the VPC service.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On the left menu, you’ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you’ll have your public IPs.`)),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,`If you work in a sensitive business area such as financial technology, enabling the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature can help fulfil the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"custom-vpc-subnet"},`Custom VPC Subnet`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`VPC`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A VPC can only be used if it has at least one range of IP addresses called a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`subnet`),`. When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC Subnet`),` feature on your cluster. For more information on how to set up VPC peering, `,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://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"network"},`Network`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Network`),` tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, `,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://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"performing-actions-on-your-clusters"},`Performing Actions on your Clusters`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to `,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/clusters/#updating-a-cluster"}),`update`),`, `,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/clusters/#stopping-a-cluster"}),`stop`),`, `,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/clusters/#restarting-a-cluster"}),`restart`),` or `,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/clusters/#deleting-a-cluster"}),`delete`),` your clusters at organization level.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Action`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`Updating a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To redeploy your cluster after a change has been made to it.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, 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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),`Restarting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To restart your cluster after it has been temporarily stopped.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, 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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`),`.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access these actions:`),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,`Open your `,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://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),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/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To view your cluster actions, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Play`),` 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/clusters/cluster_actions.png",alt:"Cluster Actions Menu"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A dropdown menu unfolds, featuring all the actions available on your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can follow the execution of the action via the cluster status and/or by accessing 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/clusters/#logs"}),`Cluster Logs`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"updating-a-cluster"},`Updating a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To update your cluster, select the action `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Update`),` from the drop-down menu.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Updating...`),` (orange status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the update is complete, the status dot next to your cluster turns green.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"stopping-a-cluster"},`Stopping a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to temporarily stop your cluster instead of deleting it.`),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,`When you stop a cluster from the Qovery console, only the workers nodes managed by Qovery are stopped. If you have subscribed to services via your cloud provider (load balancing, storage system, or any other managed services), they will remain active and you will be charged for them. +If you did update by mistake, then you need to reach to Qovery team in order to get some help.`),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"},`Proceeding with a cluster version upgrade outside of Qovery will prevent any future update on this cluster`),` and might be irreversible preventing Qovery from properly deploying on this cluster. Most importantly will expose you to some unknown / untested areas which can put your application stability at risks.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Usually, we work on a given upgrade for one month of intensive testing on our end in order to make sure everything will be smooth for you. Once we are pretty confident our stack is stable, we move on with the following steps which last approximately 3 weeks:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Notify users about new version coming in approximatively 1 month before`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade clusters for a handful of beta-tester customers (1 week)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade all non-production flagged clusters (1-2 week(s))`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade all clusters`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If, somehow the planning or timeframe for the upgrade is clashing with your business needs, you will be able to contact us so we can arrange the best timeframe for you.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"what-do-you-do-when-a-vulnerability-is-found"},`What do you do when a vulnerability is found?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Security is our main concern. When a vulnerability is found, here are the actions that we take:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We quickly identify how significant is the impact of the vulnerability.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We look at how we can solve or mitigate the vulnerability.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We transparently communicate with our customers about the vulnerability to help them take the right actions.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"managing-your-clusters-with-qovery"},`Managing your Clusters with Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`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":"https://console.qovery.com"}),`Qovery Console`),`, you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"creating-a-cluster"},`Creating a Cluster`),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,`To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: `,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/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`here for AWS`),`, `,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/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`here for Scaleway`),`, `,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/cloud-service-provider/google-cloud-platform/#connect-your-gcp-account"}),`here for GCP`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To create a cluster:`),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,`Open your `,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://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),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/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add 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/configuration/clusters/add-cluster-button.png",alt:"Add Cluster 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,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create Cluster`),` window enter:`),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"])("inlineCode",{parentName:"li"},`Cluster name`),`: enter the name of your choice for your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Description`),`: enter a description to identify better your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Production cluster`),`: select this option if your cluster will be used for production.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cloud provider`),`: select your cloud provider.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Region`),`: select the geographical area in which you want your cluster to be hosted.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Credentials`),`: select one of the existing cloud provider credentials or add a new one by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`New Credentials`),`. In the New credentials window, add the credentials that you have generated on your cloud provider console (`,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/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,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/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`, `,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/cloud-service-provider/google-cloud-platform/#connect-your-gcp-account"}),`Procedure for GCP account`),`). Added credentials can be used later to create and manage additional cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set Resources`),` window, 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"])("inlineCode",{parentName:"li"},`Cluster`),`: select the cluster type to use. Please refer to this section for `,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/clusters/#why-do-i-need-a-cluster"}),`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"])("inlineCode",{parentName:"li"},`Instance type`),`: select the type of `,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/clusters/#what-is-a-cluster"}),`worker nodes`),` you want to deploy to your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Disk size`),`: select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node auto-scaling`),`: define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please be aware that changing the instance type or disk size might cause a downtime for your service.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, 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":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Also, before downsizing, you need to ensure that your applications will still have enough resources to run correctly.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),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,`At the bottom of the window, you can see an estimate of the cost associated with the selected instance type.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for AWS K8S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` window, select the features you want to enable on your cluster.`),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,`For more information, 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":"/docs/using-qovery/configuration/clusters/#features"}),`Features`),`.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for Single EC2 K3S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set SSH Key`),` window:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, 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":"/docs/using-qovery/configuration/clusters/#generating-an-ssh-key-for-your-cluster"}),`Generating an SSH Key for Your Cluster`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Ready to install your cluster`),` window, check that the services needed to install your cluster are correct.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can now press the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Install`),` button.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Your cluster is now displayed in your organization settings, featuring the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Installing...`),` status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"managing-your-cluster-settings"},`Managing your Cluster Settings`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To manage the settings of an existing cluster:`),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,`Open your `,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://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),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/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access your cluster settings, click on the wheel 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/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Below you can find a description of each section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"general"},`General`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`General`),` tab allows you to define high-level information on your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Item`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Cluster Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To edit the name of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the description of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Production Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the production flag of your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"credentials"},`Credentials`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Here you can manage here the cloud provider credentials associated with your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you need to change the credentials:`),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"},`generate a new set of credentials on your cloud provider(`,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/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,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/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`, `,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/cloud-service-provider/google-cloud-platform/#connect-your-gcp-account"}),`Procedure for GCP account`),`)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`create the new credential on the Qovery by opening the drop-down and selecting "New Credentials"`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the dedicated fields, enter the credentials you created on your cloud provider account:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Account Provider`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Field Labels`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`AWS`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Access Key`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Secret Access Key`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Scaleway`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Access Key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Secret Key`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Project ID`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Organization ID`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`GCP`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`GCP JSON key`))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once created and associated, you need to `,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/clusters/#updating-a-cluster"}),`updating your cluster`),` to apply the change.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"resources"},`Resources`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to modify the resources allocated for your cluster:`),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"},`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Instance type`),` dropdown menu, select the type of `,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/clusters/#what-is-a-cluster"}),`worker node(s)`),` you want to deploy to your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(AWS users only)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node disk size (GB)`),` field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(EKS users only)`),` On the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Nodes auto-scaling`),`, define the range of worker nodes you want to deploy to your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, 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":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),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,`The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please note that a minimum of 3 worker nodes is required to deploy your `,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/clusters/#creating-a-cluster"}),`EKS cluster`),`.`),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":"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),`K3s clusters`),` can only have one node.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"features"},`Features`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` tab in your cluster settings allows you to check if the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC subnet`),` features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"static-ip"},`Static IP`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Here is what will be deployed on AWS:`),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"},`Nat Gateways`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Elastic IPs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Private subnets`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once set up, here is the procedure to find your static IP addresses:`),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"},`On your AWS account, select the VPC service.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On the left menu, you’ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you’ll have your public IPs.`)),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,`If you work in a sensitive business area such as financial technology, enabling the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature can help fulfil the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"custom-vpc-subnet"},`Custom VPC Subnet`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`VPC`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A VPC can only be used if it has at least one range of IP addresses called a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`subnet`),`. When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC Subnet`),` feature on your cluster. For more information on how to set up VPC peering, `,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://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"network"},`Network`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Network`),` tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, `,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://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"performing-actions-on-your-clusters"},`Performing Actions on your Clusters`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to `,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/clusters/#updating-a-cluster"}),`update`),`, `,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/clusters/#stopping-a-cluster"}),`stop`),`, `,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/clusters/#restarting-a-cluster"}),`restart`),` or `,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/clusters/#deleting-a-cluster"}),`delete`),` your clusters at organization level.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Action`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`Updating a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To redeploy your cluster after a change has been made to it.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, 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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),`Restarting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To restart your cluster after it has been temporarily stopped.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, 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:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`),`.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access these actions:`),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,`Open your `,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://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),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/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To view your cluster actions, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Play`),` 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/clusters/cluster_actions.png",alt:"Cluster Actions Menu"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A dropdown menu unfolds, featuring all the actions available on your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can follow the execution of the action via the cluster status and/or by accessing 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/clusters/#logs"}),`Cluster Logs`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"updating-a-cluster"},`Updating a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To update your cluster, select the action `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Update`),` from the drop-down menu.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Updating...`),` (orange status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the update is complete, the status dot next to your cluster turns green.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"stopping-a-cluster"},`Stopping a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to temporarily stop your cluster instead of deleting it.`),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,`When you stop a cluster from the Qovery console, only the workers nodes managed by Qovery are stopped. If you have subscribed to services via your cloud provider (load balancing, storage system, or any other managed services), they will remain active and you will be charged for them. For more information, please contact your cloud provider. To permanently delete a cluster and all its associated costs, 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":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a Cluster`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To temporarily stop a cluster, select the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Stop`),` action from the drop-down menu. A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Pausing...`),` (orange status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the stop is complete, the status dot next to your cluster turns to grey, and the status of your cluster turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Paused`),` (gray status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"restarting-a-cluster"},`Restarting a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can restart a cluster after it has been temporarily stopped.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To restart your cluster, select the action `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Resume`),` from the drop-down menu.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Updating...`),` (orange status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once your cluster has restarted, the status dot next to your cluster turns to green.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deleting-a-cluster"},`Deleting a Cluster`),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,`Deleting a cluster from the Qovery console is final and cannot be reverted.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To only temporarily stop a cluster, 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":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a Cluster`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To delete a cluster, open the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`...`),` section and press `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Delete Cluster`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`3 options can be chosen to delete a cluster:`),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"},` 1) Default `),` @@ -58172,7 +58176,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6); /* harmony import */ var _site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3); -const frontMatter={last_modified_on:'2023-06-05',$schema:'/.meta/.schemas/guides.json',title:'Deploy External Services',description:'Learn how to deploy any external services with Qovery',author_github:'https://github.com/evoxmusic',tags:['type: guide','technology: qovery']};const metadata={"categories":[{"name":"advanced","title":"Advanced","description":"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.","permalink":"/guides/advanced"}],"coverLabel":"Deploy External Services","description":"Learn how to deploy any external services with Qovery","permalink":"/guides/advanced/deploy-external-services","readingTime":"1 min read","source":"@site/guides/advanced/deploy-external-services.md","tags":[{"label":"type: guide","permalink":"/guides/tags/type-guide"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Deploy External Services","truncated":false,"prevItem":{"title":"Deploy AWS Services","permalink":"/guides/advanced/deploy-aws-services"},"nextItem":{"title":"Deploy Frontend App","permalink":"/guides/advanced/deploy-frontend"}};/* @jsx mdx */const rightToc=[{value:'Q&A',id:'qa',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2023-12-27',$schema:'/.meta/.schemas/guides.json',title:'Deploy External Services',description:'Learn how to deploy any external services with Qovery',author_github:'https://github.com/evoxmusic',tags:['type: guide','technology: qovery']};const metadata={"categories":[{"name":"advanced","title":"Advanced","description":"Go beyond the basics, become a Qovery pro, and extract the full potential of Qovery.","permalink":"/guides/advanced"}],"coverLabel":"Deploy External Services","description":"Learn how to deploy any external services with Qovery","permalink":"/guides/advanced/deploy-external-services","readingTime":"1 min read","source":"@site/guides/advanced/deploy-external-services.md","tags":[{"label":"type: guide","permalink":"/guides/tags/type-guide"},{"label":"technology: qovery","permalink":"/guides/tags/technology-qovery"}],"title":"Deploy External Services","truncated":false,"prevItem":{"title":"Deploy AWS Services","permalink":"/guides/advanced/deploy-aws-services"},"nextItem":{"title":"Deploy Frontend App","permalink":"/guides/advanced/deploy-frontend"}};/* @jsx mdx */const rightToc=[{value:'Q&A',id:'qa',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_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"WIP"),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"qa"},`Q&A`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Do you need more examples? Do you have any questions? Feel free to ask on our `,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://discuss.qovery.com/"}),`Community forum`),`.`));};MDXContent.isMDXComponent=true; /***/ }), /* 437 */