diff --git a/404.html b/404.html index 0326f5b76d..5f51f0af60 100644 --- a/404.html +++ b/404.html @@ -26,7 +26,7 @@ - + @@ -39,7 +39,7 @@ - + diff --git a/6308ca27.205cb9dc.js b/6308ca27.302a7892.js similarity index 52% rename from 6308ca27.205cb9dc.js rename to 6308ca27.302a7892.js index ed8a094c4a..5a8f143cb9 100644 --- a/6308ca27.205cb9dc.js +++ b/6308ca27.302a7892.js @@ -1,2 +1,2 @@ -/*! For license information please see 6308ca27.205cb9dc.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{260: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(417)),o=(r(424),r(416)),s=(r(421),{last_modified_on:"2023-10-11",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 contianer registry",id:"application-deployed-from-a-contianer-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,"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-contianer-registry"},"Application deployed from a contianer 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,"Having unique image tags is the best practice: you want to be 100% of the version running within a container. Moreover, not using unique image tags will have bad side effects given the image cachin mechanism provided by the Qovery mirroring system and by Kubernetes itself:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"Mirroring registry: since Qovery mirrors the images on the mirroring registry, if the image tag doesn't change between two versions, the new version won't be mirrored. This means that the new version will not be deployed."),Object(a.b)("li",{parentName:"ul"},"Kubernetes: applications deployed by Qovery on Kubernetes uses the ",Object(a.b)("a",Object(i.a)({parentName:"li"},{href:"https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy"}),"image pull policy")," ",Object(a.b)("inlineCode",{parentName:"li"},"ifNotPresent"),". This means that if the image already exists on the Kubernetes node local disk, Kubernetes won't pull again the image. If the image tag doesn't change, then the new image version won't be pulled and your pods will still run the old application code.")))}m.isMDXComponent=!0},415: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}},420: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""}}})},421:function(e,t,r){"use strict";r(420);var i=r(0),n=r.n(i),a=r(416);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)}},422:function(e,t,r){"use strict";var i=r(1),n=r(0),a=r.n(n),o=r(39),s=r(425),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}))}},424:function(e,t,r){"use strict";var i=r(0),n=r.n(i),a=r(422),o=r(415),s=r.n(o);r(133);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)}},425: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 +/*! For license information please see 6308ca27.302a7892.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{260: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(417)),o=(r(424),r(416)),s=(r(421),{last_modified_on:"2023-10-13",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 contianer registry",id:"application-deployed-from-a-contianer-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,"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-contianer-registry"},"Application deployed from a contianer 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},415: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}},420: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""}}})},421:function(e,t,r){"use strict";r(420);var i=r(0),n=r.n(i),a=r(416);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)}},422:function(e,t,r){"use strict";var i=r(1),n=r(0),a=r.n(n),o=r(39),s=r(425),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}))}},424:function(e,t,r){"use strict";var i=r(0),n=r.n(i),a=r(422),o=r(415),s=r.n(o);r(133);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)}},425: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.205cb9dc.js.LICENSE.txt b/6308ca27.302a7892.js.LICENSE.txt similarity index 100% rename from 6308ca27.205cb9dc.js.LICENSE.txt rename to 6308ca27.302a7892.js.LICENSE.txt diff --git a/community/index.html b/community/index.html index 56aad6fa77..9ad6ae5cb1 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 16edc97d22..cb08ce62e6 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 ee8159037b..095b926da0 100644 --- a/contact/index.html +++ b/contact/index.html @@ -26,7 +26,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/dc00a797.02d398c4.js b/dc00a797.02d398c4.js new file mode 100644 index 0000000000..93665e3608 --- /dev/null +++ b/dc00a797.02d398c4.js @@ -0,0 +1,2 @@ +/*! For license information please see dc00a797.02d398c4.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[226],{378: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(417)),c=n(426),l=(n(424),n(416)),i=(n(421),{last_modified_on:"2023-10-13",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery"}),s={id:"using-qovery/configuration/clusters",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery",source:"@site/docs/using-qovery/configuration/clusters.md",permalink:"/docs/using-qovery/configuration/clusters",sidebar:"docs",previous:{title:"API Token",permalink:"/docs/using-qovery/configuration/organization/api-token"},next:{title:"Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider"}},u=[{value:"What is a cluster?",id:"what-is-a-cluster",children:[]},{value:"Why do I need a cluster?",id:"why-do-i-need-a-cluster",children:[]},{value:"What are the different instance types available when creating a cluster?",id:"what-are-the-different-instance-types-available-when-creating-a-cluster",children:[]},{value:"How does Qovery handle cluster updates and upgrades?",id:"how-does-qovery-handle-cluster-updates-and-upgrades",children:[]},{value:"What do you do when a vulnerability is found?",id:"what-do-you-do-when-a-vulnerability-is-found",children:[]},{value:"Managing your Clusters with Qovery",id:"managing-your-clusters-with-qovery",children:[{value:"Creating a Cluster",id:"creating-a-cluster",children:[]},{value:"Managing your Cluster Settings",id:"managing-your-cluster-settings",children:[]},{value:"Performing Actions on your Clusters",id:"performing-actions-on-your-clusters",children:[]}]},{value:"Logs",id:"logs",children:[]},{value:"Generating an SSH Key for Your Cluster",id:"generating-an-ssh-key-for-your-cluster",children:[]},{value:"Use custom domain and wildcard TLS for the whole cluster (beta)",id:"use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta",children:[]},{value:"Cleaning up a Cluster from your AWS Account",id:"cleaning-up-a-cluster-from-your-aws-account",children:[]}],b={rightToc:u};function p(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},b,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("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 clusters, we mean Kubernetes clusters. 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)(l.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)(l.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)(l.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)(l.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)(l.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)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"here for AWS"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"here for Scaleway"),".")),Object(o.b)("p",null,"To create a cluster:"),Object(o.b)(c.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"Click ",Object(o.b)("inlineCode",{parentName:"p"},"Add Cluster"),":"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/add-cluster-button.png",alt:"Add Cluster Button"}))),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Create Cluster")," window enter:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster name"),": enter the name of your choice for your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Description"),": enter a description to identify better your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Production cluster"),": select this option if your cluster will be used for production."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cloud provider"),": select your cloud provider."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Region"),": select the geographical area in which you want your cluster to be hosted."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Credentials"),": select one of the existing cloud provider credentials or add a new one by clicking on ",Object(o.b)("inlineCode",{parentName:"li"},"New Credentials"),". In the New credentials window, add the credentials that you have generated on your cloud provider console (",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),"). Added credentials can be used later to create and manage additional cluster.")),Object(o.b)("p",null,"To confirm, click ",Object(o.b)("inlineCode",{parentName:"p"},"Next"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Set Resources")," window, select: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster"),": select the cluster type to use. Please refer to this section for ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),"more information"),". "),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Instance type"),": select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker nodes")," you want to deploy to your cluster:"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Disk size"),": select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Node auto-scaling"),": define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.")),Object(o.b)("br",null),Object(o.b)(l.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)("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)(l.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)(l.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)(c.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"To access your cluster settings, click on the wheel button:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(o.b)("p",null,"Below you can find a description of each section"),Object(o.b)("h4",{id:"general"},"General"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"General")," tab allows you to define high-level information on your cluster:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Item"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Cluster Name"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To edit the name of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Description"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the description of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Production Cluster"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the production flag of your cluster.")))),Object(o.b)("h4",{id:"credentials"},"Credentials"),Object(o.b)("p",null,"Here you can manage here the cloud provider credentials associated with your cluster. "),Object(o.b)("p",null,"If you need to change the credentials:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"generate a new set of credentials on your cloud provider(",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),") "),Object(o.b)("li",{parentName:"ul"},'create the new credential on the Qovery by opening the drop-down and selecting "New Credentials"')),Object(o.b)("p",null,"In the two dedicated fields, enter the credentials you created on your cloud provider account:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Account Provider"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Field Labels"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"AWS"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Access Key")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Secret Access Key"))),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Scaleway"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Access Key")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Project ID"))))),Object(o.b)("p",null,"Once created and associated, you need to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"updating your cluster")," to apply the change."),Object(o.b)("h4",{id:"resources"},"Resources"),Object(o.b)("p",null,"Qovery allows you to modify the resources allocated for your cluster: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"In the ",Object(o.b)("inlineCode",{parentName:"li"},"Instance type")," dropdown menu, select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker node(s)")," you want to deploy to your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(AWS users only)")," In the ",Object(o.b)("inlineCode",{parentName:"li"},"Node disk size (GB)")," field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold)."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(EKS users only)")," On the ",Object(o.b)("inlineCode",{parentName:"li"},"Nodes auto-scaling"),", define the range of worker nodes you want to deploy to your cluster.")),Object(o.b)(l.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)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows."),Object(o.b)("p",null,"Please note that a minimum of 3 worker nodes is required to deploy your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"EKS cluster"),"."),Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"K3s clusters")," can only have one node.")),Object(o.b)("h4",{id:"features"},"Features"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Features")," tab in your cluster settings allows you to check if the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," and ",Object(o.b)("strong",{parentName:"p"},"Custom VPC subnet")," features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster."),Object(o.b)("h5",{id:"static-ip"},"Static IP"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses."),Object(o.b)("p",null,"Once set up, here is the procedure to find your static IP addresses:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"On your AWS account, select the VPC service. "),Object(o.b)("li",{parentName:"ul"},"On the left menu, you\u2019ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you\u2019ll have your public IPs.")),Object(o.b)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"If you work in a sensitive business area such as financial technology, enabling the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature can help fulfil the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.")),Object(o.b)("h5",{id:"custom-vpc-subnet"},"Custom VPC Subnet"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"VPC")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications."),Object(o.b)("p",null,"A VPC can only be used if it has at least one range of IP addresses called a ",Object(o.b)("strong",{parentName:"p"},"subnet"),". When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the ",Object(o.b)("strong",{parentName:"p"},"Custom VPC Subnet")," feature on your cluster. For more information on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h4",{id:"network"},"Network"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Network")," tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h3",{id:"performing-actions-on-your-clusters"},"Performing Actions on your Clusters"),Object(o.b)("p",null,"Qovery allows you to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"update"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"stop"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"restart")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"delete")," your clusters at organization level."),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Action"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"Updating a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To redeploy your cluster after a change has been made to it.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"Restarting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To restart your cluster after it has been temporarily stopped.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster"),".")))),Object(o.b)("p",null,"To access these actions:"),Object(o.b)(c.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)(l.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)(l.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Deleting a cluster from the Qovery console is final, and cuts all associated costs on your cloud provider's end.\nTo 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,"A confirmation is required before deleting the cluster."),Object(o.b)("p",null,"Once confirmed, its 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)("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)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The error message should provide you enough information to solve the issue. If that's not the case, feel free to ask for support on our ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"forum")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discord.com/channels/688766934917185556/688826155611979807"}),"discord channel"))),Object(o.b)("h2",{id:"generating-an-ssh-key-for-your-cluster"},"Generating an SSH Key for Your Cluster"),Object(o.b)(l.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)(c.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)(l.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)(l.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},415: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):l({},t,{},e)),n},b=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),b=u(n),d=a,m=b["".concat(c,".").concat(d)]||b[d]||p[d]||o;return n?r.a.createElement(m,l({ref:t},s,{components:n})):r.a.createElement(m,l({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,c=new Array(o);c[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:a,c[1]=l;for(var s=2;s1?arguments[1]:void 0,n),i=c>2?arguments[2]:void 0,s=void 0===i?n:r(i,n);s>l;)t[l++]=e;return t}},420: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""}}})},421:function(e,t,n){"use strict";n(420);var a=n(0),r=n.n(a),o=n(416);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)}},422:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),c=n(39),l=n(425),i=n(20),s=n.n(i);t.a=function(e){var t,n=e.to,i=e.href,u=n||i,b=Object(l.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(c.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}))}},423:function(e,t,n){"use strict";var a=n(427),r=n(51);function o(e,t){return t.encode?t.strict?a(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,a){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===a[e]&&(a[e]={}),a[e][t[1]]=n):a[e]=n};case"bracket":return function(e,n,a){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==a[e]?a[e]=[].concat(a[e],n):a[e]=[n]:a[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=r({arrayFormat:"none"},t)),a=Object.create(null);return"string"!=typeof e?a:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),r=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(r),o,a)})),Object.keys(a).sort().reduce((function(e,t){var n=a[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):a},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,a){return null===n?[o(t,e),"[",a,"]"].join(""):[o(t,e),"[",o(a,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=r({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(a){var r=e[a];if(void 0===r)return"";if(null===r)return o(a,t);if(Array.isArray(r)){var c=[];return r.slice().forEach((function(e){void 0!==e&&c.push(n(a,e,c.length))})),c.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},424:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(422),c=n(415),l=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.className,a=e.badge,c=e.leftIcon,i=e.rightIcon,s=e.size,u=e.target,b=e.to,p=l()("jump-to","jump-to--"+s,n),d=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},c&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+c})),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)}},425:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},426:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(415),n(423)),c=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,l="undefined"!=typeof window?window.location:null,i={title:"Tutorial on "+l+" failed",body:"The tutorial on:\n\n"+l+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+c.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"),"."))}},427: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.736ec236.js.LICENSE.txt b/dc00a797.02d398c4.js.LICENSE.txt similarity index 100% rename from dc00a797.736ec236.js.LICENSE.txt rename to dc00a797.02d398c4.js.LICENSE.txt diff --git a/dc00a797.736ec236.js b/dc00a797.736ec236.js deleted file mode 100644 index 130f3cfc8a..0000000000 --- a/dc00a797.736ec236.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see dc00a797.736ec236.js.LICENSE.txt */ -(window.webpackJsonp=window.webpackJsonp||[]).push([[226],{378: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(417)),c=n(426),l=(n(424),n(416)),i=(n(421),{last_modified_on:"2023-06-14",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery"}),s={id:"using-qovery/configuration/clusters",title:"Clusters",description:"Learn how to configure your Kubernetes clusters on Qovery",source:"@site/docs/using-qovery/configuration/clusters.md",permalink:"/docs/using-qovery/configuration/clusters",sidebar:"docs",previous:{title:"API Token",permalink:"/docs/using-qovery/configuration/organization/api-token"},next:{title:"Cloud Service Provider",permalink:"/docs/using-qovery/configuration/cloud-service-provider"}},u=[{value:"What is a cluster?",id:"what-is-a-cluster",children:[]},{value:"Why do I need a cluster?",id:"why-do-i-need-a-cluster",children:[]},{value:"What are the different instance types available when creating a cluster?",id:"what-are-the-different-instance-types-available-when-creating-a-cluster",children:[]},{value:"How does Qovery handle cluster updates and upgrades?",id:"how-does-qovery-handle-cluster-updates-and-upgrades",children:[]},{value:"What do you do when a vulnerability is found?",id:"what-do-you-do-when-a-vulnerability-is-found",children:[]},{value:"Managing your Clusters with Qovery",id:"managing-your-clusters-with-qovery",children:[{value:"Creating a Cluster",id:"creating-a-cluster",children:[]},{value:"Managing your Cluster Settings",id:"managing-your-cluster-settings",children:[]},{value:"Performing Actions on your Clusters",id:"performing-actions-on-your-clusters",children:[]}]},{value:"Logs",id:"logs",children:[]},{value:"Generating an SSH Key for Your Cluster",id:"generating-an-ssh-key-for-your-cluster",children:[]},{value:"Use custom domain and wildcard TLS for the whole cluster (beta)",id:"use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta",children:[]},{value:"Cleaning up a Cluster from your AWS Account",id:"cleaning-up-a-cluster-from-your-aws-account",children:[]}],b={rightToc:u};function p(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},b,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("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 clusters, we mean Kubernetes clusters. 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)(l.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)(l.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)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"Qovery supports only instance types having an x86_64 or ARM architectures.")),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)(l.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)(l.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 to properly deploy on this cluster. Most importantly will expose you to some unknown / untested areas which can put your applications 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 wich last approximatively 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 busines 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 on 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)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"here for AWS"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"here for Scaleway"),".")),Object(o.b)("p",null,"To create a cluster:"),Object(o.b)(c.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"Click ",Object(o.b)("inlineCode",{parentName:"p"},"Add Cluster"),":"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/add-cluster-button.png",alt:"Add Cluster Button"}))),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Create Cluster")," window enter:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster name"),": enter the name of your choice for your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Description"),": enter a description to identify better your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Production cluster"),": select this option if your cluster will be used for production."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cloud provider"),": select your cloud provider."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Region"),": select the geographical area in which you want your cluster to be hosted."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Credentials"),": select one of the existing cloud provider credentials or add a new one by clicking on ",Object(o.b)("inlineCode",{parentName:"li"},"New Credentials"),". In the New credentials window, add the credentials that you have generated on your cloud provider console (",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),"). Added credentials can be used later to create and manage additional cluster.")),Object(o.b)("p",null,"To confirm, click ",Object(o.b)("inlineCode",{parentName:"p"},"Next"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"In the ",Object(o.b)("inlineCode",{parentName:"p"},"Set Resources")," window, select: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Cluster"),": select the cluster type to use. Please refer to this section for ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),"more information"),". "),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Instance type"),": select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker nodes")," you want to deploy to your cluster:"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Disk size"),": select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"Node auto-scaling"),": define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.")),Object(o.b)("br",null),Object(o.b)(l.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)("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)(l.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)(l.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)(c.a,{headingDepth:3,mdxType:"Steps"},Object(o.b)("ol",null,Object(o.b)("li",null,Object(o.b)("p",null,"Open your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://console.qovery.com"}),"Qovery Console"),".")),Object(o.b)("li",null,Object(o.b)("p",null,"On the left menu bar, click on the Cluster page:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(o.b)("li",null,Object(o.b)("p",null,"To access your cluster settings, click on the wheel button:"),Object(o.b)("p",{align:"center"},Object(o.b)("img",{src:"/img/configuration/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(o.b)("p",null,"Below you can find a description of each section"),Object(o.b)("h4",{id:"general"},"General"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"General")," tab allows you to define high-level information on your cluster:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Item"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Cluster Name"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To edit the name of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Description"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the description of your cluster.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Production Cluster"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To enter or edit the production flag of your cluster.")))),Object(o.b)("h4",{id:"credentials"},"Credentials"),Object(o.b)("p",null,"Here you can manage here the cloud provider credentials associated with your cluster. "),Object(o.b)("p",null,"If you need to change the credentials:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"generate a new set of credentials on your cloud provider(",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),"Procedure for AWS account"),", ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),"Procedure for Scaleway account"),") "),Object(o.b)("li",{parentName:"ul"},'create the new credential on the Qovery by opening the drop-down and selectin "New Credentials"')),Object(o.b)("p",null,"In the two dedicated fields, enter the credentials you created on your cloud provider account:"),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Account Provider"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Field Labels"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"AWS"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Access Key")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Secret Access Key"))),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"Scaleway"),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Access Key")," and ",Object(o.b)("inlineCode",{parentName:"td"},"Scaleway Project ID"))))),Object(o.b)("p",null,"Once created and associated, you need to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"updating your cluster")," to apply the change."),Object(o.b)("h4",{id:"resources"},"Resources"),Object(o.b)("p",null,"Qovery allows you to modify the resources allocated for your cluster: "),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"In the ",Object(o.b)("inlineCode",{parentName:"li"},"Instance type")," dropdown menu, select the type of ",Object(o.b)("a",Object(a.a)({parentName:"li"},{href:"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),"worker node(s)")," you want to deploy to your cluster."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(AWS users only)")," In the ",Object(o.b)("inlineCode",{parentName:"li"},"Node disk size (GB)")," field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold)."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("em",{parentName:"li"},"(EKS users only)")," On the ",Object(o.b)("inlineCode",{parentName:"li"},"Nodes auto-scaling"),", define the range of worker nodes you want to deploy to your cluster.")),Object(o.b)(l.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)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows."),Object(o.b)("p",null,"Please note that a minimum of 3 worker nodes is required to deploy your ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"EKS cluster"),"."),Object(o.b)("p",null,Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),"K3s clusters")," can only have one node.")),Object(o.b)("h4",{id:"features"},"Features"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Features")," tab in your cluster settings allows you to check if the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," and ",Object(o.b)("strong",{parentName:"p"},"Custom VPC subnet")," features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster."),Object(o.b)("h5",{id:"static-ip"},"Static IP"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the ",Object(o.b)("strong",{parentName:"p"},"Static IP")," feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses."),Object(o.b)("p",null,"Once set up, here is the procedure to find your static IP addresses:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"On your AWS account, select the VPC service. "),Object(o.b)("li",{parentName:"ul"},"On the left menu, you\u2019ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you\u2019ll have your public IPs.")),Object(o.b)(l.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 fulfill the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.")),Object(o.b)("h5",{id:"custom-vpc-subnet"},"Custom VPC Subnet"),Object(o.b)("p",null,"The ",Object(o.b)("strong",{parentName:"p"},"VPC")," feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation."),Object(o.b)("p",null,"Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications."),Object(o.b)("p",null,"A VPC can only be used if it has at least one range of IP addresses called a ",Object(o.b)("strong",{parentName:"p"},"subnet"),". When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the ",Object(o.b)("strong",{parentName:"p"},"Custom VPC Subnet")," feature on your cluster. For more information on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h4",{id:"network"},"Network"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"Network")," tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),"see our dedicated tutorial"),"."),Object(o.b)("h3",{id:"performing-actions-on-your-clusters"},"Performing Actions on your Clusters"),Object(o.b)("p",null,"Qovery allows you to ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"update"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"stop"),", ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"restart")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"delete")," your clusters at organization level."),Object(o.b)("table",null,Object(o.b)("thead",{parentName:"table"},Object(o.b)("tr",{parentName:"thead"},Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Action"),Object(o.b)("th",Object(a.a)({parentName:"tr"},{align:null}),"Description"))),Object(o.b)("tbody",{parentName:"table"},Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),"Updating a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To redeploy your cluster after a change has been made to it.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),"Stopping a cluster"),".")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),"Restarting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To restart your cluster after it has been temporarily stopped.")),Object(o.b)("tr",{parentName:"tbody"},Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster")),Object(o.b)("td",Object(a.a)({parentName:"tr"},{align:null}),"To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see ",Object(o.b)("a",Object(a.a)({parentName:"td"},{href:"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),"Deleting a cluster"),".")))),Object(o.b)("p",null,"To access these actions:"),Object(o.b)(c.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 to ",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 to 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)(l.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)(l.a,{type:"warning",mdxType:"Alert"},Object(o.b)("p",null,"Deleting a cluster from the Qovery console is final, and cuts all associated costs on your cloud provider's end.\nTo 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,"A confirmation is required before deleting the cluster."),Object(o.b)("p",null,"Once confirmed, its 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)("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 windows 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 occurred, 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)(l.a,{type:"info",mdxType:"Alert"},Object(o.b)("p",null,"The error message should provide you enough information to solve the issue. If that's not the case, feel free to ask for support on our ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discuss.qovery.com/"}),"forum")," or ",Object(o.b)("a",Object(a.a)({parentName:"p"},{href:"https://discord.com/channels/688766934917185556/688826155611979807"}),"discord channel"))),Object(o.b)("h2",{id:"generating-an-ssh-key-for-your-cluster"},"Generating an SSH Key for Your Cluster"),Object(o.b)(l.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)(c.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)(l.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)(l.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},415: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):l({},t,{},e)),n},b=function(e){var t=u(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),b=u(n),d=a,m=b["".concat(c,".").concat(d)]||b[d]||p[d]||o;return n?r.a.createElement(m,l({ref:t},s,{components:n})):r.a.createElement(m,l({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,c=new Array(o);c[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:a,c[1]=l;for(var s=2;s1?arguments[1]:void 0,n),i=c>2?arguments[2]:void 0,s=void 0===i?n:r(i,n);s>l;)t[l++]=e;return t}},420: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""}}})},421:function(e,t,n){"use strict";n(420);var a=n(0),r=n.n(a),o=n(416);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)}},422:function(e,t,n){"use strict";var a=n(1),r=n(0),o=n.n(r),c=n(39),l=n(425),i=n(20),s=n.n(i);t.a=function(e){var t,n=e.to,i=e.href,u=n||i,b=Object(l.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(c.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}))}},423:function(e,t,n){"use strict";var a=n(427),r=n(51);function o(e,t){return t.encode?t.strict?a(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,a){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===a[e]&&(a[e]={}),a[e][t[1]]=n):a[e]=n};case"bracket":return function(e,n,a){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==a[e]?a[e]=[].concat(a[e],n):a[e]=[n]:a[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=r({arrayFormat:"none"},t)),a=Object.create(null);return"string"!=typeof e?a:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach((function(e){var t=e.replace(/\+/g," ").split("="),r=t.shift(),o=t.length>0?t.join("="):void 0;o=void 0===o?null:decodeURIComponent(o),n(decodeURIComponent(r),o,a)})),Object.keys(a).sort().reduce((function(e,t){var n=a[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return t[e]})):t}(n):e[t]=n,e}),Object.create(null))):a},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,a){return null===n?[o(t,e),"[",a,"]"].join(""):[o(t,e),"[",o(a,e),"]=",o(n,e)].join("")};case"bracket":return function(t,n){return null===n?o(t,e):[o(t,e),"[]=",o(n,e)].join("")};default:return function(t,n){return null===n?o(t,e):[o(t,e),"=",o(n,e)].join("")}}}(t=r({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map((function(a){var r=e[a];if(void 0===r)return"";if(null===r)return o(a,t);if(Array.isArray(r)){var c=[];return r.slice().forEach((function(e){void 0!==e&&c.push(n(a,e,c.length))})),c.join("&")}return o(a,t)+"="+o(r,t)})).filter((function(e){return e.length>0})).join("&"):""}},424:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=n(422),c=n(415),l=n.n(c);n(133);t.a=function(e){var t=e.children,n=e.className,a=e.badge,c=e.leftIcon,i=e.rightIcon,s=e.size,u=e.target,b=e.to,p=l()("jump-to","jump-to--"+s,n),d=r.a.createElement("div",{className:"jump-to--inner"},r.a.createElement("div",{className:"jump-to--inner-2"},c&&r.a.createElement("div",{className:"jump-to--left"},r.a.createElement("i",{className:"feather icon-"+c})),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)}},425:function(e,t,n){"use strict";function a(e){return!1===/^(https?:|\/\/)/.test(e)}n.d(t,"a",(function(){return a}))},426:function(e,t,n){"use strict";var a=n(0),r=n.n(a),o=(n(415),n(423)),c=n.n(o);n(134);t.a=function(e){var t=e.children,n=e.headingDepth,o=e.hideFeedbackQuestion,l="undefined"!=typeof window?window.location:null,i={title:"Tutorial on "+l+" failed",body:"The tutorial on:\n\n"+l+"\n\nHere's what went wrong:\n\n\x3c!-- Insert command output and details. Thank you for reporting! :) --\x3e"},s="https://github.com/qovery/documentation/issues/new?"+c.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"),"."))}},427:function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}}}]); \ No newline at end of file diff --git a/docs/getting-started/basic-concepts/index.html b/docs/getting-started/basic-concepts/index.html index 306f1d37ac..7ceebad490 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 29b54ec59d..75e1611fab 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 6f8423cf15..3957d336a1 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 cc799c011e..ed5d2c8488 100644 --- a/docs/getting-started/index.html +++ b/docs/getting-started/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/install-qovery/index.html b/docs/getting-started/install-qovery/index.html index 1ed3b0ba96..74e2fb68ba 100644 --- a/docs/getting-started/install-qovery/index.html +++ b/docs/getting-started/install-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/getting-started/what-is-qovery/index.html b/docs/getting-started/what-is-qovery/index.html index e2e2d3a7c5..422009039a 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 964340661c..9b72b0fcc7 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 267f73cb53..1ec7b21963 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 e082637154..ae42413ab7 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 47cbc0a342..f509dbf1c6 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 46993c069f..ff73c56f16 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 d24c5a4398..e1d6f114d8 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 a77e083090..f20cfabdca 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 dfcee3eda4..ee38664139 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 dc37834255..8ab148e87a 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 a97b110a0d..9e2123ae3a 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 488a965119..b1cd17d2fe 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 a7c0f332ce..2d6a5277f9 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 ff6566b701..3ec40705d9 100644 --- a/docs/using-qovery/configuration/application/index.html +++ b/docs/using-qovery/configuration/application/index.html @@ -26,7 +26,7 @@ - + @@ -62,7 +62,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html b/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html index 15fb1cc683..dd10b6c748 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html b/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html index 8d3291d3ab..fa586c7aad 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html b/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html index d04290e83a..77272c2217 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/index.html b/docs/using-qovery/configuration/cloud-service-provider/index.html index c3bb734171..b5f056bf7b 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html b/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html index 7578f06848..a26e34698b 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/microsoft-azure/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html b/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html index a7ac373138..184864bd22 100644 --- a/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html +++ b/docs/using-qovery/configuration/cloud-service-provider/scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/using-qovery/configuration/cluster-advanced-settings/index.html b/docs/using-qovery/configuration/cluster-advanced-settings/index.html index 7ab6304615..0b74309044 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 32fa6a2c31..edf502d8c8 100644 --- a/docs/using-qovery/configuration/clusters/index.html +++ b/docs/using-qovery/configuration/clusters/index.html @@ -26,7 +26,7 @@ - + @@ -44,24 +44,24 @@ - +

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 clusters, we mean Kubernetes clusters. 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 wich last approximatively 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 busines 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 on the vulnerability to help them take the right actions.

Managing your Clusters with Qovery

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

Creating a Cluster

To create a cluster:

  1. Open your Qovery Console.

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

    Cluster Access

  3. Click Add Cluster:

    Add Cluster Button

  4. In the Create Cluster window enter:

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

    To confirm, click Next.

  5. In the Set Resources window, select:

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


    To confirm, click Next.

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

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

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

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

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

    You can now press the Create and Install button.

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

Managing your Cluster Settings

To manage the settings of an existing cluster:

  1. Open your Qovery Console.

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

    Cluster Access

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

    Display Cluster Settings

Below you can find a description of each section

General

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

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

Credentials

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

If you need to change the credentials:

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

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

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

Resources

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

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

Features

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

Static IP

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

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

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

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

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

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

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

Network

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

Performing Actions on your Clusters

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

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

To access these actions:

  1. Open your Qovery Console.

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

    Cluster Access

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

    Cluster Actions Menu

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

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

Updating a Cluster

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

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

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

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

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

Stopping a Cluster

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

+To only temporarily stop a cluster, see Stopping a Cluster.

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

A confirmation is required before deleting the cluster.

Once confirmed, its status turns to Deleting... (red status) and once the deletion is complete, the cluster is removed from your organization settings.

Logs

Qovery allows you to access the logs of your cluster in order to follow its installation or investigate any issue happening on it.

To access the logs you need to open the cluster, click the log button

Cluster Logs

A new window is opened, displaying the logs of the cluster.

Cluster Logs

The tab system on the right allows you to access the cluster information and, if an error occurs, the detail of the error.

Cluster Logs

Generating an SSH Key for Your Cluster

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:

  1. On your computer, open a terminal.

  2. Run ssh-keygen -t, followed by the key type and an optional comment.

    For example, you can enter ssh-keygen -t rsa -b 2048 -C "<comment>".

  3. Press Enter.

    You should get an output similar to:

    {
    Generating public/private ed25519 key pair.
    Enter file in which to save the key (/home/user/.ssh/id_ed25519):
    }
  4. Accept the suggested filename and directory, unless you want to save your SSH key in a specific directory where you store other keys.

  5. Enter a passphrase:

    {
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    }

    A confirmation is displayed, including information about where your files are stored.

  6. Access the public key and copy its value
    {
    cat /home/user/.ssh/id_ed25519.pub | pbcopy
    }

    Note: Replace the .pub key path with the one where is located the key you have previously generated

You can add the generated public SSH key at cluster creation (see Creating a Cluster), or later from your cluster settings.

To do so:

Use custom domain and wildcard TLS for the whole cluster (beta)

By default, Qovery provides a domain (ex 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.

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 Let's Encrypt quotas.

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.

At the moment, Qovery only supports wildcard TLS certificates with 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.

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 My Profile. In the API Tokens section, click on Create Token. In the Create Custom Token section, select the following permissions:

  • API token a descriptive name: Qovery domain your domain name
  • Permissions:
    • Zone - DNS - Edit
    • Zone - Zone - Read
  • Zone Resources:
    • Include - Specific zone - your domain name

To finish, click on Continue to Summary and Create Token. Save the token somewhere safe, you will need it later.

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.

Cleaning up a Cluster from your AWS Account

To clean up a Qovery cluster from your cloud provider account, go to AWS Console>Services>Management & Governance>Resource Groups & Tag Editor> Create Resource Group:

AWS Console Cluster Cleanup

StepDescription
1In the Group type area, select Tag based.
2In the Tags field of the Grouping criteria area, enter ClusterId.
3Click Add.
4Click Preview Resources.
All your Qovery clusters are now displayed in the Group resources table, and you can delete them by hand.
- + @@ -79,7 +79,7 @@ - + diff --git a/docs/using-qovery/configuration/cronjob/index.html b/docs/using-qovery/configuration/cronjob/index.html index 08b2b5a41b..935fe21a0a 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 ac4e6d8077..89d1c5f57d 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 76cba06fa0..3e954e0279 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 20673d7ce7..a2af979a1a 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 55d69bc144..1cc25edaa7 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 9cd55cf0f4..a1c5a09f9c 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 aff8297173..182d792407 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 7a96b99c1f..f09a2b4623 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 616c3ce797..4dde0e7237 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/index.html b/docs/using-qovery/configuration/index.html index 6e2a978c37..5bb727113d 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 825ec65ac6..a130a6f74e 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 23fbe08180..018ce49cf6 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 d5c5b2a0e9..9a475cca5f 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 b4d692d7d7..ded2d4808c 100644 --- a/docs/using-qovery/configuration/organization/container-registry/index.html +++ b/docs/using-qovery/configuration/organization/container-registry/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/git-repository-access/index.html b/docs/using-qovery/configuration/organization/git-repository-access/index.html index 3ce18c7c73..bdb37b6a46 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 @@ - + @@ -59,7 +59,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/index.html b/docs/using-qovery/configuration/organization/index.html index ad33a4a53d..68d6cc5e9b 100644 --- a/docs/using-qovery/configuration/organization/index.html +++ b/docs/using-qovery/configuration/organization/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/docs/using-qovery/configuration/organization/members-rbac/index.html b/docs/using-qovery/configuration/organization/members-rbac/index.html index 937d238f1b..37bd648e2f 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 dc02564964..26528bcd29 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/service-health-checks/index.html b/docs/using-qovery/configuration/service-health-checks/index.html index 83751407e2..9572725653 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 5a6156b5d7..00a5f9c17a 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 5a24fb4439..41b23fa52b 100644 --- a/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html +++ b/docs/using-qovery/deployment/deploying-with-auto-deploy/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/docs/using-qovery/deployment/deploying-with-ci-cd/index.html b/docs/using-qovery/deployment/deploying-with-ci-cd/index.html index 03c01dc2dc..872a2ab6fd 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 ba9a1b991d..defaf2ac1e 100644 --- a/docs/using-qovery/deployment/deployment-actions/index.html +++ b/docs/using-qovery/deployment/deployment-actions/index.html @@ -26,7 +26,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/docs/using-qovery/deployment/deployment-history/index.html b/docs/using-qovery/deployment/deployment-history/index.html index 59475dbf15..b860e4cf4a 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 15487b9bb4..967702427f 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 153c0cdddc..c1ac1910d3 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 7fbb1195c5..219b72bf11 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

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 contianer 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

Having unique image tags is the best practice: you want to be 100% of the version running within a container. Moreover, not using unique image tags will have bad side effects given the image cachin mechanism provided by the Qovery mirroring system and by Kubernetes itself:

  • Mirroring registry: since Qovery mirrors the images on the mirroring registry, if the image tag doesn't change between two versions, the new version won't be mirrored. This means that the new version will not be deployed.
  • Kubernetes: applications deployed by Qovery on Kubernetes uses the image pull policy ifNotPresent. This means that if the image already exists on the Kubernetes node local disk, Kubernetes won't pull again the image. If the image tag doesn't change, then the new image version won't be pulled and your pods will still run the old application code.
+

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

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 contianer 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 c8953711cd..79bec88d37 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 e82681104b..b5dbc54e46 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 603cbe1b14..49c205ca7c 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 fb92b9cff4..663b35b782 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 5a668df083..6c0412a0aa 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 c975f68623..07ef9bb7ba 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 d3e8af0560..c92255fc2d 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 8e10a23e60..6de120955e 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 8bc503b149..e0b1b87957 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 fa99bbe85f..87f327993f 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 cd457b7398..be27df102f 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 56155fff33..e8bafcec09 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/index.html b/docs/using-qovery/integration/index.html index 933c75f041..5097b66825 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 d115441aa7..e043b987f1 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 07bbd7a011..dacc919b68 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 787f66b934..1c850eeadf 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 6fcb4a71db..695839bdb4 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 5026798002..0c925e9cc6 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 ce4f495fdb..c6a550fdce 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 d774b0b7a7..75147e289f 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 b56726fc03..fd26b2857a 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 08f5859828..71e0f1cb45 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 6ef789f45b..a3837b3abb 100644 --- a/docs/using-qovery/interface/cli/index.html +++ b/docs/using-qovery/interface/cli/index.html @@ -26,7 +26,7 @@ - + @@ -82,7 +82,7 @@ - + diff --git a/docs/using-qovery/interface/index.html b/docs/using-qovery/interface/index.html index c880496148..c32a40bb7c 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 76ed9a548b..8879c0712e 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 5c0ad5ea09..1b7f2a4c26 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 d1813b919d..7ac9e0ccc2 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 423ba9b312..095b2fe68e 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/application-troubleshoot/index.html b/docs/using-qovery/troubleshoot/application-troubleshoot/index.html index 82260957dc..1f97ca1f2d 100644 --- a/docs/using-qovery/troubleshoot/application-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/application-troubleshoot/index.html @@ -26,7 +26,7 @@ - + @@ -56,7 +56,7 @@ - + diff --git a/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html b/docs/using-qovery/troubleshoot/cluster-troubleshoot/index.html index 263acce6c2..732bb76fcc 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/database-troubleshoot/index.html b/docs/using-qovery/troubleshoot/database-troubleshoot/index.html index 64a6cf2d07..c33ed22f68 100644 --- a/docs/using-qovery/troubleshoot/database-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/database-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 86d97b2fd7..7a93006198 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/lifecycle-troubleshoot/index.html b/docs/using-qovery/troubleshoot/lifecycle-troubleshoot/index.html index f149454737..a2764f1826 100644 --- a/docs/using-qovery/troubleshoot/lifecycle-troubleshoot/index.html +++ b/docs/using-qovery/troubleshoot/lifecycle-troubleshoot/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/guides/advanced/build-on-top/index.html b/guides/advanced/build-on-top/index.html index f03563c8d4..022ec8da64 100644 --- a/guides/advanced/build-on-top/index.html +++ b/guides/advanced/build-on-top/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/advanced/continuous-integration/index.html b/guides/advanced/continuous-integration/index.html index ae6560b838..f8f03ea6c2 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 ec09d2e21f..b9e04ccc7f 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 5d4e2aa182..cab522049a 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 b7a15ff94a..ac94be387d 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 47a9350bd2..3291e7533a 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 04a4dd34cf..6d5546c6c5 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 20cf3b1f97..ee71a33e31 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 3751069145..a7d2fcc776 100644 --- a/guides/advanced/index.html +++ b/guides/advanced/index.html @@ -26,7 +26,7 @@ - + @@ -81,7 +81,7 @@ - + diff --git a/guides/advanced/microservices/index.html b/guides/advanced/microservices/index.html index ada51fb1b0..497ad78a15 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 b40c8aa799..0362d07801 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 8ecf232f57..65f9666efb 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 89f7d97106..f87d373cbb 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 2eade3826a..42ab6780c5 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 4ff8c714f3..dbc70ba5fd 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 ca85447066..e2aee685ac 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 77ead7ce4a..ae32165685 100644 --- a/guides/advanced/use-preview-environments/index.html +++ b/guides/advanced/use-preview-environments/index.html @@ -26,7 +26,7 @@ - + @@ -52,7 +52,7 @@ - + diff --git a/guides/cloud-provider/guide-amazon-web-services/index.html b/guides/cloud-provider/guide-amazon-web-services/index.html index c6e5ea9398..21b05e2e34 100644 --- a/guides/cloud-provider/guide-amazon-web-services/index.html +++ b/guides/cloud-provider/guide-amazon-web-services/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/cloud-provider/guide-google-cloud-platform/index.html b/guides/cloud-provider/guide-google-cloud-platform/index.html index 6de22e9965..549874be1c 100644 --- a/guides/cloud-provider/guide-google-cloud-platform/index.html +++ b/guides/cloud-provider/guide-google-cloud-platform/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/cloud-provider/guide-microsoft-azure/index.html b/guides/cloud-provider/guide-microsoft-azure/index.html index 2bf5ebff2f..96e8819e60 100644 --- a/guides/cloud-provider/guide-microsoft-azure/index.html +++ b/guides/cloud-provider/guide-microsoft-azure/index.html @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/guides/cloud-provider/guide-scaleway/index.html b/guides/cloud-provider/guide-scaleway/index.html index c738b5d673..d9296c9ee3 100644 --- a/guides/cloud-provider/guide-scaleway/index.html +++ b/guides/cloud-provider/guide-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/cloud-provider/index.html b/guides/cloud-provider/index.html index 1d3de6eed9..0c0f139b50 100644 --- a/guides/cloud-provider/index.html +++ b/guides/cloud-provider/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/guides/getting-started/create-a-database/index.html b/guides/getting-started/create-a-database/index.html index 54236342c1..6497913979 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 e9b1317486..9b0791908c 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 839d8b9f06..1b45c4e08b 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 f6242fc0d0..988e3a3334 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 649eb4341b..35271e779a 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 10ab9dcee7..9e0d9cfb58 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 e0e1654612..a5647aa279 100644 --- a/guides/index.html +++ b/guides/index.html @@ -26,7 +26,7 @@ - + @@ -181,7 +181,7 @@ - + diff --git a/guides/tags/cloud-provider-aws/index.html b/guides/tags/cloud-provider-aws/index.html index 9c6d10ef5f..c9d92dcbac 100644 --- a/guides/tags/cloud-provider-aws/index.html +++ b/guides/tags/cloud-provider-aws/index.html @@ -26,7 +26,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/guides/tags/cloud-provider-azure/index.html b/guides/tags/cloud-provider-azure/index.html index 65303fa2e4..4b3f883512 100644 --- a/guides/tags/cloud-provider-azure/index.html +++ b/guides/tags/cloud-provider-azure/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/cloud-provider-gcp/index.html b/guides/tags/cloud-provider-gcp/index.html index 48c54b85d6..0b9299b57b 100644 --- a/guides/tags/cloud-provider-gcp/index.html +++ b/guides/tags/cloud-provider-gcp/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/cloud-provider-scaleway/index.html b/guides/tags/cloud-provider-scaleway/index.html index 5b83a9f6e6..92d87d4756 100644 --- a/guides/tags/cloud-provider-scaleway/index.html +++ b/guides/tags/cloud-provider-scaleway/index.html @@ -26,7 +26,7 @@ - + @@ -51,7 +51,7 @@ - + diff --git a/guides/tags/database-postgresql/index.html b/guides/tags/database-postgresql/index.html index b8d8c30316..eac5e67fa2 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 53b6358367..06fe8012c9 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 12b74cc9f4..3ab35d9b8a 100644 --- a/guides/tags/index.html +++ b/guides/tags/index.html @@ -26,7 +26,7 @@ - + @@ -49,7 +49,7 @@ - + diff --git a/guides/tags/language-javascript/index.html b/guides/tags/language-javascript/index.html index a910ede2ad..f17ebeba6e 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 0851e59467..84d365e0ce 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 911b85cd91..56ec701056 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 bfc3992a28..3492584847 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 b5eec69a5d..13f7d99fde 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 f65c36d3cc..861515469e 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 4eda42863e..84b28fb109 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 fed1cdcd19..596b74dfb7 100644 --- a/guides/tags/technology-qovery/index.html +++ b/guides/tags/technology-qovery/index.html @@ -26,7 +26,7 @@ - + @@ -131,7 +131,7 @@ - + diff --git a/guides/tags/technology-terraform/index.html b/guides/tags/technology-terraform/index.html index 3fe67bf5cc..b6fa6bdec9 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 ded867f097..971931282c 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 7fecfb1f1e..5bd950545a 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 ca2853b569..2303a37a20 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 eea5664f84..331d547b79 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 7255759e9f..d417fdb36c 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 37df17ec05..e5ab2980a6 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 7aabadeff4..68b9c8a941 100644 --- a/guides/tutorial/cloudwatch-integration/index.html +++ b/guides/tutorial/cloudwatch-integration/index.html @@ -26,7 +26,7 @@ - + @@ -54,7 +54,7 @@ - + diff --git a/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html b/guides/tutorial/create-a-blazingly-fast-api-in-rust-part-1/index.html index 58075e8ea4..f90ec7dd12 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 81aaf9b080..425083fe97 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 4cf00830d6..a67e33119b 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 2ccbf7551f..5e3597eaea 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 ff4b190864..35edd7b890 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 707b24866e..831309dea0 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 6ba4206f43..92ee611da1 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 b9105d21e8..78b15014fa 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 7758c07f81..f91c55dd39 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 22a60887db..b4e71c41b3 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 d6c4772086..a81b75cacf 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 2a28c84243..66b1fecf0f 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 9365a0ffbd..f2686b1deb 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 79cacb4e79..95156eb89f 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 5422f2c946..1e49eebef8 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 e0db5b1303..849a0b243d 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 954714d57f..10be508413 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 9dd1110961..faf3a24c8a 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 e6cbb02245..be9247d748 100644 --- a/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html +++ b/guides/tutorial/how-to-deploy-a-rust-rest-api-application-on-aws-with-ease/index.html @@ -26,7 +26,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-helm-charts/index.html b/guides/tutorial/how-to-deploy-helm-charts/index.html index 155108ce24..2e08c4ea87 100644 --- a/guides/tutorial/how-to-deploy-helm-charts/index.html +++ b/guides/tutorial/how-to-deploy-helm-charts/index.html @@ -26,7 +26,7 @@ - + @@ -54,7 +54,7 @@ - + diff --git a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html index e5a5181261..605542a348 100644 --- a/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html +++ b/guides/tutorial/how-to-deploy-your-application-on-aws-in-30-minutes/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html b/guides/tutorial/how-to-integrate-qovery-with-github-actions/index.html index fc8b0d2153..a127165594 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 f7484e9bad..32f4b7dd75 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 1eeb649bbf..a61ec3bc91 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 fa3dbdcb8e..63b330e6f9 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 8bf45a8a77..e23f6f1856 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 50d52e7794..2e7f5558d9 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 57d9a55d85..08d7abcee8 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 9acbdeda69..bde1279d70 100644 --- a/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html +++ b/guides/tutorial/kubernetes-observability-and-monitoring-with-datadog/index.html @@ -26,7 +26,7 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/guides/tutorial/managing-env-variables-in-create-react-app/index.html b/guides/tutorial/managing-env-variables-in-create-react-app/index.html index 405c83e295..637a524666 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 870fa37365..c6a4430dd8 100644 --- a/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html +++ b/guides/tutorial/migrate-your-application-from-heroku-to-aws/index.html @@ -26,7 +26,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html b/guides/tutorial/setting-up-cloudflare-and-custom-domain-on-qovery/index.html index f7ceb36b87..7dd8abd290 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 @@ - + @@ -49,7 +49,7 @@ - + diff --git a/guides/tutorial/url-shortener-api-with-kotlin/index.html b/guides/tutorial/url-shortener-api-with-kotlin/index.html index d69116f72c..d8396aab46 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 955e56f321..9e66d573d5 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 d87086d0b9..bf171ea0e3 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 917d735b8d..fe4a097952 100644 --- a/guides/tutorial/working-with-git-submodules/index.html +++ b/guides/tutorial/working-with-git-submodules/index.html @@ -26,7 +26,7 @@ - + @@ -53,7 +53,7 @@ - + diff --git a/index.html b/index.html index f0590f5cde..4346238545 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 9a6cc4e29b..c4b0d49a50 100644 --- a/mailing_list/index.html +++ b/mailing_list/index.html @@ -22,7 +22,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/runtime~main.47eee4e4.js b/runtime~main.eed495e0.js similarity index 99% rename from runtime~main.47eee4e4.js rename to runtime~main.eed495e0.js index e83c73ee33..8d96827476 100644 --- a/runtime~main.47eee4e4.js +++ b/runtime~main.eed495e0.js @@ -1 +1 @@ -!function(e){function c(c){for(var f,a,r=c[0],n=c[1],o=c[2],u=0,i=[];ufunction MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("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,`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-contianer-registry"},`Application deployed from a contianer 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,`Having unique image tags is the best practice: you want to be 100% of the version running within a container. Moreover, not using unique image tags will have bad side effects given the image cachin mechanism provided by the Qovery mirroring system and by Kubernetes itself:`),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: since Qovery mirrors the images on the mirroring registry, if the image tag doesn't change between two versions, the new version won't be mirrored. This means that the new version will not be deployed.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Kubernetes: applications deployed by Qovery on Kubernetes uses the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy"}),`image pull policy`),` `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`ifNotPresent`),`. This means that if the image already exists on the Kubernetes node local disk, Kubernetes won't pull again the image. If the image tag doesn't change, then the new image version won't be pulled and your pods will still run the old application code.`)));};MDXContent.isMDXComponent=true; +const frontMatter={last_modified_on:'2023-10-13',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 contianer registry',id:'application-deployed-from-a-contianer-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 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,`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-contianer-registry"},`Application deployed from a contianer 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; /***/ }), /* 299 */ @@ -56813,13 +56813,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _site_src_components_Jump__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6); /* 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__(5); -const frontMatter={last_modified_on:'2023-06-14',title:'Clusters',description:'Learn how to configure your Kubernetes clusters on Qovery'};const metadata={"id":"using-qovery/configuration/clusters","title":"Clusters","description":"Learn how to configure your Kubernetes clusters on Qovery","source":"@site/docs/using-qovery/configuration/clusters.md","permalink":"/docs/using-qovery/configuration/clusters","sidebar":"docs","previous":{"title":"API Token","permalink":"/docs/using-qovery/configuration/organization/api-token"},"next":{"title":"Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider"}};/* @jsx mdx */const rightToc=[{value:'What is a cluster?',id:'what-is-a-cluster',children:[]},{value:'Why do I need a cluster?',id:'why-do-i-need-a-cluster',children:[]},{value:'What are the different instance types available when creating a cluster?',id:'what-are-the-different-instance-types-available-when-creating-a-cluster',children:[]},{value:'How does Qovery handle cluster updates and upgrades?',id:'how-does-qovery-handle-cluster-updates-and-upgrades',children:[]},{value:'What do you do when a vulnerability is found?',id:'what-do-you-do-when-a-vulnerability-is-found',children:[]},{value:'Managing your Clusters with Qovery',id:'managing-your-clusters-with-qovery',children:[{value:'Creating a Cluster',id:'creating-a-cluster',children:[]},{value:'Managing your Cluster Settings',id:'managing-your-cluster-settings',children:[]},{value:'Performing Actions on your Clusters',id:'performing-actions-on-your-clusters',children:[]}]},{value:'Logs',id:'logs',children:[]},{value:'Generating an SSH Key for Your Cluster',id:'generating-an-ssh-key-for-your-cluster',children:[]},{value:'Use custom domain and wildcard TLS for the whole cluster (beta)',id:'use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta',children:[]},{value:'Cleaning up a Cluster from your AWS Account',id:'cleaning-up-a-cluster-from-your-aws-account',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("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 clusters, we mean Kubernetes clusters. 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 architectures.`)),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 to properly deploy on this cluster. Most importantly will expose you to some unknown / untested areas which can put your applications 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 wich last approximatively 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 busines 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 on the vulnerability to help them take the right actions.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"managing-your-clusters-with-qovery"},`Managing your Clusters with Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`From the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`, you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"creating-a-cluster"},`Creating a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`here for AWS`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`here for Scaleway`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To create a cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add Cluster`),`:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/add-cluster-button.png",alt:"Add Cluster Button"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create Cluster`),` window enter:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cluster name`),`: enter the name of your choice for your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Description`),`: enter a description to identify better your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Production cluster`),`: select this option if your cluster will be used for production.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cloud provider`),`: select your cloud provider.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Region`),`: select the geographical area in which you want your cluster to be hosted.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Credentials`),`: select one of the existing cloud provider credentials or add a new one by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`New Credentials`),`. In the New credentials window, add the credentials that you have generated on your cloud provider console (`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`). Added credentials can be used later to create and manage additional cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set Resources`),` window, select: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cluster`),`: select the cluster type to use. Please refer to this section for `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),`more information`),`. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Instance type`),`: select the type of `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),`worker nodes`),` you want to deploy to your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Disk size`),`: select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node auto-scaling`),`: define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Also, before downsizing, you need to ensure that your applications will still have enough resources to run correctly.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At the bottom of the window, you can see an estimate of the cost associated with the selected instance type.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for AWS K8S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` window, select the features you want to enable on your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#features"}),`Features`),`.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for Single EC2 K3S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set SSH Key`),` window:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#generating-an-ssh-key-for-your-cluster"}),`Generating an SSH Key for Your Cluster`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Ready to install your cluster`),` window, check that the services needed to install your cluster are correct.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can now press the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Install`),` button.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Your cluster is now displayed in your organization settings, featuring the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Installing...`),` status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"managing-your-cluster-settings"},`Managing your Cluster Settings`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To manage the settings of an existing cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access your cluster settings, click on the wheel button:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Below you can find a description of each section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"general"},`General`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`General`),` tab allows you to define high-level information on your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Item`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Cluster Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To edit the name of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the description of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Production Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the production flag of your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"credentials"},`Credentials`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Here you can manage here the cloud provider credentials associated with your cluster. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you need to change the credentials:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`generate a new set of credentials on your cloud provider(`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`) `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`create the new credential on the Qovery by opening the drop-down and selectin "New Credentials"`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the two dedicated fields, enter the credentials you created on your cloud provider account:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Account Provider`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Field Labels`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`AWS`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Access Key`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Secret Access Key`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Scaleway`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Access Key`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Project ID`))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once created and associated, you need to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`updating your cluster`),` to apply the change.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"resources"},`Resources`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to modify the resources allocated for your cluster: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Instance type`),` dropdown menu, select the type of `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),`worker node(s)`),` you want to deploy to your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(AWS users only)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node disk size (GB)`),` field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(EKS users only)`),` On the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Nodes auto-scaling`),`, define the range of worker nodes you want to deploy to your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please note that a minimum of 3 worker nodes is required to deploy your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),`EKS cluster`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),`K3s clusters`),` can only have one node.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"features"},`Features`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` tab in your cluster settings allows you to check if the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC subnet`),` features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"static-ip"},`Static IP`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once set up, here is the procedure to find your static IP addresses:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On your AWS account, select the VPC service. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On the left menu, you’ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you’ll have your public IPs.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you work in a sensitive business area such as financial technology, enabling the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature can help fulfill the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"custom-vpc-subnet"},`Custom VPC Subnet`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`VPC`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A VPC can only be used if it has at least one range of IP addresses called a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`subnet`),`. When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC Subnet`),` feature on your cluster. For more information on how to set up VPC peering, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"network"},`Network`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Network`),` tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"performing-actions-on-your-clusters"},`Performing Actions on your Clusters`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`update`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`stop`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),`restart`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`delete`),` your clusters at organization level.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Action`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`Updating a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To redeploy your cluster after a change has been made to it.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),`Restarting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To restart your cluster after it has been temporarily stopped.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`),`.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access these actions:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To view your cluster actions, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Play`),` button:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_actions.png",alt:"Cluster Actions Menu"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A dropdown menu unfolds, featuring all the actions available on your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can follow the execution of the action via the cluster status and/or by accessing the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#logs"}),`Cluster Logs`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"updating-a-cluster"},`Updating a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To update your cluster, select the action `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Update`),` from the drop-down menu.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns 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 the update is complete, the status dot next to your cluster turns to 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. +const frontMatter={last_modified_on:'2023-10-13',title:'Clusters',description:'Learn how to configure your Kubernetes clusters on Qovery'};const metadata={"id":"using-qovery/configuration/clusters","title":"Clusters","description":"Learn how to configure your Kubernetes clusters on Qovery","source":"@site/docs/using-qovery/configuration/clusters.md","permalink":"/docs/using-qovery/configuration/clusters","sidebar":"docs","previous":{"title":"API Token","permalink":"/docs/using-qovery/configuration/organization/api-token"},"next":{"title":"Cloud Service Provider","permalink":"/docs/using-qovery/configuration/cloud-service-provider"}};/* @jsx mdx */const rightToc=[{value:'What is a cluster?',id:'what-is-a-cluster',children:[]},{value:'Why do I need a cluster?',id:'why-do-i-need-a-cluster',children:[]},{value:'What are the different instance types available when creating a cluster?',id:'what-are-the-different-instance-types-available-when-creating-a-cluster',children:[]},{value:'How does Qovery handle cluster updates and upgrades?',id:'how-does-qovery-handle-cluster-updates-and-upgrades',children:[]},{value:'What do you do when a vulnerability is found?',id:'what-do-you-do-when-a-vulnerability-is-found',children:[]},{value:'Managing your Clusters with Qovery',id:'managing-your-clusters-with-qovery',children:[{value:'Creating a Cluster',id:'creating-a-cluster',children:[]},{value:'Managing your Cluster Settings',id:'managing-your-cluster-settings',children:[]},{value:'Performing Actions on your Clusters',id:'performing-actions-on-your-clusters',children:[]}]},{value:'Logs',id:'logs',children:[]},{value:'Generating an SSH Key for Your Cluster',id:'generating-an-ssh-key-for-your-cluster',children:[]},{value:'Use custom domain and wildcard TLS for the whole cluster (beta)',id:'use-custom-domain-and-wildcard-tls-for-the-whole-cluster-beta',children:[]},{value:'Cleaning up a Cluster from your AWS Account',id:'cleaning-up-a-cluster-from-your-aws-account',children:[]}];const makeShortcode=name=>function MDXDefaultShortcode(props){console.warn("Component "+name+" was not imported, exported, or provided by MDXProvider as global scope");return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("div",props);};const layoutProps={rightToc};const MDXLayout="wrapper";function MDXContent({components,...props}){return Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(MDXLayout,Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("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 clusters, we mean Kubernetes clusters. A Kubernetes cluster is a collection of node machines that allows you to run containerized applications. It is usually made up of:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Pods`),`: think of a pod as one instance of your application. Pods are the smallest deployable objects in Kubernetes, and they are hosted by worker nodes.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Worker Nodes`),`: worker nodes essentially run your applications and workloads. When you create a cluster from your Qovery Console, it generates the set up of worker nodes (also called “instances”, “EC2 instances” for AWS users, or “droplets” for DigitalOcean users). +Qovery allows you to define worker nodes settings, so that you end up deploying the right type of instances on your infrastructure based on your CPU, memory, storage and network performance needs.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Control Plane`),` (or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"li"},`Master Node`),`): the control plane manages the worker nodes. Since we deploy managed Kubernetes services, the control plane is handled exclusively by your cloud provider, and left untouched by Qovery.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster-overview.jpg",alt:"Application"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on Kubernetes clusters, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://kubernetes.io/docs/concepts/overview/components/"}),`the Kubernetes documentation`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"why-do-i-need-a-cluster"},`Why do I need a cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery is built on top of Kubernetes, which means we need Kubernetes clusters to be able to deploy and run your applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Thanks to clusters, you can easily deploy several (and many) instances of the same application, so that if one fails, the others can instantly take over. Also, clusters can auto-scale, meaning that the number of worker nodes in a cluster can automatically go up or down as traffic fluctuates on your application(s), thus ensuring high availability and performance. Clusters are also extremely useful `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://www.qovery.com/blog/how-to-isolate-your-production-from-staging-with-kubernetes"}),`to isolate your production environment from your staging environment`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In short, through the use of clusters, Kubernetes provides you with a resilient, flexible and powerful infrastructure, fit for production environment needs and requirements. And with the help of Qovery, setting up and maintaining your Kubernetes clusters has never been easier.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to create and manage two types of clusters:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"th"},`Managed K8S `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"th"},` BETA - Single EC2 (K3s)`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Description`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`A multi-node Kubernetes cluster managed by your cloud provider (EKS, Kapsule etc..)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`K3s Cluster running on a single EC2 instance (single-node) `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Available only on AWS and still in BETA`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Usage`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Hosting professional applications in production (resilient, scalable and powerful infrastructure). Scalable staging / preview / dev environments`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Hobby projects, trying out Qovery, ephemeral environments deployment`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"td"},`Cloud provider cost`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Starting from 200$/month, based on the chosen instance type`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`starting from 20$/month, based on the chosen instance type`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Single EC2 (K3s) is still in BETA phase and has the following limitations",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can’t access the historical logs and thus you can access your application logs only if it's running (Since we don’t have loki installed)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`No public accessibility for DB container (we do not manage the public DNS entry for db). We will work on it in the upcoming weeks, in the meantime we will write a guide on how to connect to the DB via the ssh key / kubeconf`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can configure only 1 instance per application. Thus you can’t change the number of instances nor activate the sticky session feature`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Stop instance feature not ready YET`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`You can’t change the cluster settings without a service downtime since we kill the instance and we spawn a new one`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`We do not manage YET the external storage`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`We do not support YET the VPC setting`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`If you want to connect via SSH, you can't get YET the instance hostname directly in the Qovery console, you need to get it from the AWS console`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`K3s clusters are `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones"}),`deployed on one AWS availability zone`),`. Therefore, if a network or power disruption happens on the availability zone where your K3s instance is running, your applications will no longer be available until it is solved.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This is why we do not recommend installing K3s clusters to run professional applications in a production environment.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"what-are-the-different-instance-types-available-when-creating-a-cluster"},`What are the different instance types available when creating a cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The range of instance types available at cluster creation depends on your cloud provider:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`AWS offers over 400 instance types. You can `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://aws.amazon.com/ec2/instance-types/"}),`view their details on the official AWS website`),`, as well as `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://aws.amazon.com/ec2/pricing/on-demand/"}),`their pricing`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`Scaleway also offers a wide range of instance types, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"https://www.scaleway.com/en/pricing/"}),`whose details and pricing you can view on the official Scaleway website`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery supports only instance types having an x86_64 or ARM architecture.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"what-is-the-default-cluster"},`What is the default cluster?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The default cluster is the first cluster you installed in your organization. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`When you create a new environment and leave the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`mode`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`cluster`),` parameters set to the value `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Automatic`),`, your environment is deployed to:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`the cluster defined in one of `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/deployment-rule/#environment-deployment-rules"}),`your project rules`),`,`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`or to the default cluster if no project rule applies.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on deployment rules, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/project/"}),`Project`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"how-does-qovery-handle-cluster-updates-and-upgrades"},`How does Qovery handle cluster updates and upgrades?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`As far as cluster updates and upgrades to a newer version of Kubernetes are concerned, our Qovery engineering team handles everything in due time, so you don’t even need to think about it!`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You may notice that Qovery does not provide you with the latest Kubernetes version offered by your cloud provider. This is due to the high amount of testing we need to perform to ensure smooth upgrades with no interruptions for your applications. Our priority is always to guarantee you maximum uptime.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`DO NOT`),` upgrade the cluster version by yourself from the cloud provider console.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`That's the whole point of Qovery, we manage this task for you so you don't have to bother. +If you did update by mistake, then you need to reach to Qovery team in order to get some help.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Proceeding with a cluster version upgrade outside of Qovery will prevent any future update on this cluster`),` and might be irreversible preventing Qovery from properly deploying on this cluster. Most importantly will expose you to some unknown / untested areas which can put your application stability at risks. `)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Usually, we work on a given upgrade for one month of intensive testing on our end in order to make sure everything will be smooth for you. Once we are pretty confident our stack is stable, we move on with the following steps which last approximately 3 weeks:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Notify users about new version coming in approximatively 1 month before`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade clusters for a handful of beta-tester customers (1 week)`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade all non-production flagged clusters (1-2 week(s))`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`Upgrade all clusters`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If, somehow the planning or timeframe for the upgrade is clashing with your business needs, you will be able to contact us so we can arrange the best timeframe for you.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"what-do-you-do-when-a-vulnerability-is-found"},`What do you do when a vulnerability is found?`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Security is our main concern. When a vulnerability is found, here are the actions that we take:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We quickly identify how significant is the impact of the vulnerability.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We look at how we can solve or mitigate the vulnerability.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ol"},`We transparently communicate with our customers about the vulnerability to help them take the right actions.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"managing-your-clusters-with-qovery"},`Managing your Clusters with Qovery`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`From the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`, you can manage the settings of the clusters you want to run on your infrastructure. The clusters are then created (or updated) by the cloud provider that hosts them.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"creating-a-cluster"},`Creating a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To install a cluster, Qovery needs a set of credentials to access your cloud provider account (example: AWS secret_access_key and access_key_id). If this is the first time you are installing a cluster with Qovery, have a look at this guide on how to get the credentials: `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`here for AWS`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`here for Scaleway`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To create a cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Add Cluster`),`:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/add-cluster-button.png",alt:"Add Cluster Button"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create Cluster`),` window enter:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cluster name`),`: enter the name of your choice for your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Description`),`: enter a description to identify better your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Production cluster`),`: select this option if your cluster will be used for production.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cloud provider`),`: select your cloud provider.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Region`),`: select the geographical area in which you want your cluster to be hosted.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Credentials`),`: select one of the existing cloud provider credentials or add a new one by clicking on `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`New Credentials`),`. In the New credentials window, add the credentials that you have generated on your cloud provider console (`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`). Added credentials can be used later to create and manage additional cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set Resources`),` window, select: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Cluster`),`: select the cluster type to use. Please refer to this section for `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/clusters/#why-do-i-need-a-cluster"}),`more information`),`. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Instance type`),`: select the type of `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),`worker nodes`),` you want to deploy to your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Disk size`),`: select the size of the disks to be attached to your cluster instances (to locally store container images etc..). Setting available only on AWS.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node auto-scaling`),`: define the minimum and the maximum number of worker nodes that your cluster can run. The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows. Please note that a minimum of 3 worker nodes is required to deploy your EKS cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Also, before downsizing, you need to ensure that your applications will still have enough resources to run correctly.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`At the bottom of the window, you can see an estimate of the cost associated with the selected instance type.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To confirm, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Next`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for AWS K8S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` window, select the features you want to enable on your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#features"}),`Features`),`.`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"p"},`(Only for Single EC2 K3S Clusters)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Set SSH Key`),` window:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The SSH key enables you (or Qovery on your behalf) to freely manage your cluster. For information on how to generate an SSH key, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#generating-an-ssh-key-for-your-cluster"}),`Generating an SSH Key for Your Cluster`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can add an SSH key to your cluster settings later, however it is recommended to do it at cluster creation to avoid downtime.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Ready to install your cluster`),` window, check that the services needed to install your cluster are correct.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can now press the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Create and Install`),` button.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Your cluster is now displayed in your organization settings, featuring the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Installing...`),` status (orange status). Once your cluster is properly installed, its status turns to green and you will be able to deploy your applications on it.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"managing-your-cluster-settings"},`Managing your Cluster Settings`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To manage the settings of an existing cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access your cluster settings, click on the wheel button:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_settings.png",alt:"Display Cluster Settings"}))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Below you can find a description of each section`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"general"},`General`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`General`),` tab allows you to define high-level information on your cluster:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Item`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Cluster Name`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To edit the name of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the description of your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Production Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To enter or edit the production flag of your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"credentials"},`Credentials`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Here you can manage here the cloud provider credentials associated with your cluster. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you need to change the credentials:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`generate a new set of credentials on your cloud provider(`,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/#connect-your-aws-account"}),`Procedure for AWS account`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/cloud-service-provider/scaleway/#connect-your-scaleway-account"}),`Procedure for Scaleway account`),`) `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`create the new credential on the Qovery by opening the drop-down and selecting "New Credentials"`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`In the two dedicated fields, enter the credentials you created on your cloud provider account:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Account Provider`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Field Labels`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`AWS`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Access Key`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Secret Access Key`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Scaleway`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Access Key`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"td"},`Scaleway Project ID`))))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once created and associated, you need to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`updating your cluster`),` to apply the change.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"resources"},`Resources`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to modify the resources allocated for your cluster: `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Instance type`),` dropdown menu, select the type of `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"li"},{"href":"/docs/using-qovery/configuration/clusters/#what-is-a-cluster"}),`worker node(s)`),` you want to deploy to your cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(AWS users only)`),` In the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Node disk size (GB)`),` field, enter the disk capacity you want to allocate to your worker node(s) (meaning how much data, in gigabytes, you want each worker node to be able to hold).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("em",{parentName:"li"},`(EKS users only)`),` On the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"li"},`Nodes auto-scaling`),`, define the range of worker nodes you want to deploy to your cluster.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},"Instance type selection from your Qovery Console has direct consequences on your cloud provider\u2019s bill. While Qovery allows you to switch to a different instance type whenever you want, it is your sole responsibility to keep an eye on your infrastructure costs, especially when you want to upsize.",Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For more information on the instance types provided by each cloud provider and their associated pricing, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#what-are-the-different-instance-types-available-when-creating-a-cluster"}),`What are the different instance types available when creating a cluster?`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("br",null),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The lowest number is the number of worker nodes running on your infrastructure at any time, while the highest number is the maximum number of worker nodes that can automatically be deployed as traffic grows.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Please note that a minimum of 3 worker nodes is required to deploy your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),`EKS cluster`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#creating-a-cluster"}),`K3s clusters`),` can only have one node.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"features"},`Features`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Features`),` tab in your cluster settings allows you to check if the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` and `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC subnet`),` features are enabled on your cluster. The enabled features cannot be changed after the creation of the cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"static-ip"},`Static IP`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`By default, when your cluster is created, its worker nodes are allocated public IP addresses, which are used for external communication. For improved security and control, the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature allows you to ensure that outbound traffic from your cluster uses specific IP addresses.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once set up, here is the procedure to find your static IP addresses:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ul",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On your AWS account, select the VPC service. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",{parentName:"ul"},`On the left menu, you’ll find Elastic IP addresses. Once on it, in the Allocated IPv4 address column, you’ll have your public IPs.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you work in a sensitive business area such as financial technology, enabling the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Static IP`),` feature can help fulfil the security requirements of some of the external services you use, therefore making it easier for you to get whitelisted by them.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h5",{"id":"custom-vpc-subnet"},`Custom VPC Subnet`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`VPC`),` feature is currently only available to clusters deployed on AWS and can only be enabled at cluster creation.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Virtual Private Cloud (VPC) peering allows you to set up a connection between your Qovery VPC and another VPC on your AWS account. This way, you can access resources stored on your AWS VPC directly from your Qovery applications.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A VPC can only be used if it has at least one range of IP addresses called a `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`subnet`),`. When you create a cluster, Qovery automatically picks a default subnet for it. However, to perform VPC peering, you may want to define which specific VPC subnet you want to use, so that you can avoid any conflicting settings. To do so, you can enable the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("strong",{parentName:"p"},`Custom VPC Subnet`),` feature on your cluster. For more information on how to set up VPC peering, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"network"},`Network`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Network`),` tab in your cluster settings allows you to update your Qovery VPC route table so that you can perform VPC peering. For step-by-step guidelines on how to set up VPC peering, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://hub.qovery.com/guides/tutorial/aws-vpc-peering-with-qovery/"}),`see our dedicated tutorial`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h3",{"id":"performing-actions-on-your-clusters"},`Performing Actions on your Clusters`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`update`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`stop`),`, `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),`restart`),` or `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`delete`),` your clusters at organization level.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("table",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("thead",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"thead"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Action`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("th",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`Description`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tbody",{parentName:"table"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#updating-a-cluster"}),`Updating a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To redeploy your cluster after a change has been made to it.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To temporarily stop your cluster. Some services you have subscribed to via your cloud provider may still be active and incur costs when your cluster is stopped. For more information, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#stopping-a-cluster"}),`Stopping a cluster`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#restarting-a-cluster"}),`Restarting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To restart your cluster after it has been temporarily stopped.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("tr",{parentName:"tbody"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("td",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"tr"},{"align":null}),`To delete your cluster. This is final and needs to be done properly to ensure all the services deployed by Qovery on your cloud provider's account are disabled, with no leftover cloud-related costs. For more information, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"td"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a cluster`),`.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access these actions:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Steps__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"],{headingDepth:3,mdxType:"Steps"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("ol",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Open your `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://console.qovery.com"}),`Qovery Console`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`On the left menu bar, click on the Cluster page:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_section_access.png",alt:"Cluster Access"}))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To view your cluster actions, click `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Play`),` button:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",{align:"center"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("img",{src:"/img/configuration/clusters/cluster_actions.png",alt:"Cluster Actions Menu"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A dropdown menu unfolds, featuring all the actions available on your cluster.`)))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can follow the execution of the action via the cluster status and/or by accessing the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#logs"}),`Cluster Logs`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"updating-a-cluster"},`Updating a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`If you made a change on your cluster, you need to run an update on your cluster to propagate remotely the new configuration. `),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To update your cluster, select the action `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Update`),` from the drop-down menu.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Updating...`),` (orange status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the update is complete, the status dot next to your cluster turns green.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"stopping-a-cluster"},`Stopping a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Qovery allows you to temporarily stop your cluster instead of deleting it.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`When you stop a cluster from the Qovery console, only the workers nodes managed by Qovery are stopped. If you have subscribed to services via your cloud provider (load balancing, storage system, or any other managed services), they will remain active and you will be charged for them. For more information, please contact your cloud provider. To permanently delete a cluster and all its associated costs, see `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"/docs/using-qovery/configuration/clusters/#deleting-a-cluster"}),`Deleting a Cluster`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To temporarily stop a cluster, select the `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Stop`),` action from the drop-down menu. A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Pausing...`),` (orange status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once the stop is complete, the status dot next to your cluster turns to grey, and the status of your cluster turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Paused`),` (gray status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"restarting-a-cluster"},`Restarting a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You can restart a cluster after it has been temporarily stopped.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To restart your cluster, select the action `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Resume`),` from the drop-down menu.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A confirmation pop-up window opens before triggering the action.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, the status of your cluster turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Updating...`),` (orange status).`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once your cluster has restarted, the status dot next to your cluster turns to green.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h4",{"id":"deleting-a-cluster"},`Deleting a Cluster`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"warning",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Deleting a cluster from the Qovery console is final, and cuts all associated costs on your cloud provider's end. -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,`A confirmation is required before deleting the cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, its status turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Deleting...`),` (red status) and once the deletion is complete, the cluster is removed from your organization settings.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"logs"},`Logs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "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(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access the logs you need to open the cluster, click the log 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_logs_access.png",alt:"Cluster Logs"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A new windows is opened, displaying the logs of the 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/ok-infra-logs.jpg",alt:"Cluster Logs"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`The tab system on the right allows you to access the cluster information and, if an error occurred, the detail of the error.`),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/error-infra-logs.jpg",alt:"Cluster Logs"})),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 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(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://discuss.qovery.com/"}),`forum`),` 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":"https://discord.com/channels/688766934917185556/688826155611979807"}),`discord channel`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"generating-an-ssh-key-for-your-cluster"},`Generating an SSH Key for 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,`You need a public SSH key for your K3s clusters only.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "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(_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,` On your computer, open a terminal.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,` Run `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`ssh-keygen -t`),`, followed by the key type and an optional comment.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This comment is included in the .pub file that is created. You may want to use an email address for the comment.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For example, you can enter `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`ssh-keygen -t rsa -b 2048 -C ""`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Press `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Enter`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You should get an output similar to:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{}),`{ +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,`A confirmation is required before deleting the cluster.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Once confirmed, its status turns to `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Deleting...`),` (red status) and once the deletion is complete, the cluster is removed from your organization settings.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"logs"},`Logs`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "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(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`To access the logs you need to open the cluster, click the log 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_logs_access.png",alt:"Cluster Logs"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`A new window is opened, displaying the logs of the 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/ok-infra-logs.jpg",alt:"Cluster Logs"})),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "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(_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/error-infra-logs.jpg",alt:"Cluster Logs"})),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 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(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("a",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"p"},{"href":"https://discuss.qovery.com/"}),`forum`),` 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":"https://discord.com/channels/688766934917185556/688826155611979807"}),`discord channel`))),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("h2",{"id":"generating-an-ssh-key-for-your-cluster"},`Generating an SSH Key for 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,`You need a public SSH key for your K3s clusters only.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "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(_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,` On your computer, open a terminal.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,` Run `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`ssh-keygen -t`),`, followed by the key type and an optional comment.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])(_site_src_components_Alert__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"],{type:"info",mdxType:"Alert"},Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`This comment is included in the .pub file that is created. You may want to use an email address for the comment.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`For example, you can enter `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`ssh-keygen -t rsa -b 2048 -C ""`),`.`)),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("li",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`Press `,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("inlineCode",{parentName:"p"},`Enter`),`.`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("p",null,`You should get an output similar to:`),Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("pre",null,Object(_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__[/* mdx */ "b"])("code",Object(_home_runner_work_documentation_documentation_website_node_modules_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])({parentName:"pre"},{}),`{ Generating public/private ed25519 key pair. Enter file in which to save the key (/home/user/.ssh/id_ed25519): }