diff --git a/404.html b/404.html index 132a5e7616..aabbc1fa7a 100644 --- a/404.html +++ b/404.html @@ -26,7 +26,7 @@ - + @@ -39,7 +39,7 @@ - + diff --git a/6308ca27.b9442df4.js b/6308ca27.b9442df4.js deleted file mode 100644 index 741dfb9149..0000000000 --- a/6308ca27.b9442df4.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 6308ca27.b9442df4.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{268:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return s})),r.d(t,"metadata",(function(){return c})),r.d(t,"rightToc",(function(){return l})),r.d(t,"default",(function(){return m}));var i=r(1),n=r(9),a=(r(0),r(445)),o=(r(453),r(444)),s=(r(449),{last_modified_on:"2024-04-24",title:"Image Mirroring",description:"Learn how images are mirrored within your cloud account"}),c={id:"using-qovery/deployment/image-mirroring",title:"Image Mirroring",description:"Learn how images are mirrored within your cloud account",source:"@site/docs/using-qovery/deployment/image-mirroring.md",permalink:"/docs/using-qovery/deployment/image-mirroring",sidebar:"docs",previous:{title:"Deployment Strategies",permalink:"/docs/using-qovery/deployment/deployment-strategies"},next:{title:"Troubleshoot",permalink:"/docs/using-qovery/troubleshoot"}},l=[{value:"Application built via the Qovery pipeline",id:"application-built-via-the-qovery-pipeline",children:[]},{value:"Application deployed from a container registry",id:"application-deployed-from-a-container-registry",children:[{value:"Why image mirroring is necessary",id:"why-image-mirroring-is-necessary",children:[]},{value:"Why unique image tags are necessary",id:"why-unique-image-tags-are-necessary",children:[]}]}],u={rightToc:l};function m(e){var t=e.components,r=Object(n.a)(e,["components"]);return Object(a.b)("wrapper",Object(i.a)({},u,r,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"When a cluster is deployed on your cloud account, a dedicated image registry is created to serve as a mirroring system. "),Object(a.b)("p",null,"This ",Object(a.b)("inlineCode",{parentName:"p"},"mirroring registry")," is also available within the Qovery interface"),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/mirror-registry.png",alt:"Mirroring Registry"})),Object(a.b)("h1",{id:"how-does-it-work"},"How does it work"),Object(a.b)("p",null,"Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry."),Object(a.b)("h2",{id:"application-built-via-the-qovery-pipeline"},"Application built via the Qovery pipeline"),Object(a.b)("p",null,'Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.'),Object(a.b)("p",null,"Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables). "),Object(a.b)("p",null,"If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster."),Object(a.b)("p",null,"Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image."),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/build-mirror.png",alt:"Mirroring built image"})),Object(a.b)("p",null,"In order to speed up the image build, we are using remote caches (available in AWS, GCP and Scaleway). It will avoid building the image from scratch, only the layers that changed will be built."),Object(a.b)("p",null,"Given this isolation mechanism, if the same application is cloned (via the ",Object(a.b)("a",Object(i.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/#clone-environment"}),"clone")," or ",Object(a.b)("a",Object(i.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/#preview-environment"}),"preview environment")," feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level)."),Object(a.b)("h2",{id:"application-deployed-from-a-container-registry"},"Application deployed from a container registry"),Object(a.b)("p",null,"The Qovery behaviour in this case will depend on the chosen ",Object(a.b)("a",Object(i.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#image-registry"}),"mirroring mode")," within the cluster advanced settings. "),Object(a.b)("p",null,"Two mirroring modes are available when deploying a service from a container registry:"),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"}," Service (Default) ")),Object(a.b)("p",null,'Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.'),Object(a.b)("p",null,"At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists. "),Object(a.b)("p",null,"If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster."),Object(a.b)("p",null,"Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image."),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/image-mirror-service.png",alt:"Mirroring image from registry - Service case"})),Object(a.b)("p",null,"Pro:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Images are automatically deleted when not needede anymore")),Object(a.b)("p",null,"Cons:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"}," Cluster ")),Object(a.b)(o.a,{type:"info",mdxType:"Alert"},Object(a.b)("p",null,"This is not available on Scaleway.")),Object(a.b)("p",null,'Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.'),Object(a.b)("p",null,"At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists. "),Object(a.b)("p",null,"If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster."),Object(a.b)("p",null,"Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1."),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/image-mirror-cluster.png",alt:"Mirroring image from registry - Cluster case"})),Object(a.b)("p",null,"Pro:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.")),Object(a.b)("p",null,"Cons:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings ",Object(a.b)("a",Object(i.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#image-registry"}),"registry.image_retention_time"))),Object(a.b)("h3",{id:"why-image-mirroring-is-necessary"},"Why image mirroring is necessary"),Object(a.b)("p",null,"Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party."),Object(a.b)("p",null,"Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster."),Object(a.b)("h3",{id:"why-unique-image-tags-are-necessary"},"Why unique image tags are necessary"),Object(a.b)("p",null,"When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Mirroring Registry: Qovery\u2019s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application."),Object(a.b)("li",{parentName:"ul"},"Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the \u201cifNotPresent\u201d image pull policy. This policy means that if the image already exists on the Kubernetes node\u2019s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.")),Object(a.b)("p",null,"In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms."))}m.isMDXComponent=!0},443:function(e,t,r){var i;!function(){"use strict";var r={}.hasOwnProperty;function n(){for(var e=[],t=0;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=n.a.createContext({}),u=function(e){var t=n.a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s({},t,{},e)),r},m=function(e){var t=u(e.components);return n.a.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.a.createElement(n.a.Fragment,{},t)}},g=Object(i.forwardRef)((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,o=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),m=u(r),g=i,h=m["".concat(o,".").concat(g)]||m[g]||p[g]||a;return r?n.a.createElement(h,s({ref:t},l,{components:r})):n.a.createElement(h,s({ref:t},l))}));function h(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=g;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var l=2;l1?arguments[1]:void 0,r),c=o>2?arguments[2]:void 0,l=void 0===c?r:n(c,r);l>s;)t[s++]=e;return t}},448:function(e,t,r){var i=r(28).f,n=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in n||r(10)&&i(n,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},449:function(e,t,r){"use strict";r(448);var i=r(0),n=r.n(i),a=r(444);t.a=function(e){var t=e.children,r=e.name;return n.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"},n.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",r||"page"," assumes the following:"),t)}},450:function(e,t,r){"use strict";var i=r(1),n=r(0),a=r.n(n),o=r(39),s=r(454),c=r(20),l=r.n(c);t.a=function(e){var t,r=e.to,c=e.href,u=r||c,m=Object(s.a)(u),p=Object(n.useRef)(!1),g=l.a.canUseIntersectionObserver;return Object(n.useEffect)((function(){return!g&&m&&window.docusaurus.prefetch(u),function(){g&&t&&t.disconnect()}}),[u,g,m]),u&&m?a.a.createElement(o.b,Object(i.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(u),p.current=!0)},innerRef:function(e){var r,i;g&&e&&m&&(r=e,i=function(){window.docusaurus.prefetch(u)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){r===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(r),t.disconnect(),i())}))}))).observe(r))},to:u})):a.a.createElement("a",Object(i.a)({},e,{href:u}))}},453:function(e,t,r){"use strict";var i=r(0),n=r.n(i),a=r(450),o=r(443),s=r.n(o);r(134);t.a=function(e){var t=e.children,r=e.className,i=e.badge,o=e.leftIcon,c=e.rightIcon,l=e.size,u=e.target,m=e.to,p=s()("jump-to","jump-to--"+l,r),g=n.a.createElement("div",{className:"jump-to--inner"},n.a.createElement("div",{className:"jump-to--inner-2"},o&&n.a.createElement("div",{className:"jump-to--left"},n.a.createElement("i",{className:"feather icon-"+o})),n.a.createElement("div",{className:"jump-to--main"},i?n.a.createElement("span",{className:"badge badge--primary badge--right"},i):"",t),n.a.createElement("div",{className:"jump-to--right"},n.a.createElement("i",{className:"feather icon-"+(c||"chevron-right")+" arrow"}))));return u?n.a.createElement("a",{href:m,target:u,className:p},g):n.a.createElement(a.a,{to:m,className:p},g)}},454:function(e,t,r){"use strict";function i(e){return!1===/^(https?:|\/\/)/.test(e)}r.d(t,"a",(function(){return i}))}}]); \ No newline at end of file diff --git a/6308ca27.de381f5f.js b/6308ca27.de381f5f.js new file mode 100644 index 0000000000..feaa91eb4d --- /dev/null +++ b/6308ca27.de381f5f.js @@ -0,0 +1,2 @@ +/*! For license information please see 6308ca27.de381f5f.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{268:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return s})),r.d(t,"metadata",(function(){return c})),r.d(t,"rightToc",(function(){return l})),r.d(t,"default",(function(){return m}));var i=r(1),n=r(9),a=(r(0),r(445)),o=(r(453),r(444)),s=(r(449),{last_modified_on:"2024-06-05",title:"Image Mirroring",description:"Learn how images are mirrored within your cloud account"}),c={id:"using-qovery/deployment/image-mirroring",title:"Image Mirroring",description:"Learn how images are mirrored within your cloud account",source:"@site/docs/using-qovery/deployment/image-mirroring.md",permalink:"/docs/using-qovery/deployment/image-mirroring",sidebar:"docs",previous:{title:"Deployment Strategies",permalink:"/docs/using-qovery/deployment/deployment-strategies"},next:{title:"Troubleshoot",permalink:"/docs/using-qovery/troubleshoot"}},l=[{value:"Application built via the Qovery pipeline",id:"application-built-via-the-qovery-pipeline",children:[]},{value:"Application deployed from a container registry",id:"application-deployed-from-a-container-registry",children:[{value:"Why image mirroring is necessary",id:"why-image-mirroring-is-necessary",children:[]},{value:"Why unique image tags are necessary",id:"why-unique-image-tags-are-necessary",children:[]}]}],u={rightToc:l};function m(e){var t=e.components,r=Object(n.a)(e,["components"]);return Object(a.b)("wrapper",Object(i.a)({},u,r,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"When a cluster is deployed on your cloud account, a dedicated repository (or namespace for Scaleway) is created to serve as a mirroring system in your cloud provider registry. And your cloud provider registry is attached to your cluster in Qovery."),Object(a.b)("p",null,"This ",Object(a.b)("inlineCode",{parentName:"p"},"mirroring repository")," is also available within the Qovery interface"),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/mirror-registry.png",alt:"Mirroring Repository"})),Object(a.b)("h1",{id:"how-does-it-work"},"How does it work"),Object(a.b)("p",null,"Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry."),Object(a.b)("h2",{id:"application-built-via-the-qovery-pipeline"},"Application built via the Qovery pipeline"),Object(a.b)("p",null,'Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.'),Object(a.b)("p",null,"Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables). "),Object(a.b)("p",null,"If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster."),Object(a.b)("p",null,"Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image."),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/build-mirror.png",alt:"Mirroring built image"})),Object(a.b)("p",null,"In order to speed up the image build, we are using remote caches (available in AWS, GCP and Scaleway). It will avoid building the image from scratch, only the layers that changed will be built."),Object(a.b)("p",null,"Given this isolation mechanism, if the same application is cloned (via the ",Object(a.b)("a",Object(i.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/#clone-environment"}),"clone")," or ",Object(a.b)("a",Object(i.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/environment/#preview-environment"}),"preview environment")," feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level)."),Object(a.b)("h2",{id:"application-deployed-from-a-container-registry"},"Application deployed from a container registry"),Object(a.b)("p",null,"The Qovery behaviour in this case will depend on the chosen ",Object(a.b)("a",Object(i.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#image-registry"}),"mirroring mode")," within the cluster advanced settings. "),Object(a.b)("p",null,"Two mirroring modes are available when deploying a service from a container registry:"),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"}," Service (Default) ")),Object(a.b)("p",null,'Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.'),Object(a.b)("p",null,"At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists. "),Object(a.b)("p",null,"If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster."),Object(a.b)("p",null,"Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image."),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/image-mirror-service.png",alt:"Mirroring image from registry - Service case"})),Object(a.b)("p",null,"Pro:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Images are automatically deleted when not needede anymore")),Object(a.b)("p",null,"Cons:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"}," Cluster ")),Object(a.b)(o.a,{type:"info",mdxType:"Alert"},Object(a.b)("p",null,"This is not available on Scaleway.")),Object(a.b)("p",null,'Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.'),Object(a.b)("p",null,"At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists. "),Object(a.b)("p",null,"If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster."),Object(a.b)("p",null,"Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1."),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/deployment/image-mirror-cluster.png",alt:"Mirroring image from registry - Cluster case"})),Object(a.b)("p",null,"Pro:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.")),Object(a.b)("p",null,"Cons:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings ",Object(a.b)("a",Object(i.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cluster-advanced-settings/#image-registry"}),"registry.image_retention_time"))),Object(a.b)("h3",{id:"why-image-mirroring-is-necessary"},"Why image mirroring is necessary"),Object(a.b)("p",null,"Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party."),Object(a.b)("p",null,"Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster."),Object(a.b)("h3",{id:"why-unique-image-tags-are-necessary"},"Why unique image tags are necessary"),Object(a.b)("p",null,"When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Mirroring Registry: Qovery\u2019s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application."),Object(a.b)("li",{parentName:"ul"},"Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the \u201cifNotPresent\u201d image pull policy. This policy means that if the image already exists on the Kubernetes node\u2019s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.")),Object(a.b)("p",null,"In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms."))}m.isMDXComponent=!0},443:function(e,t,r){var i;!function(){"use strict";var r={}.hasOwnProperty;function n(){for(var e=[],t=0;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=n.a.createContext({}),u=function(e){var t=n.a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s({},t,{},e)),r},m=function(e){var t=u(e.components);return n.a.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.a.createElement(n.a.Fragment,{},t)}},g=Object(i.forwardRef)((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,o=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),m=u(r),g=i,d=m["".concat(o,".").concat(g)]||m[g]||p[g]||a;return r?n.a.createElement(d,s({ref:t},l,{components:r})):n.a.createElement(d,s({ref:t},l))}));function d(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=g;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var l=2;l1?arguments[1]:void 0,r),c=o>2?arguments[2]:void 0,l=void 0===c?r:n(c,r);l>s;)t[s++]=e;return t}},448:function(e,t,r){var i=r(28).f,n=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in n||r(10)&&i(n,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},449:function(e,t,r){"use strict";r(448);var i=r(0),n=r.n(i),a=r(444);t.a=function(e){var t=e.children,r=e.name;return n.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"},n.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",r||"page"," assumes the following:"),t)}},450:function(e,t,r){"use strict";var i=r(1),n=r(0),a=r.n(n),o=r(39),s=r(454),c=r(20),l=r.n(c);t.a=function(e){var t,r=e.to,c=e.href,u=r||c,m=Object(s.a)(u),p=Object(n.useRef)(!1),g=l.a.canUseIntersectionObserver;return Object(n.useEffect)((function(){return!g&&m&&window.docusaurus.prefetch(u),function(){g&&t&&t.disconnect()}}),[u,g,m]),u&&m?a.a.createElement(o.b,Object(i.a)({},e,{onMouseEnter:function(){p.current||(window.docusaurus.preload(u),p.current=!0)},innerRef:function(e){var r,i;g&&e&&m&&(r=e,i=function(){window.docusaurus.prefetch(u)},(t=new window.IntersectionObserver((function(e){e.forEach((function(e){r===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(t.unobserve(r),t.disconnect(),i())}))}))).observe(r))},to:u})):a.a.createElement("a",Object(i.a)({},e,{href:u}))}},453:function(e,t,r){"use strict";var i=r(0),n=r.n(i),a=r(450),o=r(443),s=r.n(o);r(134);t.a=function(e){var t=e.children,r=e.className,i=e.badge,o=e.leftIcon,c=e.rightIcon,l=e.size,u=e.target,m=e.to,p=s()("jump-to","jump-to--"+l,r),g=n.a.createElement("div",{className:"jump-to--inner"},n.a.createElement("div",{className:"jump-to--inner-2"},o&&n.a.createElement("div",{className:"jump-to--left"},n.a.createElement("i",{className:"feather icon-"+o})),n.a.createElement("div",{className:"jump-to--main"},i?n.a.createElement("span",{className:"badge badge--primary badge--right"},i):"",t),n.a.createElement("div",{className:"jump-to--right"},n.a.createElement("i",{className:"feather icon-"+(c||"chevron-right")+" arrow"}))));return u?n.a.createElement("a",{href:m,target:u,className:p},g):n.a.createElement(a.a,{to:m,className:p},g)}},454:function(e,t,r){"use strict";function i(e){return!1===/^(https?:|\/\/)/.test(e)}r.d(t,"a",(function(){return i}))}}]); \ No newline at end of file diff --git a/6308ca27.b9442df4.js.LICENSE.txt b/6308ca27.de381f5f.js.LICENSE.txt similarity index 100% rename from 6308ca27.b9442df4.js.LICENSE.txt rename to 6308ca27.de381f5f.js.LICENSE.txt diff --git a/6b0e113a.675bdb0e.js b/6b0e113a.675bdb0e.js deleted file mode 100644 index 47206ea754..0000000000 --- a/6b0e113a.675bdb0e.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 6b0e113a.675bdb0e.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{276:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return l})),n.d(t,"default",(function(){return p}));var r=n(1),i=n(9),a=(n(0),n(445)),o=n(444),c=(n(453),n(449),{last_modified_on:"2023-09-21",title:"Container Registry",description:"Learn how to manage the container registry allowed in your organization"}),s={id:"using-qovery/configuration/organization/container-registry",title:"Container Registry",description:"Learn how to manage the container registry allowed in your organization",source:"@site/docs/using-qovery/configuration/organization/container-registry.md",permalink:"/docs/using-qovery/configuration/organization/container-registry",sidebar:"docs",previous:{title:"Git Repository access",permalink:"/docs/using-qovery/configuration/organization/git-repository-access"},next:{title:"Helm Repository",permalink:"/docs/using-qovery/configuration/organization/helm-repository"}},l=[{value:"Create a Container Registry",id:"create-a-container-registry",children:[]},{value:"Modify or Delete an existing registry",id:"modify-or-delete-an-existing-registry",children:[]}],u={rightToc:l};function p(e){var t=e.components,n=Object(i.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},u,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster."),Object(a.b)("p",null,"You can access this section by opening the Organization Settings -> Container Registries"),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/access_settings.png",alt:"How to access your organization settings"})),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/container_1.png",alt:"Application"})),Object(a.b)(o.a,{type:"info",mdxType:"Alert"},Object(a.b)("p",null,'When accessing the interface for the first time, you will see that a container registry already exist (called "registry-{$UIID}"). This container registry is created by Qovery on your infrastructure and is used to manage the deployment of your applications. You are free to use them to store your applications but you need to retrieve the credentials from your cloud provider console.')),Object(a.b)("h3",{id:"create-a-container-registry"},"Create a Container Registry"),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/container_creation.png",alt:"Application"})),Object(a.b)("p",null,'By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:'),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Registry Name"),Object(a.b)("li",{parentName:"ul"},"Description"),Object(a.b)("li",{parentName:"ul"},"Registry Url: the base url of the registry (example: ",Object(a.b)("a",Object(r.a)({parentName:"li"},{href:"https://docker.io"}),"https://docker.io"),", ",Object(a.b)("a",Object(r.a)({parentName:"li"},{href:"https://public.ecr.aws"}),"https://public.ecr.aws")," etc..)"),Object(a.b)("li",{parentName:"ul"},"Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic."),Object(a.b)("li",{parentName:"ul"},"Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part. ")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Important information"),":"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. ",Object(a.b)("a",Object(r.a)({parentName:"li"},{href:"https://www.docker.com/increase-rate-limits/"}),"See here")," for more details"),Object(a.b)("li",{parentName:"ul"},"If the registry you need is not in the list and it supports the docker login format you can use the \u201cGeneric\u201d registry.")),Object(a.b)("p",null,"Now that you have created the registry, you can start using it in order to ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/application/#deploying-from-a-container-registry"}),"create and deploy a service")," using the images stored within it."),Object(a.b)("h3",{id:"modify-or-delete-an-existing-registry"},"Modify or Delete an existing registry"),Object(a.b)("p",null,'You can modify an existing container registry by clicking on the "Wheel" button next to it\nYou can delete an existing container registry by clicking on the "Trash" button next to it'),Object(a.b)(o.a,{type:"alert",mdxType:"Alert"},Object(a.b)("p",null,"Before deleting it, make sure that there is no application within your organization using an image stored in this registry.")),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/container_edit.png",alt:"Application"})))}p.isMDXComponent=!0},443:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function i(){for(var e=[],t=0;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=i.a.createContext({}),u=function(e){var t=i.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=u(e.components);return i.a.createElement(l.Provider,{value:t},e.children)},g={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},f=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,o=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),p=u(n),f=r,b=p["".concat(o,".").concat(f)]||p[f]||g[f]||a;return n?i.a.createElement(b,c({ref:t},l,{components:n})):i.a.createElement(b,c({ref:t},l))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:r,o[1]=c;for(var l=2;l1?arguments[1]:void 0,n),s=o>2?arguments[2]:void 0,l=void 0===s?n:i(s,n);l>c;)t[c++]=e;return t}},448:function(e,t,n){var r=n(28).f,i=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in i||n(10)&&r(i,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},449:function(e,t,n){"use strict";n(448);var r=n(0),i=n.n(r),a=n(444);t.a=function(e){var t=e.children,n=e.name;return i.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"},i.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},450:function(e,t,n){"use strict";var r=n(1),i=n(0),a=n.n(i),o=n(39),c=n(454),s=n(20),l=n.n(s);t.a=function(e){var t,n=e.to,s=e.href,u=n||s,p=Object(c.a)(u),g=Object(i.useRef)(!1),f=l.a.canUseIntersectionObserver;return Object(i.useEffect)((function(){return!f&&p&&window.docusaurus.prefetch(u),function(){f&&t&&t.disconnect()}}),[u,f,p]),u&&p?a.a.createElement(o.b,Object(r.a)({},e,{onMouseEnter:function(){g.current||(window.docusaurus.preload(u),g.current=!0)},innerRef:function(e){var n,r;f&&e&&p&&(n=e,r=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(),r())}))}))).observe(n))},to:u})):a.a.createElement("a",Object(r.a)({},e,{href:u}))}},453:function(e,t,n){"use strict";var r=n(0),i=n.n(r),a=n(450),o=n(443),c=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.className,r=e.badge,o=e.leftIcon,s=e.rightIcon,l=e.size,u=e.target,p=e.to,g=c()("jump-to","jump-to--"+l,n),f=i.a.createElement("div",{className:"jump-to--inner"},i.a.createElement("div",{className:"jump-to--inner-2"},o&&i.a.createElement("div",{className:"jump-to--left"},i.a.createElement("i",{className:"feather icon-"+o})),i.a.createElement("div",{className:"jump-to--main"},r?i.a.createElement("span",{className:"badge badge--primary badge--right"},r):"",t),i.a.createElement("div",{className:"jump-to--right"},i.a.createElement("i",{className:"feather icon-"+(s||"chevron-right")+" arrow"}))));return u?i.a.createElement("a",{href:p,target:u,className:g},f):i.a.createElement(a.a,{to:p,className:g},f)}},454: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/6b0e113a.afaf0ca3.js b/6b0e113a.afaf0ca3.js new file mode 100644 index 0000000000..aa31fbae81 --- /dev/null +++ b/6b0e113a.afaf0ca3.js @@ -0,0 +1,2 @@ +/*! For license information please see 6b0e113a.afaf0ca3.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{276:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return c})),n.d(t,"metadata",(function(){return s})),n.d(t,"rightToc",(function(){return l})),n.d(t,"default",(function(){return p}));var r=n(1),i=n(9),a=(n(0),n(445)),o=n(444),c=(n(453),n(449),{last_modified_on:"2024-06-04",title:"Container Registry",description:"Learn how to manage the container registry allowed in your organization"}),s={id:"using-qovery/configuration/organization/container-registry",title:"Container Registry",description:"Learn how to manage the container registry allowed in your organization",source:"@site/docs/using-qovery/configuration/organization/container-registry.md",permalink:"/docs/using-qovery/configuration/organization/container-registry",sidebar:"docs",previous:{title:"Git Repository access",permalink:"/docs/using-qovery/configuration/organization/git-repository-access"},next:{title:"Helm Repository",permalink:"/docs/using-qovery/configuration/organization/helm-repository"}},l=[{value:"Create a Container Registry",id:"create-a-container-registry",children:[]},{value:"Modify or Delete an existing registry",id:"modify-or-delete-an-existing-registry",children:[]}],u={rightToc:l};function p(e){var t=e.components,n=Object(i.a)(e,["components"]);return Object(a.b)("wrapper",Object(r.a)({},u,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster."),Object(a.b)("p",null,"You can access this section by opening the Organization Settings -> Container Registries"),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/access_settings.png",alt:"How to access your organization settings"})),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/container_1.png",alt:"Application"})),Object(a.b)("h3",{id:"create-a-container-registry"},"Create a Container Registry"),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/container_creation.png",alt:"Application"})),Object(a.b)("p",null,'By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:'),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Registry Name"),Object(a.b)("li",{parentName:"ul"},"Description"),Object(a.b)("li",{parentName:"ul"},"Registry Url: the base url of the registry (example: ",Object(a.b)("a",Object(r.a)({parentName:"li"},{href:"https://docker.io"}),"https://docker.io"),", ",Object(a.b)("a",Object(r.a)({parentName:"li"},{href:"https://public.ecr.aws"}),"https://public.ecr.aws")," etc..)"),Object(a.b)("li",{parentName:"ul"},"Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic."),Object(a.b)("li",{parentName:"ul"},"Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part. ")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Important information"),":"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. ",Object(a.b)("a",Object(r.a)({parentName:"li"},{href:"https://www.docker.com/increase-rate-limits/"}),"See here")," for more details"),Object(a.b)("li",{parentName:"ul"},"If the registry you need is not in the list and it supports the docker login format you can use the \u201cGeneric\u201d registry.")),Object(a.b)("p",null,"Now that you have created the registry, you can start using it in order to ",Object(a.b)("a",Object(r.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/application/#deploying-from-a-container-registry"}),"create and deploy a service")," using the images stored within it."),Object(a.b)("h3",{id:"modify-or-delete-an-existing-registry"},"Modify or Delete an existing registry"),Object(a.b)("p",null,'You can modify an existing container registry by clicking on the "Wheel" button next to it\nYou can delete an existing container registry by clicking on the "Trash" button next to it'),Object(a.b)(o.a,{type:"alert",mdxType:"Alert"},Object(a.b)("p",null,"Before deleting it, make sure that there is no application within your organization using an image stored in this registry.")),Object(a.b)("p",{align:"center"},Object(a.b)("img",{src:"/img/configuration/organization/container_edit.png",alt:"Application"})))}p.isMDXComponent=!0},443:function(e,t,n){var r;!function(){"use strict";var n={}.hasOwnProperty;function i(){for(var e=[],t=0;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=i.a.createContext({}),u=function(e){var t=i.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):c({},t,{},e)),n},p=function(e){var t=u(e.components);return i.a.createElement(l.Provider,{value:t},e.children)},g={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},f=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,o=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),p=u(n),f=r,b=p["".concat(o,".").concat(f)]||p[f]||g[f]||a;return n?i.a.createElement(b,c({ref:t},l,{components:n})):i.a.createElement(b,c({ref:t},l))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:r,o[1]=c;for(var l=2;l1?arguments[1]:void 0,n),s=o>2?arguments[2]:void 0,l=void 0===s?n:i(s,n);l>c;)t[c++]=e;return t}},448:function(e,t,n){var r=n(28).f,i=Function.prototype,a=/^\s*function ([^ (]*)/;"name"in i||n(10)&&r(i,"name",{configurable:!0,get:function(){try{return(""+this).match(a)[1]}catch(e){return""}}})},449:function(e,t,n){"use strict";n(448);var r=n(0),i=n.n(r),a=n(444);t.a=function(e){var t=e.children,n=e.name;return i.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"},i.a.createElement("p",{class:"text--lg margin-bottom--sm",style:{marginTop:"-0.25em"}},"Before you begin, this ",n||"page"," assumes the following:"),t)}},450:function(e,t,n){"use strict";var r=n(1),i=n(0),a=n.n(i),o=n(39),c=n(454),s=n(20),l=n.n(s);t.a=function(e){var t,n=e.to,s=e.href,u=n||s,p=Object(c.a)(u),g=Object(i.useRef)(!1),f=l.a.canUseIntersectionObserver;return Object(i.useEffect)((function(){return!f&&p&&window.docusaurus.prefetch(u),function(){f&&t&&t.disconnect()}}),[u,f,p]),u&&p?a.a.createElement(o.b,Object(r.a)({},e,{onMouseEnter:function(){g.current||(window.docusaurus.preload(u),g.current=!0)},innerRef:function(e){var n,r;f&&e&&p&&(n=e,r=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(),r())}))}))).observe(n))},to:u})):a.a.createElement("a",Object(r.a)({},e,{href:u}))}},453:function(e,t,n){"use strict";var r=n(0),i=n.n(r),a=n(450),o=n(443),c=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.className,r=e.badge,o=e.leftIcon,s=e.rightIcon,l=e.size,u=e.target,p=e.to,g=c()("jump-to","jump-to--"+l,n),f=i.a.createElement("div",{className:"jump-to--inner"},i.a.createElement("div",{className:"jump-to--inner-2"},o&&i.a.createElement("div",{className:"jump-to--left"},i.a.createElement("i",{className:"feather icon-"+o})),i.a.createElement("div",{className:"jump-to--main"},r?i.a.createElement("span",{className:"badge badge--primary badge--right"},r):"",t),i.a.createElement("div",{className:"jump-to--right"},i.a.createElement("i",{className:"feather icon-"+(s||"chevron-right")+" arrow"}))));return u?i.a.createElement("a",{href:p,target:u,className:g},f):i.a.createElement(a.a,{to:p,className:g},f)}},454: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/6b0e113a.675bdb0e.js.LICENSE.txt b/6b0e113a.afaf0ca3.js.LICENSE.txt similarity index 100% rename from 6b0e113a.675bdb0e.js.LICENSE.txt rename to 6b0e113a.afaf0ca3.js.LICENSE.txt diff --git a/community/index.html b/community/index.html index 028bf3fb6b..0d10171f29 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 9c389114ca..47e8a27cc8 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 b6371e5251..32996097fa 100644 --- a/contact/index.html +++ b/contact/index.html @@ -26,7 +26,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/dc00a797.702bf82e.js b/dc00a797.18376592.js similarity index 98% rename from dc00a797.702bf82e.js rename to dc00a797.18376592.js index 7308706da2..3185ab80b9 100644 --- a/dc00a797.702bf82e.js +++ b/dc00a797.18376592.js @@ -1,2 +1,2 @@ -/*! For license information please see dc00a797.702bf82e.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[253],{405: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(445)),l=n(452),c=(n(453),n(444)),i=(n(449),{last_modified_on:"2024-04-15",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:"Annotations",permalink:"/docs/using-qovery/configuration/organization/labels-annotations"},next:{title:"Cluster Advanced Settings",permalink:"/docs/using-qovery/configuration/cluster-advanced-settings"}},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:"/docs/getting-started/install-qovery/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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),"here for AWS"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),"here for Scaleway"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),"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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),"Procedure for Scaleway account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),"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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),"Procedure for Scaleway account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),"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"),", ",Object(o.b)("strong",{parentName:"p"},"Custom VPC subnet"),", ",Object(o.b)("strong",{parentName:"p"},"Deploy on existing VPC")," 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 GCP with a VPC managed by Qovery 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 ",Object(o.b)("inlineCode",{parentName:"p"},"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,"Here is what will be deployed on ",Object(o.b)("inlineCode",{parentName:"p"},"GCP"),":"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Cloud Nats"),Object(o.b)("li",{parentName:"ul"},"Static IPs"),Object(o.b)("li",{parentName:"ul"},"Routers")),Object(o.b)("p",null,"Once set up, here is the procedure to find your static IP addresses on ",Object(o.b)("inlineCode",{parentName:"p"},"AWS"),":"),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)("p",null,"Once set up, here is the procedure to find your static IP addresses on ",Object(o.b)("inlineCode",{parentName:"p"},"GCP"),":"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"On your GCP account, select the IP addresses service."),Object(o.b)("li",{parentName:"ul"},"In the list you will find your static IP used by your cluster router.")),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)("p",null,"This feature has been activated by default. Since February 1, 2024, AWS charge public IPv4 Addresses. Disabling it may cost you more, depending on the number of nodes in your cluster. Check this ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://aws.amazon.com/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/"}),"link")," for more information.")),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 with a VPC managed by Qovery 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)("h5",{id:"use-existing-vpc"},"Use existing VPC"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"Deploy on existing VPC")," feature is currently only available to clusters deployed on ",Object(o.b)("inlineCode",{parentName:"p"},"AWS")," and ",Object(o.b)("inlineCode",{parentName:"p"},"GCP")," when you select ",Object(o.b)("inlineCode",{parentName:"p"},"Deploy on my existing VPC")," VPC mode and can only be enabled at cluster creation."),Object(o.b)("h5",{id:"use-existing-vpc---aws"},"Use existing VPC - AWS:"),Object(o.b)("p",null,"You have to specify the ",Object(o.b)("inlineCode",{parentName:"p"},"VPC id")," (1) and ensure that in your VPC settings you have enabled the ",Object(o.b)("inlineCode",{parentName:"p"},"DNS hostnames")," (2):"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/existing_vpc_aws_dns_hostnames.png",alt:"Existing VPC AWS DNS Hostnmaes"})),Object(o.b)("p",null,"Then you have to specify the different subnets ids:"),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"EKS"),":"),Object(o.b)("p",null,"The EKS subnets are mandatory, you have to specify at least ",Object(o.b)("strong",{parentName:"p"},"one subnet id per zone")," (1) and ensure you have enabled the ",Object(o.b)("strong",{parentName:"p"},"auto-assign public IPv4 address")," setting on your subnets (2)."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/existing_vpc_aws_auto_assign.png",alt:"Existing VPC AWS DNS Hostnmaes"})),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Managed databases"),":"),Object(o.b)("p",null,"This section is exclusively for enabling managed databases (container databases will be enabled by default)."),Object(o.b)("p",null,"Depending on the managed databases you want to you use (",Object(o.b)("strong",{parentName:"p"},"MongoDB"),", ",Object(o.b)("strong",{parentName:"p"},"RDS:MySQL/PostgreSQL")," and ",Object(o.b)("strong",{parentName:"p"},"Redis"),"), specify at least one subnet id per zone."),Object(o.b)("h5",{id:"use-existing-vpc---gcp"},"Use existing VPC - GCP:"),Object(o.b)("p",null,"In GCP you have two VPC modes: ",Object(o.b)("inlineCode",{parentName:"p"},"Automatic")," or ",Object(o.b)("inlineCode",{parentName:"p"},"Custom"),"."),Object(o.b)("p",null,"If you are using an automatic or a custom VPC, you have to set:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Your VPC Name"),Object(o.b)("li",{parentName:"ul"},"External project id (optional): by default, the project id used is the one specified in the credentials file. But if your VPC is defined in another GCP project, you have to specify the Project id.")),Object(o.b)("p",null,"In addition if you are using a custom VPC, you have to set:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Your Subnet range name (",Object(o.b)("inlineCode",{parentName:"li"},"https://console.cloud.google.com/networking/networks/details/?project=&pageTab=SUBNETS"),")")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You can also specify (optional):"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Pod ipv4 address range name"),Object(o.b)("li",{parentName:"ul"},"Additional cluster pod ipv4 ranges names (separated with a comma)"),Object(o.b)("li",{parentName:"ul"},"Ipv4 service range name")),Object(o.b)("p",null,"For these ranges, you have to create Secondary IPv4 ranges inside your subnet.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please keep in mind that enabling them later may not be possible.")),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"))),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},443: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,m=b["".concat(l,".").concat(d)]||b[d]||p[d]||o;return n?r.a.createElement(m,c({ref:t},s,{components:n})):r.a.createElement(m,c({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,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}},448: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""}}})},449:function(e,t,n){"use strict";n(448);var a=n(0),r=n.n(a),o=n(444);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)}},450:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),l=n(39),c=n(454),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}))}},451:function(e,t,n){"use strict";var a=n(455),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("&"):""}},452:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(443),n(451)),l=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,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"),"."))}},453:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(450),l=n(443),c=n.n(l);n(134);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)}},454:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},455: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 dc00a797.18376592.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[253],{405: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(445)),l=n(452),c=(n(453),n(444)),i=(n(449),{last_modified_on:"2024-06-05",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:"Annotations",permalink:"/docs/using-qovery/configuration/organization/labels-annotations"},next:{title:"Cluster Advanced Settings",permalink:"/docs/using-qovery/configuration/cluster-advanced-settings"}},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:"/docs/getting-started/install-qovery/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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),"here for AWS"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),"here for Scaleway"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),"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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),"Procedure for Scaleway account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),"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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),"Procedure for Scaleway account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),"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:"image-registry"},"Image registry"),Object(o.b)("p",null,"In this tab, you will see that a container registry already exist (called ",Object(o.b)("inlineCode",{parentName:"p"},"registry-{$UIID}"),").\nThis is your cloud provider container registry used by Qovery to manage the deployment of your applications by mirroring the docker images."),Object(o.b)("p",null,"The credentials configured on this registry are the one used to create the cluster. But you can still update them if you prefer to manage them separately (dedicated pair of creds just to access the registry)."),Object(o.b)("p",null,"Check ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/deployment/image-mirroring/"}),"this link")," for more information."),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"),", ",Object(o.b)("strong",{parentName:"p"},"Custom VPC subnet"),", ",Object(o.b)("strong",{parentName:"p"},"Deploy on existing VPC")," 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 GCP with a VPC managed by Qovery 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 ",Object(o.b)("inlineCode",{parentName:"p"},"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,"Here is what will be deployed on ",Object(o.b)("inlineCode",{parentName:"p"},"GCP"),":"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Cloud Nats"),Object(o.b)("li",{parentName:"ul"},"Static IPs"),Object(o.b)("li",{parentName:"ul"},"Routers")),Object(o.b)("p",null,"Once set up, here is the procedure to find your static IP addresses on ",Object(o.b)("inlineCode",{parentName:"p"},"AWS"),":"),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)("p",null,"Once set up, here is the procedure to find your static IP addresses on ",Object(o.b)("inlineCode",{parentName:"p"},"GCP"),":"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"On your GCP account, select the IP addresses service."),Object(o.b)("li",{parentName:"ul"},"In the list you will find your static IP used by your cluster router.")),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)("p",null,"This feature has been activated by default. Since February 1, 2024, AWS charge public IPv4 Addresses. Disabling it may cost you more, depending on the number of nodes in your cluster. Check this ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://aws.amazon.com/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/"}),"link")," for more information.")),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 with a VPC managed by Qovery 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)("h5",{id:"use-existing-vpc"},"Use existing VPC"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"Deploy on existing VPC")," feature is currently only available to clusters deployed on ",Object(o.b)("inlineCode",{parentName:"p"},"AWS")," and ",Object(o.b)("inlineCode",{parentName:"p"},"GCP")," when you select ",Object(o.b)("inlineCode",{parentName:"p"},"Deploy on my existing VPC")," VPC mode and can only be enabled at cluster creation."),Object(o.b)("h5",{id:"use-existing-vpc---aws"},"Use existing VPC - AWS:"),Object(o.b)("p",null,"You have to specify the ",Object(o.b)("inlineCode",{parentName:"p"},"VPC id")," (1) and ensure that in your VPC settings you have enabled the ",Object(o.b)("inlineCode",{parentName:"p"},"DNS hostnames")," (2):"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/existing_vpc_aws_dns_hostnames.png",alt:"Existing VPC AWS DNS Hostnmaes"})),Object(o.b)("p",null,"Then you have to specify the different subnets ids:"),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"EKS"),":"),Object(o.b)("p",null,"The EKS subnets are mandatory, you have to specify at least ",Object(o.b)("strong",{parentName:"p"},"one subnet id per zone")," (1) and ensure you have enabled the ",Object(o.b)("strong",{parentName:"p"},"auto-assign public IPv4 address")," setting on your subnets (2)."),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/existing_vpc_aws_auto_assign.png",alt:"Existing VPC AWS DNS Hostnmaes"})),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Managed databases"),":"),Object(o.b)("p",null,"This section is exclusively for enabling managed databases (container databases will be enabled by default)."),Object(o.b)("p",null,"Depending on the managed databases you want to you use (",Object(o.b)("strong",{parentName:"p"},"MongoDB"),", ",Object(o.b)("strong",{parentName:"p"},"RDS:MySQL/PostgreSQL")," and ",Object(o.b)("strong",{parentName:"p"},"Redis"),"), specify at least one subnet id per zone."),Object(o.b)("h5",{id:"use-existing-vpc---gcp"},"Use existing VPC - GCP:"),Object(o.b)("p",null,"In GCP you have two VPC modes: ",Object(o.b)("inlineCode",{parentName:"p"},"Automatic")," or ",Object(o.b)("inlineCode",{parentName:"p"},"Custom"),"."),Object(o.b)("p",null,"If you are using an automatic or a custom VPC, you have to set:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Your VPC Name"),Object(o.b)("li",{parentName:"ul"},"External project id (optional): by default, the project id used is the one specified in the credentials file. But if your VPC is defined in another GCP project, you have to specify the Project id.")),Object(o.b)("p",null,"In addition if you are using a custom VPC, you have to set:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Your Subnet range name (",Object(o.b)("inlineCode",{parentName:"li"},"https://console.cloud.google.com/networking/networks/details/?project=&pageTab=SUBNETS"),")")),Object(o.b)(c.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"You can also specify (optional):"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Pod ipv4 address range name"),Object(o.b)("li",{parentName:"ul"},"Additional cluster pod ipv4 ranges names (separated with a comma)"),Object(o.b)("li",{parentName:"ul"},"Ipv4 service range name")),Object(o.b)("p",null,"For these ranges, you have to create Secondary IPv4 ranges inside your subnet.")),Object(o.b)(c.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Please keep in mind that enabling them later may not be possible.")),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"))),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},443: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}},448: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""}}})},449:function(e,t,n){"use strict";n(448);var a=n(0),r=n.n(a),o=n(444);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)}},450:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),l=n(39),c=n(454),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}))}},451:function(e,t,n){"use strict";var a=n(455),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("&"):""}},452:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(443),n(451)),l=n.n(o);n(133);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,c="undefined"!=typeof window?window.location:null,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"),"."))}},453:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(450),l=n(443),c=n.n(l);n(134);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)}},454:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},455: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.702bf82e.js.LICENSE.txt b/dc00a797.18376592.js.LICENSE.txt similarity index 100% rename from dc00a797.702bf82e.js.LICENSE.txt rename to dc00a797.18376592.js.LICENSE.txt diff --git a/docs/getting-started/basic-concepts/index.html b/docs/getting-started/basic-concepts/index.html index 83512f6998..b03fb9b979 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 64cc01259d..d6584771c5 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 c0e37ffc76..333fe35f90 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 6e5cd04c4d..8d02baf64a 100644 --- a/docs/getting-started/index.html +++ b/docs/getting-started/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html index f39173dd93..e672e90983 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/create-credentials/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html index 80ab55f2d9..dcd910a996 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/faq/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html index 1bc9356029..f83f0dea19 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html index d0a40b7758..26459e3706 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/infrastructure/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html index 8233127ee9..1bd631fbb2 100644 --- a/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/index.html b/docs/getting-started/install-qovery/aws/index.html index e9fa138038..9b7b4f99b8 100644 --- a/docs/getting-started/install-qovery/aws/index.html +++ b/docs/getting-started/install-qovery/aws/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html b/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html index 38bd66bb20..82301cf81a 100644 --- a/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/aws/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html index 66df356e80..81510560fb 100644 --- a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html index 4f89695ea5..6ad897ceae 100644 --- a/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/azure/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/index.html b/docs/getting-started/install-qovery/azure/index.html index 17272d6350..74df3ae7a2 100644 --- a/docs/getting-started/install-qovery/azure/index.html +++ b/docs/getting-started/install-qovery/azure/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html b/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html index 4933531ca1..3cf0551749 100644 --- a/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/azure/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html index a0fbf9a30a..81aed6cbf2 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/create-credentials/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html index 8268f22fcd..e3a5cd3699 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html index 39375405fe..ef0a73ebe2 100644 --- a/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/index.html b/docs/getting-started/install-qovery/gcp/index.html index f7eaae2f7f..14b3c3719e 100644 --- a/docs/getting-started/install-qovery/gcp/index.html +++ b/docs/getting-started/install-qovery/gcp/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html b/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html index e0fea7ea12..4afe8da205 100644 --- a/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/gcp/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/getting-started/install-qovery/index.html b/docs/getting-started/install-qovery/index.html index ea949102c8..ffa448aacb 100644 --- a/docs/getting-started/install-qovery/index.html +++ b/docs/getting-started/install-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/byok-config/index.html b/docs/getting-started/install-qovery/kubernetes/byok-config/index.html index f42929a226..f6dbfbb602 100644 --- a/docs/getting-started/install-qovery/kubernetes/byok-config/index.html +++ b/docs/getting-started/install-qovery/kubernetes/byok-config/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/faq/index.html b/docs/getting-started/install-qovery/kubernetes/faq/index.html index 48a1dcd6a8..bc2ee8a3f7 100644 --- a/docs/getting-started/install-qovery/kubernetes/faq/index.html +++ b/docs/getting-started/install-qovery/kubernetes/faq/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/index.html b/docs/getting-started/install-qovery/kubernetes/index.html index fa9de52487..d9dd943307 100644 --- a/docs/getting-started/install-qovery/kubernetes/index.html +++ b/docs/getting-started/install-qovery/kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/quickstart/index.html b/docs/getting-started/install-qovery/kubernetes/quickstart/index.html index f5f2e97d6f..f7f3d9f770 100644 --- a/docs/getting-started/install-qovery/kubernetes/quickstart/index.html +++ b/docs/getting-started/install-qovery/kubernetes/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html b/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html index 7ec000f9eb..caa7107a66 100644 --- a/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html +++ b/docs/getting-started/install-qovery/kubernetes/validate-installation/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/getting-started/install-qovery/local/index.html b/docs/getting-started/install-qovery/local/index.html index 6b43dfdf80..8ff372efe5 100644 --- a/docs/getting-started/install-qovery/local/index.html +++ b/docs/getting-started/install-qovery/local/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html index 7889e81859..747d4b74c4 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/create-credentials/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html index bf506829a2..459d4ab1ef 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/faq/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html index da4a644148..5ebc10e8b4 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html index 4a69992f53..3b050cdb16 100644 --- a/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html +++ b/docs/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/index.html b/docs/getting-started/install-qovery/scaleway/index.html index deb27f3e9b..8fd284380d 100644 --- a/docs/getting-started/install-qovery/scaleway/index.html +++ b/docs/getting-started/install-qovery/scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html b/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html index 3c693534b6..cfacd78c32 100644 --- a/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html +++ b/docs/getting-started/install-qovery/scaleway/self-managed-cluster/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/getting-started/what-is-qovery/index.html b/docs/getting-started/what-is-qovery/index.html index 3dead0dabd..ba24c04a63 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 a5ac0fad3a..74a19386b9 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 95d6aa4f70..b1b1ad6726 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 6bb87545d5..df8682fd1b 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 ef33eaff3e..30aba6d025 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 934d903384..fabd20911a 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 ce94e0b9d0..eca455d73f 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 17b6cc4a5e..66afcce525 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 56d638a558..e263c751b8 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 5f73c06352..28812f5d67 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 399d823b34..fc1aea5e00 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 8e5289caf2..2d98258211 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 8db6866e89..97da17746b 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 3537827b20..1f3300624a 100644 --- a/docs/using-qovery/configuration/application/index.html +++ b/docs/using-qovery/configuration/application/index.html @@ -26,7 +26,7 @@ - + @@ -62,7 +62,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/index.html b/docs/using-qovery/configuration/cloud-service-provider/index.html index 8b576feea5..34cb7d568f 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cluster-advanced-settings/index.html b/docs/using-qovery/configuration/cluster-advanced-settings/index.html index e12fbb2a2e..9abcdc0a59 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 0b25a39a12..db74654c0a 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,8 @@

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, 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, Custom VPC subnet, Deploy on existing VPC 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 GCP with a VPC managed by Qovery 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

Here is what will be deployed on GCP:

  • Cloud Nats
  • Static IPs
  • Routers

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

  • 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.

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

  • On your GCP account, select the IP addresses service.
  • In the list you will find your static IP used by your cluster router.
Custom VPC Subnet

The VPC feature is currently only available to clusters deployed on AWS with a VPC managed by Qovery 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.

Use existing VPC

The Deploy on existing VPC feature is currently only available to clusters deployed on AWS and GCP when you select Deploy on my existing VPC VPC mode and can only be enabled at cluster creation.

Use existing VPC - AWS:

You have to specify the VPC id (1) and ensure that in your VPC settings you have enabled the DNS hostnames (2):

Existing VPC AWS DNS Hostnmaes

Then you have to specify the different subnets ids:

EKS:

The EKS subnets are mandatory, you have to specify at least one subnet id per zone (1) and ensure you have enabled the auto-assign public IPv4 address setting on your subnets (2).

Existing VPC AWS DNS Hostnmaes

Managed databases:

This section is exclusively for enabling managed databases (container databases will be enabled by default).

Depending on the managed databases you want to you use (MongoDB, RDS:MySQL/PostgreSQL and Redis), specify at least one subnet id per zone.

Use existing VPC - GCP:

In GCP you have two VPC modes: Automatic or Custom.

If you are using an automatic or a custom VPC, you have to set:

  • Your VPC Name
  • External project id (optional): by default, the project id used is the one specified in the credentials file. But if your VPC is defined in another GCP project, you have to specify the Project id.

In addition if you are using a custom VPC, you have to set:

  • Your Subnet range name (https://console.cloud.google.com/networking/networks/details/<your-vpc>?project=<your-project>&pageTab=SUBNETS)

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.

Image registry

In this tab, you will see that a container registry already exist (called registry-{$UIID}). +This is your cloud provider container registry used by Qovery to manage the deployment of your applications by mirroring the docker images.

The credentials configured on this registry are the one used to create the cluster. But you can still update them if you prefer to manage them separately (dedicated pair of creds just to access the registry).

Check this link for more information.

Features

The Features tab in your cluster settings allows you to check if the Static IP, Custom VPC subnet, Deploy on existing VPC 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 GCP with a VPC managed by Qovery 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

Here is what will be deployed on GCP:

  • Cloud Nats
  • Static IPs
  • Routers

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

  • 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.

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

  • On your GCP account, select the IP addresses service.
  • In the list you will find your static IP used by your cluster router.
Custom VPC Subnet

The VPC feature is currently only available to clusters deployed on AWS with a VPC managed by Qovery 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.

Use existing VPC

The Deploy on existing VPC feature is currently only available to clusters deployed on AWS and GCP when you select Deploy on my existing VPC VPC mode and can only be enabled at cluster creation.

Use existing VPC - AWS:

You have to specify the VPC id (1) and ensure that in your VPC settings you have enabled the DNS hostnames (2):

Existing VPC AWS DNS Hostnmaes

Then you have to specify the different subnets ids:

EKS:

The EKS subnets are mandatory, you have to specify at least one subnet id per zone (1) and ensure you have enabled the auto-assign public IPv4 address setting on your subnets (2).

Existing VPC AWS DNS Hostnmaes

Managed databases:

This section is exclusively for enabling managed databases (container databases will be enabled by default).

Depending on the managed databases you want to you use (MongoDB, RDS:MySQL/PostgreSQL and Redis), specify at least one subnet id per zone.

Use existing VPC - GCP:

In GCP you have two VPC modes: Automatic or Custom.

If you are using an automatic or a custom VPC, you have to set:

  • Your VPC Name
  • External project id (optional): by default, the project id used is the one specified in the credentials file. But if your VPC is defined in another GCP project, you have to specify the Project id.

In addition if you are using a custom VPC, you have to set:

  • Your Subnet range name (https://console.cloud.google.com/networking/networks/details/<your-vpc>?project=<your-project>&pageTab=SUBNETS)

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 +62,7 @@ - + @@ -79,7 +80,7 @@ - + diff --git a/docs/using-qovery/configuration/cronjob/index.html b/docs/using-qovery/configuration/cronjob/index.html index 6af928843b..a6aadcacf5 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 e65f44bbc1..23b3db7adf 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 1e9d89b83c..6bb80eafd1 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 f107f2761d..499d10b993 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 0d4e6cc3d1..ccd7a4746e 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 b6720c3caf..3a431eb559 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 81649cc639..02fc02bcd2 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 1334715f4a..f32ec18762 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 d034d6df86..df6be73d40 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 5820ac91e5..62b980233f 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 45f2075498..c8ce25409e 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 352a037e54..950b708e68 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 d65a8dba34..ada1f19658 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 1880f770e6..228121f8c7 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 ba142b9d3c..69bdb7c77d 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 @@ - + @@ -44,19 +44,19 @@ - +

-

Container Registry

This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster.

You can access this section by opening the Organization Settings -> Container Registries

How to access your organization settings

Application

Create a Container Registry

Application

By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:

  • Registry Name
  • Description
  • Registry Url: the base url of the registry (example: https://docker.io, https://public.ecr.aws etc..)
  • Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic.
  • Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part.

Important information:

  • If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. See here for more details
  • If the registry you need is not in the list and it supports the docker login format you can use the “Generic” registry.

Now that you have created the registry, you can start using it in order to create and deploy a service using the images stored within it.

Modify or Delete an existing registry

You can modify an existing container registry by clicking on the "Wheel" button next to it +

Container Registry

This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster.

You can access this section by opening the Organization Settings -> Container Registries

How to access your organization settings

Application

Create a Container Registry

Application

By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:

  • Registry Name
  • Description
  • Registry Url: the base url of the registry (example: https://docker.io, https://public.ecr.aws etc..)
  • Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic.
  • Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part.

Important information:

  • If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. See here for more details
  • If the registry you need is not in the list and it supports the docker login format you can use the “Generic” registry.

Now that you have created the registry, you can start using it in order to create and deploy a service using the images stored within it.

Modify or Delete an existing registry

You can modify an existing container registry by clicking on the "Wheel" button next to it You can delete an existing container registry by clicking on the "Trash" button next to it

Application

- + @@ -74,7 +74,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 4f3ec12c98..626aad1a4e 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 af14953fcc..7c0bc56e3b 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 324f791875..ed7eba1dec 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/labels-annotations/index.html b/docs/using-qovery/configuration/organization/labels-annotations/index.html index 9e462119c0..9c20149d14 100644 --- a/docs/using-qovery/configuration/organization/labels-annotations/index.html +++ b/docs/using-qovery/configuration/organization/labels-annotations/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 a06f404679..9a56c1b90e 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 d77351b094..bd638bda3e 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 19b314ca21..257fefe7dd 100644 --- a/docs/using-qovery/configuration/provider/index.html +++ b/docs/using-qovery/configuration/provider/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/service-health-checks/index.html b/docs/using-qovery/configuration/service-health-checks/index.html index 8e917b640f..99a3388882 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 31e7226e7f..eb0af55174 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 328d218e6b..f8f6c181f3 100644 --- a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html +++ b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html index 3d53ba129c..bd38b16a9e 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 28dea76723..55c4368cb9 100644 --- a/docs/using-qovery/deployment/deployment-actions/index.html +++ b/docs/using-qovery/deployment/deployment-actions/index.html @@ -26,7 +26,7 @@ - + @@ -61,7 +61,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-history/index.html b/docs/using-qovery/deployment/deployment-history/index.html index dd87d73272..3907965c4e 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 f1ebc5d087..c259a2d25a 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 781b4c8840..82ecdd1aa7 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 75ff907769..9dada87f5d 100644 --- a/docs/using-qovery/deployment/image-mirroring/index.html +++ b/docs/using-qovery/deployment/image-mirroring/index.html @@ -26,7 +26,7 @@ - + @@ -44,18 +44,18 @@ - +
-

Image Mirroring

When a cluster is deployed on your cloud account, a dedicated image registry is created to serve as a mirroring system.

This mirroring registry is also available within the Qovery interface

Mirroring Registry

How does it work

Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.

Application built via the Qovery pipeline

Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.

Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables).

If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

Mirroring built image

In order to speed up the image build, we are using remote caches (available in AWS, GCP and Scaleway). It will avoid building the image from scratch, only the layers that changed will be built.

Given this isolation mechanism, if the same application is cloned (via the clone or preview environment feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).

Application deployed from a container registry

The Qovery behaviour in this case will depend on the chosen mirroring mode within the cluster advanced settings.

Two mirroring modes are available when deploying a service from a container registry:

Service (Default)

Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.

At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists.

If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

Mirroring image from registry - Service case

Pro:

  • Images are automatically deleted when not needede anymore

Cons:

  • If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed

Cluster

Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.

At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists.

If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.

Mirroring image from registry - Cluster case

Pro:

  • If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.

Cons:

  • Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings registry.image_retention_time

Why image mirroring is necessary

Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.

Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.

Why unique image tags are necessary

When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:

  • Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.
  • Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.

In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.

+

Image Mirroring

When a cluster is deployed on your cloud account, a dedicated repository (or namespace for Scaleway) is created to serve as a mirroring system in your cloud provider registry. And your cloud provider registry is attached to your cluster in Qovery.

This mirroring repository is also available within the Qovery interface

Mirroring Repository

How does it work

Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.

Application built via the Qovery pipeline

Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.

Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables).

If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

Mirroring built image

In order to speed up the image build, we are using remote caches (available in AWS, GCP and Scaleway). It will avoid building the image from scratch, only the layers that changed will be built.

Given this isolation mechanism, if the same application is cloned (via the clone or preview environment feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).

Application deployed from a container registry

The Qovery behaviour in this case will depend on the chosen mirroring mode within the cluster advanced settings.

Two mirroring modes are available when deploying a service from a container registry:

Service (Default)

Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.

At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists.

If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.

Mirroring image from registry - Service case

Pro:

  • Images are automatically deleted when not needede anymore

Cons:

  • If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed

Cluster

Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.

At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists.

If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.

Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.

Mirroring image from registry - Cluster case

Pro:

  • If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.

Cons:

  • Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via the cluster advanced settings registry.image_retention_time

Why image mirroring is necessary

Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.

Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.

Why unique image tags are necessary

When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:

  • Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.
  • Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.

In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.

- + @@ -73,7 +73,7 @@ - + diff --git a/docs/using-qovery/deployment/index.html b/docs/using-qovery/deployment/index.html index 7082fbfe19..aaa9824faf 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 0f4cd243fd..2ae3c46b0c 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 edc3e14ffd..358878d5de 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 89f69efe2d..a6f3d9963f 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 b1a9dcceb7..be8c98deac 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 65fc64235c..7a308862c7 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 edb729cca8..9cb4b4c438 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 949e244887..b0be67e590 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 f90ad0e217..29ea06b043 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 867998a06c..1b03432124 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 9bf73ad000..7aba9e7bc6 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 35db0065ed..ef8dc1f816 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 e32e284ecb..932f468f0f 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 771f88f858..f63ee9a076 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 2929cc5541..aa24a6b3a8 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 0abfe94ad2..9890a0caaa 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 4e590f54b9..8b5a044159 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 a27ca3fd46..a94439eaf1 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 03a30f9844..07c429282a 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 ff8c7f2e64..7ee079c2fa 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 a40f8db78f..28839c8d40 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 49fe95597a..9eb51b28ed 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 140efab2d9..16c6abad67 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 ca924a8c43..09eb7db5df 100644 --- a/docs/using-qovery/interface/cli/index.html +++ b/docs/using-qovery/interface/cli/index.html @@ -26,7 +26,7 @@ - + @@ -89,7 +89,7 @@ - + diff --git a/docs/using-qovery/interface/index.html b/docs/using-qovery/interface/index.html index 96e34a50fa..fd2ad85990 100644 --- a/docs/using-qovery/interface/index.html +++ b/docs/using-qovery/interface/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/interface/rest-api/index.html b/docs/using-qovery/interface/rest-api/index.html index 765d9ff084..fb8d7feac3 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 b1a476c3ae..260fa3731c 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 f6cec2087b..366474db97 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 d905effc57..59a847a56d 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 547bfcc77e..ead3ab99bb 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 358adfbd9f..ffcbb6e451 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 74687b9e7f..238d6d6f97 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 a1c88fdec0..e08b0cdafc 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/guides/advanced/continuous-integration/index.html b/guides/advanced/continuous-integration/index.html index 27a7ef67fd..67d85a8828 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 c3132a3662..69a25d23bd 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 bdc038a5f4..9dda629826 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 8b6c8f6a69..102e3a407b 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 ca6568dc31..c9011dcab1 100644 --- a/guides/advanced/deploy-external-services/index.html +++ b/guides/advanced/deploy-external-services/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/deploy-frontend/index.html b/guides/advanced/deploy-frontend/index.html index 8fc235e0ee..34caecea9d 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 648e5a98d6..4b45cb4db9 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 ff77e064b9..84e91b067c 100644 --- a/guides/advanced/index.html +++ b/guides/advanced/index.html @@ -26,7 +26,7 @@ - + @@ -79,7 +79,7 @@ - + diff --git a/guides/advanced/microservices/index.html b/guides/advanced/microservices/index.html index d4d267e104..5e99648c16 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 352d736481..d719a8f609 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 535d67dfe4..072ebfd01e 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 236680be6e..b500c534b0 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 57ebf4a71a..fa347a15ae 100644 --- a/guides/advanced/production/index.html +++ b/guides/advanced/production/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/seed-database/index.html b/guides/advanced/seed-database/index.html index 03827acb1b..b74fb845b1 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 769d068c4b..e778b55e1b 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 4ffe461f62..8f742f325b 100644 --- a/guides/advanced/use-preview-environments/index.html +++ b/guides/advanced/use-preview-environments/index.html @@ -26,7 +26,7 @@ - + @@ -52,7 +52,7 @@ - + diff --git a/guides/getting-started/create-a-database/index.html b/guides/getting-started/create-a-database/index.html index 9021da17e4..d1c9cdd24c 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 2744bb2236..0705255e10 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 02c73c47ea..fcf2d09940 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 c58d8c0d4a..793cdbd80e 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 ae7689ce09..6e49e72981 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 0c28be82be..e385782430 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 398a4b6d0b..b6d5b4271e 100644 --- a/guides/index.html +++ b/guides/index.html @@ -26,7 +26,7 @@ - + @@ -181,7 +181,7 @@ - + diff --git a/guides/installation-guide/guide-amazon-web-services/index.html b/guides/installation-guide/guide-amazon-web-services/index.html index 0323c8b9c0..19424b5e14 100644 --- a/guides/installation-guide/guide-amazon-web-services/index.html +++ b/guides/installation-guide/guide-amazon-web-services/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-google-cloud-platform/index.html b/guides/installation-guide/guide-google-cloud-platform/index.html index 96669d4020..0b4d47e7ea 100644 --- a/guides/installation-guide/guide-google-cloud-platform/index.html +++ b/guides/installation-guide/guide-google-cloud-platform/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-kubernetes/index.html b/guides/installation-guide/guide-kubernetes/index.html index eb17a6687a..8efd641759 100644 --- a/guides/installation-guide/guide-kubernetes/index.html +++ b/guides/installation-guide/guide-kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-microsoft-azure/index.html b/guides/installation-guide/guide-microsoft-azure/index.html index 1f6c84c7ae..45bc895e45 100644 --- a/guides/installation-guide/guide-microsoft-azure/index.html +++ b/guides/installation-guide/guide-microsoft-azure/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/guide-scaleway/index.html b/guides/installation-guide/guide-scaleway/index.html index 2ac5c5d6b8..c406d77096 100644 --- a/guides/installation-guide/guide-scaleway/index.html +++ b/guides/installation-guide/guide-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/installation-guide/index.html b/guides/installation-guide/index.html index 75916446ad..36ec78c4ef 100644 --- a/guides/installation-guide/index.html +++ b/guides/installation-guide/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/guides/tags/database-postgresql/index.html b/guides/tags/database-postgresql/index.html index 469e2b2170..007e483fd4 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 a510b99ba2..638173bfca 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 508f3e312e..9ffa6895a6 100644 --- a/guides/tags/index.html +++ b/guides/tags/index.html @@ -26,7 +26,7 @@ - + @@ -49,7 +49,7 @@ - + diff --git a/guides/tags/installation-guide-aws/index.html b/guides/tags/installation-guide-aws/index.html index 1581964138..2f05a89e48 100644 --- a/guides/tags/installation-guide-aws/index.html +++ b/guides/tags/installation-guide-aws/index.html @@ -26,7 +26,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/guides/tags/installation-guide-azure/index.html b/guides/tags/installation-guide-azure/index.html index ce9afc6655..0c79c2f676 100644 --- a/guides/tags/installation-guide-azure/index.html +++ b/guides/tags/installation-guide-azure/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/installation-guide-gcp/index.html b/guides/tags/installation-guide-gcp/index.html index 29c1ed34f5..75c698ab87 100644 --- a/guides/tags/installation-guide-gcp/index.html +++ b/guides/tags/installation-guide-gcp/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/installation-guide-kubernetes/index.html b/guides/tags/installation-guide-kubernetes/index.html index ac3431bc31..3f6bd9234a 100644 --- a/guides/tags/installation-guide-kubernetes/index.html +++ b/guides/tags/installation-guide-kubernetes/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/installation-guide-scaleway/index.html b/guides/tags/installation-guide-scaleway/index.html index dfb2984bc8..395f418cdc 100644 --- a/guides/tags/installation-guide-scaleway/index.html +++ b/guides/tags/installation-guide-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/language-javascript/index.html b/guides/tags/language-javascript/index.html index a53df16fb0..b4d07459b3 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 2b923a9802..8972d14179 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 9439d52f6e..e277499e24 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 a5ac0957d0..d8c2201122 100644 --- a/guides/tags/language-rust/index.html +++ b/guides/tags/language-rust/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tags/technology-docker/index.html b/guides/tags/technology-docker/index.html index bf064d0d16..1df838af88 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 a55879eb92..8ec564c141 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 1955c0e4d7..a6a0909fd6 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 3d82d92ea2..0582b5f91e 100644 --- a/guides/tags/technology-qovery/index.html +++ b/guides/tags/technology-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -129,7 +129,7 @@ - + diff --git a/guides/tags/technology-terraform/index.html b/guides/tags/technology-terraform/index.html index 31e6811378..7b2dd7835b 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 875a4ab592..dbba4aaaf5 100644 --- a/guides/tags/type-guide/index.html +++ b/guides/tags/type-guide/index.html @@ -26,7 +26,7 @@ - + @@ -99,7 +99,7 @@ - + diff --git a/guides/tags/type-tutorial/index.html b/guides/tags/type-tutorial/index.html index 66d5701b23..4cfa912faa 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 0570bfcf42..cafe8bd0d1 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 7ab33a9f9f..759a1e5da9 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 ef69a7105f..2432d337d7 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 97b363723d..611d5be1c8 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 15f3abe402..5bcd5ca1e3 100644 --- a/guides/tutorial/cloudwatch-integration/index.html +++ b/guides/tutorial/cloudwatch-integration/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,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 7ca48d2c7d..4dc87357fb 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 9cc52f323a..55f67c6fe0 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 613791c0c6..0ea5c2806a 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 edfe105555..7aab1abbbc 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 8540c1bd25..0d1e71eaa3 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 47ad20fe70..e8b6ce8fd9 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 91537162f3..b838ec82ee 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 bf41225ddb..b9cf0f39a5 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 758f3619aa..a78945fb54 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 19edba0e49..39999fb8c6 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 e146ebf303..78abd119d8 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 dc41f252d1..f8b962073b 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 cb64155f75..357bbf1bb1 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 b7d19f0161..1839d2abf9 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 24c99e9e89..a9ea77be21 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 d820d49360..b64885088e 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 29289498b9..d49c6cf6e8 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 9d59615fd2..106b6ccf31 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 c620912471..b4c92d8b86 100644 --- a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html +++ b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html @@ -26,7 +26,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html index a38246d1fe..32dd215e30 100644 --- a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html +++ b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html index ffdbe89668..704ec54f60 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 0c3b2fb8ab..d9bfac3384 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 8bc02b0583..9a115add99 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 5821b7d43d..e5c5cc90c0 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 a2a8038eac..d07c68ab13 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 db781baf45..df9c1c25e5 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 06b2126468..129318fedc 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 bb1cf1680b..0c7a67c9df 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 @@ - + @@ -50,7 +50,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 532df371e4..fd232582fc 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 142051dc72..3c8096a668 100644 --- a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html +++ b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html b/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html index f572435969..e9599e8180 100644 --- a/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html +++ b/guides/tutorial/monitor-and-reduce-kubernetes-spend-with-kubecost/index.html @@ -26,7 +26,7 @@ - + @@ -49,7 +49,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 6d3ef39fae..bc31493a8b 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 1228eddc83..0a0962c17e 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 bf240c4c21..ecfc51043f 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 d64dc6280b..90e65c83de 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 a6633e6ef6..417fbf2313 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/deployment/mirror-registry.png b/img/deployment/mirror-registry.png index 30a781e238..5f707f8a93 100644 Binary files a/img/deployment/mirror-registry.png and b/img/deployment/mirror-registry.png differ diff --git a/index.html b/index.html index 245a5bb6b3..7cbda41e2f 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 b85fc37493..c95e9128f5 100644 --- a/mailing_list/index.html +++ b/mailing_list/index.html @@ -22,7 +22,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/runtime~main.627076f8.js b/runtime~main.06fb0342.js similarity index 93% rename from runtime~main.627076f8.js rename to runtime~main.06fb0342.js index c8b2a9a67f..86663f1ddb 100644 --- a/runtime~main.627076f8.js +++ b/runtime~main.06fb0342.js @@ -1 +1 @@ -!function(e){function d(d){for(var f,b,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"])("p",null,`When a cluster is deployed on your cloud account, a dedicated image registry is created to serve as a mirroring system. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`mirroring registry`),` is also available within the Qovery interface`),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/deployment/mirror-registry.png",alt:"Mirroring Registry"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h1",{"id":"how-does-it-work"},`How does it work`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"application-built-via-the-qovery-pipeline"},`Application built via the Qovery pipeline`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables). `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.`),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/deployment/build-mirror.png",alt:"Mirroring built image"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In order to speed up the image build, we are using remote caches (available in AWS, GCP and Scaleway). It will avoid building the image from scratch, only the layers that changed will be built.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Given this isolation mechanism, if the same application is cloned (via 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/environment/#clone-environment"}),`clone`),` 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/environment/#preview-environment"}),`preview environment`),` feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"application-deployed-from-a-container-registry"},`Application deployed from a container registry`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The Qovery behaviour in this case will depend on the chosen `,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/#image-registry"}),`mirroring mode`),` within the cluster advanced settings. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Two mirroring modes are available when deploying a service from a container registry:`),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"},` Service (Default) `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.`),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/deployment/image-mirror-service.png",alt:"Mirroring image from registry - Service case"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Pro:`),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"},`Images are automatically deleted when not needede anymore`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Cons:`),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"},`If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed`)),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"},` Cluster `)),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,`This is not available on Scaleway.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.`),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/deployment/image-mirror-cluster.png",alt:"Mirroring image from registry - Cluster case"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Pro:`),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"},`If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Cons:`),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"},`Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via 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:"li"},{"href":"/docs/using-qovery/configuration/cluster-advanced-settings/#image-registry"}),`registry.image_retention_time`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"why-image-mirroring-is-necessary"},`Why image mirroring is necessary`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"why-unique-image-tags-are-necessary"},`Why unique image tags are necessary`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:`),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"},`Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.`));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2024-06-05',title:'Image Mirroring',description:'Learn how images are mirrored within your cloud account'};const metadata={"id":"using-qovery/deployment/image-mirroring","title":"Image Mirroring","description":"Learn how images are mirrored within your cloud account","source":"@site/docs/using-qovery/deployment/image-mirroring.md","permalink":"/docs/using-qovery/deployment/image-mirroring","sidebar":"docs","previous":{"title":"Deployment Strategies","permalink":"/docs/using-qovery/deployment/deployment-strategies"},"next":{"title":"Troubleshoot","permalink":"/docs/using-qovery/troubleshoot"}};/* @jsx mdx */const rightToc=[{value:'Application built via the Qovery pipeline',id:'application-built-via-the-qovery-pipeline',children:[]},{value:'Application deployed from a container registry',id:'application-deployed-from-a-container-registry',children:[{value:'Why image mirroring is necessary',id:'why-image-mirroring-is-necessary',children:[]},{value:'Why unique image tags are necessary',id:'why-unique-image-tags-are-necessary',children:[]}]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`When a cluster is deployed on your cloud account, a dedicated repository (or namespace for Scaleway) is created to serve as a mirroring system in your cloud provider registry. And your cloud provider registry is attached to your cluster in Qovery.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`mirroring repository`),` is also available within the Qovery interface`),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/deployment/mirror-registry.png",alt:"Mirroring Repository"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h1",{"id":"how-does-it-work"},`How does it work`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Every time an application needs to be deployed on your cluster, the application image is mirrored on the mirroring registry.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"application-built-via-the-qovery-pipeline"},`Application built via the Qovery pipeline`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service build and mirroring process is completely isolated from the others.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Before building the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image has already being built with the same version (commit id and environment variables). `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If the image already exists, the built is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Otherwise, the image is built by the Qovery pipeline the resulting image is pushed on the mirroring registry at the repository of the application A1, deleting any previous image.`),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/deployment/build-mirror.png",alt:"Mirroring built image"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In order to speed up the image build, we are using remote caches (available in AWS, GCP and Scaleway). It will avoid building the image from scratch, only the layers that changed will be built.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Given this isolation mechanism, if the same application is cloned (via 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/environment/#clone-environment"}),`clone`),` 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/environment/#preview-environment"}),`preview environment`),` feature), Qovery will re-build the application since the environment variables have changed (the ones at environment level).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"application-deployed-from-a-container-registry"},`Application deployed from a container registry`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The Qovery behaviour in this case will depend on the chosen `,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/#image-registry"}),`mirroring mode`),` within the cluster advanced settings. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Two mirroring modes are available when deploying a service from a container registry:`),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"},` Service (Default) `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Images within the mirroring registry are organized by "Qovery service", each service has its own repository (or namespace, naming depends on the cloud provider). This means that each service mirroring process is completely isolated from the others.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the application A1 if an image with the same image name and tag exists. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the application A1, deleting any previous image.`),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/deployment/image-mirror-service.png",alt:"Mirroring image from registry - Service case"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Pro:`),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"},`Images are automatically deleted when not needede anymore`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Cons:`),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"},`If the same image is used across environments or service, Qovery will mirror multiple time the same image, reducing the deployment speed`)),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"},` Cluster `)),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,`This is not available on Scaleway.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Images within the mirroring registry are organized by "Qovery cluster", meaning that the application deployed on the same cluster are all mirrored on the same repository.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At the beginning of the deployment of the application A1, Qovery checks within mirroring registry at the repository of the cluster C1 if an image with the same image name and tag exists. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If the image already exists, the mirroring process is skipped and Qovery starts the deployment of that image on the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Otherwise, the image is pulled from the source registry and pushed on the mirroring registry at the repository of the cluster C1.`),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/deployment/image-mirror-cluster.png",alt:"Mirroring image from registry - Cluster case"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Pro:`),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"},`If the same image is used across environments or service, this setup will avoid to mirror multiple time the same image, increasing the deployment speed.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Cons:`),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"},`Qovery can't automatically delete the images mirrored on the mirroring registry. This will increase the cloud provider cost of your image registry since it will store more data. To reduce the amount data stored you can reduce the image TTL via 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:"li"},{"href":"/docs/using-qovery/configuration/cluster-advanced-settings/#image-registry"}),`registry.image_retention_time`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"why-image-mirroring-is-necessary"},`Why image mirroring is necessary`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Image mirroring is a general best practice: you don't want your system to be strictly coupled on a third party.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Let's say that you run an application on your production environment and Kubernetes needs to pull again the image to spawn a new instance for the application. In this case, you don't want to make this fail due to the unavailability of your source container registry. This is why we make sure that a copy is always available on the container registry next to the Kubernetes cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"why-unique-image-tags-are-necessary"},`Why unique image tags are necessary`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`When working with containerized applications, it is crucial to employ unique image tags for precise version management. This practice ensures complete confidence in the version running within a container. Failing to use unique image tags can lead to adverse consequences due to the image caching mechanisms employed by both the Qovery mirroring system and Kubernetes:`),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"},`Mirroring Registry: Qovery’s mirroring system stores images in a registry. If an image tag remains the same between two versions, the new version will not be mirrored. Consequently, the new version will not be deployed, affecting the overall application.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kubernetes: Applications deployed by Qovery on Kubernetes adhere to the “ifNotPresent” image pull policy. This policy means that if the image already exists on the Kubernetes node’s local disk, Kubernetes will not attempt to pull it again. However, if the image tag remains unchanged, the new image version will not be fetched, resulting in your pods running the outdated application code.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In summary, maintaining unique image tags is a critical aspect of effective version control and ensuring that your applications run the intended versions without disruptions caused by caching mechanisms.`));};MDXContent.isMDXComponent=true; /***/ }), /* 307 */ @@ -52059,7 +52059,7 @@ __webpack_require__.r(__webpack_exports__); /* 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__(8); /* harmony import */ var _site_src_components_Assumptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6); -const frontMatter={last_modified_on:'2023-09-21',title:'Container Registry',description:'Learn how to manage the container registry allowed in your organization'};const metadata={"id":"using-qovery/configuration/organization/container-registry","title":"Container Registry","description":"Learn how to manage the container registry allowed in your organization","source":"@site/docs/using-qovery/configuration/organization/container-registry.md","permalink":"/docs/using-qovery/configuration/organization/container-registry","sidebar":"docs","previous":{"title":"Git Repository access","permalink":"/docs/using-qovery/configuration/organization/git-repository-access"},"next":{"title":"Helm Repository","permalink":"/docs/using-qovery/configuration/organization/helm-repository"}};/* @jsx mdx */const rightToc=[{value:'Create a Container Registry',id:'create-a-container-registry',children:[]},{value:'Modify or Delete an existing registry',id:'modify-or-delete-an-existing-registry',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can access this section by opening the Organization Settings -> Container Registries`),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/organization/access_settings.png",alt:"How to access your organization settings"})),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/organization/container_1.png",alt:"Application"})),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,`When accessing the interface for the first time, you will see that a container registry already exist (called "registry-{$UIID}"). This container registry is created by Qovery on your infrastructure and is used to manage the deployment of your applications. You are free to use them to store your applications but you need to retrieve the credentials from your cloud provider console.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"create-a-container-registry"},`Create a Container Registry`),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/organization/container_creation.png",alt:"Application"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:`),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"},`Registry Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Description`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Registry Url: the base url of the registry (example: `,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://docker.io"}),`https://docker.io`),`, `,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://public.ecr.aws"}),`https://public.ecr.aws`),` etc..)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part. `)),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"},`Important information`),`:`),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"},`If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. `,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.docker.com/increase-rate-limits/"}),`See here`),` for more details`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`If the registry you need is not in the list and it supports the docker login format you can use the “Generic” registry.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Now that you have created the registry, you can start using it in order 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/application/#deploying-from-a-container-registry"}),`create and deploy a service`),` using the images stored within it.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"modify-or-delete-an-existing-registry"},`Modify or Delete an existing registry`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can modify an existing container registry by clicking on the "Wheel" button next to it +const frontMatter={last_modified_on:'2024-06-04',title:'Container Registry',description:'Learn how to manage the container registry allowed in your organization'};const metadata={"id":"using-qovery/configuration/organization/container-registry","title":"Container Registry","description":"Learn how to manage the container registry allowed in your organization","source":"@site/docs/using-qovery/configuration/organization/container-registry.md","permalink":"/docs/using-qovery/configuration/organization/container-registry","sidebar":"docs","previous":{"title":"Git Repository access","permalink":"/docs/using-qovery/configuration/organization/git-repository-access"},"next":{"title":"Helm Repository","permalink":"/docs/using-qovery/configuration/organization/helm-repository"}};/* @jsx mdx */const rightToc=[{value:'Create a Container Registry',id:'create-a-container-registry',children:[]},{value:'Modify or Delete an existing registry',id:'modify-or-delete-an-existing-registry',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This section allows you to define the list of container registries that can be used within your organization. Only images stored on those container registries are allowed to be deployed on your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can access this section by opening the Organization Settings -> Container Registries`),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/organization/access_settings.png",alt:"How to access your organization settings"})),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/organization/container_1.png",alt:"Application"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"create-a-container-registry"},`Create a Container Registry`),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/organization/container_creation.png",alt:"Application"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By clicking on "Add Registry" you will be able to create a new Container Registry by filling these information:`),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"},`Registry Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Description`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Registry Url: the base url of the registry (example: `,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://docker.io"}),`https://docker.io`),`, `,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://public.ecr.aws"}),`https://public.ecr.aws`),` etc..)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Registry type: you can chose among DockerHub, Public ECR, ECR (AWS private CR), Scaleway CR (Scaleway private CR), Github Packages, Gitlab CR, Generic.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Credentials: these depends on the chosen registry type. If a container registry is public, you don't need to fill this part. `)),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"},`Important information`),`:`),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"},`If you select Docker Hub, we encourage you to set credentials to increase the limits on the pull rate. `,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.docker.com/increase-rate-limits/"}),`See here`),` for more details`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`If the registry you need is not in the list and it supports the docker login format you can use the “Generic” registry.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Now that you have created the registry, you can start using it in order 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/application/#deploying-from-a-container-registry"}),`create and deploy a service`),` using the images stored within it.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"modify-or-delete-an-existing-registry"},`Modify or Delete an existing registry`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can modify an existing container registry by clicking on the "Wheel" button next to it You can delete an existing container registry by clicking on the "Trash" button next to it`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{type:"alert",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Before deleting it, make sure that there is no application within your organization using an image stored in this registry.`)),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/organization/container_edit.png",alt:"Application"})));};MDXContent.isMDXComponent=true; /***/ }), @@ -58031,9 +58031,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8); /* 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:'2024-04-15',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":"Annotations","permalink":"/docs/using-qovery/configuration/organization/labels-annotations"},"next":{"title":"Cluster Advanced Settings","permalink":"/docs/using-qovery/configuration/cluster-advanced-settings"}};/* @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":"/docs/getting-started/install-qovery/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:'2024-06-05',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":"Annotations","permalink":"/docs/using-qovery/configuration/organization/labels-annotations"},"next":{"title":"Cluster Advanced Settings","permalink":"/docs/using-qovery/configuration/cluster-advanced-settings"}};/* @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":"/docs/getting-started/install-qovery/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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),`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/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),`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/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),`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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),`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/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),`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/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),`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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),`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/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),`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/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),`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`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC subnet`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Deploy on existing VPC`),` 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 GCP with a VPC managed by Qovery 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 `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`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,`Here is what will be deployed on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`GCP`),`:`),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"},`Cloud Nats`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Static IPs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Routers`)),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 on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`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"},`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"])("p",null,`Once set up, here is the procedure to find your static IP addresses on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`GCP`),`:`),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 GCP account, select the IP addresses service.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`In the list you will find your static IP used by your cluster router.`)),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"])("p",null,`This feature has been activated by default. Since February 1, 2024, AWS charge public IPv4 Addresses. Disabling it may cost you more, depending on the number of nodes in your cluster. Check this `,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/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/"}),`link`),` for more information.`)),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 with a VPC managed by Qovery 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"])("h5",{"id":"use-existing-vpc"},`Use existing VPC`),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"},`Deploy on existing VPC`),` feature is currently only available to clusters deployed on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`AWS`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`GCP`),` when you select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Deploy on my existing VPC`),` VPC mode and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"use-existing-vpc---aws"},`Use existing VPC - AWS:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You have to specify the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`VPC id`),` (1) and ensure that in your VPC settings you have enabled the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`DNS hostnames`),` (2):`),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/existing_vpc_aws_dns_hostnames.png",alt:"Existing VPC AWS DNS Hostnmaes"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then you have to specify the different subnets ids:`),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"},`EKS`),`:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The EKS subnets are mandatory, you have to specify at least `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`one subnet id per zone`),` (1) and ensure you have enabled the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`auto-assign public IPv4 address`),` setting on your subnets (2).`),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/existing_vpc_aws_auto_assign.png",alt:"Existing VPC AWS DNS Hostnmaes"})),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"},`Managed databases`),`:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This section is exclusively for enabling managed databases (container databases will be enabled by default).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Depending on the managed databases you want to you use (`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`MongoDB`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`RDS:MySQL/PostgreSQL`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Redis`),`), specify at least one subnet id per zone.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"use-existing-vpc---gcp"},`Use existing VPC - GCP:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In GCP you have two VPC modes: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Automatic`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Custom`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you are using an automatic or a custom VPC, you have to set:`),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 VPC Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`External project id (optional): by default, the project id used is the one specified in the credentials file. But if your VPC is defined in another GCP project, you have to specify the Project id.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In addition if you are using a custom VPC, you have to set:`),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 Subnet range name (`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://console.cloud.google.com/networking/networks/details/?project=&pageTab=SUBNETS`),`)`)),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 can also specify (optional):`),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"},`Pod ipv4 address range name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Additional cluster pod ipv4 ranges names (separated with a comma)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Ipv4 service range name`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For these ranges, you have to create Secondary IPv4 ranges inside your subnet.`)),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 keep in mind that enabling them later may not be possible.`)),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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),`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/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),`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/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),`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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),`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/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),`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/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),`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/getting-started/install-qovery/aws/cluster-managed-by-qovery/quickstart/#attach-aws-credentials"}),`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/getting-started/install-qovery/scaleway/cluster-managed-by-qovery/quickstart/#attach-scaleway-credentials"}),`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/getting-started/install-qovery/gcp/cluster-managed-by-qovery/quickstart/#attach-gcp-credentials"}),`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":"image-registry"},`Image registry`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In this tab, you will see that a container registry already exist (called `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`registry-{$UIID}`),`). +This is your cloud provider container registry used by Qovery to manage the deployment of your applications by mirroring the docker images.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The credentials configured on this registry are the one used to create the cluster. But you can still update them if you prefer to manage them separately (dedicated pair of creds just to access the registry).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Check `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/deployment/image-mirroring/"}),`this link`),` for more information.`),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`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC subnet`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Deploy on existing VPC`),` 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 GCP with a VPC managed by Qovery 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 `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`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,`Here is what will be deployed on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`GCP`),`:`),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"},`Cloud Nats`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Static IPs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Routers`)),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 on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`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"},`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"])("p",null,`Once set up, here is the procedure to find your static IP addresses on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`GCP`),`:`),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 GCP account, select the IP addresses service.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`In the list you will find your static IP used by your cluster router.`)),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"])("p",null,`This feature has been activated by default. Since February 1, 2024, AWS charge public IPv4 Addresses. Disabling it may cost you more, depending on the number of nodes in your cluster. Check this `,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/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/"}),`link`),` for more information.`)),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 with a VPC managed by Qovery 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"])("h5",{"id":"use-existing-vpc"},`Use existing VPC`),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"},`Deploy on existing VPC`),` feature is currently only available to clusters deployed on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`AWS`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`GCP`),` when you select `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Deploy on my existing VPC`),` VPC mode and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"use-existing-vpc---aws"},`Use existing VPC - AWS:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You have to specify the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`VPC id`),` (1) and ensure that in your VPC settings you have enabled the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`DNS hostnames`),` (2):`),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/existing_vpc_aws_dns_hostnames.png",alt:"Existing VPC AWS DNS Hostnmaes"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Then you have to specify the different subnets ids:`),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"},`EKS`),`:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The EKS subnets are mandatory, you have to specify at least `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`one subnet id per zone`),` (1) and ensure you have enabled the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`auto-assign public IPv4 address`),` setting on your subnets (2).`),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/existing_vpc_aws_auto_assign.png",alt:"Existing VPC AWS DNS Hostnmaes"})),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"},`Managed databases`),`:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This section is exclusively for enabling managed databases (container databases will be enabled by default).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Depending on the managed databases you want to you use (`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`MongoDB`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`RDS:MySQL/PostgreSQL`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Redis`),`), specify at least one subnet id per zone.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"use-existing-vpc---gcp"},`Use existing VPC - GCP:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In GCP you have two VPC modes: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Automatic`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Custom`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you are using an automatic or a custom VPC, you have to set:`),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 VPC Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`External project id (optional): by default, the project id used is the one specified in the credentials file. But if your VPC is defined in another GCP project, you have to specify the Project id.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In addition if you are using a custom VPC, you have to set:`),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 Subnet range name (`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`https://console.cloud.google.com/networking/networks/details/?project=&pageTab=SUBNETS`),`)`)),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 can also specify (optional):`),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"},`Pod ipv4 address range name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Additional cluster pod ipv4 ranges names (separated with a comma)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Ipv4 service range name`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For these ranges, you have to create Secondary IPv4 ranges inside your subnet.`)),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 keep in mind that enabling them later may not be possible.`)),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 `),`