Kubernetes On Premises: Why and How?

Jitendra Kumar
10 min readDec 23, 2021

The best Kubernetes design for your company depends on the requirements and objectives of your business. Kubernetes is frequently called a cloud-native system and certainly qualifies as one.

However, the cloud-native idea doesn’t mean that it is not possible to make utilization of an on-premises infrastructure in situations where it is appropriate.

Based on your business’s requirements regarding compliance, locality and the cost of managing your workstations, there may be significant benefits to using Kubernetes deployments on-premises.

Kubernetes has seen an unbeatable adoption rate, partly due to its ability to simplify the management and deployment of microservices significantly. Equally important is that it allows those who cannot use the cloud’s public cloud to function in the “cloud-like” environment.

It is accomplished by dissociating dependencies and abstracting infrastructure from the application stack, giving users the flexibility and capacity that cloud-based applications.

Why Run Kubernetes On-Premises

What are the reasons why organizations take the route of running Kubernetes within their facilities instead of the “cake-walk” with public cloud providers? There are usually a few crucial reasons an Enterprise could decide to implement Kubernetes on-premises:

Compliance & Data Privacy

Specific organizations cannot utilize the cloud services offered by public clouds because they are subject to strict laws about compliance and privacy concerns.

For instance, the GDPR compliance requirements could hinder businesses from providing services to customers within Europe that use services hosted in specific cloud services.

Reason For Business Policy

For example, business policy requirements and managing your workloads in specific locations can hinder your ability to utilize public cloud providers.

Certain businesses might not be able to benefit from cloud-based public cloud services provided by one particular cloud provider due to the policies of their company that deal with competitors.

Being Cloud-Agnostic to Avoid Lock-in

Many businesses may want not to be tied with a single cloud provider. Therefore, they may wish to run their applications on several clouds, including an on-premises cloud.

It minimizes the chance of having a business continuity issue caused by issues with a particular cloud provider. It will also give you an advantage in price negotiations with cloud service providers.

Cost

It is perhaps most likely the primary factor that you should run Kubernetes on-premises. The cost of running all your applications on cloud public can become quite expensive when you scale it up.

Particularly if your apps require ingesting or processing a lot of data, such as an AI/ML program, running it on a public cloud may become costly.

If you have data centres on your premises or in co-location facilities and run Kubernetes on your premises can be a viable option to cut down on operational expenses. For more details about this subject, check out this report from A16z: The Cost of Cloud, the Trillion dollar paradox.

The report quotes, ” It is becoming clear that even though cloud is delivering what it promises at a very early point in a company’s development, the stress it places on margins could begin to exceed the benefits as the company grows and grows slower.

Since this change occurs in the later stages in the life of a business and is hard to reverse because it’s the result of many years of development focused on the latest features, not optimization of infrastructure.”

A successful strategy for running Kubernetes in servers in your data centres could be utilized to transform your company and update your software to be cloud-native while increasing the efficiency of your infrastructure and reducing costs while saving money.

Challenges Running Kubernetes On-Premises

There is a drawback to running Kubernetes on your own, especially when you choose to go the do-it-yourself (DIY) method.

Kubernetes is known for its lengthy learning curve and the complicated nature of its operation. When you run Kubernetes is hosted on AWS or Azure — your cloud public provider hides all the details from you.

Operating Kubernetes on-premises means that you’re the owner for managing the complexities. Here are some specific areas where the challenges are:

Etcd: Manage highly available clusters of etcd. It would be best to take regular backups to ensure business continuity if the cluster is down and all the information on the etcd cluster disappears.

Load balancer: Load balancing could be necessary for the master cluster nodes and applications running on Kubernetes. Based on your current networking configuration, you might need to utilize a load balancer, such as F5 or a software load balancer like metallb.

Availability: It is crucial in ensuring that Kubernetes infrastructure is high-availability and can endure downtimes for infrastructure and data centres.

It could mean using multiple masters for each cluster, and if necessary, it is needed to have multiple Kubernetes clusters across various availability zones.

Auto-scaling: Auto-scaling of the nodes in your cluster could aid in saving resources as the clusters can automatically expand and contract based on the workload’s needs.

It is a challenge with bare-metal Kubernetes clusters, except if you use an automation platform that is a bare metal like the open-source Ironic and Platform9’s Managed Bare Metal.

Networking: Networking is dependent on the configuration of your data centre.

Persistent storage: Most of your production applications running with Kubernetes need permanent storage, either block or file storage. The positive side is that the majority of known enterprise storage vendors provide CSI extensions that work with Kubernetes.

You’ll need to consult with your storage provider to determine the correct plugin and then install any necessary components before integrating your current storage solution using Kubernetes on-premises.

Upgrades: You’ll need to update your Kubernetes clusters about every three months when the latest version of Kubernetes is made available. The upgrade could cause problems if the older versions of Kubernetes introduce API incompatibilities.

A way to upgrade in stages in which your development and test clusters are upgraded before changing your production cluster.

Monitoring: You’ll need to invest in tools that keep track of the condition of the Kubernetes clusters within your on-premise Kubernetes environment. Suppose you are already using software for monitoring logs and managing them, such as Datadog and Splunk.

In that case, a majority of them are equipped with specific features concerning Kubernetes monitoring. You could also consider purchasing an open-source monitoring platform designed to help you monitor Kubernetes clusters like Prometheus and Grafana.

Best Practices for Kubernetes On-premises

Below are the best practices for running Kubernetes on your premises. In accordance with the settings of your environment and the configuration any or all of them could be applicable to you.

Integration into Existing Environment

Kubernetes allows users to run clusters using a wide array of infrastructures that are on-premises. Therefore, you can “repurpose” your environment to be integrated with Kubernetes by using virtual machines or building your cluster using pure metal.

