Kubernetes has truly transformed the way we deploy, manage, and scale applications; we now have declarative means by which we can describe how and where we want our applications to run within a cluster.

This power and flexibility come at the cost of a steep learning curve, especially for those new to container orchestration. In this tutorial, we'll explore Kubernetes management, why it's important, and how Portainer can help simplify this process.

What is Kubernetes management?

Kubernetes management involves provisioning and maintaining the cluster itself, as well as deploying and monitoring the containerized workloads running on that cluster. Working directly with Kubernetes can be complex, especially for those new to container orchestration. This is where tools like Portainer come into play - they provide a user-friendly way to manage Kubernetes clusters.

The importance of simplifying Kubernetes management

While some people debate whether to fully abstract Kubernetes away from developers, we can all agree that an intuitive interface for managing clusters benefits the entire team.

Providing developers with an easy way to deploy and operate their applications allows them to iterate faster. At the same time, operations teams need consistent governance and oversight.

Portainer strikes this balance with its user-friendly management capabilities:

Capability Benefit
Streamlined Deployments Developers can deploy to multiple environments through simple workflows
Centralized Visibility Operations gains a unified view across all Kubernetes clusters and workloads
Secure Access Controls Restrict access to environments/resources based on role
Scaling Controls Scale applications and infrastructure resources through UI vs kubectl

Prerequisites

This post assumes some familiarity with Kubernetes. In addition, you will need the following installed to follow along with this section:

Installing Portainer on Civo

The quickest way to install Portainer on a new Civo Kubernetes cluster is through the CLI. Within your terminal, run the following command to install the community edition of Portainer:

civo k3s create --create-firewall --nodes 1 -m --save --switch --wait portainer-demo --region NYC1 --applications=portainer:"Community edition"

The above command will launch a one node Kubernetes cluster called portainer-demo in the NYC1 region, using the --applications flag, we specify that the community edition of Portainer should be installed upon creation.

You can also install Portainer directly through your Civo dashboard, in the cluster creation page, scroll down to the marketplace section and click on the management tab ↓

Installing Portainer on Civo

Alternatively, you can use Helm to install Portainer, using the following command:

helm upgrade --install --create-namespace -n portainer portainer portainer/portainer \
--set service.type=LoadBalancer \
--set tls.force=true
⚠️ This will provision a load balancer in your Civo account.

Regardless of what installation method you choose, you should be able to retrieve the external IP of the load balancer by running:

kubectl get svc -n portainer 

Retrieving the external IP of the load balancer with Portainer on Civo

Copy the external IP of the service and head over to https://<yourloadbalancerip>:9443

You should be greeted with an admin user creation page:

Portainer Admin User Creation Page

Upon completion, you should see the home page, alongside the cluster in which Portainer is installed:

Portainer home page

With Portainer installed, Let’s explore a common use case many developers encounter when trying to set up a new development cluster: installing some kind of data store.

Traditionally developers would request someone on the ops team deploy the desired database on the cluster and follow instructions to access it, or if you’re familiar with Kubernetes, deploy using helm or a custom manifest.

Portainer streamlines the process of installing commonly used applications within the dashboard. Behind the scenes, this uses Helm for installation; however, installing applications through the UI presents a more approachable manner of installation for developers and operations teams alike.

Installing Redis using Portainer

Head back to the dashboard, and click on the helm section in the left-hand corner:

Installing Redis using Portainer

You should see the following page ↓

Installing Redis using Portainer Part 2

Type in “redis” in the search bar:

Installing Redis using Portainer Part 3

Click on the first result, and you should be presented with the following screen:

Installing Redis using Portainer Part 4

Type in the name of the Redis instance and click on install. Notice that Portainer also provides a means to pass in custom values through the web editor. This is great for more advanced use cases; however, we will not need it in this demonstration.

Upon clicking install, you should be taken back to the application list page. In a few minutes, you should have Redis up and running!

Redis on Portainer

This is one of the many applications you can install in a few clicks. While automation is great, not everyone is a Kubernetes wizard, and tools like Portainer help lower the barrier to entry.

The challenges of managing Kubernetes at the edge

While running applications closer to users at the edge can significantly improve performance and reduce bandwidth costs, it introduces new operational complexities - especially when managing potentially hundreds or thousands of distributed edge devices. As Neil Cresswell explained:

"When you have multiple clusters, how do you provide auth access to your users? How do you log them in, and where they are logged in, how do you define their RBAC roles? You can't go handing out kubeconfig files. You really have to have a single API endpoint that every developer or consumer can connect to."

Simply installing tools like Prometheus and Grafana individually on each edge cluster is not scalable. "You don't want to have 47 different dashboards you have to open. You want to try and get a macro or global view of all your clusters," Neil stated. Deploying applications consistently across a fleet of edge locations is also an immense challenge without the right tooling.

As Chick-fil-A found when rolling out thousands of edge clusters, manually managing multiple clusters can quickly become impractical at scale. One of the core components that enabled Chick-fil-A to operate that massive edge footprint was implementing centralized observability with Vector. Having a unified pipeline to collect logs, metrics, and telemetry data from their heterogeneous applications and devices was crucial for understanding overall fleet behavior.

However, robust observability tooling was just one part of the solution. Their experiences showed that successfully managing Kubernetes at the edge requires not only deep platform expertise but also higher-level management planes that abstract away much of that complexity through centralized visibility and governance.

Summary

In this post, we discussed the importance of simplifying Kubernetes management at scale and why it's crucial, especially for edge deployments. We explored how Portainer aims to provide a unified management plane for Kubernetes.

Lastly, we looked at Chick-fil-A's real-world experiences deploying Kubernetes across thousands of edge locations, highlighting how centralized observability with Vector was a key enabler, but just one part of their edge management strategy.

Curious about Portainer or Kubernetes at the Edge? Here are some ideas: