PageSourceSearch

https://docs-spectrocloud.netlify.app/assets/js/ba1e8ddc.d7af92ac.js

js docs-spectrocloud.netlify.app collected 2026-10-03 10:40:25 UTC 16,341 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkspectro_cloud_docs=self.webpackChunkspectro_cloud_docs||[]).push([["10858"],{809784:function(e,t,r){r.r(t),r.d(t,{frontMatter:()=>a,toc:()=>c,default:()=>h,metadata:()=>s,assets:()=>o,contentTitle:()=>l});var s=JSON.parse('{"id":"tutorials/getting-started/palette/vmware/create-cluster-profile","title":"Create a Cluster Profile","description":"Learn to create a full cluster profile in Palette.","source":"@site/docs/docs-content/tutorials/getting-started/palette/vmware/create-cluster-profile.md","sourceDirName":"tutorials/getting-started/palette/vmware","slug":"/tutorials/getting-started/palette/vmware/create-cluster-profile","permalink":"/tutorials/getting-started/palette/vmware/create-cluster-profile","draft":false,"unlisted":false,"editUrl":"https://github.com/spectrocloud/librarium/blob/master/docs/docs-content/tutorials/getting-started/palette/vmware/create-cluster-profile.md","tags":[{"inline":true,"label":"getting-started","permalink":"/tags/getting-started"},{"inline":true,"label":"vmware","permalink":"/tags/vmware"},{"inline":true,"label":"tutorial","permalink":"/tags/tutorial"}],"version":"current","lastUpdatedAt":1777826507000,"sidebarPosition":30,"frontMatter":{"sidebar_label":"Create a Cluster Profile","title":"Create a Cluster Profile","description":"Learn to create a full cluster profile in Palette.","icon":"","hide_table_of_contents":false,"sidebar_position":30,"tags":["getting-started","vmware","tutorial"]},"sidebar":"tutorialSidebar","previous":{"title":"Deploy a PCG","permalink":"/tutorials/getting-started/palette/vmware/deploy-pcg"},"next":{"title":"Deploy a Cluster","permalink":"/tutorials/getting-started/palette/vmware/deploy-k8s-cluster"}}'),n=r(474848),i=r(884429);let a={sidebar_label:"Create a Cluster Profile",title:"Create a Cluster Profile",description:"Learn to create a full cluster profile in Palette.",icon:"",hide_table_of_contents:!1,sidebar_position:30,tags:["getting-started","vmware","tutorial"]},l,o={},c=[{value:"\u{1F9D1}\u200D\u{1F680} Back at Spacetastic HQ",id:"-back-at-spacetastic-hq",level:2},{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create a Full Cluster Profile",id:"create-a-full-cluster-profile",level:2},{value:"Add Packs",id:"add-packs",level:2},{value:"Wrap-Up",id:"wrap-up",level:2},{value:"\u{1F9D1}\u200D\u{1F680} Catch up with Spacetastic",id:"-catch-up-with-spacetastic",level:2}];function d(e){let t={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components},{PartialsComponent:s,VersionedLink:a}=t;return s||p("PartialsComponent",!0),a||p("VersionedLink",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Palette offers profile-based management for Kubernetes, enabling consistency, repeatability, and operational efficiency\nacross multiple clusters. A cluster profile allows you to customize the cluster infrastructure stack, allowing you to\nchoose the desired Operating System (OS), Kubernetes, Container Network Interfaces (CNIs), and Container Storage\nInterfaces (CSIs). You can further customize the stack with add-on application layers. For more information about\ncluster profile types, refer to ",(0,n.jsx)(t.a,{href:"/tutorials/getting-started/palette/introduction-palette#cluster-profiles",children:"Cluster Profiles"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["In this tutorial, you create a full profile directly from the Palette dashboard. Then, you add a layer to your cluster\nprofile by using a ",(0,n.jsx)(t.a,{href:"/integrations/community_packs",children:"community pack"})," to deploy a web application. The\nconcepts you learn about in the Getting Started section are centered around a fictional case study company, Spacetastic\nLtd."]}),"\n",(0,n.jsx)(t.h2,{id:"-back-at-spacetastic-hq",children:"\u{1F9D1}\u200D\u{1F680} Back at Spacetastic HQ"}),"\n",(0,n.jsx)(s,{category:"getting-started",name:"spacetastic-create-cluster-profile-intro"}),"\n",(0,n.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Follow the steps described 
1in the ",(0,n.jsx)(t.a,{href:"/tutorials/getting-started/palette/vmware/setup",children:"Set up Palette with VMware"})," guide to authenticate Palette for use with\nyour VMware user account."]}),"\n",(0,n.jsxs)(t.li,{children:["Refer to the ",(0,n.jsx)(t.a,{href:"/tutorials/getting-started/palette/vmware/deploy-pcg",children:"Deploy a PCG with Palette CLI"})," guide to create the required infrastructure that enables\ncommunication with your cluster."]}),"\n",(0,n.jsxs)(t.li,{children:["Ensure that the\n",(0,n.jsx)(t.a,{href:"/registries-and-packs/registries/#default-registries",children:"Palette Community Registry"})," is\navailable in your Palette environment. Refer to the\n",(0,n.jsx)(t.a,{href:"/registries-and-packs/registries/oci-registry/add-oci-packs",children:"Add OCI Packs Registry"})," guide for\nadditional guidance."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"create-a-full-cluster-profile",children:"Create a Full Cluster Profile"}),"\n",(0,n.jsxs)(t.p,{children:["Log in to ",(0,n.jsx)(t.a,{href:"https://console.spectrocloud.com",children:"Palette"})," and navigate to the left ",(0,n.jsx)(t.strong,{children:"Main Menu"}),". Select ",(0,n.jsx)(t.strong,{children:"Profiles"})," to\nview the cluster profile page. You can view the list of available cluster profiles. To create a cluster profile, click\non ",(0,n.jsx)(t.strong,{children:"Add Cluster Profile"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Follow the wizard to create a new profile."}),"\n",(0,n.jsxs)(t.p,{children:["In the ",(0,n.jsx)(t.strong,{children:"Basic Information"})," section, assign the name ",(0,n.jsx)(t.strong,{children:"vmware-profile"}),", provide a profile description, select the type\nas ",(0,n.jsx)(t.strong,{children:"Full"}),", and assign the tag ",(0,n.jsxs)(t.strong,{children:["env",":vmware"]}),". You can leave the version empty if you want to. Just be aware that the\nversion defaults to ",(0,n.jsx)(t.strong,{children:"1.0.0"}),". Click on ",(0,n.jsx)(t.strong,{children:"Next"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["Cloud Type allows you to choose the infrastructure provider with which this cluster profile is associated. Select\n",(0,n.jsx)(t.strong,{children:"VMware"})," and click on ",(0,n.jsx)(t.strong,{children:"Next"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.strong,{children:"Profile Layers"})," step is where you specify the packs that compose the profile. There are four required\ninfrastructure packs and several optional add-on packs you can choose from. Every pack requires you to select the ",(0,n.jsx)(t.strong,{children:"Pack\nType"}),", ",(0,n.jsx)(t.strong,{children:"Registry"}),", and ",(0,n.jsx)(t.strong,{children:"Pack Name"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["For this tutorial, use the following packs. If there are differences between the latest version of a pack and the\nversion you select, a YAML editor will open. Click ",(0,n.jsx)(t.strong,{children:"Confirm Changes"})," to proceed."]}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Pack Name"}),(0,n.jsx)(t.th,{children:"Version"}),(0,n.jsx)(t.th,{children:"Registry"}),(0,n.jsx)(t.th,{children:"Layer"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Ubuntu"}),(0,n.jsx)(t.td,{children:"22.4.x"}),(0,n.jsx)(t.td,{children:"Public Repo"}),(0,n.jsx)(t.td,{children:"Operating System"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Palette eXtended Kubernetes"}),(0,n.jsx)(t.td,{children:"1.28.x"}),(0,n.jsx)(t.td,{children:"Public Repo"}),(0,n.jsx)(t.td,{children:"Kubernetes"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Calico"}),(0,n.jsx)(t.td,{children:"3.27.x"}),(0,n.jsx)(t.td,{children:"Public Repo"}),(0,n.jsx)(t.td,{children:"Network"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"vSphere CSI"}),(0,n.jsx)(t.td,{children:"3.1.x"}),(0,n.jsx)(t.td,{children:"Public Repo"}),(0,n.jsx)(t.td,{children:"Storage"})]})]})]}),"\n",(0,n.jsxs)(t.p,{children:["As you select each layer, click on ",(0,n.jsx)(t.strong,{children:"Next Layer"})," to proceed to the next one."]}),"\n",(0,n.jsxs)(t.p,{children:["Click on ",(0,n.jsx)(t.strong,{children:"Confirm"})," and then ",(0,n.jsx)(t.strong,{children:"Next"})," after you have completed selecting all the core layers."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"VMware core layers",src:r(745607).A+"",width:"3242",height:"2142"})}),"\n",(0,n.jsxs)(t.p,{children:["The review section gives an overview of the cluster profile configuration you selected. Click on ",(0,n.jsx)(t.strong,{children:"Finish\nConfiguration"})," to create the cluster profile."]}),"\n",(0,n.jsx)(t.h2,{id:"add-packs",children:"Add Packs"}),"\n",(0,n.jsxs)(t.p,{children:["Navigate to the left ",(0,n.jsx)(t.strong,{children:"Main Menu"})," and select ",(0,n.jsx)(t.strong,{children:"Profiles"}),". Select the cluster profile you created earlier."]}),"\n",(0,n.jsxs)(t.p,{children:["Click on ",(0,n.jsx)(t.strong,{children:"Add New Pack"})," at the top of the page."]}),"\n",(0,n.jsxs)(t.p,{children:["Add the ",(0,n.jsx)(t.strong,{children:"MetalLB (Helm)"})," pack to your profile. The ",(0,n.jsx)(a,{text:"MetalLB (Helm)",url:"/integrations/packs/?pack=lb-metallb-helm"})," pack provides a\nload-balancer implementation for your Kubernetes cluster, as VMware does not offer a load balancer solution natively.\nThe load balancer is required to help the ",(0,n.jsx)(t.em,{children:"LoadBalancer"})," service specified in the Hello Universe application manifest\nobtain an IP address, so that you can access the application from your browser."]}
1),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Pack Name"}),(0,n.jsx)(t.th,{children:"Version"}),(0,n.jsx)(t.th,{children:"Layer"})]})}),(0,n.jsx)(t.tbody,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"lb-metallb-helm"}),(0,n.jsx)(t.td,{children:"0.14.x"}),(0,n.jsx)(t.td,{children:"Load Balancer"})]})})]}),"\n",(0,n.jsxs)(t.p,{children:["Now, under ",(0,n.jsx)(t.strong,{children:"Pack Details"}),", click on ",(0,n.jsx)(t.strong,{children:"Values"})," and replace the predefined ",(0,n.jsx)(t.code,{children:"192.168.10.0/24"})," IP CIDR listed below the\n",(0,n.jsx)(t.strong,{children:"addresses"})," line with a valid IP address or IP range from your VMware environment to be assigned to your load\nbalancer. Next, click ",(0,n.jsx)(t.strong,{children:"Confirm & Create"})," to add the MetalLB pack."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"MetalLb Helm-based pack.",src:r(158829).A+"",width:"3234",height:"2134"})}),"\n",(0,n.jsxs)(t.p,{children:["Click on ",(0,n.jsx)(t.strong,{children:"Confirm & Create"})," to save the pack."]}),"\n",(0,n.jsxs)(t.p,{children:["Click on ",(0,n.jsx)(t.strong,{children:"Add New Pack"})," at the top of the page."]}),"\n",(0,n.jsxs)(t.p,{children:["Select the ",(0,n.jsx)(t.strong,{children:"Palette Community Registry"})," from the ",(0,n.jsx)(t.strong,{children:"Registry"})," dropdown. Then, click on the latest ",(0,n.jsx)(t.strong,{children:"Hello Universe"}),"\npack with version ",(0,n.jsx)(t.strong,{children:"v1.2.0"}),"."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Screenshot of hello universe pack",src:r(374955).A+"",width:"2890",height:"1653"})}),"\n",(0,n.jsxs)(t.p,{children:["Once you have selected the pack, Palette will display its README, which provides you with additional guidance for usage\nand configuration options. The pack you added will deploy the\n",(0,n.jsx)(t.a,{href:"https://github.com/spectrocloud/hello-universe",children:(0,n.jsx)(t.em,{children:"hello-universe"})})," application."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Screenshot of pack readme",src:r(65322).A+"",width:"2894",height:"1658"})}),"\n",(0,n.jsxs)(t.p,{children:["Click on ",(0,n.jsx)(t.strong,{children:"Values"})," to edit the pack manifest. Click on ",(0,n.jsx)(t.strong,{children:"Presets"})," on the right-hand side."]}),"\n",(0,n.jsx)(t.p,{children:"This pack has two configured presets:"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Disable Hello Universe API"})," configures the ",(0,n.jsx)(t.a,{href:"https://github.com/spectrocloud/hello-universe",children:(0,n.jsx)(t.em,{children:"hello-universe"})}),"\napplication as a standalone frontend application. This is the default preset selection."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Enable Hello Universe API"})," configures the ",(0,n.jsx)(t.a,{href:"https://github.com/spectrocloud/hello-universe",children:(0,n.jsx)(t.em,{children:"hello-universe"})}),"\napplication as a three-tier application with a frontend, API server, and Postgres database."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Select the ",(0,n.jsx)(t.strong,{children:"Enable Hello Universe API"})," preset. The pack manifest changes according to this preset."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Screenshot of pack presets",src:r(235912).A+"",width:"2888",height:"1652"})}),"\n",(0,n.jsx)(t.p,{children:"The pack requires two values to be replaced for the authorization token and for the database password when using this\npreset. Replace these values with your own base64 encoded values."}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.a,{href:"https://github.com/spectrocloud/hello-universe?tab=readme-ov-file#single-load-balancer",children:"hello-universe"})," repository\nprovides a token that you can use."]})}),"\n",(0,n.jsxs)(t.p,{children:["Click on ",(0,n.jsx)(t.strong,{children:"Confirm & Create"})," to save the manifest. Then, click on ",(0,n.jsx)(t.strong,{children:"Save Changes"})," to save this new layer to the\ncluster profile."]}),"\n",(0,n.jsx)(t.h2,{id:"wrap-up",children:"Wrap-Up"}),"\n",(0,n.jsx)(t.p,{children:"In this tutorial, you created a cluster profile, which is a template that contains the core layers required to deploy a\nhost cluster using VMware vSphere. Then, you added a load balancer and a community pack to your profile to deploy a\ncustom workload."}),"\n",(0,n.jsxs)(t.p,{children:["We recommend that you continue to the ",(0,n.jsx)(t.a,{href:"/tutorials/getting-started/palette/vmware/deploy-k8s-cluster",children:"Deploy a Cluster"})," tutorial to deploy this cluster\nprofile to a host cluster onto VMware."]}),"\n",(0,n.jsx)(t.h2,{id:"-catch-up-with-spacetastic",children:"\u{1F9D1}\u200D\u{1F680} Catch up with Spacetastic"}),"\n",(0,n.jsx)(s,{category:"getting-started",name:"spacetastic-create-cluster-profile-end"})]})}function h(e={}){let{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}function p(e,t){throw Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},374955:function(e,t,r){r.d(t,{A:()=>s});let s=r.p+"assets/images/getting-started_create-cluster-profile_add-pack-26b3e39f77c8b2fb67f1d9ba5
1a523c9b.webp"},745607:function(e,t,r){r.d(t,{A:()=>s});let s=r.p+"assets/images/getting-started_create-cluster-profile_cluster-profile-core-stack-588dbe5b9fd8be9b10439d9ae070da43.webp"},158829:function(e,t,r){r.d(t,{A:()=>s});let s=r.p+"assets/images/getting-started_create-cluster-profile_metallb-pack-9ad9d2c936c55755910207000e1c8aae.webp"},235912:function(e,t,r){r.d(t,{A:()=>s});let s=r.p+"assets/images/getting-started_create-cluster-profile_pack-presets-87440985aa66c2a1dfe8629966a8e026.webp"},65322:function(e,t,r){r.d(t,{A:()=>s});let s=r.p+"assets/images/getting-started_create-cluster-profile_pack-readme-3fd0ea24e52a32962c925b5d91bd8857.webp"},884429:function(e,t,r){r.d(t,{R:()=>a,x:()=>l});var s=r(296540);let n={},i=s.createContext(n);function a(e){let t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.