Kubernetes-REST
view release on metacpan or search on metacpan
lib/Kubernetes/REST/Example.pm view on Meta::CPAN
version 1.104
=head1 DESCRIPTION
This document walks you through setting up L<Kubernetes::REST> with a local
Kubernetes cluster and shows how to manage real resources from Perl using
L<IO::K8s> typed objects.
Every code snippet is ready to copy-paste into a script once you have a
running cluster and the Perl dependencies installed. A comprehensive
runnable demo script is included in C<eg/demo.pl>.
=head1 NAME
Kubernetes::REST::Example - Working examples for Kubernetes::REST with Minikube, K3s, and other clusters
=head1 CLUSTER SETUP
L<Kubernetes::REST> works with any Kubernetes cluster. Below are setup
instructions for common local development environments. All of them write
a kubeconfig to C<~/.kube/config> that L<Kubernetes::REST::Kubeconfig> picks
up automatically.
=head2 Minikube
L<Minikube|https://minikube.sigs.k8s.io/> creates a single-node cluster
inside a Docker container or VM.
# Install (Debian/Ubuntu)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Start with Docker driver
minikube start --driver=docker
# Verify
minikube status
Minikube uses self-signed certificates and token authentication. The
kubeconfig context is named C<minikube>.
B<NodePort access:>
minikube service <service-name> -n <namespace>
=head2 K3s
L<K3s|https://k3s.io/> is a lightweight Kubernetes distribution from Rancher.
It installs as a single binary and runs directly on the host (no Docker
required).
# Install
curl -sfL https://get.k3s.io | sh -
# K3s writes its own kubeconfig to a different path
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# Or copy it so Kubernetes::REST::Kubeconfig finds it automatically
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER ~/.kube/config
chmod 600 ~/.kube/config
# Verify
kubectl get nodes
B<Key differences from Minikube:>
=over 4
=item * Kubeconfig lives at C</etc/rancher/k3s/k3s.yaml> (not C<~/.kube/config>)
=item * The server endpoint is C<https://127.0.0.1:6443>
=item * K3s includes Traefik as its default ingress controller
=item * K3s uses C<containerd> instead of Docker
=item * NodePort services are accessible directly on the host IP
=back
B<Connecting from Perl with K3s:>
use Kubernetes::REST::Kubeconfig;
# If you copied the kubeconfig to ~/.kube/config:
my $api = Kubernetes::REST::Kubeconfig->new->api;
# If using the K3s path directly:
my $api = Kubernetes::REST::Kubeconfig->new(
kubeconfig_path => '/etc/rancher/k3s/k3s.yaml',
)->api;
=head2 Kind (Kubernetes in Docker)
L<Kind|https://kind.sigs.k8s.io/> runs Kubernetes nodes as Docker containers.
Good for CI and testing.
# Install
go install sigs.k8s.io/kind@latest
# Create cluster
kind create cluster --name perl-test
# Context is named: kind-perl-test
my $api = Kubernetes::REST::Kubeconfig->new(
context_name => 'kind-perl-test',
)->api;
=head2 Any cluster with a kubeconfig
If you have a kubeconfig (EKS, GKE, AKS, self-managed, etc.):
use Kubernetes::REST::Kubeconfig;
# Uses current context from ~/.kube/config
my $api = Kubernetes::REST::Kubeconfig->new->api;
# Or specify a context
my $api = Kubernetes::REST::Kubeconfig->new(
( run in 1.337 second using v1.01-cache-2.11-cpan-71847e10f99 )