diff --git a/.gitleaksignore b/.gitleaksignore index 882d679bec..dc1917d90f 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -110,3 +110,6 @@ e4040084011d4d7935a589959b96ebc5cfba7a94:docs/docs-content/integrations/kubernet e4040084011d4d7935a589959b96ebc5cfba7a94:docs/docs-content/integrations/kubernetes.md:generic-api-key:1125 e4040084011d4d7935a589959b96ebc5cfba7a94:docs/docs-content/integrations/kubernetes.md:generic-api-key:391 87bf9f7353f94ac2ecf85da3be3412202de7b72f:docusaurus.config.js:generic-api-key:363 +969ac609f82bacb36093c429adfc096c5a97e10f:docs/docs-content/tutorials/cluster-deployment/pde/deploy-app.md:generic-api-key:1195 +969ac609f82bacb36093c429adfc096c5a97e10f:docs/docs-content/tutorials/cluster-deployment/pde/deploy-app.md:generic-api-key:1232 +969ac609f82bacb36093c429adfc096c5a97e10f:docs/docs-content/tutorials/edge/deploy-cluster.md:generic-api-key:240 diff --git a/README.md b/README.md index 5b5f67017f..152f89b555 100644 --- a/README.md +++ b/README.md @@ -555,6 +555,75 @@ scheme. The rows of cards are dynamically created according to the list of speci /> ``` +## Tutorials Sidebar + +This section describes how to publish new tutorials and add new categories to the Tutorials sidebar. + +### Add a New Category + +To add a new sidebar category to Tutorials, create a new directory under `docs/docs-content/tutorials`. For example, +let's add a directory called `new-tutorials`. + +> [!NOTE] +> Each category directory must have at least one **.md** file to render in the sidebar. If you add an empty directory to +> `sidebars.js`, the build will break. + +```shell +. +├── _category_.json +├── cluster-deployment +│   ├── _category_.json +│   ├── pcg +│   │   ├── _category_.json +│   └── └── deploy-app-pcg.md +└── new-tutorials + ├── _category_.json + └── new-tutorial +``` + +Then, add the following code to the `tutorialSidebar` array in the `sidebars.js` file. + +```js +tutorialSidebar: [ + { + type: "category", + label: string, + className: "category", + collapsed: false, + collapsible: false, + items: [{ type: "autogenerated", dirName: "tutorials/new-tutorials" }], + customProps: { + icon: string, + }, + }, + ... +]; +``` + +Consider the following example for reference. + +```js +tutorialSidebar: [ + { + type: "category", + label: "Edge", + className: "category", + collapsible: false, + collapsed: false, + items: [{ type: "autogenerated", dirName: "tutorials/edge" }], + customProps: { + icon: "microchip", + }, + }, + ... +]; +``` + +### Publish New Tutorials + +To add tutorials to an existing category, create a new **.md** file in the respective directory under +`docs-content/tutorials` and follow the guidance outlined in [Creating Pages](#creating-pages). + ## Partials Component This is a custom component that allows you to create and use diff --git a/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md b/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md index 8dc729f766..e716afa537 100644 --- a/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md +++ b/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md @@ -894,6 +894,6 @@ After building the Edge artifacts and creating an Edge cluster profile, the next image to prepare your Edge host. To learn more about utilizing Edge artifacts to prepare Edge hosts and deploy Palette-managed Edge clusters, we encourage you to check out the reference resources below. -- [Deploy an Edge Cluster on VMware](../../site-deployment/virtual-deployment/deploy-cluster.md) +- [Deploy an Edge Cluster on VMware](../../../../tutorials/edge/deploy-cluster.md) - [Installation](../../site-deployment/stage.md) diff --git a/docs/docs-content/clusters/edge/site-deployment/site-deployment.md b/docs/docs-content/clusters/edge/site-deployment/site-deployment.md index 82db695dc6..e6ea0e8bee 100644 --- a/docs/docs-content/clusters/edge/site-deployment/site-deployment.md +++ b/docs/docs-content/clusters/edge/site-deployment/site-deployment.md @@ -41,8 +41,8 @@ particularly useful in testing and learning environments. Refer to [Create Edge OVF Templates](./virtual-deployment/create-ovf-template.md) and [Provision Edge Host VMs](./virtual-deployment/vm-edge-host.md) to learn how to create Open Virtualization Format (OVF) templates and provision Edge hosts using the templates. Or check out the -[Deploy Edge Cluster on VMware](./virtual-deployment/deploy-cluster.md) for an end-to-end tutorial to learn the Palette -Edge deployment lifecycle using VMs. +[Deploy Edge Cluster on VMware](../../../tutorials/edge/deploy-cluster.md) for an end-to-end tutorial to learn the +Palette Edge deployment lifecycle using VMs. ## Resources diff --git a/docs/docs-content/clusters/edge/site-deployment/virtual-deployment/virtual-deployment.md b/docs/docs-content/clusters/edge/site-deployment/virtual-deployment/virtual-deployment.md index feba4942c0..9b0f6f4d4b 100644 --- a/docs/docs-content/clusters/edge/site-deployment/virtual-deployment/virtual-deployment.md +++ b/docs/docs-content/clusters/edge/site-deployment/virtual-deployment/virtual-deployment.md @@ -12,14 +12,14 @@ Palette and deploy clusters on it just like a physical Edge host. This allows yo before devoting physical resources. In addition, thanks to the flexibility of virtual environments, deployment to VMs can also be a way of learning how to -work with Palette Edge. Check out the [Deploy an Edge Cluster on VMware](./deploy-cluster.md) tutorial, which guides you -through the entire lifecycle of Edge deployment using virtual machines on VMware. +work with Palette Edge. Check out the [Deploy an Edge Cluster on VMware](../../../../tutorials/edge/deploy-cluster.md) +tutorial, which guides you through the entire lifecycle of Edge deployment using virtual machines on VMware. Once an Edge host is registered with Palette, you can then proceed to allocate the Edge host to a cluster. For more information, refer to [Create Cluster Definition](../cluster-deployment.md). ## Resources -- [Deploy an Edge Cluster on VMware](./deploy-cluster.md) +- [Deploy an Edge Cluster on VMware](../../../../tutorials/edge/deploy-cluster.md) - [Create an Edge OVF Template](./create-ovf-template.md) - [Provision an Edge Host VM](./vm-edge-host.md) diff --git a/docs/docs-content/clusters/pcg/pcg.md b/docs/docs-content/clusters/pcg/pcg.md index 91aad4ff9c..72d2f49669 100644 --- a/docs/docs-content/clusters/pcg/pcg.md +++ b/docs/docs-content/clusters/pcg/pcg.md @@ -41,4 +41,4 @@ existing Kubernetes cluster. Refer to the table below to learn more about the su - [Manage a PCG](./manage-pcg/manage-pcg.md) -- [Deploy App Workloads with a PCG](./deploy-app-pcg.md) +- [Deploy App Workloads with a PCG](../../tutorials/cluster-deployment/pcg/deploy-app-pcg.md) diff --git a/docs/docs-content/clusters/public-cloud/deploy-k8s-cluster.md b/docs/docs-content/clusters/public-cloud/deploy-k8s-cluster.md index 4925df9fbd..41871802a0 100644 --- a/docs/docs-content/clusters/public-cloud/deploy-k8s-cluster.md +++ b/docs/docs-content/clusters/public-cloud/deploy-k8s-cluster.md @@ -1380,8 +1380,9 @@ Palette assures consistency across cluster deployments through cluster profiles. deploy applications to a Kubernetes environment with little or no prior Kubernetes knowledge. In a matter of minutes, you were able to provision a new Kubernetes cluster and deploy an application. -We encourage you to check out the [Deploy an Application using Palette Dev Engine](/devx/apps/deploy-app) tutorial to -learn more about Palette. Palette Dev Engine can help you deploy applications more quickly through the usage of +We encourage you to check out the +[Deploy an Application using Palette Dev Engine](/tutorials/cluster-deployment/pde/deploy-app) tutorial to learn more +about Palette. Palette Dev Engine can help you deploy applications more quickly through the usage of [virtual clusters](../../glossary-all.md#palette-virtual-cluster). Feel free to check out the reference links below to learn more about Palette. diff --git a/docs/docs-content/devx/apps/apps.md b/docs/docs-content/devx/apps/apps.md index 6420e5dc68..840a54e854 100644 --- a/docs/docs-content/devx/apps/apps.md +++ b/docs/docs-content/devx/apps/apps.md @@ -19,4 +19,4 @@ Check out the resource links below to learn more about Apps. - [App Logs](logs.md) -- [Deploy an Application using the Palette Dev Engine](deploy-app.md) +- [Deploy an Application using the Palette Dev Engine](../../tutorials/cluster-deployment/pde/deploy-app.md) diff --git a/docs/docs-content/devx/apps/create-app.md b/docs/docs-content/devx/apps/create-app.md index c132cd6cb4..5e6edbedb9 100644 --- a/docs/docs-content/devx/apps/create-app.md +++ b/docs/docs-content/devx/apps/create-app.md @@ -18,7 +18,8 @@ Use the following steps to create and deploy an app to a virtual cluster. :::info A tutorial is available to help you learn how to use Palette Dev Engine by deploying an application. Check out -[Deploy an Application using Palette Dev Engine](deploy-app.md) to get started with Palette Dev Engine. +[Deploy an Application using Palette Dev Engine](../../tutorials/cluster-deployment/pde/deploy-app.md) to get started +with Palette Dev Engine. ::: diff --git a/docs/docs-content/devx/devx.md b/docs/docs-content/devx/devx.md index 9624381866..e496fe4812 100644 --- a/docs/docs-content/devx/devx.md +++ b/docs/docs-content/devx/devx.md @@ -26,8 +26,9 @@ each mode. ## Get Started -To get started with App Mode, give the tutorial [Deploy an Application using Palette Dev Engine](apps/deploy-app.md) a -try so that you can learn how to use App Mode with Palette Dev Engine. +To get started with App Mode, give the tutorial +[Deploy an Application using Palette Dev Engine](../tutorials/cluster-deployment/pde/deploy-app.md) a try so that you +can learn how to use App Mode with Palette Dev Engine. ## Supported Platforms diff --git a/docs/docs-content/devx/enterprise-user.md b/docs/docs-content/devx/enterprise-user.md index a485d9b8d8..060d8b9d61 100644 --- a/docs/docs-content/devx/enterprise-user.md +++ b/docs/docs-content/devx/enterprise-user.md @@ -41,7 +41,7 @@ started. Create your application profiles and deploy your applications to Palett Use the following resource to get started with PDE today. -- [Tutorial](./apps/deploy-app.md). +- [Tutorial](../tutorials/cluster-deployment/pde/deploy-app.md). - Learn about [App Mode versus Cluster Mode](../introduction/palette-modes.md). diff --git a/docs/docs-content/devx/services/service-listings/cockroach-db.md b/docs/docs-content/devx/services/service-listings/cockroach-db.md index 3699d92b64..649ccef2d5 100644 --- a/docs/docs-content/devx/services/service-listings/cockroach-db.md +++ b/docs/docs-content/devx/services/service-listings/cockroach-db.md @@ -69,7 +69,7 @@ Palette users can deploy CockroachDB to a virtual cluster by using the following 7. Deploy the app profile to a Palette Virtual Cluster. Use the [Deploy a Virtual Cluster](../../../clusters/palette-virtual-clusters/deploy-virtual-cluster.md#deploy-a-virtual-cluster) guide for additional guidance or check out the - [Deploy an Application using Palette Dev Engine](../../apps/deploy-app.md) tutorial. + [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) tutorial. ### Validate diff --git a/docs/docs-content/devx/services/service-listings/vault.md b/docs/docs-content/devx/services/service-listings/vault.md index 4226305d95..5874c333ef 100644 --- a/docs/docs-content/devx/services/service-listings/vault.md +++ b/docs/docs-content/devx/services/service-listings/vault.md @@ -80,7 +80,8 @@ Use the following steps to learn how to deploy Vault to your virtual cluster. 7. Deploy the app profile to a Palette Virtual Cluster. Use the [Deploy a Virtual Cluster](../../../clusters/palette-virtual-clusters/deploy-virtual-cluster.md) guide for additional - guidance or check out the [Deploy an Application using Palette Dev Engine](../../apps/deploy-app.md) tutorial. + guidance or check out the + [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) tutorial. ### Validate diff --git a/docs/docs-content/getting-started/deploy-k8s-cluster.md b/docs/docs-content/getting-started/deploy-k8s-cluster.md index 6f75358448..3374a6a93f 100644 --- a/docs/docs-content/getting-started/deploy-k8s-cluster.md +++ b/docs/docs-content/getting-started/deploy-k8s-cluster.md @@ -350,5 +350,6 @@ In this tutorial, you used the cluster profile you created in the previous [Create a Cluster Profile](./create-cluster-profile.md) tutorial to deploy a host cluster onto your preferred cloud service provider. After the cluster deployed, you verified the Hello Universe application was successfully deployed. -We recommend that you continue to the [Deploy Cluster Profile Updates](./update-k8s-cluster.md) tutorial to learn how to -update your host cluster. +We recommend that you continue to the +[Deploy Cluster Profile Updates](../tutorials/cluster-management/update-maintain/update-k8s-cluster.md) tutorial to +learn how to update your host cluster. diff --git a/docs/docs-content/getting-started/getting-started.md b/docs/docs-content/getting-started/getting-started.md index a3383a9a59..2b3cff4f32 100644 --- a/docs/docs-content/getting-started/getting-started.md +++ b/docs/docs-content/getting-started/getting-started.md @@ -4,7 +4,7 @@ title: "Getting Started" description: "Spectro Cloud Getting Started" hide_table_of_contents: true sidebar_custom_props: - icon: "overview" + icon: "flag-checkered" tags: ["getting-started"] --- diff --git a/docs/docs-content/getting-started/terraform.md b/docs/docs-content/getting-started/terraform.md index 62ecc5c573..380ffd4626 100644 --- a/docs/docs-content/getting-started/terraform.md +++ b/docs/docs-content/getting-started/terraform.md @@ -554,8 +554,9 @@ podman rmi --force ghcr.io/spectrocloud/tutorials:1.1.3 In this tutorial, you created a cluster profile, which is a template that contains the core layers required to deploy a host cluster. You then deployed a host cluster onto your preferred cloud service provider using Terraform. -We encourage you to check out the [Deploy an Application using Palette Dev Engine](../devx/apps/deploy-app.md) tutorial -to learn more about Palette. Palette Dev Engine can help you deploy applications more quickly through the usage of +We encourage you to check out the +[Deploy an Application using Palette Dev Engine](../tutorials/cluster-deployment/pde/deploy-app.md) tutorial to learn +more about Palette. Palette Dev Engine can help you deploy applications more quickly through the usage of [virtual clusters](../glossary-all.md#palette-virtual-cluster). Feel free to check out the reference links below to learn more about Palette. diff --git a/docs/docs-content/integrations/community_packs.md b/docs/docs-content/integrations/community_packs.md index 81894f9e96..889cbc1171 100644 --- a/docs/docs-content/integrations/community_packs.md +++ b/docs/docs-content/integrations/community_packs.md @@ -14,7 +14,7 @@ integrations with Spectro Cloud Palette. We welcome all contributions to the Spectro Cloud community packs, either by adding new packs or updating existing packs. You can read our [Contribution Guidelines](https://github.com/spectrocloud/pack-central?tab=readme-ov-file#contributing) in the community -packs repository. Check out the [Deploy a Custom Pack](../registries-and-packs/deploy-pack.md) tutorial to learn more +packs repository. Check out the [Deploy a Custom Pack](../tutorials/profiles/deploy-pack.md) tutorial to learn more about how to build and deploy your own custom pack. :::warning diff --git a/docs/docs-content/integrations/hello-universe.md b/docs/docs-content/integrations/hello-universe.md index d96bfa7dad..e1240677bd 100644 --- a/docs/docs-content/integrations/hello-universe.md +++ b/docs/docs-content/integrations/hello-universe.md @@ -174,6 +174,6 @@ data "spectrocloud_pack" "hellouniverse" { - [Hello Universe GitHub Repository](https://github.com/spectrocloud/hello-universe) -- [Deploy a Custom Pack Tutorial](../registries-and-packs/deploy-pack.md) +- [Deploy a Custom Pack Tutorial](../tutorials/profiles/deploy-pack.md) - [Registries and Packs](../registries-and-packs/registries-and-packs.md) diff --git a/docs/docs-content/integrations/kubernetes-support.md b/docs/docs-content/integrations/kubernetes-support.md index ec1086c200..0ba8448548 100644 --- a/docs/docs-content/integrations/kubernetes-support.md +++ b/docs/docs-content/integrations/kubernetes-support.md @@ -86,5 +86,6 @@ To learn more about upgrading your cluster and cluster profiles, check out the r - [Update a Cluster](../clusters/cluster-management/cluster-updates.md) - [Version a Cluster Profile](../profiles/cluster-profiles/modify-cluster-profiles/version-cluster-profile.md) -We also recommend you check out [Deploy Cluster Profile Updates](../clusters/cluster-management/update-k8s-cluster.md) -tutorial to learn how to update your cluster profile. +We also recommend you check out +[Deploy Cluster Profile Updates](../tutorials/cluster-management/update-maintain/update-k8s-cluster.md) tutorial to +learn how to update your cluster profile. diff --git a/docs/docs-content/kubernetes-knowlege-hub/how-to/how-to-retrieve-images-from-private-registry.md b/docs/docs-content/kubernetes-knowlege-hub/how-to/how-to-retrieve-images-from-private-registry.md index 45d8f33b24..79e12c0594 100644 --- a/docs/docs-content/kubernetes-knowlege-hub/how-to/how-to-retrieve-images-from-private-registry.md +++ b/docs/docs-content/kubernetes-knowlege-hub/how-to/how-to-retrieve-images-from-private-registry.md @@ -222,8 +222,8 @@ use it in a Kubernetes deployment configuration. This allows you to pull images restrictions or limitations. To learn more about Kubernetes and how to use it to deploy your application, check out -[Palette's Dev Engine](../../devx/apps/deploy-app.md) and how it can reduce the challenges often encountered with -deploying apps to Kubernetes. You can also read about +[Palette's Dev Engine](../../tutorials/cluster-deployment/pde/deploy-app.md) and how it can reduce the challenges often +encountered with deploying apps to Kubernetes. You can also read about [how to deploy a stateless frontend application](/kubernetes-knowlege-hub/tutorials/deploy-stateless-frontend-app) on Kubernetes or join our [slack channel](https://join.slack.com/t/spectrocloudcommunity/shared_invite/zt-1mw0cgosi-hZJDF_1QU77vF~qNJoPNUQ). Learn diff --git a/docs/docs-content/profiles/app-profiles/create-app-profiles/create-helm-app-profile.md b/docs/docs-content/profiles/app-profiles/create-app-profiles/create-helm-app-profile.md index a7191eb469..4f3d7a34f6 100644 --- a/docs/docs-content/profiles/app-profiles/create-app-profiles/create-helm-app-profile.md +++ b/docs/docs-content/profiles/app-profiles/create-app-profiles/create-helm-app-profile.md @@ -13,8 +13,8 @@ create an app profile that contains a Helm chart. :::info A tutorial is available to help you learn how to use Palette Dev Engine by deploying an application. Check out -[Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) to get started with Palette Dev -Engine. +[Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) to get started +with Palette Dev Engine. ::: @@ -98,8 +98,9 @@ Use the following steps to validate that your app profile is available and ready 5. Deploy your application to a virtual cluster to verify all the required configurations and dependencies are correct. Review [Create and Manage Apps](../../../devx/apps/create-app.md) to learn how to deploy an app to a virtual cluster. - Check out the [Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) tutorial for a more - in-depth guide. + Check out the + [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) tutorial + for a more in-depth guide. ## Next Steps @@ -113,4 +114,4 @@ common third-party services such as databases, message queues, and more. - [Create and Manage Apps](../../../devx/apps/create-app.md) -- [Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) +- [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) diff --git a/docs/docs-content/profiles/app-profiles/create-app-profiles/create-manifest-app-profile.md b/docs/docs-content/profiles/app-profiles/create-app-profiles/create-manifest-app-profile.md index 7cb4be6d95..7beea86772 100644 --- a/docs/docs-content/profiles/app-profiles/create-app-profiles/create-manifest-app-profile.md +++ b/docs/docs-content/profiles/app-profiles/create-app-profiles/create-manifest-app-profile.md @@ -18,8 +18,8 @@ Use the following steps to create an app profile that contains a custom manifest :::info A tutorial is available to help you learn how to use Palette Dev Engine by deploying an application. Check out -[Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) to get started with Palette Dev -Engine. +[Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) to get started +with Palette Dev Engine. ::: @@ -101,8 +101,9 @@ Use the following steps to validate that your app profile is available and ready 5. Deploy your application to a virtual cluster to verify all the required configurations and dependencies are correct. Review [Create and Manage Apps](../../../devx/apps/create-app.md) to learn how to deploy an app to a virtual cluster. - Check out the [Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) tutorial for a more - in-depth guide. + Check out the + [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) tutorial + for a more in-depth guide. ## Next Steps @@ -116,4 +117,4 @@ common third-party services such as databases, message queues, and more. - [Create and Manage Apps](../../../devx/apps/create-app.md) -- [Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) +- [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) diff --git a/docs/docs-content/profiles/app-profiles/create-app-profiles/create-out-of-box-app-profile.md b/docs/docs-content/profiles/app-profiles/create-app-profiles/create-out-of-box-app-profile.md index 3026a3a2a4..9cb0e26320 100644 --- a/docs/docs-content/profiles/app-profiles/create-app-profiles/create-out-of-box-app-profile.md +++ b/docs/docs-content/profiles/app-profiles/create-app-profiles/create-out-of-box-app-profile.md @@ -14,8 +14,8 @@ object storage, database, and security services. Review the :::info A tutorial is available to help you learn how to use Palette Dev Engine by deploying an application. Check out -[Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) to get started with Palette Dev -Engine. +[Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) to get started +with Palette Dev Engine. ::: @@ -82,8 +82,9 @@ Use the following steps to validate that your app profile is available and ready 5. Deploy your application to a virtual cluster to verify all the required configurations and dependencies are correct. Review [Create and Manage Apps](../../../devx/apps/create-app.md) to learn how to deploy an app to a virtual cluster. - Check out the [Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) tutorial for a more - in-depth guide. + Check out the + [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) tutorial + for a more in-depth guide. ## Next Steps @@ -97,4 +98,4 @@ required for common third-party services such as databases, message queues, and - [Create and Manage Apps](../../../devx/apps/create-app.md) -- [Deploy an Application using Palette Dev Engine](../../../devx/apps/deploy-app.md) +- [Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) diff --git a/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-helm-addon.md b/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-helm-addon.md index 15ea7ed79c..4dab186a8c 100644 --- a/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-helm-addon.md +++ b/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-helm-addon.md @@ -63,7 +63,7 @@ Use the following steps to create a cluster profile by adding layers using Helm [Profile Customization](../../../profile-customization.md). For examples of pack structure for a Helm chart-based pack, review - [Build a Pack](../../../../registries-and-packs/deploy-pack.md#build-a-pack), and select the appropriate tab. + [Build a Pack](../../../../tutorials/profiles/deploy-pack.md#build-a-pack), and select the appropriate tab. ::: diff --git a/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-manifest-addon.md b/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-manifest-addon.md index 1d905cc0bc..0f192481f5 100644 --- a/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-manifest-addon.md +++ b/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/create-addon-profile/create-manifest-addon.md @@ -56,7 +56,7 @@ create a cluster profile by adding layers using manifests. [Profile Customization](../../../profile-customization.md). For examples of pack structure for a manifest-based pack, review - [Build a Pack](../../../../registries-and-packs/deploy-pack.md#build-a-pack), and select the appropriate tab. + [Build a Pack](../../../../tutorials/profiles/deploy-pack.md#build-a-pack), and select the appropriate tab. ::: diff --git a/docs/docs-content/registries-and-packs/registries/oci-registry/add-oci-packs.md b/docs/docs-content/registries-and-packs/registries/oci-registry/add-oci-packs.md index 4b5be96f68..a1d899fc15 100644 --- a/docs/docs-content/registries-and-packs/registries/oci-registry/add-oci-packs.md +++ b/docs/docs-content/registries-and-packs/registries/oci-registry/add-oci-packs.md @@ -14,7 +14,7 @@ different from the legacy Pack registries. To interact with an OCI Pack registry :::tip For guidance on how to add a custom pack to an OCI pack registry, check out the -[Deploy a Custom Pack](../../deploy-pack.md) tutorial. +[Deploy a Custom Pack](../../../tutorials/profiles/deploy-pack.md) tutorial. ::: diff --git a/docs/docs-content/tutorials/_category_.json b/docs/docs-content/tutorials/_category_.json new file mode 100644 index 0000000000..810f8b6022 --- /dev/null +++ b/docs/docs-content/tutorials/_category_.json @@ -0,0 +1,4 @@ +{ + "position": 1000, + "className": "hidden-category" +} diff --git a/docs/docs-content/tutorials/cluster-deployment/_category_.json b/docs/docs-content/tutorials/cluster-deployment/_category_.json new file mode 100644 index 0000000000..17f82942f1 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-deployment/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Cluster Deployment", + "position": 30 +} diff --git a/docs/docs-content/tutorials/cluster-deployment/data-center/_category_.json b/docs/docs-content/tutorials/cluster-deployment/data-center/_category_.json new file mode 100644 index 0000000000..de1ba29e25 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-deployment/data-center/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Data Center", + "position": 10 +} diff --git a/docs/docs-content/tutorials/cluster-deployment/pcg/_category_.json b/docs/docs-content/tutorials/cluster-deployment/pcg/_category_.json new file mode 100644 index 0000000000..e40b3cb00e --- /dev/null +++ b/docs/docs-content/tutorials/cluster-deployment/pcg/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Private Cloud Gateway", + "position": 20 +} diff --git a/docs/docs-content/clusters/pcg/deploy-app-pcg.md b/docs/docs-content/tutorials/cluster-deployment/pcg/deploy-app-pcg.md similarity index 94% rename from docs/docs-content/clusters/pcg/deploy-app-pcg.md rename to docs/docs-content/tutorials/cluster-deployment/pcg/deploy-app-pcg.md index de42649f6d..54085b27cc 100644 --- a/docs/docs-content/clusters/pcg/deploy-app-pcg.md +++ b/docs/docs-content/tutorials/cluster-deployment/pcg/deploy-app-pcg.md @@ -1,14 +1,12 @@ --- +sidebar_position: 0 sidebar_label: "Deploy App Workloads with a PCG" title: "Deploy App Workloads with a PCG" description: "Learn how to deploy a Private Cloud Gateway (PCG) to connect your data center or private cloud environment to Palette. This tutorial teaches you how to launch a PCG, create a data center cluster, and deploy a demo application." -hide_table_of_contents: false -toc_min_heading_level: 2 -toc_max_heading_level: 2 -sidebar_position: 50 tags: ["pcg", "tutorial"] +category: ["tutorial"] --- Palette Private Cloud Gateway (PCG) is a crucial infrastructure support component that acts as a bridge between your @@ -24,11 +22,11 @@ either deploy or delete Kubernetes clusters within the environment. This connect that is encrypted using the Transport Layer Security (TLS) protocol. Once a cluster is deployed, the PCG is no longer involved in the communication between Palette and the deployed cluster. The cluster then communicates directly with Palette through the Palette agent available within each cluster, which originates all network requests outbound toward -Palette. Refer to the [PCG Architecture](./architecture.md) section for more information. +Palette. Refer to the [PCG Architecture](../../../clusters/pcg/architecture.md) section for more information. A PCG comprises a cluster of nodes and can be deployed using two methods. The first method uses the Palette CLI to deploy a PCG in one of the three supported infrastructure environments; MAAS, OpenStack, or VMware vSphere. The other -method manually deploys a PCG [onto an existing Kubernetes cluster](./deploy-pcg-k8s.md). +method manually deploys a PCG [onto an existing Kubernetes cluster](../../../clusters/pcg/deploy-pcg-k8s.md). In this tutorial, you will deploy a VMware PCG using Palette CLI. Next, you will learn how to deploy a VMware cluster with a sample Kubernetes application called @@ -44,13 +42,13 @@ each other. To complete this tutorial, you will need the following prerequisites in place. - - A Palette account with [tenant admin](../../tenant-settings/tenant-settings.md) access. - - A Palette API key. Refer to the [Create API Key](../../user-management/authentication/api-key/create-api-key.md) page for instructions on how to create an API key. - - A [VMware vSphere](https://docs.vmware.com/en/VMware-vSphere/index.html) user account with the [required permissions](../data-center/vmware/permissions.md). + - A Palette account with [tenant admin](../../../tenant-settings/tenant-settings.md) access. + - A Palette API key. Refer to the [Create API Key](../../../user-management/authentication/api-key/create-api-key.md) page for instructions on how to create an API key. + - A [VMware vSphere](https://docs.vmware.com/en/VMware-vSphere/index.html) user account with the [required permissions](../../../clusters/data-center/vmware/permissions.md). - A Linux x86-64 machine with access to a terminal and Internet, as well as connection to both Palette and VMware vSphere. - - An SSH key pair. Use the [Create and Upload an SSH Key](../cluster-management/ssh-keys.md) guide to learn how to create an SSH key and upload it to Palette. + - An SSH key pair. Use the [Create and Upload an SSH Key](../../../clusters/cluster-management/ssh-keys.md) guide to learn how to create an SSH key and upload it to Palette. - The following IP address requirements must be met in your VMware vSphere environment: - - One IP address available for the single-node PCG deployment. Refer to the [PCG Sizing](./manage-pcg/scale-pcg-nodes.md) section for more information on sizing. + - One IP address available for the single-node PCG deployment. Refer to the [PCG Sizing](../../../clusters/pcg/manage-pcg/scale-pcg-nodes.md) section for more information on sizing. - One IP address reserved for cluster repave operations. - One IP address for the Virtual IP (VIP). - DNS must be able to resolve the domain `api.spectrocloud.com`. @@ -69,7 +67,7 @@ To complete this tutorial, you will need the following prerequisites in place. ::: - Ensure the following software is installed and available on your Linux machine. - - [Palette CLI](../../automation/palette-cli/install-palette-cli.md). + - [Palette CLI](../../../automation/palette-cli/install-palette-cli.md). - [Docker](https://docs.docker.com/desktop). - [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation). - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). @@ -78,7 +76,7 @@ To complete this tutorial, you will need the following prerequisites in place. ## Authenticate with Palette The initial step to deploy a PCG using Palette CLI involves authenticating with your Palette environment using the -[`palette login`](../../automation/palette-cli/commands/login.md) command. +[`palette login`](../../../automation/palette-cli/commands/login.md) command. In your terminal, execute the following command. @@ -89,7 +87,8 @@ palette login Once issued, you will be prompted for several parameters to complete the authentication. The table below outlines the required parameters along with the values that will be utilized in this tutorial. If a parameter is specific to your environment and Palette account, such as your Palette API key, ensure to input the value according to your environment. -Check out the [Deploy a PCG to VMware vSphere](../pcg/deploy-pcg/vmware.md) guide for more information. option. +Check out the [Deploy a PCG to VMware vSphere](../../../clusters/pcg/deploy-pcg/vmware.md) guide for more information. +option. | **Parameter** | **Value** | **Environment-Specific** | | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | @@ -98,7 +97,7 @@ Check out the [Deploy a PCG to VMware vSphere](../pcg/deploy-pcg/vmware.md) guid | **Spectro Cloud API Key** | Enter your Palette API Key. | Yes | | **Spectro Cloud Organization** | Select your Palette Organization name. | Yes | | **Spectro Cloud Project** | `None (TenantAdmin)` | No | -| **Acknowledge** | Accept the login banner message. [Login banner](../../tenant-settings/login-banner.md) messages are only displayed if the tenant admin enabled a login banner. | Yes | +| **Acknowledge** | Accept the login banner message. [Login banner](../../../tenant-settings/login-banner.md) messages are only displayed if the tenant admin enabled a login banner. | Yes | After accepting the login banner message, you will receive the following output confirming you have successfully authenticated with Palette. @@ -126,7 +125,7 @@ The `palette pcg install` command will prompt you for information regarding your resource configurations. The following tables display the required parameters along with the values that will be used in this tutorial. Enter the provided values when prompted. If a parameter is specific to your environment, such as your vSphere endpoint, enter the corresponding value according to your environment. For detailed information about each -parameter, refer to the [Deploy a PCG to VMware vSphere](../pcg/deploy-pcg/vmware.md) guide. +parameter, refer to the [Deploy a PCG to VMware vSphere](../../../clusters/pcg/deploy-pcg/vmware.md) guide. :::info @@ -194,7 +193,7 @@ environments. This tutorial will deploy a one-node PCG with dynamic IP placement (DDNS). If needed, you can convert a single-node PCG to a multi-node PCG to provide additional capacity. Refer to the - [Increase PCG Node Count](./manage-pcg/scale-pcg-nodes.md) guide for more information. + [Increase PCG Node Count](../../../clusters/pcg/manage-pcg/scale-pcg-nodes.md) guide for more information. | **Parameter** | **Value** | **Environment-Specific** | | ------------------- | ---------------------------------------------------------------------------- | ------------------------ | @@ -240,7 +239,8 @@ VMware cloud account with the same name as the PCG. The following recording demonstrates the `pcg install` command with the `--config-only` flag. When using this flag, a reusable configuration file named **pcg.yaml** is created under the path **.palette/pcg**. You can then utilize this file to install a PCG with predefined values using the command `pcg install` with the `--config-file` flag. Refer to the -[Palette CLI PCG Command](../../automation/palette-cli/commands/pcg.md) page for further information about the command. +[Palette CLI PCG Command](../../../automation/palette-cli/commands/pcg.md) page for further information about the +command. @@ -314,7 +314,7 @@ complete the core infrastructure stack. Next, click on the **Add New Pack** button to include add-on layers to your cluster profile. -Add the **MetalLB (Helm)** pack to your profile. The [MetalLB](../../integrations/metallb.md) pack provides a +Add the **MetalLB (Helm)** pack to your profile. The [MetalLB](../../../integrations/metallb.md) pack provides a load-balancer implementation for your Kubernetes cluster, as VMware does not offer a load balancer solution natively. The load balancer is required to help the _LoadBalancer_ service specified in the Hello Universe application manifest obtain an IP address, so that you can access the application from your browser. @@ -455,10 +455,10 @@ overview of each file. | lb-metallb-helm | 0.13.x | Load Balancer | | hello-universe | 1.1.x | App Service | - The [MetalLB](../../integrations/metallb.md) pack provides a load-balancer implementation for your Kubernetes cluster, - as VMware does not offer a load balancer solution natively. The load balancer is required to help the _LoadBalancer_ - service specified in the Hello Universe application manifest obtain an IP address, so that you can access the - application on your browser. + The [MetalLB](../../../integrations/metallb.md) pack provides a load-balancer implementation for your Kubernetes + cluster, as VMware does not offer a load balancer solution natively. The load balancer is required to help the + _LoadBalancer_ service specified in the Hello Universe application manifest obtain an IP address, so that you can + access the application on your browser. - **cluster.tf** - Configuration for the `spectrocloud_cluster_vsphere` resource. @@ -638,7 +638,7 @@ in environments like VMware vSphere without the need to configure complex firewa We encourage you to check out the reference resources below to learn more about PCGs. -- [Private Cloud Gateway](./pcg.md) -- [PCG Architecture](architecture.md) -- [Deploy a PCG to VMware vSphere](./deploy-pcg/vmware.md) -- [Manage PCG](./manage-pcg/manage-pcg.md) +- [Private Cloud Gateway](../../../clusters/pcg/pcg.md) +- [PCG Architecture](../../../clusters/pcg/architecture.md) +- [Deploy a PCG to VMware vSphere](../../../clusters/pcg/deploy-pcg/vmware.md) +- [Manage PCG](../../../clusters/pcg/manage-pcg/manage-pcg.md) diff --git a/docs/docs-content/tutorials/cluster-deployment/pde/_category_.json b/docs/docs-content/tutorials/cluster-deployment/pde/_category_.json new file mode 100644 index 0000000000..69825abd97 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-deployment/pde/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Palette Dev Engine", + "position": 30 +} diff --git a/docs/docs-content/devx/apps/deploy-app.md b/docs/docs-content/tutorials/cluster-deployment/pde/deploy-app.md similarity index 98% rename from docs/docs-content/devx/apps/deploy-app.md rename to docs/docs-content/tutorials/cluster-deployment/pde/deploy-app.md index 438e2928f6..f6e8a175a7 100644 --- a/docs/docs-content/devx/apps/deploy-app.md +++ b/docs/docs-content/tutorials/cluster-deployment/pde/deploy-app.md @@ -1,14 +1,13 @@ --- +sidebar_position: 0 sidebar_label: "Deploy an Application using Palette Dev Engine" title: "Deploy an Application using Palette Dev Engine" description: "Learn how to deploy applications to a Kubernetes cluster without the traditional overhead accompanied by Kubernetes. Palette’s App Mode reduces the deployment time and complexity when deploying applications to Kubernetes. Learn how to get started with Palette’s App Mode in this tutorial. Get started with the free tier of Palette App Mode" -icon: "" -hide_table_of_contents: false -sidebar_position: 10 tags: ["devx", "app mode", "pde", "tutorial"] +category: ["tutorial"] --- Palette’s mission is to reduce the challenges you, as a user, face when interacting with Kubernetes. Whether you are a @@ -43,7 +42,7 @@ following diagram illustrates the different layers that will power the tutorial The top layer is Palette, which is the product platform. Palette can be used in two modes: app mode or cluster mode. Each mode is intended for different use cases and personas, but for this tutorial, you will use app mode. For an in-depth explanation of each mode’s differences, check out the -[App Mode and Cluster Mode](../../introduction/palette-modes.md) documentation. +[App Mode and Cluster Mode](../../../introduction/palette-modes.md) documentation. ## Deploy The Environment @@ -95,7 +94,8 @@ information. Palette Dev Engine allows you to deploy up to two virtual clusters into the beehive cluster group. Each virtual cluster requires a minimum of 4 CPU, 4 GiB memory, and 2 GiB storage. When using the beehive cluster, you can allocate a maximum of 12 CPU, 16 Gib memory, and 20 GiB of storage. Check out the -[Palette Dev Engine and Quotas](../manage-dev-engine/resource-quota.md) documentation to learn more about limits. +[Palette Dev Engine and Quotas](../../../devx/manage-dev-engine/resource-quota.md) documentation to learn more about +limits. It will take a few minutes for the virtual cluster to deploy. In the meantime, navigate to the left **Main Menu** and click on **App Profiles**. @@ -204,7 +204,7 @@ In the next screen, assign the following values to the Postgres database. Take note of the **Output Variables** section. The Postgres service exposes several output variables to help other applications connect with the database. In the next section, you will use these output variables and other output variables that Palette exposes for each service. You can learn more about output variables by reviewing the app profile -[output variables](../../profiles/app-profiles/app-profile-output-vars.md) documentation. +[output variables](../../../profiles/app-profiles/app-profile-output-vars.md) documentation. Next, navigate to the top left side of the wizard screen and click on the **Actions** button **+**. Go ahead and select **Container Deployment**. @@ -250,7 +250,7 @@ contains the Kubernetes DNS value of the Postgres service container. :::info To learn more about connecting different service layers, refer to the -[Service Connectivity](../services/connectivity.md) resource. +[Service Connectivity](../../../devx/services/connectivity.md) resource. ::: @@ -1170,7 +1170,7 @@ pack { All container services expose their service address, Kubernetes hostname, and the exposed service ports as output variables. You will use output variables frequently when creating app profiles. You can learn more about connecting -services by referring to the [Service Connectivity](../services/connectivity.md) documentation. +services by referring to the [Service Connectivity](../../../devx/services/connectivity.md) documentation. ::: @@ -1284,9 +1284,9 @@ configuration files. To learn more about Palette Dev Engine and its capabilities, check out the references resource below. -- [Palette Modes](../../introduction/palette-modes.md) +- [Palette Modes](../../../introduction/palette-modes.md) - [Spectro Cloud Terraform Provider](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs) -- [App Profiles](../../profiles/app-profiles/app-profiles.md) -- [App Services](../services/services.md) -- [Palette Virtual Clusters](../palette-virtual-clusters/palette-virtual-clusters.md) +- [App Profiles](../../../profiles/app-profiles/app-profiles.md) +- [App Services](../../../devx/services/services.md) +- [Palette Virtual Clusters](../../../devx/palette-virtual-clusters/palette-virtual-clusters.md) - [Hello Universe GitHub respository](https://github.com/spectrocloud/hello-universe) diff --git a/docs/docs-content/tutorials/cluster-deployment/public-cloud/_category_.json b/docs/docs-content/tutorials/cluster-deployment/public-cloud/_category_.json new file mode 100644 index 0000000000..5692e052e9 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-deployment/public-cloud/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Public Cloud", + "position": 0 +} diff --git a/docs/docs-content/tutorials/cluster-deployment/public-cloud/deploy-k8s-cluster.md b/docs/docs-content/tutorials/cluster-deployment/public-cloud/deploy-k8s-cluster.md new file mode 100644 index 0000000000..b82f05d84d --- /dev/null +++ b/docs/docs-content/tutorials/cluster-deployment/public-cloud/deploy-k8s-cluster.md @@ -0,0 +1,1395 @@ +--- +sidebar_position: 0 +sidebar_label: "Deploy a Cluster" +title: "Deploy a Cluster" +description: "Learn how to deploy a Kubernetes cluster to a public cloud provider with Palette. " +tags: ["public cloud", "aws", "azure", "gcp", "tutorial"] +category: ["tutorial"] +--- + +Palette helps you create and manage Kubernetes clusters in various cloud environments with minimal overhead. + +Palette offers profile-based management for Kubernetes, enabling consistency, repeatability, and operational efficiency +across multiple clusters. A cluster profile allows you to customize the cluster infrastructure stack, allowing you to +choose the desired Operating System (OS), Kubernetes, Container Network Interfaces (CNI), Container Storage Interfaces +(CSI). You can further customize the stack with add-on application layers. For more information about cluster profile +types, refer to [Cluster Profiles](../../../profiles/cluster-profiles/cluster-profiles.md). + +After defining a cluster profile, you can provide the cloud environment details, the control plane, and worker node +configurations to deploy a host cluster. + +This tutorial will teach you how to deploy a host cluster with Palette using Amazon Web Services (AWS), Microsoft Azure, +or Google Cloud Platform (GCP) cloud providers. You can deploy a cluster using either Palette or Terraform. You will +learn about _Cluster Mode_ and _Cluster Profiles_ and how these components enable you to deploy customized applications +to Kubernetes with minimal effort. + +## Architecture + +As you navigate the tutorial, refer to this diagram to help you understand how Palette uses a cluster profile as a +blueprint for the host cluster you deploy. Palette clusters have the same node pools you may be familiar with: control +plane nodes, often called _control plane nodes_, and _worker nodes_ where you will deploy applications. The result is a +host cluster that Palette manages. + +![A view of Palette managing the Kubernetes lifecycle](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_application.webp) + +
+ +### Deploy the Cluster and the Application + +Select the workflow you want to learn more about. + +- [UI Workflow](#ui-workflow) + +- [Terraform Workflow](#terraform-workflow) + +
+ +## UI Workflow + +You can create and manage clusters directly from the Palette dashboard. Use the following steps to learn how to deploy a +host cluster to multiple cloud providers. + +### Prerequisites + +To complete this tutorial, you will need the following. + +- A public cloud account from one of these providers: + + - [AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account) + - [Azure](https://learn.microsoft.com/en-us/training/modules/create-an-azure-account) + - [GCP](https://cloud.google.com/docs/get-started) + +
+ +- Register the cloud account in Palette. The following resources provide additional guidance. + + - [Register and Manage AWS Accounts](../../../clusters/public-cloud/aws/add-aws-accounts.md) + - [Register and Manage Azure Cloud Accounts](../../../clusters/public-cloud/azure/azure-cloud.md) + - [Register and Manage GCP Accounts](../../../clusters/public-cloud/gcp/add-gcp-accounts.md) + +
+ +- An SSH Key Pair. Use the [Create and Upload an SSH Key](../../../clusters/cluster-management/ssh-keys.md) guide to + learn how to create an SSH key and upload it to Palette. + + - AWS users must create an AWS Key pair before starting the tutorial. If you need additional guidance, check out the + [Create EC2 SSH Key Pair](https://docs.aws.amazon.com/ground-station/latest/ug/create-ec2-ssh-key-pair.html) + tutorial. + +### Deploy the Environment + +The following steps will guide you through deploying the cluster infrastructure. You will start by creating a cluster +profile that you apply to the host cluster. + +
+ + + + +#### Create Cluster Profile (AWS) + +[Cluster profiles](../../../profiles/cluster-profiles/cluster-profiles.md) are templates you create with the following +core layers and any add-on layers such as security, monitoring, logging, and more. + +- Operating System (OS) +- Kubernetes distribution and version +- Network Container Interface (CNI) +- Storage Container Interface (CSI) + +You customize profiles by choosing the type of component and version. In this way, profiles offer a reproducible way to +create clusters. + +Log in to [Palette](https://console.spectrocloud.com) and navigate to the left **Main Menu**. Select **Profiles** to +view the cluster profile page. You can view the list of available cluster profiles. To create a cluster profile, click +the **Add Cluster Profile** button. + +![View of the cluster Profiles page](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_profile_list_view.webp) + +Follow the wizard to create a new profile. + +In the **Basic Information** section, assign the name **aws-profile**, a brief profile description, select the type as +**Full**, and assign the tag **env:aws**. You can leave the version empty if you want to. Just be aware that the version +defaults to **1.0.0**. Click on **Next**. + +**Cloud Type** allows you to choose the infrastructure provider with which this cluster profile is associated. Select +**AWS** and click on **Next**. + +**Profile Layers**, this is the main configuration step where you specify the packs that compose the profile. There are +four required infrastructure packs and several optional add-on packs you can choose from. Every pack requires you to +select the **Pack Type**, **Registry**, and **Pack Name**. + +For this tutorial, use the following packs: + +| Pack Name | Version | Layer | +| -------------- | ------- | ---------------- | +| ubuntu-aws LTS | 22.4.x | Operating System | +| Kubernetes | 1.27.x | Kubernetes | +| cni-calico | 3.26.x | Network | +| csi-aws-ebs | 1.22.x | Storage | + +As you fill out the information for each layer, click on **Next** to proceed to the next layer. + +Click on **Confirm** after you have completed filling out all the core layers. + +![A view of the cluster profile stack](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_clusters_parameters.webp) + +The review section gives an overview of the cluster profile configuration you selected. Click on **Finish +Configuration** to create the cluster profile. + +You can modify cluster profiles after you create them by adding, removing, or editing the layers. + +
+ +#### Create a New Cluster + +Navigate to the left **Main Menu** and select **Cluster**. From the clusters page, click on the **Add New Cluster** +button. + +![Palette clusters overview page](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_new_cluster.webp) + +Palette will prompt you to either deploy a new cluster or import an existing one. Click on **Deploy New Cluster** to +access the cluster deployment wizard. Select **AWS** and click the **Start AWS Configuration** button. Use the following +steps to create a host cluster in AWS. + +
+ +#### Basic information + +In the **Basic information** section, insert the general information about the cluster, such as the Cluster name, +Description, Tags, and Cloud account. Click on **Next**. + +![Palette clusters basic information](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_clusters_basic_info.webp) + +
+ +#### Cluster Profile + +A list is displayed of available profiles you can choose to deploy to AWS. Select the cluster profile you created +earlier and click on **Next**. + +
+ +#### Parameters + +The **Parameters** section displays all the layers in the cluster profile. + +![Palette clusters parameters](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_clusters_creation_parameters.webp) + +Each layer has a pack manifest file with the deploy configurations. The pack manifest file is in a YAML format. Each +pack contains a set of default values. You can change the manifest values if needed. Click on **Next** to proceed. + +
+ +#### Cluster Configuration + +The **Cluster config** section allows you to select the **Region** in which to deploy the host cluster and specify other +options such as the **SSH Key Pair** to assign to the cluster. All clusters require you to select an SSH key. After you +have selected the **Region** and your **SSH Key Pair Name**, click on **Next**. + +#### Nodes Configuration + +The **Nodes config** section allows you to configure the nodes that make up the control plane and worker nodes of the +host cluster. + +Before you proceed to next section, review the following parameters.

+ +- **Number of nodes in the pool** - This option sets the number of control plane or worker nodes in the control plane or + worker pool. For this tutorial, set the count to one for the control plane pool and two for the worker pool. + +- **Allow worker capability** - This option allows the control plane node to also accept workloads. This is useful when + spot instances are used as worker nodes. You can check this box if you want to. + +- **Instance Type** - Select the compute type for the node pool. Each instance type displays the amount of CPU, RAM, and + hourly cost of the instance. Select `m4.2xlarge`. + +- **Availability zones** - Used to specify the availability zones in which the node pool can place nodes. Select an + availability zone. + +- **Disk size** - Set the disk size to **60 GiB**. + +
+ +- **Instance Option** - This option allows you to choose + [on-demand instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-on-demand-instances.html) or + [spot instance](https://aws.amazon.com/ec2/spot/) for worker nodes. Select **On Demand**. + +
+ +![Palette clusters basic information](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_cluster_nodes_config.webp) + +Select **Next** to proceed with the cluster deployment. + +
+ +#### Settings + +In the **Settings** section, you can configure advanced options such as when to patch the OS, enable security scans, +manage backups, add role-based access control (RBAC) bindings, and more. + +For this tutorial, you can use the default settings. Click on **Validate** to continue. + +
+ +#### Review + +The **Review** section allows you to review the cluster configuration prior to deploying the cluster. Review all the +settings and click on **Finish Configuration** to deploy the cluster. + +![Configuration overview of newly created AWS cluster](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_profile_cluster_profile_review.webp) + +
+ +Navigate to the left **Main Menu** and select **Clusters**. + +![Update the cluster](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_aws_create_cluster.webp) + +Click on your cluster to review its details such as deployment status, event logs, cluster profile, monitoring data, and +other information about the cluster. + +
+ +![A view of the cluster details page](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_details.webp) + +
+ + +#### Create Cluster Profile (Azure) + +[Cluster profiles](../../../profiles/cluster-profiles/cluster-profiles.md) are templates you create with the following +core layers and any add-on layers such as security, monitoring, logging, and more. + +- Operating System (OS) +- Kubernetes distribution and version +- Network Container Interface (CNI) +- Storage Container Interface (CSI) + +A cluster profile contains these core and additional add-on layers, such as security, monitoring, logging, etc. + +You customize profiles by choosing the type of component and version. In this way, profiles offer a reproducible way to +create clusters. + +Log in to Palette and navigate to the left **Main Menu**. Select **Profiles** to view the cluster profile page. You can +view the list of available cluster profiles. To create a cluster profile, click the **Add Cluster Profile** button. + +![Cluster profiles page](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_profile_list_view.webp) + +Follow the wizard to create a new profile. + +In the **Basic Information** section, assign the name **azure-profile**, a brief profile description, select the type as +**Full**, and assign the tag **env:azure**. You can leave the version empty if you want to. Just be aware that the +version defaults to **1.0.0**. Click on **Next**. + +**Cloud Type** allows you to choose the infrastructure provider with which this cluster profile is associated. Select +**Azure** and click on **Next**. + +**Profile Layers** is the main configuration step where you specify the packs that compose the profile. You can choose +from four required infrastructure packs and several optional add-on packs. Every pack requires you to select the **Pack +Type**, **Registry**, and **Pack Name**. + +For this tutorial, use the following packs: + +| Pack Name | Version | Layer | +| ---------------- | ------- | ---------------- | +| ubuntu-azure LTS | 22.4.x | Operating System | +| Kubernetes | 1.27.x | Kubernetes | +| cni-calico-azure | 3.26.x | Network | +| Azure Disk | 1.28.x | Storage | + +As you fill out the information for each layer, click on **Next** to proceed to the next layer. + +Click on **Confirm** after you have completed filling out all the core layers. + +![Azure cluster profile overview page](/tutorials/deploy-clusters/azure/clusters_public-cloud_deploy-k8s-cluster_cluster_profile_stack.webp) + +The review section gives an overview of the cluster profile configuration you selected. Click on **Finish +Configuration** to finish creating the cluster profile. + +You can modify cluster profiles after you create them by adding, removing, or editing the layers. + +
+ +### Create a New Cluster + +Navigate to the left **Main Menu** and select **Clusters**. Click the **Add New Cluster** button. + +![Palette clusters overview page](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_new_cluster.webp) + +Click on **Deploy New Cluster** to access the cluster deployment wizard. Select **Azure** and click the **Start Azure +Configuration** button. Use the following steps to create a host cluster in Azure. + +
+ +#### Basic information + +In the **Basic information** section, insert the general information about the cluster, such as the Cluster name, +Description, Tags, and Cloud account. Click on **Next**. + +![Palette clusters basic information](/tutorials/deploy-clusters/azure/clusters_public-cloud_deploy-k8s-cluster_clusters_basic_info.webp) + +
+ +#### Cluster Profile + +A list is displayed of available profiles you can choose to deploy to Azure. Select the cluster profile you created +earlier and click on **Next**. + +#### Parameters + +The **Parameters** section displays all the layers in the cluster profile. + +![palette clusters basic information](/tutorials/deploy-clusters/azure/clusters_public-cloud_deploy-k8s-cluster_parameters.webp) + +Each layer has a pack manifest file with the deploy configurations. The pack manifest file is in a YAML format. Each +pack contains a set of default values. You can change the manifest values if needed. Click on **Next** to proceed. + +
+ +#### Cluster Configuration + +The **Cluster config** section allows you to select the **Subscription**, **Region**, **Resource Group**, **Storage +account**, and **SSH Key** to apply to the host cluster. All clusters require you to assign an SSH key. Refer to the +[SSH Keys](../../../clusters/cluster-management/ssh-keys.md) guide for information about uploading an SSH key. + +
+ +When you are done selecting a **Subscription**, **Region**, **Resource Group**, **Storage account** and **SSH Key**, +click on **Next**.
+ +#### Nodes Configuration + +The **Nodes config** section allows you to configure the nodes that compose the control plane nodes and worker nodes of +the Kubernetes cluster. + +Refer to the [Node Pool](../../../clusters/cluster-management/node-pool.md) guide for a list and description of +parameters. + +Before you proceed to next section, review the following parameters. + +
+ +**Number of nodes in the pool** - This option sets the number of control plane or worker nodes in the control plane or +worker pool. For this tutorial, set the count to one for both the control plane and worker pools. + +**Allow worker capability** - This option allows the control plane node to also accept workloads. This is useful when +spot instances are used as worker nodes. You can check this box if you want to. + +- **Instance Type** - Select the compute type for the node pool. Each instance type displays the amount of CPU, RAM, and + hourly cost of the instance. Select **Standard_A8_v2**. + +- **Managed disk** - Used to select the storage class. Select **Standard LRS** and set the disk size to **60**. + +- **Availability zones** - Used to specify the availability zones in which the node pool can place nodes. Select an + availability zone. + +![Palette clusters nodes configuration](/tutorials/deploy-clusters/azure/clusters_public-cloud_deploy-k8s-cluster_cluster_nodes_config.webp) + +
+ +#### Settings + +In the **Settings** section, you can configure advanced options such as when to patch the OS, enable security scans, +manage backups, add Role-Based Access Control (RBAC) bindings, and more. + +For this tutorial, you can use the default settings. Click on **Validate** to continue. + +
+ +#### Review + +The Review section allows you to review the cluster configuration before deploying the cluster. Review all the settings +and click on **Finish Configuration** to deploy the cluster. + +![Configuration overview of newly created Azure cluster](/tutorials/deploy-clusters/azure/clusters_public-cloud_deploy-k8s-cluster_profile_review.webp) + +
+ +Navigate to the left **Main Menu** and select **Clusters**. + +![Update the cluster](/tutorials/deploy-clusters/azure/clusters_public-cloud_deploy-k8s-cluster_azure_create_cluster.webp) + +Click on your cluster to review details such as deployment status, event logs, cluster profile, monitoring data, and +other information about the cluster. + +
+ +![View of the cluster details page](/tutorials/deploy-clusters/azure/clusters_public-cloud_deploy-k8s-cluster_azure_create_cluster_details.webp) + +
+ +
+ + +#### Create Cluster Profile (GCP) + +[Cluster profiles](../../../profiles/cluster-profiles/cluster-profiles.md) are templates you create with the following +core layers and any add-on layers such as security, monitoring, logging, and more. + +- Operating System (OS) +- Kubernetes distribution and version +- Network Container Interface (CNI) +- Storage Container Interface (CSI) + +You customize profiles by choosing the type of component and version. In this way, profiles offer a reproducible way to +create clusters. + +Log in to [Palette](https://console.spectrocloud.com) and navigate to the left **Main Menu**. Select **Profiles** to +view the cluster profile page. You can view the list of available cluster profiles. To create a cluster profile, click +the **Add Cluster Profile** button. + +![View of the cluster view page](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_profile_list_view.webp) + +Follow the wizard to create a new profile. + +In the **Basic Information** section, assign the name **gcp-profile**, provide a profile description, select the type as +**Full**, and assign the tag **env:gcp**. You can leave the version empty if you want to. Just be aware that the version +defaults to **1.0.0**. Click on **Next**. + +Cloud Type allows you to choose the infrastructure provider with which this cluster profile is associated. Select +**Google Cloud** and click on **Next**. + +Profile Layers, this is the main configuration step where you specify the packs that compose the profile. You can choose +from four required infrastructure packs and several optional add-on packs. Every pack requires you to select the Pack +Type, Registry, and Pack Name. + +For this tutorial, use the following packs: + +| Pack Name | Version | Layer | +| -------------- | ------- | ---------------- | +| ubuntu-gcp LTS | 22.4.x | Operating System | +| Kubernetes | 1.27.x | Kubernetes | +| cni-calico | 3.26.x | Network | +| csi-gcp-driver | 1.8.x | Storage | + +As you fill out the information for each layer, click on **Next** to proceed to the next layer. + +Click on **Confirm** after you have completed filling out all the core layers. + +![GCP cluster profile view](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_gcp_cluster_profile_stack_view.webp) + +The review section gives an overview of the cluster profile configuration you selected. Click on **Finish +Configuration** to create the cluster profile. + +You can modify cluster profiles after you create them by adding, removing, or editing the layers. + +
+ +Navigate to the left **Main Menu** and select **Cluster**. Click the **Add New Cluster** button. + +![Palette clusters overview page](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_new_cluster.webp) + +Click on **Deploy New Cluster** to access the cluster deployment wizard. Select **Google Cloud** and click the **Start +Google Cloud Configuration** button. Use the following steps to create a host cluster in Google Cloud. + +
+ +#### Basic information + +In the **Basic information** section, insert the general information about the cluster, such as the **Cluster name**, +**Description**, **Tags**, and **Cloud account**. Click on **Next**. + +![Palette clusters basic information](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_basic_info.webp) + +
+ +#### Cluster Profile + +A list is displayed of available profiles you can choose to deploy to GCP. Select the cluster profile you created +earlier and click on **Next**. + +![Palette clusters basic information](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_cluster_gcp_profile.webp) + +
+ +#### Parameters + +The **Parameters** section displays all the layers in the cluster profile. + +![Palette clusters basic information](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_clusters_parameters.webp) + +Each layer has a pack manifest file with the deploy configurations. The pack manifest file is in a YAML format. Each +pack contains a set of default values. You can change the manifest values if needed. Click on **Next** to proceed. + +
+ +#### Cluster Configuration + +The **Cluster config** section allows you to select the **Project**, **Region**, and **SSH Key** to apply to the host +cluster. All clusters require you to assign an SSH key. Refer to the +[SSH Keys](../../../clusters/cluster-management/ssh-keys.md) guide for information about uploading an SSH key. + +
+ +After selecting a **Project**, **Region**, and **SSH Key**, click on **Next**. + +### Nodes Configuration + +The **Nodes config** section allows you to configure the nodes that make up the control plane and worker nodes of the +host cluster. + +Before you proceed to the next section, review the following parameters. + +Refer to the [Node Pool](../../../clusters/cluster-management/node-pool.md) guide for a list and description of +parameters. + +Before you proceed to next section, review the following parameters. + +- **Number of nodes in the pool** - This option sets the number of control plane or worker nodes in the control plane or + worker pool. For this tutorial, set the count to one for the control plane pool and two for the worker pool. + +- **Allow worker capability** - This option allows the control plane node to also accept workloads. This is useful when + spot instances are used as worker nodes. You can check this box if you want to. + +- **Instance Type** - Select the compute type for the node pool. Each instance type displays the amount of CPU, RAM, and + hourly cost of the instance. Select **n1-standard-4**. + +- **Disk size** - Set the disk size to **60**. + +- **Availability zones** - Used to specify the availability zones in which the node pool can place nodes. Select an + availability zone. + +![Palette clusters nodes configuration](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_cluster_nodes_config.webp) + +
+ +Select **Next** to proceed with the cluster deployment. + +#### Settings + +In the **Settings** section, you can configure advanced options such as when to patch the OS, enable security scans, +manage backups, add Role-Based Access Control (RBAC) bindings, and more. + +For this tutorial, you can use the default settings. Click on **Validate** to continue. + +#### Review + +The **Review** section allows you to review the cluster configuration before deploying the cluster. Review all the +settings and click on **Finish Configuration** to deploy the cluster. + +![Newly created GCP cluster](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_profile_review.webp) + +
+ +Navigate to the left **Main Menu** and select **Clusters**. + +
+ +![Update the cluster](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_new_cluster.webp) + +Click on your cluster to review details such as deployment status, event logs, cluster profile, monitoring data, and +other information about the cluster. + +
+ +![View of the cluster details page](/tutorials/deploy-clusters/gcp/clusters_public-cloud_deploy-k8s-cluster_profile_details.webp) + +
+
+ +The cluster deployment process can take 15 to 30 min. The deployment time varies depending on the cloud provider, +cluster profile, cluster size, and the node pool configurations provided. You can learn more about the deployment +progress by reviewing the event log. Click on the **Events** tab to view the log. + +![Update the cluster](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-event_log.webp) + +
+ +While you wait for the cluster deployment process to complete, feel free to check out a video where we discuss the +growing pains of using Kubernetes and how Palette can help your address these pain points. + +
+ + + +--- + +### Update Cluster Profile + +In the following steps, you will learn how to update a cluster profile by adding a new layer to it that contains the +application. + +
+ +#### Add a Manifest + +Navigate to the left **Main Menu** and select **Profiles**. Select the cluster profile you created earlier and which you +applied to the host cluster. + +Click on **Add Manifest** at the top of the page and fill out the following input fields.

+ +- **Layer name** - The name of the layer. Assign the name **application**. + +- **Manifests** - Add your manifest by giving it a name and clicking the **New Manifest** button. Assign a name to the + internal manifest and click on the blue button An empty editor will be displayed on the right side of the screen. + +![Screenshot of unopened manifest editor](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_manifest_blue_btn.webp) + +
+ +In the manifest editor, insert the following content. + +
+ +```yaml +apiVersion: v1 +kind: Service +metadata: + name: hello-universe-service +spec: + type: LoadBalancer + ports: + - protocol: TCP + port: 8080 + targetPort: 8080 + selector: + app: hello-universe +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: hello-universe-deployment +spec: + replicas: 2 + selector: + matchLabels: + app: hello-universe + template: + metadata: + labels: + app: hello-universe + spec: + containers: + - name: hello-universe + image: ghcr.io/spectrocloud/hello-universe:1.1.0 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 +``` + +The code snippet you added will deploy the [_hello-universe_](https://github.com/spectrocloud/hello-universe) +application. You may have noticed that the code snippet you added is a Kubernetes configuration. Manifest files are a +method you can use to achieve more granular customization of your Kubernetes cluster. You can add any valid Kubernetes +configuration to a manifest file. + +![Screenshot of manifest in the editor](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_manifest.webp) + +The manifest defines a replica set for the application to simulate a distributed environment with a web application +deployed to Kubernetes. The application is assigned a load balancer. Using a load balancer, you can expose a single +access point and distribute the workload to both containers. + +Click on **Confirm & Create** to save the manifest. Click on **Save Changes** to save this new layer to the cluster +profile. + +
+ +#### Deployment + +Navigate to the left **Main Menu** and select **Clusters**. Click on the host cluster you deployed to open its details +page. + +On the top right-hand corner is a blue button **Updates Available**. Click on the button to review the available +updates. + +![The cluster details page with a view of pending updates](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_update_available.webp) + +Compare the new changes against the previous cluster profile definition. The only difference is the addition of a +manifest that will deploy the Hello Universe application. + +![Available updates details](/tutorials/deploy-clusters/deploy_app/clusters_public-cloud_deploy-k8s-cluster_update_details_compare.webp) + +Click on **Confirm updates** to apply the updates to the host cluster. Depending on the scope of the change this may +take a few moments. + +
+ +### Verify the Application + +Navigate to the cluster's details page and verify you are in the **Overview** tab. When the application is deployed and +ready for network traffic, indicated in the **Services** field, Palette exposes the service URL. Click on the URL for +port **:8080** to access the Hello Universe application. + +![Cluster details page with service URL highlighted](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_service_url.webp) + +
+ +:::warning + +It can take up to three minutes for DNS to properly resolve the public load balancer URL. We recommend waiting a few +moments before clicking on the service URL to prevent the browser from caching an unresolved DNS request. + +::: + +
+ +![Deployed application landing page with counter displayed](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_app.webp) + +
+ +Welcome to Hello Universe, a demo application to help you learn more about Palette and its features. Feel free to click +on the logo to increase the counter and for a fun image change. + +You have deployed your first application to a cluster managed by Palette. Your first application is a single container +application with no upstream dependencies. + +### Cleanup + +Use the following steps to remove all the resources you created for the tutorial. + +To remove the cluster, navigate to the left **Main Menu** and click on **Clusters**. Select the cluster you want to +delete to access its details page. + +Click on **Settings** to expand the menu, and select **Delete Cluster**. + +![Delete cluster](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_delete-cluster-button.webp) + +You will be prompted to type in the cluster name to confirm the delete action. Type in the cluster name to proceed with +the delete step. The deletion process takes several minutes to complete. + +
+ +:::info + +If a cluster remains in the delete phase for over 15 minutes, it becomes eligible for a force delete. To trigger a force +delete, navigate to the cluster’s details page, click on **Settings**, then select **Force Delete Cluster**. Palette +automatically removes clusters stuck in the cluster deletion phase for over 24 hours. + +::: + +
+ +Once the cluster is deleted, navigate to the left **Main Menu** and click on **Profiles**. Find the cluster profile you +created and click on the **three-dot Menu** to display the **Delete** button. Select **Delete** and confirm the +selection to remove the cluster profile. + +## Terraform Workflow + +The [Spectro Cloud Terraform](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs) provider +enables you to create and manage Palette resources in a codified manner by leveraging Infrastructure as Code (IaC). Some +notable reasons why you would want to utilize IaC are: + +- The ability to automate infrastructure. + +- Improved collaboration in making infrastructure changes. + +- Self-documentation of infrastructure through code. + +- Allows tracking all infrastructure in a single source of truth. + +If want to become more familiar with Terraform, we recommend you check out the +[Terraform](https://developer.hashicorp.com/terraform/intro) learning resources from HashiCorp. + +
+ +### Prerequisites + +To complete this tutorial, you will need the following items + +- Basic knowledge of containers. +- [Docker Desktop](https://www.docker.com/products/docker-desktop/), [Podman](https://podman.io/docs/installation) or + another container management tool. +- Create a Cloud account from one of the following providers. + - [AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account) + - [Azure](https://learn.microsoft.com/en-us/training/modules/create-an-azure-account) + - [GCP](https://cloud.google.com/docs/get-started) +- Register the [cloud account with Palette](https://console.spectrocloud.com/auth/signup). Use the following resource + for additional guidance. + - [Register and Manage AWS Accounts](../../../clusters/public-cloud/aws/add-aws-accounts.md) + - [Register and Manage Azure Cloud Accounts](../../../clusters/public-cloud/azure/azure-cloud.md) + - [Register and Manage GCP Accounts](../../../clusters/public-cloud/gcp/add-gcp-accounts.md) + +
+ +### Set Up Local Environment + +You can clone the tutorials repository locally or follow along by downloading a Docker image that contains the tutorial +code and all dependencies. + +
+ +:::warning + +If you choose to clone the repository instead of using the tutorial container make sure you have Terraform v1.4.0 or +greater installed. + +::: + +
+ + + + + +Ensure Docker Desktop on your local machine is available. Use the following command and ensure you receive an output +displaying the version number. + +```bash +docker version +``` + +Download the tutorial image to your local machine. + +```bash +docker pull ghcr.io/spectrocloud/tutorials:1.1.3 +``` + +Next, start the container, and open a bash session into it. + +```shell +docker run --name tutorialContainer --interactive --tty ghcr.io/spectrocloud/tutorials:1.1.3 bash +``` + +Navigate to the tutorial code. + +```shell +cd /terraform/iaas-cluster-deployment-tf +``` + + + + + +If you are not running a Linux operating system, create and start the Podman Machine in your local environment. +Otherwise, skip this step. + +```bash +podman machine init +podman machine start +``` + +Use the following command and ensure you receive an output displaying the installation information. + +```bash +podman info +``` + +Download the tutorial image to your local machine. + +```bash +podman pull ghcr.io/spectrocloud/tutorials:1.1.3 +``` + +Next, start the container, and open a bash session into it. + +```shell +podman run --name tutorialContainer --interactive --tty ghcr.io/spectrocloud/tutorials:1.1.3 bash +``` + +Navigate to the tutorial code. + +```shell +cd /terraform/iaas-cluster-deployment-tf +``` + + + + + +Open a terminal window and download the tutorial code from GitHub. + +```shell +git@github.com:spectrocloud/tutorials.git +``` + +Change the directory to the tutorial folder. + +```shell +cd tutorials/ +``` + +Check out the following git tag. + +```shell +git checkout v1.1.3 +``` + +Change the directory to the tutorial code. + +```shell +cd terraform/iaas-cluster-deployment-tf/ +``` + + + + + +--- + +### Create an API Key + +Before you can get started with the Terraform code, you need a Spectro Cloud API key. + +To create an API key, log in to [Palette](https://console.spectrocloud.com) and click on the user **User Menu** and +select **My API Keys**. + +![Image that points to the user drop-down Menu and points to the API key link](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_create_api_key.webp) + +Next, click on **Add New API Key**. Fill out the required input field, **API Key Name**, and the **Expiration Date**. +Click on **Confirm** to create the API key. Copy the key value to your clipboard, as you will use it shortly. + +
+ +In your terminal session, issue the following command to export the API key as an environment variable. + +
+ +```shell +export SPECTROCLOUD_APIKEY=YourAPIKeyHere +``` + +The [Spectro Cloud Terraform](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs) provider +requires credentials to interact with the Palette API. The Spectro Cloud Terraform provider will use the environment +variable to authenticate with the Spectro Cloud API endpoint. + +### Resources Review + +To help you get started with Terraform, the tutorial code is structured to support deploying a cluster to either Azure, +GCP, or AWS. Before you deploy a host cluster to your target provider, take a few moments to review the following files +in the folder structure. + +
+ +- **providers.tf** - This file contains the Terraform providers that are used to support the deployment of the cluster. + +- **inputs.tf** - This file contains all the Terraform variables for the deployment logic. + +- **data.tf** - This file contains all the query resources that perform read actions. + +- **cluster_profiles.tf** - This file contains the cluster profile definitions for each cloud provider. + +- **cluster.tf** - This file has all the required cluster configurations to deploy a host cluster to one of the cloud + providers. + +- **terraform.tfvars** - Use this file to customize the deployment and target a specific cloud provider. This is the + primary file you will modify. + +- **outputs.tf** - This file contains content that will be output in the terminal session upon a successful Terraform + `apply` action. + +The following section allows you to review the core Terraform resources more closely. + +
+ +#### Provider + +The **provider.tf** file contains the Terraform providers and their respective versions. The tutorial uses two +providers - the Spectro Cloud Terraform provider and the TLS Terraform provider. Note how the project name is specified +in the `provider "spectrocloud" {}` block. You can change the target project by changing the value specified in the +`project_name` parameter. + +
+ +```hcl +terraform { + required_providers { + spectrocloud = { + version = ">= 0.13.1" + source = "spectrocloud/spectrocloud" + } + tls = { + source = "hashicorp/tls" + version = "4.0.4" + } + } +} + +provider "spectrocloud" { + project_name = "Default" +} +``` + +The next file you should become familiar with is the **cluster-profiles.tf** file. + +#### Cluster Profile + +The Spectro Cloud Terraform provider has several resources available for use. When creating a cluster profile, use +`spectrocloud_cluster_profile`. This resource can be used to customize all layers of a cluster profile. You can specify +all the different packs and versions to use and add a manifest or Helm chart. + +In the **cluster-profiles.tf** file, the cluster profile resource is declared three times. Each instance of the resource +is for a specific cloud provider. Using the AWS cluster profile as an example, note how the **cluster-profiles.tf** file +uses `pack {}` blocks to specify each layer of the profile. The order in which you arrange contents of the `pack {}` +blocks plays an important role, as each layer maps to the core infrastructure in a cluster profile. + +The first listed `pack {}` block must be the OS, followed by Kubernetes, the container network interface, and the +container storage interface. The first `pack {}` block in the list equates to the bottom layer of the cluster profile. +Ensure you define the bottom layer of the cluster profile - the OS layer - first in the list of `pack {}` blocks. + +
+ +```hcl +resource "spectrocloud_cluster_profile" "aws-profile" { + name = "tf-aws-profile" + description = "A basic cluster profile for AWS" + tags = concat(var.tags, ["env:aws"]) + cloud = "aws" + type = "cluster" + + pack { + name = data.spectrocloud_pack.aws_ubuntu.name + tag = data.spectrocloud_pack.aws_ubuntu.version + uid = data.spectrocloud_pack.aws_ubuntu.id + values = data.spectrocloud_pack.aws_ubuntu.values + } + + pack { + name = data.spectrocloud_pack.aws_k8s.name + tag = data.spectrocloud_pack.aws_k8s.version + uid = data.spectrocloud_pack.aws_k8s.id + values = data.spectrocloud_pack.aws_k8s.values + } + + pack { + name = data.spectrocloud_pack.aws_cni.name + tag = data.spectrocloud_pack.aws_cni.version + uid = data.spectrocloud_pack.aws_cni.id + values = data.spectrocloud_pack.aws_cni.values + } + + pack { + name = data.spectrocloud_pack.aws_csi.name + tag = data.spectrocloud_pack.aws_csi.version + uid = data.spectrocloud_pack.aws_csi.id + values = data.spectrocloud_pack.aws_csi.values + } + + pack { + name = "hello-universe" + type = "manifest" + tag = "1.0.0" + values = "" + manifest { + name = "hello-universe" + content = file("manifests/hello-universe.yaml") + } + } +} +``` + +The last `pack {}` block contains a manifest file with all the Kubernetes configurations for the +[Hello Universe](https://github.com/spectrocloud/hello-universe) application. Including the application in the profile +ensures the application is installed during cluster deployment. If you wonder what all the data resources are for, head +to the next section to review them. + +#### Data Resources + +You may have noticed that each `pack {}` block contains references to a data resource. + +
+ +```hcl + pack { + name = data.spectrocloud_pack.aws_csi.name + tag = data.spectrocloud_pack.aws_csi.version + uid = data.spectrocloud_pack.aws_csi.id + values = data.spectrocloud_pack.aws_csi.values + } +``` + +
+ +[Data resources](https://developer.hashicorp.com/terraform/language/data-sources) are used to perform read actions in +Terraform. The Spectro Cloud Terraform provider exposes several data resources to help you make your Terraform code more +dynamic. The data resource used in the cluster profile is `spectrocloud_pack`. This resource enables you to query +Palette for information about a specific pack. You can get information about the pack using the data resource such as +unique ID, registry ID, available versions, and the pack's YAML values. + +Below is the data resource used to query Palette for information about the Kubernetes pack for version `1.27.5`. + +
+ +```hcl +data "spectrocloud_pack" "aws_k8s" { + name = "kubernetes" + version = "1.27.5" +} +``` + +Using the data resource, you avoid manually typing in the parameter values required by the cluster profile's `pack {}` +block. + +
+ +#### Cluster + +The **clusters.tf** file contains the definitions for deploying a host cluster to one of the cloud providers. To create +a host cluster, you must use a cluster resource for the cloud provider you are targeting. + +In this tutorial, the following Terraform cluster resources are used. + +
+ +| Terraform Resource | Platform | +| ------------------------------------------------------------------------------------------------------------------------------------- | -------- | +| [`spectrocloud_cluster_aws`](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs/resources/cluster_aws) | AWS | +| [`spectrocloud_cluster_azure`](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs/resources/cluster_azure) | Azure | +| [`spectrocloud_cluster_gcp`](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs/resources/cluster_gcp) | GCP | + +Using the `spectrocloud_cluster_azure` resource in this tutorial as an example, note how the resource accepts a set of +parameters. When deploying a cluster, you can change the same parameters in the Palette user interface (UI). You can +learn more about each parameter by reviewing the resource documentation page hosted in the Terraform registry. + +
+ +```hcl +resource "spectrocloud_cluster_azure" "cluster" { + name = "azure-cluster" + tags = concat(var.tags, ["env:azure"]) + cloud_account_id = data.spectrocloud_cloudaccount_azure.account[0].id + + cloud_config { + subscription_id = var.azure_subscription_id + resource_group = var.azure_resource_group + region = var.azure-region + ssh_key = tls_private_key.tutorial_ssh_key[0].public_key_openssh + } + + cluster_profile { + id = spectrocloud_cluster_profile.azure-profile[0].id + } + + machine_pool { + control_plane = true + control_plane_as_worker = true + name = "control-plane-pool" + count = var.azure_control_plane_nodes.count + instance_type = var.azure_control_plane_nodes.instance_type + azs = var.azure_control_plane_nodes.azs + is_system_node_pool = var.azure_control_plane_nodes.is_system_node_pool + disk { + size_gb = var.azure_control_plane_nodes.disk_size_gb + type = "Standard_LRS" + } + } + + machine_pool { + name = "worker-basic" + count = var.azure_worker_nodes.count + instance_type = var.azure_worker_nodes.instance_type + azs = var.azure_worker_nodes.azs + is_system_node_pool = var.azure_worker_nodes.is_system_node_pool + } + + timeouts { + create = "30m" + delete = "15m" + } +} +``` + +### Deploy Cluster + +To deploy a cluster using Terraform, you must first modify the **terraform.tfvars** file. Open the **terraform.tfvars** +file in the editor of your choice, and locate the cloud provider you will use to deploy a host cluster. + +To simplify the process, we added a toggle variable in the Terraform template, that you can use to select the deployment +environment. Each cloud provider has a section in the template that contains all the variables you must populate. +Variables to populate are identified with `REPLACE_ME`. + +In the example AWS section below, you would change `deploy-aws = false` to `deploy-aws = true` to deploy to AWS. +Additionally, you would replace all the variables with a value `REPLACE_ME`. You can also update the values for nodes in +the control plane pool or worker pool. + +
+ +```hcl +########################### +# AWS Deployment Settings +############################ +deploy-aws = false # Set to true to deploy to AWS + +aws-cloud-account-name = "REPLACE_ME" +aws-region = "REPLACE_ME" +aws-key-pair-name = "REPLACE_ME" + +aws_control_plane_nodes = { + count = "1" + control_plane = true + instance_type = "m4.2xlarge" + disk_size_gb = "60" + availability_zones = ["REPLACE_ME"] # If you want to deploy to multiple AZs, add them here +} + +aws_worker_nodes = { + count = "1" + control_plane = false + instance_type = "m4.2xlarge" + disk_size_gb = "60" + availability_zones = ["REPLACE_ME"] # If you want to deploy to multiple AZs, add them here +} +``` + +When you are done making the required changes, issue the following command to initialize Terraform. + +
+ +```shell +terraform init +``` + +Next, issue the `plan` command to preview the changes. + +
+ +```shell +terraform plan +``` + +Output: + +```shell +Plan: 2 to add, 0 to change, 0 to destroy. +``` + +If you change the desired cloud provider's toggle variable to `true,` you will receive an output message that two new +resources will be created. The two resources are your cluster profile and the host cluster. + +To deploy all the resources, use the `apply` command. + +
+ +```shell +terraform apply -auto-approve +``` + +#### Verify the Profile + +To check out the cluster profile creation in Palette, log in to [Palette](https://console.spectrocloud.com), and from +the left **Main Menu** click on **Profiles**. Locate the cluster profile with the name pattern +`tf-[cloud provier]-profile`. Click on the cluster profile to review its details, such as layers, packs, and versions. + +![A view of the cluster profile](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_cluster_profile_view.webp) + +
+ +#### Verify the Cluster + +You can also check the cluster creation process by navigating to the left **Main Menu** and selecting **Clusters**. + +![Update the cluster](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-cluster_aws_create_cluster.webp) + +
+ +Select your cluster to review its details page, which contains the status, cluster profile, event logs, and more. + +
+ +The cluster deployment may take several minutes depending on the cloud provider, node count, node sizes used, and the +cluster profile. You can learn more about the deployment progress by reviewing the event log. Click on the **Events** +tab to check the event log. + +![Update the cluster](/tutorials/deploy-clusters/aws/clusters_public-cloud_deploy-k8s-event_log.webp) + +
+ +While you wait for the cluster deployment process to complete, feel free to check out the following video where we +discuss the growing pains of using Kubernetes and how Palette can help you address these pain points. + +
+ + + +
+ +### Validate + +When the cluster deploys, you can access the Hello Universe application. From the cluster's **Overview** page, click on +the URL for port **:8080** next to the **hello-universe-service** in the **Services** row. This URL will take you to the +application landing page. + +
+ +:::warning + +It can take up to three minutes for DNS to properly resolve the public load balancer URL. We recommend waiting a few +moments before clicking on the service URL to prevent the browser from caching an unresolved DNS request. + +::: + +![Deployed application](/tutorials/deploy-clusters/clusters_public-cloud_deploy-k8s-cluster_app.webp) + +
+ +Welcome to Hello Universe, a demo application to help you learn more about Palette and its features. Feel free to click +on the logo to increase the counter and for a fun image change. + +You have deployed your first application to a cluster managed by Palette through Terraform. Your first application is a +single container application with no upstream dependencies. + +### Cleanup + +Use the following steps to clean up the resources you created for the tutorial. Use the `destroy` command to remove all +the resources you created through Terraform. + +```shell +terraform destroy --auto-approve +``` + +Output: + +```shell +Destroy complete! Resources: 2 destroyed. +``` + +
+ +:::info + +If a cluster remains in the delete phase for over 15 minutes, it becomes eligible for force delete. To trigger a force +delete, navigate to the cluster’s details page and click on **Settings**. Click on **Force Delete Cluster** to delete +the cluster. Palette automatically removes clusters stuck in the cluster deletion phase for over 24 hours. + +::: + +If you are using the tutorial container and want to exit the container, type `exit` in your terminal session and press +the **Enter** key. Next, issue the following command to stop the container. + + + + + +```shell +docker stop tutorialContainer && \ +docker rmi --force ghcr.io/spectrocloud/tutorials:1.1.3 +``` + + + + + +```shell +podman stop tutorialContainer && \ +podman rmi --force ghcr.io/spectrocloud/tutorials:1.1.3 +``` + + + + + +## Wrap-up + +In this tutorial, you created a cluster profile, which is a template that contains the core layers required to deploy a +host cluster. You then deployed a host cluster onto your preferred cloud service provider. After the cluster deployed, +you updated the profile by adding the Hello Universe application and applied the updates to the host cluster. + +Palette assures consistency across cluster deployments through cluster profiles. Palette also enables you to quickly +deploy applications to a Kubernetes environment with little or no prior Kubernetes knowledge. In a matter of minutes, +you were able to provision a new Kubernetes cluster and deploy an application. + +We encourage you to check out the +[Deploy an Application using Palette Dev Engine](../../../tutorials/cluster-deployment/pde/deploy-app.md) tutorial to +learn more about Palette. Palette Dev Engine can help you deploy applications more quickly through the usage of +[virtual clusters](../../../glossary-all.md#palette-virtual-cluster). Feel free to check out the reference links below +to learn more about Palette. + +- [Palette Modes](../../../introduction/palette-modes.md) + +- [Cluster Profiles](../../../profiles/cluster-profiles/cluster-profiles.md) + +- [Palette Clusters](../../../clusters/clusters.md) + +- [Hello Universe GitHub repository](https://github.com/spectrocloud/hello-universe) diff --git a/docs/docs-content/tutorials/cluster-management/_category_.json b/docs/docs-content/tutorials/cluster-management/_category_.json new file mode 100644 index 0000000000..44a87cd5e9 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-management/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Cluster Management", + "position": 40 +} diff --git a/docs/docs-content/tutorials/cluster-management/backup-restore/_category_.json b/docs/docs-content/tutorials/cluster-management/backup-restore/_category_.json new file mode 100644 index 0000000000..20f0f25e58 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-management/backup-restore/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Backup and Restore", + "position": 20 +} diff --git a/docs/docs-content/tutorials/cluster-management/cluster-groups/_category_.json b/docs/docs-content/tutorials/cluster-management/cluster-groups/_category_.json new file mode 100644 index 0000000000..a988d2a653 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-management/cluster-groups/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Cluster Groups", + "position": 40 +} diff --git a/docs/docs-content/tutorials/cluster-management/import/_category_.json b/docs/docs-content/tutorials/cluster-management/import/_category_.json new file mode 100644 index 0000000000..57c4594252 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-management/import/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Import", + "position": 30 +} diff --git a/docs/docs-content/tutorials/cluster-management/scale-secure/_category_.json b/docs/docs-content/tutorials/cluster-management/scale-secure/_category_.json new file mode 100644 index 0000000000..539ce0fc40 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-management/scale-secure/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Scale and Secure", + "position": 10 +} diff --git a/docs/docs-content/tutorials/cluster-management/update-maintain/_category_.json b/docs/docs-content/tutorials/cluster-management/update-maintain/_category_.json new file mode 100644 index 0000000000..89a7d9d977 --- /dev/null +++ b/docs/docs-content/tutorials/cluster-management/update-maintain/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Update and Maintain", + "position": 0 +} diff --git a/docs/docs-content/clusters/cluster-management/update-k8s-cluster.md b/docs/docs-content/tutorials/cluster-management/update-maintain/update-k8s-cluster.md similarity index 95% rename from docs/docs-content/clusters/cluster-management/update-k8s-cluster.md rename to docs/docs-content/tutorials/cluster-management/update-maintain/update-k8s-cluster.md index 222c91508a..10c26bff5c 100644 --- a/docs/docs-content/clusters/cluster-management/update-k8s-cluster.md +++ b/docs/docs-content/tutorials/cluster-management/update-maintain/update-k8s-cluster.md @@ -1,21 +1,20 @@ --- +sidebar_position: 0 sidebar_label: "Deploy Cluster Profile Updates" title: "Deploy Cluster Profile Updates" description: "Learn how to update your deployed clusters using Palette Cluster Profiles. This tutorial teaches you how to: create Cluster Profile versions, apply cluster updates and roll back to previous versions. Get started with the basics of cluster maintenance in Azure with this hands-on exercise." -icon: "" -hide_table_of_contents: false tags: ["cluster profiles", "tutorial"] -sidebar_position: 240 +category: ["tutorial"] --- Palette provides cluster profiles, which allow you to specify layers for your workloads using packs, Helm charts, Zarf packages, or cluster manifests. Packs serve as blueprints to the provisioning and deployment process, as they contain the versions of the container images that Palette will install for you. Cluster profiles provide consistency across environments during the cluster creation process, as well as when maintaining your clusters. Check out the -[cluster profiles](../../profiles/cluster-profiles/cluster-profiles.md) section to learn more about how to create and +[cluster profiles](../../../profiles/cluster-profiles/cluster-profiles.md) section to learn more about how to create and use them. Once provisioned, there are three main ways to update your Palette deployments. | Method | Description | Cluster application process | @@ -31,8 +30,8 @@ apply these changes using either Palette or Terraform. ## Prerequisites This tutorial builds upon the resources and steps outlined in the -[Deploy a Cluster](../public-cloud/deploy-k8s-cluster.md) tutorial for creating initial clusters. To complete it, you -will need the following items. +[Deploy a Cluster](../../../clusters/public-cloud/deploy-k8s-cluster.md) tutorial for creating initial clusters. To +complete it, you will need the following items. @@ -46,12 +45,12 @@ will need the following items. - Register the [cloud account with Palette](https://console.spectrocloud.com/auth/signup). Use the following resource for additional guidance. - - [Register and Manage AWS Accounts](../public-cloud/aws/add-aws-accounts.md) - - [Register and Manage Azure Cloud Accounts](../public-cloud/azure/azure-cloud.md) - - [Register and Manage GCP Accounts](../public-cloud/gcp/add-gcp-accounts.md) + - [Register and Manage AWS Accounts](../../../clusters/public-cloud/aws/add-aws-accounts.md) + - [Register and Manage Azure Cloud Accounts](../../../clusters/public-cloud/azure/azure-cloud.md) + - [Register and Manage GCP Accounts](../../../clusters/public-cloud/gcp/add-gcp-accounts.md) -- An SSH Key Pair. Use the [Create and Upload an SSH Key](../cluster-management/ssh-keys.md) guide to learn how to - create an SSH key and upload it to Palette. +- An SSH Key Pair. Use the [Create and Upload an SSH Key](../../../clusters/cluster-management/ssh-keys.md) guide to + learn how to create an SSH key and upload it to Palette. - AWS users must create an AWS Key pair before starting the tutorial. If you need additional guidance, check out the [Create EC2 SSH Key Pair](https://docs.aws.amazon.com/ground-station/latest/ug/create-ec2-ssh-key-pair.html) @@ -70,13 +69,13 @@ will need the following items. - [GCP](https://cloud.google.com/docs/get-started) - Register the [cloud account with Palette](https://console.spectrocloud.com/auth/signup). Use the following resource for additional guidance. - - [Register and Manage AWS Accounts](../public-cloud/aws/add-aws-accounts.md) - - [Register and Manage Azure Cloud Accounts](../public-cloud/azure/azure-cloud.md) - - [Register and Manage GCP Accounts](../public-cloud/gcp/add-gcp-accounts.md) + - [Register and Manage AWS Accounts](../../../clusters/public-cloud/aws/add-aws-accounts.md) + - [Register and Manage Azure Cloud Accounts](../../../clusters/public-cloud/azure/azure-cloud.md) + - [Register and Manage GCP Accounts](../../../clusters/public-cloud/gcp/add-gcp-accounts.md) - Install the [Terraform CLI](https://developer.hashicorp.com/terraform/install) v1.4.0 or greater according to the setup steps for your operating system. -- A Spectro Cloud API key is required to interact with the Palette API. Use the [Create API Key] guide to learn how to - create one. +- A Spectro Cloud API key is required to interact with the Palette API. Use the + [Create API Key](../../../user-management/authentication/api-key/create-api-key.md) guide to learn how to create one. In your terminal session, issue the following command to export the API key as an environment variable. Replace the placeholder `YourAPIKeyHere` with your previously copied API key. @@ -117,9 +116,10 @@ cd terraform/iaas-cluster-update-tf/ -Follow the instructions of the [Deploy a Cluster](../public-cloud/deploy-k8s-cluster.md#ui-workflow) tutorial to create -a cluster profile and cluster with the [_hello-universe_](https://github.com/spectrocloud/hello-universe) application. -Your cluster should be successfully provisioned and in a healthy state in the cloud of your choosing. +Follow the instructions of the [Deploy a Cluster](../../../clusters/public-cloud/deploy-k8s-cluster.md#ui-workflow) +tutorial to create a cluster profile and cluster with the +[_hello-universe_](https://github.com/spectrocloud/hello-universe) application. Your cluster should be successfully +provisioned and in a healthy state in the cloud of your choosing. The cluster profile name follows the pattern `[cloud provider]-profile`. The cluster name follows the pattern `[cloud provider]-cluster`. This tutorial uses Azure for illustration purposes. @@ -233,7 +233,7 @@ Click on **Confirm Updates** and close the editor. Click on **Save Changes** to confirm your updates. Deploy this cluster profile to a new cluster using the same steps outlined in the -[Deploy a Cluster](../public-cloud/deploy-k8s-cluster.md#ui-workflow) tutorial. +[Deploy a Cluster](../../../clusters/public-cloud/deploy-k8s-cluster.md#ui-workflow) tutorial. Once you have completed these steps and the host cluster creation process has finished, navigate to the left **Main Menu** and select **Clusters** to view your deployed clusters. You should have two healthy clusters. @@ -245,9 +245,9 @@ Menu** and select **Clusters** to view your deployed clusters. You should have t Open the **terraform.tfvars** file in the editor of your choice and set variables required for the cloud provider you -will use for your clusters. Check out the [Deploy a Cluster](../public-cloud/deploy-k8s-cluster.md#deploy-cluster) -tutorial for guidance how to provide the required cloud credentials and configuration. This tutorial uses Azure for -demonstration purposes. +will use for your clusters. Check out the +[Deploy a Cluster](../../../clusters/public-cloud/deploy-k8s-cluster.md#deploy-cluster) tutorial for guidance how to +provide the required cloud credentials and configuration. This tutorial uses Azure for demonstration purposes. When you are done making the required changes, issue the following command to initialize Terraform. @@ -521,7 +521,7 @@ Click **Apply Changes**. Palette has backup and restore capabilities available for your mission critical workloads. Ensure that you have adequate backups before you make any cluster profile version changes in your production environments. You can learn more in the -[Backup and Restore](backup-restore/backup-restore.md) section. +[Backup and Restore](../../../clusters/cluster-management/backup-restore/backup-restore.md) section. ::: @@ -572,7 +572,7 @@ resource "spectrocloud_cluster_profile" "azure-profile" { The cluster profile resources also specify packs for each of their layers using the [_pack_](https://registry.terraform.io/providers/spectrocloud/spectrocloud/latest/docs/data-sources/cluster_profile#nested-schema-for-pack) -nested schema. Check out the [Deploy a Custom Pack](../../registries-and-packs/deploy-pack.md) tutorial to learn more +nested schema. Check out the [Deploy a Custom Pack](../../../tutorials/profiles/deploy-pack.md) tutorial to learn more about creating your own packs. The **cluster_profiles.tf** file also contains 3 resources that have been commented out, one for each public cloud @@ -1096,13 +1096,13 @@ rolling back workloads across your environments. To learn more about Palette, we encourage you to check out the reference resources below. -- [Cluster Profiles](../../profiles/cluster-profiles/cluster-profiles.md) +- [Cluster Profiles](../../../profiles/cluster-profiles/cluster-profiles.md) -- [Palette Clusters](../clusters.md) +- [Palette Clusters](../../../clusters/clusters.md) -- [Backup and Restore](./backup-restore/backup-restore.md) +- [Backup and Restore](../../../clusters/cluster-management/backup-restore/backup-restore.md) -- [Deploy a Custom Pack](../../registries-and-packs/deploy-pack.md) +- [Deploy a Custom Pack](../../../tutorials/profiles/deploy-pack.md) - [Hello Universe GitHub repository](https://github.com/spectrocloud/hello-universe) diff --git a/docs/docs-content/tutorials/edge/_category_.json b/docs/docs-content/tutorials/edge/_category_.json new file mode 100644 index 0000000000..df8ba46741 --- /dev/null +++ b/docs/docs-content/tutorials/edge/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Edge", + "position": 50 +} diff --git a/docs/docs-content/clusters/edge/site-deployment/virtual-deployment/deploy-cluster.md b/docs/docs-content/tutorials/edge/deploy-cluster.md similarity index 93% rename from docs/docs-content/clusters/edge/site-deployment/virtual-deployment/deploy-cluster.md rename to docs/docs-content/tutorials/edge/deploy-cluster.md index 2bc697df20..df8baf1aea 100644 --- a/docs/docs-content/clusters/edge/site-deployment/virtual-deployment/deploy-cluster.md +++ b/docs/docs-content/tutorials/edge/deploy-cluster.md @@ -1,13 +1,12 @@ --- +sidebar_position: 0 sidebar_label: "Deploy an Edge Cluster on VMware" title: "Deploy an Edge Cluster on VMware" description: "Learn how to deploy an Edge host using VMware as the deployment platform. You will learn how to use the Edge Installer ISO, create a cluster profile, and deploy a Kubernetes cluster to the Edge host on VMware." -icon: "" -hide_table_of_contents: false -sidebar_position: 10 tags: ["edge", "tutorial"] +category: ["tutorial"] --- Palette supports deploying Kubernetes clusters in remote locations to support edge computing workloads. Palette's Edge @@ -62,6 +61,8 @@ To complete this tutorial, you will need the following: uname -m ``` +
+ :::warning The Linux machine must have network connectivity to your VMware vCenter environment. @@ -85,8 +86,8 @@ To complete this tutorial, you will need the following: - A Palette registration token for pairing Edge hosts with Palette. You will need tenant admin access to Palette to generate a new registration token. For detailed instructions, refer to the - [Create Registration Token](../site-installation/create-registration-token.md) guide. Copy the newly created token to - a clipboard or notepad file to use later in this tutorial. + [Create Registration Token](../../clusters/edge/site-deployment/site-installation/create-registration-token.md) guide. + Copy the newly created token to a clipboard or notepad file to use later in this tutorial. The screenshot below shows a sample registration token in the **Tenant Settings** > **Registration Tokens** section in Palette. @@ -182,8 +183,8 @@ View the newly created file to ensure the arguments are defined per your require cat .arg ``` -Refer to the [Build Edge Artifacts](../../edgeforge-workflow/palette-canvos/palette-canvos.md) guide to learn more about -customizing arguments. +Refer to the [Build Edge Artifacts](../../clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md) guide to +learn more about customizing arguments. ## Create User Data @@ -243,6 +244,8 @@ users: passwd: kairos ``` +
+ ## Build Artifacts The CanvOS utility uses [Earthly](https://earthly.dev/) to build the target artifacts. Issue the following command to @@ -258,7 +261,7 @@ will fail silently. You can exclude image versions you do not need from the build process by commenting out the lines in the `build-provider-images` parameter in the file **Earthfile** in the **CanvOS** repository. This speeds up build process and reduces the amount of space required for the build process. For an example of excluding a version from build, refer -to [Build Edge Artifacts guide](../../edgeforge-workflow/palette-canvos/palette-canvos.md). +to [Build Edge Artifacts guide](../../clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md). ::: @@ -363,8 +366,8 @@ docker push ttl.sh/ubuntu:k3s-1.27.5-v4.1.2-demo As a reminder, [ttl.sh](https://ttl.sh/) is a short-lived image registry. If you do not use these provider images in your cluster profile within 24 hours of pushing to _ttl.sh_, they will expire and must be re-pushed. If you want to use a different image registry, refer to the Advanced workflow in the -[Build Edge Artifacts](../../edgeforge-workflow/palette-canvos/palette-canvos.md) guide to learn how to use another -registry. +[Build Edge Artifacts](../../clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md) guide to learn how to +use another registry. ::: @@ -479,7 +482,7 @@ is an explanation of the options and sub-command used below: - The `--env-file` option reads the **.packerenv** file. - The `--volume ` option mounts a local directory to our official tutorials container, - `ghcr.io/spectrocloud/tutorials:1.1.6`. + `ghcr.io/spectrocloud/tutorials:1.1.5`. - The `sh -c "source /edge/vmware/clone_vm_template/setenv.sh "` shell sub-command defines the GOVC environment variables, the number of VMs, a prefix string for the VM name, and the VM template name. Most of the GOVC environment @@ -492,7 +495,7 @@ is an explanation of the options and sub-command used below: - The `-force` flag destroys any existing template. - The `--var-file` option reads the **vsphere.hcl** file from the container. This file contains the VM template name, VM configuration, and ISO file name to use. The VM configuration conforms to the - [minimum device requirements](../../architecture.md#minimum-device-requirements). + [minimum device requirements](../../clusters/edge/hardware-requirements.md). The **vsphere.hcl** file content is shown below for your reference. This tutorial does not require you to modify these configurations. @@ -523,7 +526,7 @@ is an explanation of the options and sub-command used below: Should you need to change the VM template name or VM settings defined in the **vsphere.hcl** file, or review the Packer script, you must open a bash session into the container using the - `docker run -it --env-file .packerenv --volume "${ISOFILEPATH}:/edge/vmware/packer/build" ghcr.io/spectrocloud/tutorials:1.1.6 bash` + `docker run -it --env-file .packerenv --volume "${ISOFILEPATH}:/edge/vmware/packer/build" ghcr.io/spectrocloud/tutorials:1.1.5 bash` command, and change to the **edge/vmware/packer/** directory to make the modifications. After you finish the modifications, issue the `packer build -force --var-file=vsphere.hcl build.pkr.hcl` command to trigger the Packer build process. @@ -539,8 +542,8 @@ docker run --interactive --tty --rm \ --env-file .packerenv \ --env-file .goenv \ --volume "${ISOFILEPATH}:/edge/vmware/packer/build" \ - ghcr.io/spectrocloud/tutorials:1.1.6 \ - sh -c "source /edge/vmware/clone_vm_template/setenv.sh && bash /edge/vmware/clone_vm_template/delete-packer-cache.sh && cd /edge/vmware/packer/ && packer init build.pkr.hcl && packer build -force --var-file=vsphere.hcl build.pkr.hcl" + ghcr.io/spectrocloud/tutorials:1.1.5 \ + sh -c "source /edge/vmware/clone_vm_template/setenv.sh && cd /edge/vmware/packer/ && packer init build.pkr.hcl && packer build -force --var-file=vsphere.hcl build.pkr.hcl" ``` Depending on your machine and network, the build process can take 7-10 minutes to finish. @@ -570,7 +573,7 @@ GOVC requires the same VMware vCenter details as the environment variables you d The next step is to use the following `docker run` command to clone the VM template and provision three VMs. Here is an explanation of the options and sub-command used below: -- The `--env-file` option reads the **.goenv** file in our official `ghcr.io/spectrocloud/tutorials:1.1.6` tutorials +- The `--env-file` option reads the **.goenv** file in our official `ghcr.io/spectrocloud/tutorials:1.1.5` tutorials container. - The `sh -c "cd edge/vmware/clone_vm_template/ && ./deploy-edge-host.sh"` shell sub-command changes to the container's @@ -612,7 +615,7 @@ export GOVC_FOLDER="${vcenter_folder}" Suppose you have changed the VM template name in the previous step or need to change the number of VMs to provision. In that case, you must modify the **setenv.sh** script. To do so, you can reuse the container bash session from the previous step if it is still active, or you can open another bash session into the container using the -`docker run -it --env-file .goenv ghcr.io/spectrocloud/tutorials:1.1.6 bash` command. If you use an existing container +`docker run -it --env-file .goenv ghcr.io/spectrocloud/tutorials:1.1.5 bash` command. If you use an existing container bash session, create the **.goenv** file described above and source it in your container environment. Next, change to the **edge/vmware/clone_vm_template/** directory to modify the **setenv.sh** script, and issue the `./deploy-edge-host.sh` command to deploy the VMs. @@ -624,7 +627,7 @@ Issue the following command to clone the VM template and provision three VMs. ```bash docker run -it --rm \ --env-file .goenv \ - ghcr.io/spectrocloud/tutorials:1.1.6 \ + ghcr.io/spectrocloud/tutorials:1.1.5 \ sh -c "cd edge/vmware/clone_vm_template/ && ./deploy-edge-host.sh" ``` @@ -664,7 +667,7 @@ select **Clusters**. Click on the **Edge Hosts** tab and verify the three VMs yo If the three Edge hosts are not displayed in the **Edge hosts** tab, the automatic registration failed. If this happens, you can manually register hosts by clicking the **Add Edge Hosts** button and pasting the Edge host ID. Repeat this host registration process for each of the three VMs. If you need help, the detailed instructions are available in the -[Register Edge Host](../../site-deployment/site-installation/edge-host-registration.md) guide. +[Register Edge Host](../../clusters/edge/site-deployment/site-installation/edge-host-registration.md) guide. ## Deploy a Cluster @@ -703,8 +706,7 @@ section. ### Profile Layers -In the **Profile Layers** section, add the following [BYOS Edge OS](../../../../integrations/byoos.md) pack to the OS -layer. +In the **Profile Layers** section, add the following [BYOS Edge OS](../../integrations/byoos.md) pack to the OS layer. | **Pack Type** | **Registry** | **Pack Name** | **Pack Version** | | ------------- | ------------ | ------------- | ---------------- | @@ -757,7 +759,8 @@ Click on the **Next layer** button to add the following Kubernetes layer to your Select the K3s version 1.27.x. 1.27.X because earlier in this tutorial, you pushed a provider image compatible with K3s v1.27.5 to the _ttl.sh_ image registry. The `system.uri` attribute of the BYOOS pack will reference the Kubernetes -version you select using the `{{ .spectro.system.kubernetes.version }}` [macro](../../../cluster-management/macros.md). +version you select using the `{{ .spectro.system.kubernetes.version }}` +[macro](../../clusters/cluster-management/macros.md). Click on the **Next layer** button, and add the following network layer. This example uses the Calico Container Network Interface (CNI). However, you can choose a different CNI pack that fits your needs, such as Flannel, Cilium, or Custom @@ -882,13 +885,13 @@ and the set of worker nodes is the worker pool. Provide the following details for the control plane pool. -| **Field** | **Value for the control-plane-pool** | -| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- | -| Node pool name | control-plane-pool | -| Allow worker capability | Checked | -| Additional Labels (Optional) | None | -| [Taints](../../../cluster-management/taints.md#taints) | Off | -| Pool Configuration > Edge Hosts | Choose one of the registered Edge hosts.
Palette will automatically display the Network Interface Card (NIC) Name for the selected host. | +| **Field** | **Value for the control-plane-pool** | +| ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- | +| Node pool name | control-plane-pool | +| Allow worker capability | Checked | +| Additional Labels (Optional) | None | +| [Taints](../../clusters/cluster-management/taints.md#taints) | Off | +| Pool Configuration > Edge Hosts | Choose one of the registered Edge hosts.
Palette will automatically display the Nic Name for the selected host. | The screenshot below shows an Edge host added to the control plane pool. @@ -979,7 +982,7 @@ following command to delete the Edge hosts. ```bash docker run --interactive --tty --rm --env-file .goenv \ - ghcr.io/spectrocloud/tutorials:1.1.6 \ + ghcr.io/spectrocloud/tutorials:1.1.5 \ sh -c "cd edge/vmware/clone_vm_template/ && ./delete-edge-host.sh" ``` @@ -1025,7 +1028,7 @@ template, right-click on it and choose **Delete** option from the **drop-down Me Switch to the **Storage** view in your vSphere client. To delete the **palette-edge-installer.iso** file from the **packer_cache/** directory in the VMware vCenter datastore, right-click on it and choose **Delete** option from the -**drop-down Menu**. +**drop-down Menu**.
## Wrap-Up @@ -1048,12 +1051,12 @@ In addition, you can use Palette to manage the entire lifecycle of Edge clusters To learn more about Edge, check out the resources below. -- [Build Edge Artifacts](../../edgeforge-workflow/palette-canvos/palette-canvos.md) +- [Build Edge Artifacts](../../clusters/edge/edgeforge-workflow/palette-canvos/palette-canvos.md) -- [Build Content Bundle](../../edgeforge-workflow/palette-canvos/build-content-bundle.md) +- [Build Content Bundle](../../clusters/edge/edgeforge-workflow/palette-canvos/build-content-bundle.md) -- [Model Edge Native Cluster Profile](../../site-deployment/model-profile.md) +- [Model Edge Native Cluster Profile](../../clusters/edge/site-deployment/model-profile.md) -- [Installation](../../site-deployment/stage.md) +- [Prepare Edge Hosts for Installation](../../clusters/edge/site-deployment/stage.md) -- [Perform Site Install](../../site-deployment/site-installation/site-installation.md) +- [Perform Site Install](../../clusters/edge/site-deployment/site-installation/site-installation.md) diff --git a/docs/docs-content/tutorials/getting-started/_category_.json b/docs/docs-content/tutorials/getting-started/_category_.json new file mode 100644 index 0000000000..597b920dff --- /dev/null +++ b/docs/docs-content/tutorials/getting-started/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Getting Started", + "position": 10 +} diff --git a/docs/docs-content/tutorials/getting-started/aws/_category_.json b/docs/docs-content/tutorials/getting-started/aws/_category_.json new file mode 100644 index 0000000000..de48752528 --- /dev/null +++ b/docs/docs-content/tutorials/getting-started/aws/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "AWS", + "position": 0 +} diff --git a/docs/docs-content/tutorials/getting-started/azure/_category_.json b/docs/docs-content/tutorials/getting-started/azure/_category_.json new file mode 100644 index 0000000000..f8d22745cf --- /dev/null +++ b/docs/docs-content/tutorials/getting-started/azure/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Azure", + "position": 20 +} diff --git a/docs/docs-content/tutorials/getting-started/gcp/_category_.json b/docs/docs-content/tutorials/getting-started/gcp/_category_.json new file mode 100644 index 0000000000..e08eb7176b --- /dev/null +++ b/docs/docs-content/tutorials/getting-started/gcp/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "GCP", + "position": 30 +} diff --git a/docs/docs-content/tutorials/getting-started/vmware/_category_.json b/docs/docs-content/tutorials/getting-started/vmware/_category_.json new file mode 100644 index 0000000000..0b76feede0 --- /dev/null +++ b/docs/docs-content/tutorials/getting-started/vmware/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "VMware", + "position": 40 +} diff --git a/docs/docs-content/tutorials/profiles/_category_.json b/docs/docs-content/tutorials/profiles/_category_.json new file mode 100644 index 0000000000..200fce79e1 --- /dev/null +++ b/docs/docs-content/tutorials/profiles/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Profiles and Packs", + "position": 20 +} diff --git a/docs/docs-content/tutorials/profiles/app-profiles/_category_.json b/docs/docs-content/tutorials/profiles/app-profiles/_category_.json new file mode 100644 index 0000000000..5d54640165 --- /dev/null +++ b/docs/docs-content/tutorials/profiles/app-profiles/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "App Profiles", + "position": 10 +} diff --git a/docs/docs-content/tutorials/profiles/cluster-profiles/_category_.json b/docs/docs-content/tutorials/profiles/cluster-profiles/_category_.json new file mode 100644 index 0000000000..db28af90c5 --- /dev/null +++ b/docs/docs-content/tutorials/profiles/cluster-profiles/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Cluster Profiles", + "position": 0 +} diff --git a/docs/docs-content/registries-and-packs/deploy-pack.md b/docs/docs-content/tutorials/profiles/deploy-pack.md similarity index 97% rename from docs/docs-content/registries-and-packs/deploy-pack.md rename to docs/docs-content/tutorials/profiles/deploy-pack.md index fa12197cec..4782781ce2 100644 --- a/docs/docs-content/registries-and-packs/deploy-pack.md +++ b/docs/docs-content/tutorials/profiles/deploy-pack.md @@ -4,12 +4,9 @@ title: "Deploy a Custom Pack" description: "Learn how to deploy applications to a Kubernetes cluster using Palette's custom packs, hosted in either the Spectro registry or an OCI registry." -icon: "" -hide_table_of_contents: false -toc_min_heading_level: 2 -toc_max_heading_level: 2 -sidebar_position: 40 +sidebar_position: 0 tags: ["packs", "tutorial"] +category: ["tutorial"] --- Custom add-on packs allow you to deploy Kubernetes applications in clusters and reuse them in multiple deployments. This @@ -148,9 +145,9 @@ Do not exit the container until the tutorial is complete. Otherwise, you may los ## Build a Pack Building a custom pack involves defining specific files. As outlined in the -[Adding Add-on Packs](adding-add-on-packs.md) guide, there are two ways to define a custom pack: using manifest files or -Helm charts. The file structure differs for manifest-based packs and Helm chart-based packs. Below is the reference file -structure for each. +[Adding Add-on Packs](../../registries-and-packs/adding-add-on-packs.md) guide, there are two ways to define a custom +pack: using manifest files or Helm charts. The file structure differs for manifest-based packs and Helm chart-based +packs. Below is the reference file structure for each. @@ -226,8 +223,8 @@ Review each of the following five files in the **hello-universe-pack** folder. - **pack.json** - This file contains the pack metadata such as `addonType`, `cloudTypes`, and the `kubeManifests` array. The array consists of a list of manifest files: `layer`, `name`, and `version`. Refer to the - [JSON Schema](add-custom-packs.md#json-schema) for a list of attributes and respective data types. The schema - validation happens when you push a pack to the registry. + [JSON Schema](../../registries-and-packs/add-custom-packs.md#json-schema) for a list of attributes and respective data + types. The schema validation happens when you push a pack to the registry. ```json { @@ -268,7 +265,8 @@ Review each of the following five files in the **hello-universe-pack** folder. within the pack. Once defined, the **Presets** field becomes visible in both the **Clusters** and **Profile** sections of the Palette UI. Users can select any preset from the available pack presets, and upon selection, the predefined values of the chosen preset are applied to the pack. Refer - to [Pack Presets](./pack-constraints.md#preset-attributes) for details and examples of how to define presets. + to [Pack Presets](../../registries-and-packs/pack-constraints.md#preset-attributes) for details and examples of how to + define presets. The example below shows the parameters you can configure in the **values.yaml** file for the `hello-universe` manifest during the creation of the cluster profile. @@ -291,7 +289,8 @@ the pack to the registry, and configure the registry in Palette. You can set up a registry server using either the Spectro registry or an OCI-compliant registry. Palette supports all OCI-compliant registries, and you can refer to the -[Spectro Cloud OCI Registry](./registries/oci-registry/oci-registry.md) resource for more information. +[Spectro Cloud OCI Registry](../../registries-and-packs/registries/oci-registry/oci-registry.md) resource for more +information. The tutorial environment already includes the Spectro registry service and other necessary tools. For OCI registries, as per the [Prerequisites](#prerequisites) section, ensure you have an active OCI registry. Two types of OCI authentication @@ -320,7 +319,7 @@ registry serve /etc/spectro/config.yml > /var/log/registry.log 2>&1 & ``` The registry server starts in HTTP mode. If you want to deploy an HTTPS registry server, refer to the -[Add a Custom Registry](adding-a-custom-registry.md) guide. +[Add a Custom Registry](../../registries-and-packs/adding-a-custom-registry.md) guide. Next, make the registry server accessible to the public using [Ngrok](https://ngrok.com/) reverse proxy so that you can configure it later in Palette. Execute the command below to expose the registry server listening on port 5000 via an @@ -538,7 +537,8 @@ Check if the pushed pack is listed, as shown in the image below. ![Screenshot of spectro pack ls](/tutorials/deploy-pack/registries-and-packs_deploy-pack_pack-push.webp) -For assistance with Spectro CLI commands, refer to the [Spectro CLI Commands](spectro-cli-reference.md#commands) guide. +For assistance with Spectro CLI commands, refer to the +[Spectro CLI Commands](../../registries-and-packs/spectro-cli-reference.md#commands) guide.
@@ -732,7 +732,7 @@ Log in to [Palette](https://console.spectrocloud.com) and switch to the **Tenant Navigate to the **Tenant Settings** > **Registries** > **OCI Registries** section and click on **Add New OCI Registry**. Palette will open a pop-up window prompting you for the required fields to configure an OCI registry. -![A screenshot highlighting the fields to configure an OCI registry. ](/tutorials/deploy-pack/registries-and-packs_deploy-pack_basic-oci-registry.webp) +![A screenshot highlighting the fields to configure an OCI registry.](/tutorials/deploy-pack/registries-and-packs_deploy-pack_basic-oci-registry.webp) Provide the registry name. For consistency, we suggest using the registry name **harbor-registry**. Choose **Pack** as the provider and select **Basic** as the OCI authentication type. Complete the **Endpoint** field with your Harbor @@ -818,7 +818,7 @@ Next, proceed to include the add-on layers. Click on the **Add New Pack** button Add the Spectro Proxy pack to enable a reverse proxy to connect to the cluster's API. Adding this pack is _optional_, but it will help connect your local machine to the cluster's API for debugging. Refer to the -[Spectro Proxy](../integrations/frp.md) guide for more details. +[Spectro Proxy](../../integrations/frp.md) guide for more details. | **Pack Type** | **Registry** | **Pack Name** | **Pack Version** | | -------------- | ------------ | ------------- | ---------------- | @@ -982,7 +982,7 @@ cd /terraform/pack-tf To get started with Terraform code, you need a Palette API key to authenticate and interact with the Palette API endpoint. To add a new API key, log in to Palette, click on the **User Menu** at the top right, and select **My API Keys**, as shown in the screenshot below. Visit the -[Create API Key](../user-management/authentication/api-key/create-api-key.md) guide for more information. +[Create API Key](../../user-management/authentication/api-key/create-api-key.md) guide for more information. ![Screenshot of generating an API key in Palette.](/tutorials/deploy-pack/registries-and-packs_deploy-pack_generate-api-key.webp) @@ -1324,10 +1324,10 @@ deployment scripts. All you need to do is maintain the cluster profiles. To learn more about packs in Palette, we encourage you to check out the reference resources below. -- [Custom OS Pack](../integrations/byoos.md) +- [Custom OS Pack](../../integrations/byoos.md) -- [Add-on Packs](adding-add-on-packs.md) +- [Add-on Packs](../../registries-and-packs/adding-add-on-packs.md) -- [Pack Constraints](pack-constraints.md) +- [Pack Constraints](../../registries-and-packs/pack-constraints.md) -- [OCI Registry](registries/oci-registry/oci-registry.md) +- [OCI Registry](../../registries-and-packs/registries/oci-registry/oci-registry.md) diff --git a/docs/docs-content/tutorials/self-hosted/_category_.json b/docs/docs-content/tutorials/self-hosted/_category_.json new file mode 100644 index 0000000000..0a094f69e8 --- /dev/null +++ b/docs/docs-content/tutorials/self-hosted/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Self-hosted", + "position": 60 +} diff --git a/docs/docs-content/tutorials/tenant-admin-security/_category_.json b/docs/docs-content/tutorials/tenant-admin-security/_category_.json new file mode 100644 index 0000000000..b924b6f807 --- /dev/null +++ b/docs/docs-content/tutorials/tenant-admin-security/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Tenant Admin and Security", + "position": 80 +} diff --git a/docs/docs-content/tutorials/tutorials.md b/docs/docs-content/tutorials/tutorials.md new file mode 100644 index 0000000000..2dfc216bc5 --- /dev/null +++ b/docs/docs-content/tutorials/tutorials.md @@ -0,0 +1,76 @@ +--- +sidebar_label: "Palette Tutorials" +title: "Welcome to Palette Tutorials" +sidebar_position: 0 +pagination_next: null +--- + +This documentation section provides hands-on tutorials you can complete in your environment to learn more about Palette +and VerteX. Here, you will find tutorials covering the aspects of Palette you need to become a proficient user, as well +as advanced topics that require more time and attention to comprehend. These tutorials will enable you to maximize +Palette's ability to manage Kubernetes at scale. Check out the sections below to learn more about crucial Palette +concepts. + +- **Profiles** - Palette profiles allow you to specify layers for your workloads using packs, Helm charts, Zarf + packages, or cluster manifests. Packs serve as blueprints to the provisioning and deployment process, as they contain + the versions of the container images that Palette will install for you. +- **Cluster Deployment** - Kubernetes clusters in Palette are instantiated from cluster profiles. A cluster definition + in Palette consists of a reference to a cluster profile, cloud configuration, as well as the cluster size and + placement configuration. +- **Cluster Management** - Palette supports several Day-2 operations to manage the end-to-end lifecycle of Kubernetes + clusters. It also provides several capabilities across new and imported clusters to perform ongoing management + operations like backup/restore and to keep your clusters secure, compliant, and up to date. +- **Edge** - Edge clusters are Kubernetes clusters set up on Edge hosts installed in isolated locations like grocery + stores and restaurants versus a data center or cloud environment. These Edge hosts can be bare metal machines or + virtual machines and are managed by operators at remote sites. + +
+ +
+ +### Ready to Start Learning? + +Explore more through the following tutorials. + + diff --git a/docs/docs-content/tutorials/vmo/_category_.json b/docs/docs-content/tutorials/vmo/_category_.json new file mode 100644 index 0000000000..8efed0a723 --- /dev/null +++ b/docs/docs-content/tutorials/vmo/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Virtual Machine Orchestration", + "position": 70 +} diff --git a/docusaurus.config.js b/docusaurus.config.js index fe928e89fe..e7e4b47a65 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -8,6 +8,7 @@ const redirects = require("./redirects"); const ArchivedVersions = require("./archiveVersions.json"); const { pluginPacksAndIntegrationsData } = require("./plugins/packs-integrations"); const { pluginImportFontAwesomeIcons } = require("./plugins/font-awesome"); + import path from "path"; /** @type {import('@docusaurus/types').Config} */ @@ -117,13 +118,6 @@ const config = { ...args, docs: filteredDocs, }); - // This is an override to the default sidebar items generator. - // This injects the "Privacy Settings" link at the bottom of the sidebar. - sidebarItems.push({ - type: "html", - value: - 'Privacy Settings', - }); return sidebarItems; }, editUrl: "https://github.com/spectrocloud/librarium/blob/master", @@ -294,10 +288,20 @@ const config = { items: [ { to: "/", + type: "docSidebar", + sidebarId: "docSidebar", label: "Docs", position: "left", activeBaseRegex: "^(?!/api/).*$", }, + { + to: "/tutorials", + type: "docSidebar", + sidebarId: "tutorialSidebar", + label: "Tutorials", + position: "left", + activeBaseRegex: "^(?!/api/).*$", + }, { to: "/api/introduction", label: "API", diff --git a/plugins/font-awesome.js b/plugins/font-awesome.js index 85733f5ce6..e476b36d50 100644 --- a/plugins/font-awesome.js +++ b/plugins/font-awesome.js @@ -1,5 +1,6 @@ const fs = require("fs"); const path = require("path"); +const sidebars = require("../sidebars"); const assetIcons = { about: true, @@ -22,6 +23,9 @@ const assetIcons = { terraform: true, }; +// add fontawesome icon names to dynamically populate in the dynamicFontAwesomeimports +const icons = []; + function capitalize(str) { return str[0].toUpperCase() + str.slice(1); } @@ -47,6 +51,15 @@ async function pluginImportFontAwesomeIcons() { } }); + sidebars?.tutorialSidebar?.forEach((sidebarItem) => { + if (sidebarItem?.customProps?.icon && !assetIcons[sidebarItem?.customProps?.icon]) { + appFontAwesomeIcons[sidebarItem?.customProps?.icon] = sidebarItem?.customProps?.icon; + } + }); + + icons.forEach((icon) => { + appFontAwesomeIcons[icon] = icon; + }); // Create an array to hold all the import statements const importsArray = []; diff --git a/redirects.js b/redirects.js index 8775d78f96..c7503686cc 100644 --- a/redirects.js +++ b/redirects.js @@ -504,17 +504,27 @@ const redirects = [ from: "/clusters/edge/edgeforge-workflow/palette-canvos/build-artifacts", to: "/clusters/edge/edgeforge-workflow/palette-canvos/build-content-bundle", }, + + // Redirects for tutorials that were removed from docs { - from: "/clusters/edge/site-deployment/initial-setup", - to: "/clusters/edge/site-deployment/site-installation/initial-setup", + from: "/registries-and-packs/deploy-pack", + to: "/tutorials/profiles/deploy-pack", }, { - from: "/clusters/edge/site-deployment/deploy-cluster", - to: "/clusters/edge/site-deployment/virtual-deployment/deploy-cluster", + from: "/clusters/pcg/deploy-app-pcg", + to: "/tutorials/cluster-deployment/pcg/deploy-app-pcg", + }, + { + from: "/devx/apps/deploy-app", + to: "/tutorials/cluster-deployment/pde/deploy-app", }, { - from: "/clusters/edge/site-deployment/site-installation/cluster-deployment", - to: "/clusters/edge/site-deployment/cluster-deployment", + from: "/clusters/cluster-management/update-k8s-cluster", + to: "/tutorials/cluster-management/update-maintain/update-k8s-cluster", + }, + { + from: "/clusters/edge/site-deployment/deploy-cluster", + to: "/tutorials/edge/deploy-cluster", }, ]; diff --git a/sidebars.js b/sidebars.js index 8f1e3da2f2..dd8ccd3eb5 100644 --- a/sidebars.js +++ b/sidebars.js @@ -11,23 +11,133 @@ // @ts-check +const privacyIconSVG = ` + + + +`; + +// Function to create the privacy link +function createPrivacyLink(includeIcon = true, extraClass = "") { + const icon = includeIcon ? privacyIconSVG : ""; + return ` + + ${icon}Privacy Settings + + `; +} + +const privacyLinkDocs = createPrivacyLink(); +const privacyLinkTutorial = createPrivacyLink(false, "privacy-settings"); + /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{ type: "autogenerated", dirName: "." }], - - // But you can create a sidebar manually - /* + docSidebar: [ + { type: "autogenerated", dirName: "." }, + { + type: "html", + value: privacyLinkDocs, + }, + ], tutorialSidebar: [ - 'intro', - 'hello', { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], + type: "doc", + id: "tutorials/tutorials", + }, + // { + // type: "category", + // label: "Getting Started", + // className: "category", + // collapsed: false, + // collapsible: false, + // items: [{ type: "autogenerated", dirName: "tutorials/getting-started" }], + // customProps: { + // icon: "flag-checkered", + // }, + // }, + { + type: "category", + label: "Profiles and Packs", + className: "category", + collapsed: false, + collapsible: false, + items: [{ type: "autogenerated", dirName: "tutorials/profiles" }], + customProps: { + icon: "bundles", + }, + }, + { + type: "category", + label: "Cluster Deployment", + className: "category", + collapsible: false, + collapsed: false, + items: [{ type: "autogenerated", dirName: "tutorials/cluster-deployment" }], + customProps: { + icon: "clusters", + }, + }, + { + type: "category", + label: "Cluster Management", + className: "category", + collapsible: false, + collapsed: false, + items: [{ type: "autogenerated", dirName: "tutorials/cluster-management" }], + customProps: { + icon: "envelope-open-text", + }, + }, + { + type: "category", + label: "Edge", + className: "category", + collapsible: false, + collapsed: false, + items: [{ type: "autogenerated", dirName: "tutorials/edge" }], + customProps: { + icon: "microchip", + }, + }, + // { + // type: "category", + // label: "Self-hosted", + // className: "category", + // collapsible: false, + // collapsed: false, + // items: [{ type: "autogenerated", dirName: "tutorials/self-hosted" }], + // customProps: { + // icon: "warehouse", + // }, + // }, + // { + // type: "category", + // label: "Virtual Machine Orchestration", + // className: "category", + // collapsible: false, + // collapsed: false, + // items: [{ type: "autogenerated", dirName: "tutorials/vmo" }], + // customProps: { + // icon: "server", + // }, + // }, + // { + // type: "category", + // label: "Tenant Admin and Security", + // className: "category", + // collapsible: false, + // collapsed: false, + // items: [{ type: "autogenerated", dirName: "tutorials/tenant-admin-security" }], + // customProps: { + // icon: "gears", + // }, + // }, + { + type: "html", + value: privacyLinkTutorial, }, ], - */ }; module.exports = sidebars; diff --git a/src/components/IconMapper/dynamicFontAwesomeImports.js b/src/components/IconMapper/dynamicFontAwesomeImports.js index f168fbb419..a98f03e718 100644 --- a/src/components/IconMapper/dynamicFontAwesomeImports.js +++ b/src/components/IconMapper/dynamicFontAwesomeImports.js @@ -10,6 +10,7 @@ import { faNetworkWired } from '@fortawesome/free-solid-svg-icons'; import { faServer } from '@fortawesome/free-solid-svg-icons'; import { faUsers } from '@fortawesome/free-solid-svg-icons'; import { faWarehouse } from '@fortawesome/free-solid-svg-icons'; +import { faFlagCheckered } from '@fortawesome/free-solid-svg-icons'; import { faPalette } from '@fortawesome/free-solid-svg-icons'; import { faBook } from '@fortawesome/free-solid-svg-icons'; import { faBookmark } from '@fortawesome/free-solid-svg-icons'; @@ -20,6 +21,7 @@ import { faGears } from '@fortawesome/free-solid-svg-icons'; import { faScrewdriverWrench } from '@fortawesome/free-solid-svg-icons'; import { faEyeSlash } from '@fortawesome/free-solid-svg-icons'; import { faShield } from '@fortawesome/free-solid-svg-icons'; +import { faMicrochip } from '@fortawesome/free-solid-svg-icons'; export const fontAwesomeIcons = { "cubes": faCubes, @@ -34,6 +36,7 @@ export const fontAwesomeIcons = { "server": faServer, "users": faUsers, "warehouse": faWarehouse, + "flag-checkered": faFlagCheckered, "palette": faPalette, "book": faBook, "bookmark": faBookmark, @@ -43,5 +46,6 @@ export const fontAwesomeIcons = { "gears": faGears, "screwdriver-wrench": faScrewdriverWrench, "eye-slash": faEyeSlash, - "shield": faShield + "shield": faShield, + "microchip": faMicrochip }; \ No newline at end of file diff --git a/src/components/SimpleCardGrid/SimpleCardGrid.module.scss b/src/components/SimpleCardGrid/SimpleCardGrid.module.scss index 80cc970536..27dfb8995b 100644 --- a/src/components/SimpleCardGrid/SimpleCardGrid.module.scss +++ b/src/components/SimpleCardGrid/SimpleCardGrid.module.scss @@ -37,6 +37,15 @@ line-height: 24px; } +.simpleCardHeaderNoGap { + display: flex; + justify-content: flex-start; + align-items: center; + font-size: 20px; + font-weight: 500; + line-height: 24px; +} + .simpleCardFooter { display: flex; justify-content: flex-end; diff --git a/src/components/SimpleCardGrid/SimpleCardGrid.tsx b/src/components/SimpleCardGrid/SimpleCardGrid.tsx index 34d63f19e9..9dad379038 100644 --- a/src/components/SimpleCardGrid/SimpleCardGrid.tsx +++ b/src/components/SimpleCardGrid/SimpleCardGrid.tsx @@ -4,6 +4,7 @@ import SimpleCardFooterArrow from "./SimpleCardFooterArrow"; interface SimpleCardProps { cards?: SimpleCard[]; + hideNumber?: boolean; } interface SimpleCard { @@ -12,9 +13,16 @@ interface SimpleCard { description: string; buttonText: string; relativeURL: string; + hideNumber?: boolean; } -export default function SimpleCardGrid({ cards = [] }: SimpleCardProps) { +interface SimpleCardHeader { + index?: number; + hideNumber?: boolean; + title: string; +} + +export default function SimpleCardGrid({ cards = [], hideNumber = false }: SimpleCardProps) { return (
{cards.map((card, index) => ( @@ -25,20 +33,19 @@ export default function SimpleCardGrid({ cards = [] }: SimpleCardProps) { buttonText={card.buttonText} relativeURL={card.relativeURL} key={`simpleCard-${index}`} + hideNumber={hideNumber} /> ))}
); } -function SimpleCard({ title, index, description, buttonText, relativeURL }: SimpleCard) { +function SimpleCard({ title, index, description, buttonText, relativeURL, hideNumber }: SimpleCard) { + console.log(hideNumber); return (
-
-
{index}
-
{title}
-
+

{description}

@@ -52,3 +59,19 @@ function SimpleCard({ title, index, description, buttonText, relativeURL }: Simp
); } + +function SimpleCardHeader({ index, hideNumber, title }: SimpleCardHeader) { + if (!hideNumber) { + return ( +
+
{index}
+
{title}
+
+ ); + } + return ( +
+
{title}
+
+ ); +} diff --git a/src/css/custom.scss b/src/css/custom.scss index 8d199c6281..2628b5a228 100644 --- a/src/css/custom.scss +++ b/src/css/custom.scss @@ -11,6 +11,7 @@ @import "./dark-mode.scss"; @import "./reset.scss"; @import "./table.scss"; +@import "./sidebars.scss"; html { // mendable widget inline style affects fonts @@ -37,6 +38,7 @@ html { --ifm-alert-shadow: unset; --openapi-demo-font-size-code: 10px; --openapi-demo-font-size-input: 10px; + --custom-sidebar-item-color: #aeb1be; } .markdown h1:first-child { @@ -220,6 +222,12 @@ p img.markdown-image { } } +// Allow hiding directories in docs-content + +.hidden-category { + display: none !important; +} + // Reduce the spacing between lines in code blocks .theme-code-block code { diff --git a/src/css/dark-mode.scss b/src/css/dark-mode.scss index b5ce18b829..3753484aef 100644 --- a/src/css/dark-mode.scss +++ b/src/css/dark-mode.scss @@ -44,6 +44,7 @@ html[data-theme="dark"] { --custom-release-notes-selected-background: #2b323c; --custom-release-notes-option-font-color: white; --custom-release-notes-menu-padding: #2b323c; + --custom-sidebar-icon-color: #aeb1be; .theme-last-updated { color: var(--ifm-font-color-base); diff --git a/src/css/light-mode.scss b/src/css/light-mode.scss index ec16dad856..a850ca8cb5 100644 --- a/src/css/light-mode.scss +++ b/src/css/light-mode.scss @@ -52,6 +52,10 @@ html[data-theme="light"] { } } + .category > .menu__list-item-collapsible:hover { + background: none; + } + .menu__list-item-collapsible:hover { background: #f7f9ff; } diff --git a/src/css/sidebars.scss b/src/css/sidebars.scss new file mode 100644 index 0000000000..f293a96879 --- /dev/null +++ b/src/css/sidebars.scss @@ -0,0 +1,33 @@ +.privacy-settings { + display: flex; + align-items: center; + border-top: 1px solid var(--custom-sidebar-item-color); + border-radius: 0px; + margin-right: 16px; + margin-top: 4px; + margin-left: 12px; + padding-top: 16px; + padding-left: 0; +} + +.category > .menu__list-item-collapsible { + color: var(--custom-sidebar-item-color); + font-size: 14px; + border-bottom: 1px solid var(--custom-sidebar-item-color); + border-radius: 0px; + margin-right: 16px; + margin-left: 12px; +} + +.category > .menu__list-item-collapsible > .menu__link { + color: var(--custom-sidebar-item-color); + padding: 12px 0; +} + +.category > .menu__list-item-collapsible > .menu__link.menu__link--active { + color: var(--ifm-menu-color-active); +} + +.category .menu__list { + padding-left: 0px; +} diff --git a/static/assets/docs/images/tutorials/tutorials_landing-page-intro.webp b/static/assets/docs/images/tutorials/tutorials_landing-page-intro.webp new file mode 100644 index 0000000000..28964aa711 Binary files /dev/null and b/static/assets/docs/images/tutorials/tutorials_landing-page-intro.webp differ