Cloud-Native Journey Part 3: Distribution and Rollout
Tags: kubernetes, vcluster, devspace, loft
Published: 2022-03-23 15:36:05

By Tyler Charbonneau

*This is part three of our multi-article series exploring cloud-native technologies. For the introduction and to learn more about the setup process, check out [part one](https://loft.sh/blog/cloud-native-journey-part-1-defining-goals-and-responsibilities/). In [part two](https://loft.sh/blog/cloud-native-journey-part-2-technical-adventure/), you can learn more about the technical ins and outs of establishing your cloud-native infrastructure by exploring the options of single cloud vs. multi-cloud cluster tenancy.*

As explained in the previous articles, it’s important that cloud computing includes sound planning, design, and deployment of remote services following [some integral principles](https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition). Ultimately, a development strategy encompassing these principles grants teams and users more freedom. 

In addition, understanding the technical approaches you can take on your cloud-native deployment is paramount. Before deployment, you need to take an ample assessment of goals and technical requirements. Additionally, how you deploy your clusters will have a major impact on application performance.

However, cloud-native deployments don’t happen overnight. Carefully initiating distribution and rollout is essential to building a sound computing foundation, as is continued maintenance. 

In this article, you’ll learn about the initial distribution process and rollout of a cloud-native system and how you can go about reducing friction through techniques like self-service while still ensuring stable cluster operations. 

## Ensuring Intelligent Distribution and Rollout

Rolling out your cloud infrastructure is a complex process. First, you need to decide which cloud-native implementation is right for your organization: public, private, or [hybrid](https://www.ibm.com/cloud/learn/hybrid-cloud). Companies must also decide which vendor services they’d like to leverage. It’s very likely that multi-cloud setups will be prioritized. After all, computing giants like Google [have asserted that multi-cloud is the future](https://cloud.google.com/blog/topics/hybrid-cloud/future-isnt-just-cloud-its-multi-cloud), while Gartner tells us that over [eighty-one percent of companies are using two or more public clouds](https://www.gartner.com/en/conferences/apac/infrastructure-operations-cloud-india/featured-topics/cloud). 

Because there are so many moving parts in the process, you need to understand your rollout goals. For instance, in companies where frictionless internal and external access is essential, opting for a *public cloud* might be best. While simple, these deployments are typically less configurable, and multiple tenants share servers and resources. 

Conversely, rolling out with a *private cloud* means more control and data privacy. Resources are specialized for single-tenant users. Your applications may also enjoy better uptime and increased performance in a customized environment. 

The *hybrid cloud* model encompasses the former models, where tasks are assigned to public or private clouds based on privacy and performance requirements. This deployment may also involve some on-premises infrastructure. 

### Understanding the Appeal of Services Platforms

Most companies these days are using one or more as-a-service platforms (i.e., SaaS, PaaS, and IaaS) to form their core infrastructure. Background hardware aside (residing on-premises or remotely at vendor warehouses), this software foundation will power the applications that reside atop it. Additionally, successfully configuring your containerized environment is key to proper resource delegation. Let’s assess [each service approach](https://www.suntecgroup.com/blog/what-is-cloud-deployment/): 

* **Software-as-a-Service (SaaS):** centrally-managed, online services are easy to access and deploy from almost anywhere. The service provider’s backend handles much of the heavy lifting, while mechanisms like authentication and authorization govern data access. SaaS is great for observability and for rolling out updates, security patches, and other configuration changes across the entire ecosystem. 
* **Platform-as-a-Service (PaaS):** these platforms excel at quickly getting you off the ground by offering purpose-built cloud management and oversight tooling. PaaS lets you fine-tune scalability and efficiency from start to finish.
* **Infrastructure-as-a-Service (IaaS):** simply put, IaaS allows you to quickly deploy and provision numerous servers, resources, and virtual machines to support applications. Compute, memory, and storage are typically provided and manageable within this setup. If you’re a larger organization, or one that cannot afford your own hardware infrastructure, then the IaaS model may be the best fit. 

Rolling out your cloud applications doesn’t mean choosing just one of these options. It’s common to run a SaaS application in concert with a PaaS or an IaaS. Because SaaS providers can help you govern many higher-level processes, pairing it with a compatible virtual environment will help create an integrated ecosystem. SaaS also enables the deployment of private and public cloud services with relative ease. Service vendors and third parties offer robust tools to streamline that process. 

However, the container orchestration layer has become an indispensable component of the microservices landscape. This virtual infrastructure layer is distributed, scalable, and lets teams easily package software dependencies together into functional units. That includes software images from major providers like [Docker](https://www.docker.com), who provide a runtime environment for applications, but how do you manage these containerized deployments? 

### Notes on Kubernetes Rollout

Kubernetes is by far the leading system for orchestrating containers, and millions of users have deployed it to great success. However, as mentioned before, rolling out your Kubernetes setup can be complicated. There are many complexities involved, from the components, to best practices, to configuration management. While power users might prefer managing Kubernetes via the command line `kubectl`, other GUI-based tools can democratize administration for users of all skill levels. 

Successful rollout of Kubernetes also requires [YAML-based configuration files](https://circleci.com/blog/what-is-yaml-a-beginner-s-guide/). The fields and values within tell Kubernetes how to behave under certain conditions. Fortunately, these files are also mutable, meaning your initial configurations aren’t locked in perpetually. 

For instance, if you’ve rolled out Kubernetes across your environment, it’s now time to give engineers access. This step is critical, as you don’t want all engineers to enjoy the same privileges within the system. For example, you’ll want to assign key administrators for clusters and restrict sensitive configuration access to those individuals. Since large companies oversee numerous teams, projects, and applications, these decisions aren’t always easy to make. That’s especially true in a microservices context, where feature ownership and code management are divided amongst different departments. 

While [cluster multi-tenancy](https://cloud.google.com/kubernetes-engine/docs/concepts/multitenancy-overview) might be ideal, following a [cluster single-tenancy strategy](https://www.spectrocloud.com/blog/kubernetes-multi-tenant-vs-single-tenant-clusters/) may instead be optimal. In this arrangement, your organization oversees more Kubernetes clusters, but specific business units, applications, and tasks live on specialized clusters. It’s easier to assign someone authorized access to the cluster config when there are fewer tenants. It also lessens security risks and opportunities for sensitive data exposure. 

### Mitigating Friction during Rollout

Rolling out Kubernetes and associated applications is exciting. However, the experience can also be jarring for teams leveraging that infrastructure. Technical transitions are notorious sources of friction due to the short-term disruption they cause. Access controls need fine-tuning, and you have to establish buy-in for updated processes and technologies central to everyday success.

Credentials are particularly pesky for users. Traditionally, each service requires separate user IDs and passwords, which are subject to unique password policies. Self-service Single Sign On (SSO) is a convenient solution to authentication that lets users share one set of credentials across numerous, commonly-accessed services. Signing in becomes much quicker, and organizations benefit from greater simplicity and efficiency. 

SSO is relatively easy to implement, either at the application level or externally via SaaS. The latter has become especially popular in today’s cloud-centric world. Additionally, choosing self-service SSO over older approaches empowers everyday, non-technical users to govern their authentication outcomes. 

Additionally, you can introduce soft limits for applications. This effectively restricts users to certain usage limits or resource consumption. It’s important to note that users may continue using an application after surpassing their soft limit. From there, a timer kicks in, and the soft limit will eventually behave as a hard limit. This approach is ideal because it typically prevents user lockout. Conversely, hard limits are more restrictive and can impact active processes initiated by the user. 

### Unlocking Improved Kubernetes Stability and Fairness

In addition to mitigating friction during a rollout, there are also steps you can take to improve performance across the system without favoring just a subset of your organization. Kubernetes makes it easy to configure resource limits across pods and containers. Doing so ensures that individual processes don’t hog computing or memory and that high-demand applications don’t prevent others from running simultaneously. Resource limits also help prevent crash-related downtime. 

You can set [resource requests and limits](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) to optimize the performance of nodes and pods. While limits cap containers at certain usage, requests introduce more flexibility. For instance, if a container requests a certain memory or CPU allotment, but other pods and containers aren’t highly active, then the original container may try to leverage more resources.

Cost is another factor to take into consideration. Enabling cost tracking allows you to track usage, view resource consumption, and plan rollouts accordingly to prevent excessive spending. This outcome is also common in the cloud-computing realm, where resource reservations may exceed needs, leading to waste. 

Similarly, back charges can benefit you (the customer) when a company overcharges for a service, as you’ll then receive a reimbursement. Additionally, pricing adjustments occur often throughout a SaaS product’s lifetime. These adjustments might mean a refund is coming your way. If your organization acts as a vendor, back charging is ideal for recovering interest on missed payments or for making requests for additional payment in post. 

Finally, audit logging is key to navigating the tumultuous rollout period. The initial launch phase can cause many bugs, crashes, and other resource issues in production. Because many companies seek to launch a minimum viable product (MVP), logs can help uncover performance and optimization issues. Teams can fix these issues as their infrastructure continues to mature. Additionally, [audit logging](https://linfordco.com/blog/cloud-computing-audits/) is often critical in certain industries governed by strict regulatory requirements.

## Conclusion

Rolling out infrastructure and applications can be difficult, but implementing the principles you learned about here can help you during this transition. Choosing the right cloud implementation, mixture of services, and practices around Kubernetes will simplify the rollout process. 

Are you looking to better manage your clusters and supercharge your self-service strategy? In under a minute, adding [Loft](https://loft.sh) to your cluster simplifies self-service for up to 10,000 engineers. They make it especially easy to deploy, manage, and refine your Kubernetes implementation throughout its lifetime. Cost optimizations are also easy to make. Overall, Loft’s tools enable DevOps and QA to roll out services as seamlessly as possible. [Request a demo](https://loft.sh/demo/request) to see how Loft can benefit your organization today. 

*Photo by [elCarito](https://unsplash.com/@elcarito?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/clouds?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)*