However, you’ll need to gain a thorough knowledge of the particulars of setting up Kubernetes in your current environment that includes your servers, storage systems and network infrastructure to have a well-configured operational Kubernetes environment.

The three most common methods to deploy Kubernetes on-premises include:

  1. Virtual machines that you have installed on your VMware vSphere environment
  2. Linux physical servers operating Ubuntu, CentOS or RHEL Linux
  3. Virtual machines in other kinds of IaaS environments on-premises like OpenStack.

Utilizing Kubernetes using physical servers could provide the native performance of hardware, which can be crucial for specific types of tasks. Still, it could hinder your ability to expand your infrastructure rapidly.

If achieving bare-metal performance is essential to you, and you want to manage Kubernetes clusters on a larger scale, you require. Then it would help if you thought about purchasing a bare-metal automation system such as Ironic, Metal3 or a managed one bare-metal stack like the Platform9 managed bare metal.

Operating Kubernetes using virtual machines within your cloud private on VMware or KVM gives you the flexibility of cloud computing since you can change the scale of your Kubernetes clusters upwards or downwards according to the demand for the workload.

Clusters built on virtual machines are easy to set up and takedown, setting up a temporary test environment for developers.

Certification For Your Team

The CNCF has introduced certifications such as certified Kubernetes administrator (CKA) and Certified Kubernetes Application Developer (CKAD) that can be earned through passing a test. These certifications are an excellent method to determine one’s credentials in regards to Kubernetes capabilities.

If you can recruit or train employees who have CNCF certifications, this could be a perfect choice to ensure you have the best talent to run an in-house Kubernetes project.

It is also essential to consider the possibility that diy Enterprise Kubernetes projects typically grow into long (and sometimes even years of) projects that attempt to manage and efficiently manage the open-source components on a large scale.

If you don’t plan it properly, it can result in many expenses and a slow time to bring your product to market.

Node Configuration

Kubernetes can run on one server, which can serve as simultaneously a master and worker node of the cluster to test deployment.

But to run a meaningful application in practice, you’ll need at least three: one for all master components, including all control plane components like kube-apiserver, etc., kube-scheduler and kube-controller-manager , and two for the worker nodes where you run kubelet.

While master components can be run on any device, the best practice is to have a separate server set for the master nodes and not run any of your application containers on these servers.

The most notable characteristic that is unique to Kubernetes is its ability to repair from failures, without losing information.

It accomplishes this by using the ‘political’ system consisting of leaders, elections, terms, and leaders known as the quorum, which calls for “good” hardware to perform this function properly.

To ensure that the hardware is accessible and recovered, the best practice is to assign three master nodes with 4GB RAM and each 16GB SSD for the task, three as the minimum required and seven as the maximum number of master nodes.

An SSD is suggested as the program writes to disk, and even the tiniest delay impacts the speed. Always ensure that you have an odd number of cluster members to reach the majority of them.

You’ll require a dedicated HAProxy load balancer and a client machine to run the automation in production environments.

It’s recommended to obtain more power than the power that Kubernetes’ minimal requirement.

The most modern Kubernetes servers have two CPUs with 32 cores, each with 2TB of error-correcting memory and at the very least four SSDs and eight SATA SSDs and some Network cards with 10G speeds.

It is recommended that you run clusters using the multi-master configuration in production to ensure the reliability and availability of the components of the master.

That means you’ll need at minimum three master Nodes (an odd number to ensure that there is a quorum). Additionally, you’ll need to be monitoring your master(s) and fix any issues if any replicas are down.

Etcd Configuration

Kubernetes makes use of the etcd storage system to store all data related to clusters. etcd is an open-source distributed key-value storage and is the storage that persists for Kubernetes. It includes all information stored on your nodes, pods, as well as your cluster.

The management of this store is crucial in the simplest sense because it’s your last protection in the event of failure of the cluster.

Managing highly-available, tight etcd clusters to support large-scale production deployments is one of the most challenging operational issues you’ll face in handling Kubernetes in your infrastructure.

For production-related use in which redundancy and availability are crucial operating etcd as a cluster is essential.

Setting up a secure cluster, particularly on-premises, involves downloading the correct binaries and writing the initial cluster configuration on each node and setting up the etcd.

It is also necessary to establish the certificate authority and certificates to ensure secure connections. To make it easier to run the etcd cluster on your own, look at the free tools for etcdadm.

Repositories

If you’re running online or using an air-gapped setting, then you’ll need to have your repository in place to use docker Kubernetes or any of the other free software you might be employing. These include helm charts repositories that are for Kubernetes manifests and storage for binary files.

Storage and Networking

Remember that when running Kubernetes, your own within the data centre of your choice on-premises. You will have to manage the storage integrations, load balancers, DNS.

Furthermore, from networking to storage, each of these parts must have its monitoring and alerting system. In addition, you’ll be required to create your internal procedures to examine, diagnose and correct any problems encountered in these related services to ensure the overall health of your systems.

Container Registry

A container registry allows you to save container images for your application in a secure and accessible way. When you deploy Kubernetes clusters locally, it is possible to use hosted registry options like ECR Docker Hub, ECR, etc.

However, you will need access to the complexity of creating the registry you want to use. If your container registry needs to be hosted on-premises, an open-source Harbor is an excellent option.

User Interface

Kubernetes Dashboard is among the most popular and useful extensions. It will assist if you also got Kubernetes’s dashboard. The dashboard isn’t available by default and needs to be set up independently.

Once installed, the dashboard will provide an excellent overview of all your containerized applications that run in your network. It also lets you look into the container logs to aid in the debugging process.

Troubleshooting

The best practice is always to check the logs whenever something is wrong by looking into the Syslog files.

If you want to read more please click here.

--

--