PageSourceSearch

https://layer5.io/component---src-templates-learn-chapter-js-conte…meshery-designs-mdx-80dee84d1e0418903c67.js

js layer5.io collected 2026-09-24 10:24:37 UTC 26,718 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkLayer5=self.webpackChunkLayer5||[]).push([[2624],{99197:function(e,n,t){t.r(n),t.d(n,{Head:function(){return q},default:function(){return V}});t(20410);var a=t(28453),r=t(96540),l=t(94441),s=t.p+"static/performing-validation-bd4d4fbf361096d963303917507fe803.png",o=t.p+"static/successful-validation-261516b223abdb223534ceb3e6f7d4eb.png",i=t.p+"static/validation-error-7cd9335ef77a86c8504819f5c8a4f096.png",c=t.p+"static/successful-dry-run-c71ed75554fd3b4fc4ef6fdd7784e333.png",m=t.p+"static/dr-invalid-field1-99ead2c63bd170b11fb8523a46d54502.png",u=t.p+"static/dr-invalid-field2-87de6eee1feef9e1ab5edf33c31fafce.png",h=t.p+"static/missing-field-f7908a3b3139f631848d6f58a9b26a20.png",d=t.p+"static/missing-resource-8df3f8bf5c6a55af989bf336a94c6159.png",p=t.p+"static/add-env-8c3d9051f31d6d753bb5177d4bd734d7.png",g=t.p+"static/create-env-bb0aeb7adaa1a4407bbb4bf5510bf267.png",y=t.p+"static/assign-conn-347e04ffd5c8e5fd655419bb39d33d7c.png",E=t.p+"static/kube-conn-8112cf3cfad4d916c0120ffc2a98d6a3.png",f=t.p+"static/missing-con-dce3011a802653c5df68d1b76efaecc8.png",b=t.p+"static/env-conn-16cd300aee2e79a3fc110f7b77c65933.png",v=t.p+"static/conn-list-130fd93456023b34b2897ec9616967e6.png",w=t.p+"static/env-error-84c06d0c64ac69793ab9a8eac6945483.png",M=t.p+"static/success-deploy-6861541562dc38f51654fc2f5f854c44.png",N=t.p+"static/missing-ns-d9b34678a32ee296fbd21fb7f922764f.png",k=t.p+"static/empty-ls-8cef336c4a71a006c4d105e335667344.png",C=t.p+"static/error-code-7e9de3d2958d113f752bc534b3a09a0e.png",T=t.p+"static/notification-4240ea4de778cbc599bc38ac5560db19.png",D=t.p+"static/notification-center-986ea70b831be13a7d6e31312a0c46ad.png",K=t.p+"static/undeploy-5f667a1e1ef4d07810dff67ae755efb3.png",A=t.p+"static/action-60f1f81ff6fc862bc28f8789037c85a3.png";function S(e){const n=Object.assign({p:"p",a:"a",strong:"strong",ol:"ol",li:"li",em:"em"},(0,a.R)(),e.components);return r.createElement(l.x,null,r.createElement("h2",{className:"chapter-sub-heading"},"Introduction"),r.createElement(n.p,null,"Deploying Meshery designs is a common and essential task for managing your infrastructure and workloads. Having a thorough understanding of this procedure and Meshery’s design deployment behavior is key to ensuring that your component configurations work as intended in a live Kubernetes environment. Meshery’s design deployment process not only attests to the validity of your configuration, but also offers a seamless transition from Designer mode to Visualizer mode, where you can visually inspect your deployment, and begin to manage live-running deployments in your environment."),r.createElement(n.p,null,"Meshery’s deployment process encompasses four steps: validation, dry-run, environment selection, and finally, executing the deployment itself."),r.createElement(n.p,null,"This chapter guides you through each of these four steps. Along the way, you will learn what a successful step looks like, understand common failure scenarios, and go through strategies for troubleshooting and resolving any issues that might arise. Additionally, you will learn about Meshery’s ",r.createElement(n.a,{href:"https://docs.meshery.io/guides/infrastructure-management/notification-management"},"Notification Center")," and how to best use it to your advantage."),r.createElement(n.p,null,r.createElement(n.strong,null,"Prerequisites")),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Ensure you have one or more Meshery designs available."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Access to Meshery (",r.createElement(n.a,{href:"https://docs.meshery.io/installation"},"Self-Hosted")," or ",r.createElement(n.a,{href:"https://docs.meshery.io/installation/playground"},"Meshery Playground"),")."),"\n"),"\n"),r.createElement("h2",{className:"chapter-sub-heading"},"Action Button"),r.createElement(n.p,null,"There are two modes on the Actions button:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Clicking on the word ",r.createElement(n.strong,null,"Actions")," presents a set of choices, each labeled with its respective action. Selecting an option opens a modal window, providing detailed guidance."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Clicking on the Action drop-down icon reveals a list of icons. Selecting an icon allows seasoned users to perform actions with a single click, bypassing the modal interaction."),"\n"),"\n"),r.createElement(n.p,null,"In this chapter, we focus on utilizing the first option to provide a comprehensive view of the deployment process."),r.createElement("a",{href:A},r.createElement("img",{src:A,className:"chapter-image",style:{margin:"0 auto"}})),r.createElement("h2",{className:"chapter-sub-heading"},"Design Validation"),r.createElement(n.p,null,"Validation is the first step in deploying designs with Meshery. While optional, it is highly recommended as it helps identify and resolve possible misconfigurations upfront."),r.createElement("h3",{className:"chapter-sub-heading"},"How Validation Works"),r.createElement(n.p,null,"Meshery uses static analysis to verify your design. It checks all components within your design and all configured and unconfigured properties of your components against well-defined schemas based on ",r.createElement(n.a,{href:"https://docs.meshery.io/concepts/logical/models"},"Meshery Models"),"."),r.createElement(n.p,null,"This comprehensive validation ensures that:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"The design adheres to the expected structure and format."),"\n",r.createElement(n.li,null,"All components are valid and recognized by Meshery."),"\n",r.createElement(n.li,null,"There are no missing required configurations."),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Performing Validation"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"To validate your design, navigate to the Actions button at the top of the Design canvas."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click on the ",r.createElement(n.strong,null,"Validate")," Icon."),"\n",r.createElement("a",{href:s},r.createElement("img",{src:s,className:"chapter-image",style:{margin:"0 auto"}})),"\n",r.createElement(n.p,null,"If the validation is successful, you will see a modal displaying the number of components validated and the number of annotations, similar to the one shown below:"),"\n",r.createElement("a",{href:o},r.createElement("img",{src:o,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Handling Validation Errors"),r.createElement(n.p,null,"If your design fails validation checks, the modal will indicate the number of errors detected. Each error will provide specific information about the component or annotation that caused the failure. Use this detailed feedback to identify and correct the issues in your design before proceeding with the deployment."),r.createElement("h3",{className:"chapter-sub-heading"},"Validation Errors"),r.createElement(n.p,null,"A common validation error is:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Missing Required Field"),': This happens when a required field is not provided. For example, in the image below, the first error indicates that the field ".spec.template.spec.containers.0.env.0" must have a value.'),"\n",r.createElement("a",{href:i},r.createElement("img",{src:i,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement(n.p,null,"To troubleshoot and remediate validation issues:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"Click on the error on the modal."),"\n",r.createElement(n.li,null,"This will open the configuration tab of the component that has that error."),"\n",r.createElement(n.li,null,"Fix the configuration using the error details provided."),"\n",r.createElement(n.li,null,"Re-run validation after any significant changes to your design to ensure all issues are resolved."),"\n"),r.createElement(n.p,null,"The validation process is confined to schema-based checks within Meshery and does not require communication with your target environment. The Dry Run step, however, does involve this communication. Let’s explore the Dry Run step next."),r.createElement("h2",{className:"chapter-sub-heading"},"Design Dry Run"),r.createElement(n.p,null,"A dry run in Meshery simulates the deployment of your design in the selected target environment ",r.createElement(n.em,null,"without")," making any actual changes. This step is highly beneficial as it helps identify potential issues before they occur, ensuring a smoother and more reliable deployment process."),r.createElement("h3",{className:"chapter-sub-heading"},"Performing Dry Run"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Navigate to the ",r.createElement(n.strong,null,"Actions")," button at the top of the Design canvas."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click on the ",r.createElement(n.strong,null,"Dry Run")," icon."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Review the results to identify any potential issues."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Make necessary adjustments to your configuration based on the feedback provided by the dry run."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Re-run the dry run to ensure all issues have been resolved."),"\n",r.createElement("a",{href:c},r.createElement("img",{src:c,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Examples of Dry Run Errors"),r.createElement(n.p,null,"Some examples of dry run errors are:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Invalid Field Value"),': The error message indicates that a field has an invali
1d value. For instance, in the image below, the fields "spec > ports[0] > port" and "spec > ports[0] > targetPort" have invalid values of 0. These values must be between 1 and 65535, inclusive.'),"\n",r.createElement("a",{href:m},r.createElement("img",{src:m,className:"chapter-image",style:{margin:"0 auto 20px"}})),"\n",r.createElement("a",{href:u},r.createElement("img",{src:u,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Missing Required Field")),"\n",r.createElement("a",{href:h},r.createElement("img",{src:h,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Missing Dependencies"),": In this case, the error occurs because a Kubernetes ",r.createElement(n.a,{href:"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/"},"Custom Resource Definition")," (CRD) should have been deployed first before attempting to deploy this component."),"\n",r.createElement(n.p,null,"To resolve this, ensure that all necessary dependencies, such as CRDs, are deployed before deploying the components that rely on them."),"\n",r.createElement("a",{href:d},r.createElement("img",{src:d,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement("h2",{className:"chapter-sub-heading"},"Environment Selection"),r.createElement(n.p,null,r.createElement(n.a,{href:"https://docs.layer5.io/cloud/spaces/environments"},"Meshery Environments")," are logical groups of ",r.createElement(n.a,{href:"https://docs.meshery.io/concepts/logical/connections"},"Connections")," which include GitHub integrations, Prometheus connections, and Kubernetes Clusters and so on managed by Meshery. To make your Kubernetes connections available for selection, you need to assign them to an environment and link that environment to your current ",r.createElement(n.a,{href:"https://docs.layer5.io/cloud/spaces/workspaces"},"workspace"),". ",r.createElement(n.em,null,"Note: Environments can be assigned to one or more Workspaces.")),r.createElement("h3",{className:"chapter-sub-heading"},"Adding an Environment During Deployment"),r.createElement(n.p,null,"During deployment, you will be required to select an environment."),r.createElement(n.p,null,"You can add an environment through the deployment modal by following these steps:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click on ",r.createElement(n.strong,null,"Add Environments")),"\n",r.createElement("a",{href:p},r.createElement("img",{src:p,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Select ",r.createElement(n.strong,null,"Create")," and put in a name for the environment, ",r.createElement(n.em,null,"e.g.Development"),", and ",r.createElement(n.strong,null,"Save"),"."),"\n",r.createElement("a",{href:g},r.createElement("img",{src:g,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"After creating the environment you add connections to the environment, here we want to add a Kubernetes cluster. Click on the ",r.createElement(n.strong,null,"arrows")," icon to open the Development Resources modal."),"\n",r.createElement("a",{href:y},r.createElement("img",{src:y,className:"chapter-image",style:{margin:"0 auto"}})),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Available Connections")," on the left side shows a list of Kubernetes clusters that are currently managed by Meshery."),"\n",r.createElement("a",{href:E},r.createElement("img",{src:E,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement(n.p,null,r.createElement(n.strong,null,r.createElement(n.em,null,"Add Kubernetes Connections:"))," If you do not have any ",r.createElement(n.strong,null,"Kubernetes connections")," available, refer to this documentation on how to manage your clusters with Meshery: ",r.createElement(n.a,{href:"https://docs.meshery.io/installation/kubernetes"},"Managing Kubernetes Clusters with Meshery"),"."),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"Select a cluster, and use the arrow to assign just the selected connections and save."),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Missing Connections"),r.createElement(n.p,null,"During the deployment, if a connection has not yet been added to your environment, it will appear as shown below."),r.createElement("a",{href:f},r.createElement("img",{src:f,className:"chapter-image",style:{margin:"0 auto"}})),r.createElement(n.p,null,"In this scenario, to add a new environment."),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"Navigate to the left sidebar of Meshery"),"\n",r.createElement(n.li,null,"Click on the ",r.createElement(n.strong,null,"Lifecycle")," dropdown and you will see the ",r.createElement(n.strong,null,"Environment")," Icon under it"),"\n",r.createElement(n.li,null,"Click on it and 
1you can follow the same steps we mentioned above to add a connection to your environment."),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Selecting an Environment for an Existing Connection"),r.createElement(n.p,null,"Another way to add a connection to an Environment is by selecting an environment for an existing connection. To do this:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click on the ",r.createElement(n.strong,null,"Lifecycle")," icon to view a list of connections with their attributes, including environments, kind (type of connection), and connection status."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Identify the desired connection. Under the ",r.createElement(n.strong,null,"Environment")," section, click the dropdown menu to add and select the environment you want to associate with your connection."),"\n",r.createElement("a",{href:b},r.createElement("img",{src:b,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Verifying Kubernetes Connections"),r.createElement(n.p,null,"The Kubernetes connection icon at the top right corner of the screen shows the list of connected Kubernetes clusters.\nClicking on the icon will invoke an ad hoc connectivity test between your Meshery Server and the specific Kubernetes cluster. Should this check fail, verify the health of your Meshery Operator deployment within that cluster."),r.createElement("a",{href:v},r.createElement("img",{src:v,className:"chapter-image",style:{margin:"0 auto"}})),r.createElement("h3",{className:"chapter-sub-heading"},"Environment Error"),r.createElement(n.p,null,"If your environment is not properly set up before deployment, you may encounter the error below."),r.createElement("a",{href:w},r.createElement("img",{src:w,className:"chapter-image",style:{margin:"0 auto"}})),r.createElement(n.p,null,"To handle this error follow the suitable steps for adding a connection to your environment as previously discussed."),r.createElement("h2",{className:"chapter-sub-heading"},"Deployment"),r.createElement(n.p,null,"At this stage, you deploy your resources to your available Kubernetes cluster connection(s) managed by Meshery.\nFirst, ensure the connections to your clusters are established and configured correctly, placing them in the appropriate environments. This ensures you have control over your deployment strategy."),r.createElement("h3",{className:"chapter-sub-heading"},"Kubernetes Cluster Management using Meshery"),r.createElement(n.p,null,"Meshery Server ",r.createElement(n.a,{href:"https://docs.meshery.io/installation"},"deploys")," as a single container. Whether the Meshery Server container is deployed in a stand-alone Docker host or inside a Kubernetes cluster, Meshery Server is fully capable of ",r.createElement(n.strong,null,"managing multiple Kubernetes clusters"),". For more information on how Meshery Server connects to and continually synchronizes with your Kubernetes cluster(s), see ",r.createElement(n.a,{href:"https://docs.meshery.io/concepts/architecture/operator"},"Meshery Operator")," and ",r.createElement(n.a,{href:"https://docs.meshery.io/concepts/architecture/meshsync"},"MeshSync"),"."),r.createElement(n.p,null,"Understanding Meshery Operator and Kubernetes Cluster Relationships\n",r.createElement(n.strong,null,"One-to-One Relationship"),": There is a one-to-one relationship between a Meshery Operator and a Kubernetes cluster. This means each Meshery Operator is associated with exactly one Kubernetes cluster. This applies whether the cluster is a managed cluster (like the one you’re adding as a connection) or the cluster where the Meshery Server is deployed."),r.createElement(n.p,null,r.createElement(n.strong,null,"Many-to-One Relationship"),": There is a many-to-one relationship between Meshery Operator and Meshery Server. Multiple Meshery Operators can be associated with a single Meshery Server. This means a single Meshery Server can manage several Kubernetes clusters through different Meshery Operators."),r.createElement(n.p,null,"In summary, while each Kubernetes cluster has its own Meshery Operator, a single Meshery Server can interact with multiple Kubernetes clusters through these Operators."),r.createElement("h3",{className:"chapter-sub-heading"}
1,"Available Clusters"),r.createElement(n.p,null,r.createElement(n.strong,null,r.createElement(n.em,null,"Playground Users:"))," Users of Meshery Playground should see a pre-registered Kubernetes connection, representing the sandbox cluster available with the playground environment."),r.createElement(n.p,null,"You have the option of using the live cluster provided by Meshery Playground or connecting your own Kubernetes cluster using your kubeconfig file. During deployment, these clusters will be available as connections for you to select."),r.createElement("h3",{className:"chapter-sub-heading"},"Deploying Designs"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"To deploy a design, navigate to the Actions button at the top of the Design canvas."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click on the ",r.createElement(n.strong,null,"Deploy")," icon."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"This opens a modal that will take you through all the steps before the final deployment."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click on ",r.createElement(n.strong,null,"Open In Visualizer")," to see the pre-filtered view of the deployed resources in the cluster."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click ",r.createElement(n.strong,null,"Finish"),"."),"\n",r.createElement("a",{href:M},r.createElement("img",{src:M,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Deployment Errors"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Missing Namespace"),": This error occurs when you attempt to create a Kubernetes resource without specifying a namespace. Kubernetes requires that all resources have an associated namespace."),"\n",r.createElement("a",{href:N},r.createElement("img",{src:N,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Empty Label Selector"),": This error indicates an empty label selector."),"\n",r.createElement("a",{href:k},r.createElement("img",{src:k,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement("h3",{className:"chapter-sub-heading"},"Troubleshooting Errors"),r.createElement(n.p,null,"When reviewing validation, dry run, or deployment issues, you’ll notice specific error codes denoted from time to time."),r.createElement(n.p,null,"As a system, Meshery itemizes different errors that occur and assigns a unique error code to each along with details on how to remediate the issue at hand."),r.createElement(n.p,null,"For the comprehensive list of error codes refer to ",r.createElement(n.a,{href:"https://docs.meshery.io/reference/error-codes"},"Error Code Reference")," in the Meshery documentation."),r.createElement(n.p,null,"If you encounter persistent issues, consider consulting the ",r.createElement(n.a,{href:"https://discuss.meshery.io/c/meshery/5"},"Meshery Community forum"),"."),r.createElement("a",{href:C},r.createElement("img",{src:C,className:"chapter-image",style:{margin:"0 auto"}})),r.createElement("h3",{className:"chapter-sub-heading"},"Using the Notification Center for Troubleshooting"),r.createElement(n.p,null,"The Notification Center in Meshery helps manage events during the deployment process. It provides real-time updates and alerts on the status of the deployment. This feature can be particularly useful for troubleshooting, as it:"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Displays immediate feedback on the success or failure of each deployment step."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Highlights specific error messages and codes, helping you quickly identify and understand issues."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Offers links to detailed documentation and guides for resolving common problems."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Keeps a log of past notifications, allowing you to track and review previous errors and their resolutions."),"\n"),"\n"),r.createElement("a",{href:T},r.createElement("img",{src:T,className:"chapter-image",style:{margin:"0 auto"}})),r.createElement("a",{href:D},r.createElement("img",{src:D,className:"chapter-image",style:{margin:"10px auto"}})),r.createElement(n.p,null,"By actively monitoring the Notification Center, you can promptly address issues as they arise, ensuring a smoother deployment process. Learn more about ",r.createElement(n.a,{href:"https://docs.meshery.io/guides/events-management"},"Managing Events with the Notification Center"),"."),r.createElement("h2",{className:"chapter-sub-heading"},"Undeploy"),r.createElement(n.p,null,"To undeploy the resources"),r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Navigate to the Actions button at the top of the Meshery Design canvas."),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,"Click on the ",r.createElement(n.strong,null,"Undeploy")," icon."),"\n",r.createElement("a",{href:K},r.createElement("img",{src:K,className:"chapter-image",style:{margin:"0 auto"}})),"\n"),"\n"),r.createElement("h2",{className:"chapter-sub-heading"},"Conclusion"),r.createElement(n.p,null,"In this chapter, you learned how to effectively deploy Meshery designs, ensuring your resources are deployed in the correct environment. You started by validating your designs to ensure configurations adhere to Kubernetes API specifications and best practices. Next, you did a dry run to simulate deployments without making actual changes. You also explored how to select and configure environments to manage Kubernetes connections seamlessly, and finally, how to deploy resources to your preferred cluster."),r.createElement(n.p,null,"Throughout these steps, you encountered common errors and learned how to address them. During these steps, you learned how to use Meshery's Notification Center to troubleshoot issues, helping you through the deployment process."))}var R=function(e){void 0===e&&(e={});const{wrapper:n}=Object.assign({},(0,a.R)(),e.components);return n?r.createElement(n,e,r.createElement(S,e)):S(e)},O=t(38141),x=t(79681),I=t(63562);const F=e=>{let{data:n,location:t,children:a}=e;const l=n.TOC.nodes.sort((e,n)=>{var t,a;return(null!==(t=e.frontmatter)&&void 0!==t&&t.order?e.frontmatter.order:100)-(null!==(a=n.frontmatter)&&void 0!==a&&a.order?n.frontmatter.order:100)});return r.createElement(r.Fragment,null,r.createElement(I.Ay,null,r.createElement(x.A,{chapterData:n.chapter,TOCData:l,courseData:n.course.nodes[0],location:t,serviceMeshesList:n.TOC.nodes},a)))};function V(e){return r.createElement(F,e,r.createElement(R,e))}const q=e=>{let{data:n}=e;return r.createElement(O.A,{title:n.chapter.frontmatter.chapterTitle,canonical:"https://layer5.io/learn/learning-paths"})}}}]);

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.