Install MicroK8s Kubernetes Cluster on Arch|Manjaro|Garuda

We’ll go through how to install MicroK8s Kubernetes Cluster on Arch | Manjaro | Garuda Linux in today’s guide. Kubernetes is an open source container orchestration engine for automating containerized application deployment, scaling, and administration. The Cloud Native Computing Foundation hosts the open source project (CNCF). MicroK8s is a production-ready Kubernetes distribution that is powerful, lightweight, and dependable. It runs on Linux, Windows, and MacOS and is the smallest and quickest multi-node kubernetes. MicroK8s is ideal for offline prototyping, testing, and development.

Install MicroK8s Kubernetes Cluster on Arch | Manjaro | Garuda Linux

On Arch | Manjaro | Garuda Linux, we’ll utilize snap to install MicroK8s. However, we should keep in mind that snap is not installed by default in these systems. So, first and foremost, we’ll install Snap.

1: Installing Snap on Arch|Manjaro|Garuda

Before you use the Snap installation approach, make sure you have Snap installed:

sudo pacman -Syy
sudo pacman -S git gcc glibc  base-devel --noconfirm
git clone https://aur.archlinux.org/snapd.git
cd snapd
makepkg -si

After installation, the systemd unit that manages the principal snap communication socket must be activated:

sudo systemctl enable --now snapd.socket

To enable traditional snap functionality, use the following command to create a symbolic link between /var/lib/snapd/snap and /snap:

sudo ln -s /var/lib/snapd/snap /snap

2: Installing MicroK8s on Arch | Manjaro | Garuda

To install MicroK8s, simply execute the following command:

sudo snap install microk8s --classic

3: Add User to microk8s Group

After microk8s has been successfully installed, add the local user to the microk8s group so that it may perform commands without the need for sudo.

sudo usermod --append --groups microk8s cloudspinx

4: Microk8s Management

The instructions below will teach you how to administer the Microk8s service.

Starting MicroK8s

We use the command below to start MicroK8s:

$ microk8s start
Started.
Check the status of MicroK8s

Execute the following command to check if microk8s is running:

$ microk8s status
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    ha-cluster           # Configure high availability on the current node
  disabled:
    ambassador           # Ambassador API Gateway and Ingress
    cilium               # SDN, fast with full network policy
    dashboard            # The Kubernetes dashboard
    dns                  # CoreDNS
    fluentd              # Elasticsearch-Fluentd-Kibana logging and monitoring
    gpu                  # Automatic enablement of Nvidia CUDA
    helm                 # Helm 2 - the package manager for Kubernetes
    helm3                # Helm 3 - Kubernetes package manager
    host-access          # Allow Pods connecting to Host services smoothly
    ingress              # Ingress controller for external access
    istio                # Core Istio service mesh services
    jaeger               # Kubernetes Jaeger operator with its simple config
    keda                 # Kubernetes-based Event Driven Autoscaling
    knative              # The Knative framework on Kubernetes.
    kubeflow             # Kubeflow for easy ML deployments
    linkerd              # Linkerd is a service mesh for Kubernetes and other frameworks
    metallb              # Loadbalancer for your Kubernetes cluster
    metrics-server       # K8s Metrics Server for API access to service metrics
    multus               # Multus CNI enables attaching multiple network interfaces to pods
    openebs              # OpenEBS is the open-source storage solution for Kubernetes
    openfaas             # openfaas serverless framework
    portainer            # Portainer UI for your Kubernetes cluster
    prometheus           # Prometheus operator for monitoring and logging
    rbac                 # Role-Based Access Control for authorisation
    registry             # Private image registry exposed on localhost:32000
    storage              # Storage class; allocates storage from host directory
    traefik              # traefik Ingress controller for external access
Enabling Microk8s

To enable microk8s, use the following command:

$ sudo snap enable microk8s
microk8s enabled
Disabling Microk8s

To disable microk8s, use the following command:

$ sudo snap disable microk8s
microk8s disabled
List Microk8s all Nodes

In MicroK8s, we use the following command to list nodes:

$ microk8s kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
hero   Ready    <none>   22h   v1.32.2-3+90fd5f3d2aea0a
Adding a Node to Microk8s cluster

Use the microk8s add-node command to establish a cluster out of two or more MicroK8s instances that are already executing. The master of the cluster will be the MicroK8s instance that runs this command, and it will host the Kubernetes data plane.

$ microk8s add-node
From the node you wish to join to this cluster, run the following:
microk8s join <server-ip>:25000/bb51a4bc3b60cfeec337d17c7440dfd5/fb3b59600d93

If the node you are adding is not reachable through the default interface you can use one of the following:
 microk8s join <server-ip>:25000/bb51a4bc3b60cfeec337d17c7440dfd5/fb3b59600d93

Execute the steps above on the node that will be added to the cluster. After then, check to see if the host has been added. The result below shows two nodes that were successfully added:

$ microk8s kubectl get no 
NAME   STATUS   ROLES    AGE   VERSION
hero   Ready    <none>   23h   v1.32.2-3+90fd5f3d2aea0a
php   Ready    <none>   1h   v1.32.2-3+90fd5f3d2aea0a
Remove Node from Mikrok8s Cluster

To remove a node from the cluster, use the leave command on the node you want to get rid of:

$ microk8s leave

Run the following command on the remaining nodes:

$ microk8s remove-node <node-ip/node.name>

Verify that it has been deleted. There is only one node in my output, as you can see:

$ microk8s kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
hero   Ready    <none>   23h   v1.32.2-3+90fd5f3d2aea0a
Deploy Pods in Mikrok8s Cluster

K8s’ fundamental building components are pods, which can hold one or more containers. As an example, we’ll use httpd for apache to deploy:

microk8s.kubectl run httpd --image httpd

Run the command below to see whether there are any existing pods in your MicroK8s environment:

$ microk8s kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
httpd   1/1     Running   0          5m4s
Delete Pods in Microk8s Cluster

Execute the following command to delete a pod in microk8s i.e httpd:

$ microk8s kubectl delete pod httpd
pod "httpd" deleted

we can confirm if it is deleted:

$ microk8s kubectl get pods
No resources found in default namespace.
Checking Services on Microk8s

To list MicroK8s services, use the instructions below:

$ microk8s kubectl get services

NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   23h


$ microk8s kubectl get all
NAME        READY   STATUS    RESTARTS   AGE
pod/httpd   1/1     Running   0          3m53s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   23h

5: Enable MicroK8s Registry

To enable registry on microk8s, run the following command:

$ microk8s.enable registry
The registry will be created with the default size of 20Gi.
You can use the "size" argument while enabling the registry, eg microk8s.enable registry:size=30Gi
Enabling default storage class
[sudo] password for frankb:       
deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon
Applying registry manifest
namespace/container-registry created
persistentvolumeclaim/registry-claim created
deployment.apps/registry created
service/registry created
configmap/local-registry-hosting configured
The registry is enabled

6: Checking MicroK8s Config

Run the following command to check microk8s configuration:

$ microk8s.config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUREekNDQWZlZ0F3SUJBZ0lVSmhYd1VRWittS3JPb2FiOU5WZkJMMHdnSXpRd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0Z6RVZNQk1HQTFVRUF3d01NVEF1TVRVeUxqRTRNeTR4TUI0WERUSXhNRGd5TlRBNU1USXlNRm9YRFRNeApNRGd5TXpBNU1USXlNRm93RnpFVk1CTUdBMVVFQXd3TU1UQXVNVFV5TGpFNE15NHhNSUlCSWpBTkJna3Foa2lHCjl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF2UGVQVkNyZ2hVWmx0QkR4QTE5RGRlbXJscStucHMwM0NPUjIKYlRxckkrSTdIeWtPZnFSUzVTclRlYW1rdk5qK1NEZ1RTSmF4cTRBNDFTVVVvY1RRaHdBcWw5YXUvREFFMEdWcQo1dmtlc1lhcW5Gek9FZWlRbW4wamx1VWhiOEV0VEFjMnNvT3NPMys1emtHZXdCZnBSd1IvbzJIc3lJeVREWmZuCmQ0eGNVNERlekdyWVBmc0p5TG90V1hJMUlyMmxaRTFjLzBCSW92c21aMWhKLzk4VFJ6UEhxc05rcHpHTm5xUDQKQ2JiM0Vhc244ZVUrb0pjVGJGUG5WSE9jVTFObERzV1MxU1NWWW42NlBhRnpVdUlNdXBjZWVBTnQwZEFhS2V3SQp3MUUrbTdrYVB6SGMyZHBEOFNzcStUMU0zUVUvcTRkWWFXQVBjYTVySy93OGVFaXJ3d0lEQVFBQm8xTXdVVEFkCkJnTlZIUTRFRmdRVW9GWmJmYSthUU4wWXlNVU5XUGNRM3FYLzA2OHdId1lEVlIwakJCZ3dGb0FVb0ZaYmZhK2EKUU4wWXlNVU5XUGNRM3FYLzA2OHdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUXNGQUFPQwpBUUVBTkNaSHJSSjFiK0NtTTg5NHpYb0JMOUFpV2xzWm9vUnJLdVZneGZuSk1hTVlqcXFCYWJ6S2NoSSszWUF3CkNwemRqMytJeEhVcGd6cXgwcXdrS3RqSWxsRzNvZjM1OXUzS1Fqai9YR3BQSldvUUhseUFTTXgzdHNPWXk3bGsKMlJkMXYxeWpjOU50NmpuM2QxVi90eFN0ZVdtQnFOZ3NHMXo3TkhtZkpLdHpLSG1qUTdQdEhJbU9tV0JySEUweQorNW92b0huQ3FteFNwOEp4R0RWNmQxbUV3UmR1a09HdVl2aXVaaDJVdTV6MHl2TEFMMW1uRVJjLzdtczZvbEkrCnY3cGcxNkdNWWM4YW55akd3Zll5VHJMMHdjRlczU2MxN1hpYnlJbm9YWlhla2NWT2g1QitTOGdxUmdWdzZleDYKSVdHU2ZBaXkybjNWRzZSd0pQek9UMEJ3Y3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://<server-ip>:16443
  name: microk8s-cluster
contexts:
- context:
    cluster: microk8s-cluster
    user: admin
  name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
  user:
    token: dzlpSWF5QVFMekppSHFFVXYweEl4K1lkY0xwZzZ6R1R4V0pwczZjQ1NtMD0K

7: Enable MicroK8s Dashboard and DNS

On microk8s, use the commands below to deploy Dashboards and DNS:

$ microk8s.enable dashboard dns
Enabling Kubernetes Dashboard
Enabling Metrics-Server
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
Warning: apiregistration.k8s.io/v1beta1 APIService is deprecated in v1.19+, unavailable in v1.22+; use apiregistration.k8s.io/v1 APIService
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-admin created
[sudo] password for frankb:       
Metrics-Server is enabled
Applying manifest
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

If RBAC is not enabled access the dashboard using the default token retrieved with:

token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
microk8s kubectl -n kube-system describe secret $token

In an RBAC enabled setup (microk8s enable RBAC) you need to create a user with restricted
permissions as shown in:
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md

Enabling DNS
Applying manifest
serviceaccount/coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created
clusterrole.rbac.authorization.k8s.io/coredns created
clusterrolebinding.rbac.authorization.k8s.io/coredns created
Restarting kubelet
DNS is enabled

Using the ‘token =’ and microk8s lines, get the token that will be needed to access the dashboard. Make sure the token is included in the above output.

$ token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
$ microk8s kubectl -n kube-system describe secret $token
Name:         default-token-5dqmf
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: be5aa60d-44a5-4cf8-b5ff-e82cb8bfb2ff

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1123 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6ImVHakVvcm50NGZNekF1UVRkVy16Yk1BTE92MXdMYU5zanhiN2dNbWFkMVUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLTVkcW1mIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiZTVhYTYwZC00NGE1LTRjZjgtYjVmZi1lODJjYjhiZmIyZmYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.HWWBqY0fBZ1gb7QLrD_pErPYcZWGn3or_m88Bws2yp19qU80ceWA_X74RNddKTIuSScn6ZBM3a0NRMfDx8tHM6Dv3o2Fo3USuV0SXvaVJLH4F1HVNZ9qUTwI1M_hNCEPygf97cN-d-bC0SvFBhdYS6HOOtrUrHU6btatsd395YChxePrOZe-Z482o1vWxNcXq-u6cx6NCG0Th5FXsQPi5MAxvCEadJEx0BTloJjDznDFJn1ScSP0zyWW6gZoQ9u_hcaSyNgWDJsQz45Al0bVjGcR-l_Fp7TRZMRtIMpXNPqV3sn8aSYtotPSj_GJWvsoeOWX9waLpJC-fhoXZH_UnQ

8: Enable MicroK8s storage

Run the following command to enable storage on microk8s:

$ microk8s.enable storage
serviceaccount/microk8s-hostpath created 
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created 
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created 
Storage will be available soon

9: Enable Microk8s Logging and Monitoring

Here we are going to enable prometheus and Grafana operator for logging and monitoring:

$ microk8s.enable prometheus
[sudo] password for frankb:       
Addon dns is already enabled.
Fetching kube-prometheus version v0.7.0.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   143  100   143    0     0     97      0  0:00:01  0:00:01 --:--:--    97
100  287k    0  287k    0     0  70596      0 --:--:--  0:00:04 --:--:--  161k
service/prometheus-operator created
serviceaccount/prometheus-operator created
alertmanager.monitoring.coreos.com/main created
secret/alertmanager-main created
service/alertmanager-main created
serviceaccount/alertmanager-main created
servicemonitor.monitoring.coreos.com/alertmanager created
secret/grafana-datasources created
configmap/grafana-dashboard-apiserver created
configmap/grafana-dashboard-cluster-total created
configmap/grafana-dashboard-controller-manager created
configmap/grafana-dashboard-k8s-resources-cluster created
configmap/grafana-dashboard-k8s-resources-namespace created
configmap/grafana-dashboard-k8s-resources-node created
configmap/grafana-dashboard-k8s-resources-pod created
configmap/grafana-dashboard-k8s-resources-workload created
configmap/grafana-dashboard-k8s-resources-workloads-namespace created
configmap/grafana-dashboard-kubelet created
configmap/grafana-dashboard-namespace-by-pod created
configmap/grafana-dashboard-namespace-by-workload created
configmap/grafana-dashboard-node-cluster-rsrc-use created
configmap/grafana-dashboard-node-rsrc-use created
configmap/grafana-dashboard-nodes created
configmap/grafana-dashboard-persistentvolumesusage created
configmap/grafana-dashboard-pod-total created
configmap/grafana-dashboard-prometheus-remote-write created
configmap/grafana-dashboard-prometheus created
configmap/grafana-dashboard-proxy created
configmap/grafana-dashboard-scheduler created
configmap/grafana-dashboard-statefulset created
configmap/grafana-dashboard-workload-total created
configmap/grafana-dashboards created
deployment.apps/grafana created
service/grafana created
serviceaccount/grafana created
servicemonitor.monitoring.coreos.com/grafana created
clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created
deployment.apps/kube-state-metrics created
service/kube-state-metrics created
serviceaccount/kube-state-metrics created
servicemonitor.monitoring.coreos.com/kube-state-metrics created
clusterrole.rbac.authorization.k8s.io/node-exporter created
clusterrolebinding.rbac.authorization.k8s.io/node-exporter created
daemonset.apps/node-exporter created
service/node-exporter created
serviceaccount/node-exporter created
servicemonitor.monitoring.coreos.com/node-exporter created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io configured
clusterrole.rbac.authorization.k8s.io/prometheus-adapter created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader unchanged
clusterrolebinding.rbac.authorization.k8s.io/prometheus-adapter created
clusterrolebinding.rbac.authorization.k8s.io/resource-metrics:system:auth-delegator created
clusterrole.rbac.authorization.k8s.io/resource-metrics-server-resources created
configmap/adapter-config created
deployment.apps/prometheus-adapter created
rolebinding.rbac.authorization.k8s.io/resource-metrics-auth-reader created
service/prometheus-adapter created
serviceaccount/prometheus-adapter created
servicemonitor.monitoring.coreos.com/prometheus-adapter created
clusterrole.rbac.authorization.k8s.io/prometheus-k8s created
clusterrolebinding.rbac.authorization.k8s.io/prometheus-k8s created
servicemonitor.monitoring.coreos.com/prometheus-operator created
prometheus.monitoring.coreos.com/k8s created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s-config created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s created
rolebinding.rbac.authorization.k8s.io/prometheus-k8s created
role.rbac.authorization.k8s.io/prometheus-k8s-config created
role.rbac.authorization.k8s.io/prometheus-k8s created
role.rbac.authorization.k8s.io/prometheus-k8s created
role.rbac.authorization.k8s.io/prometheus-k8s created
prometheusrule.monitoring.coreos.com/prometheus-k8s-rules created
service/prometheus-k8s created
serviceaccount/prometheus-k8s created
servicemonitor.monitoring.coreos.com/prometheus created
servicemonitor.monitoring.coreos.com/kube-apiserver created
servicemonitor.monitoring.coreos.com/coredns created
servicemonitor.monitoring.coreos.com/kube-controller-manager created
servicemonitor.monitoring.coreos.com/kube-scheduler created
servicemonitor.monitoring.coreos.com/kubelet created
The Prometheus operator is enabled (user/pass: admin/admin)

To enable external access, configure MicroK8s Prometheus and Grafana port forwarding.

microk8s kubectl port-forward -n monitoring service/prometheus-k8s --address 0.0.0.0 9090:9090
microk8s kubectl port-forward -n monitoring service/grafana --address 0.0.0.0 3000:3000

If you’re using a firewall, make sure the ports are allowed via it.

sudo firewall-cmd --zone=public --add-port 9090/tcp --permanent
sudo firewall-cmd --zone=public --add-port 3000/tcp --permanent
sudo firewall-cmd --reload

To access the prometheus dashboard, go to http://your-server-ip>:9090 in your browser. And for the Grafana it will be http://<your-server-ip>:3000.

10: MicroK8s Deployment

We use the command below to see everything that has been deployed in microk8s:

$ microk8s.kubectl get all --all-namespaces
NAMESPACE            NAME                                             READY   STATUS    RESTARTS   AGE
monitoring           pod/node-exporter-pf6dt                          2/2     Running   2          128m
kube-system          pod/calico-node-l5xcx                            1/1     Running   5          26h
kube-system          pod/metrics-server-8bbfb4bdb-ptzfn               1/1     Running   2          168m
monitoring           pod/grafana-6b8df57c5b-szc5s                     1/1     Running   1          128m
monitoring           pod/prometheus-operator-7649c7454f-qg4hk         2/2     Running   2          129m
kube-system          pod/calico-kube-controllers-f7868dd95-4sk94      1/1     Running   5          26h
kube-system          pod/dashboard-metrics-scraper-78d7698477-pg26w   1/1     Running   2          166m
monitoring           pod/prometheus-k8s-0                             2/2     Running   3          127m
monitoring           pod/prometheus-adapter-69b8496df6-kwh8s          1/1     Running   1          128m
container-registry   pod/registry-9b57d9df8-ntj4t                     1/1     Running   2          173m
monitoring           pod/kube-state-metrics-78dc55b74b-xk8tm          3/3     Running   3          128m
kube-system          pod/kubernetes-dashboard-85fd7f45cb-s29dp        1/1     Running   5          166m
kube-system          pod/coredns-7f9c69c78c-vfcqf                     1/1     Running   2          166m
monitoring           pod/alertmanager-main-0                          2/2     Running   2          127m
kube-system          pod/hostpath-provisioner-5c65fbdb4f-p9lgs        1/1     Running   2          174m
default              pod/httpd                                        1/1     Running   2          3h3m

NAMESPACE            NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                        AGE
default              service/kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP                        26h
container-registry   service/registry                    NodePort    10.152.183.174   <none>        5000:32000/TCP                 173m
kube-system          service/metrics-server              ClusterIP   10.152.183.71    <none>        443/TCP                        168m
kube-system          service/kubernetes-dashboard        ClusterIP   10.152.183.52    <none>        443/TCP                        168m
kube-system          service/dashboard-metrics-scraper   ClusterIP   10.152.183.242   <none>        8000/TCP                       168m
kube-system          service/kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP         168m
monitoring           service/prometheus-operator         ClusterIP   None             <none>        8443/TCP                       129m
monitoring           service/alertmanager-main           ClusterIP   10.152.183.79    <none>        9093/TCP                       129m
monitoring           service/grafana                     ClusterIP   10.152.183.147   <none>        3000/TCP                       129m
monitoring           service/kube-state-metrics          ClusterIP   None             <none>        8443/TCP,9443/TCP              128m
monitoring           service/node-exporter               ClusterIP   None             <none>        9100/TCP                       128m
monitoring           service/prometheus-adapter          ClusterIP   10.152.183.211   <none>        443/TCP                        128m
monitoring           service/prometheus-k8s              ClusterIP   10.152.183.23    <none>        9090/TCP                       128m
kube-system          service/kubelet                     ClusterIP   None             <none>        10250/TCP,10255/TCP,4194/TCP   127m
monitoring           service/alertmanager-operated       ClusterIP   None             <none>        9093/TCP,9094/TCP,9094/UDP     127m
monitoring           service/prometheus-operated         ClusterIP   None             <none>        9090/TCP                       127m

NAMESPACE     NAME                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
monitoring    daemonset.apps/node-exporter   1         1         1       1            1           kubernetes.io/os=linux   128m
kube-system   daemonset.apps/calico-node     1         1         1       1            1           kubernetes.io/os=linux   26h

NAMESPACE            NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system          deployment.apps/metrics-server              1/1     1            1           168m
monitoring           deployment.apps/grafana                     1/1     1            1           129m
monitoring           deployment.apps/prometheus-operator         1/1     1            1           129m
kube-system          deployment.apps/calico-kube-controllers     1/1     1            1           26h
kube-system          deployment.apps/dashboard-metrics-scraper   1/1     1            1           168m
monitoring           deployment.apps/prometheus-adapter          1/1     1            1           128m
container-registry   deployment.apps/registry                    1/1     1            1           173m
monitoring           deployment.apps/kube-state-metrics          1/1     1            1           128m
kube-system          deployment.apps/kubernetes-dashboard        1/1     1            1           168m
kube-system          deployment.apps/coredns                     1/1     1            1           168m
kube-system          deployment.apps/hostpath-provisioner        1/1     1            1           174m

NAMESPACE            NAME                                                   DESIRED   CURRENT   READY   AGE
kube-system          replicaset.apps/metrics-server-8bbfb4bdb               1         1         1       168m
monitoring           replicaset.apps/grafana-6b8df57c5b                     1         1         1       129m
monitoring           replicaset.apps/prometheus-operator-7649c7454f         1         1         1       129m
kube-system          replicaset.apps/calico-kube-controllers-f7868dd95      1         1         1       26h
kube-system          replicaset.apps/dashboard-metrics-scraper-78d7698477   1         1         1       166m
monitoring           replicaset.apps/prometheus-adapter-69b8496df6          1         1         1       128m
container-registry   replicaset.apps/registry-9b57d9df8                     1         1         1       173m
monitoring           replicaset.apps/kube-state-metrics-78dc55b74b          1         1         1       128m
kube-system          replicaset.apps/kubernetes-dashboard-85fd7f45cb        1         1         1       166m
kube-system          replicaset.apps/coredns-7f9c69c78c                     1         1         1       166m
kube-system          replicaset.apps/hostpath-provisioner-5c65fbdb4f        1         1         1       174m

NAMESPACE    NAME                                 READY   AGE
monitoring   statefulset.apps/prometheus-k8s      1/1     127m
monitoring   statefulset.apps/alertmanager-main   1/1     127m

Conclusion

Finally, you’ve installed and configured MicroK8s Kubernetes Cluster on Arch | Manjaro | Garuda Linux. We hope you liked reading this post.

Other Guides:

Your IT Journey Starts Here!

Ready to level up your IT skills? Our new eLearning platform is coming soon to help you master the latest technologies.

Be the first to know when we launch! Join our waitlist now.

Join our Linux and open source community. Subscribe to our newsletter for tips, tricks, and collaboration opportunities!

Recent Post

Leave a Comment

Your email address will not be published. Required fields are marked *

Related Post

Android Studio, which is based on IntelliJ IDEA, is the official Integrated Development Environment for developing Android apps. On top […]

In this guide, we will walk through how to install Webmin on AlmaLinux 9 or Oracle Linux 9. Webmin is […]

Grub, an acronym of Grand Unified Bootloader is the most preferred boot loader on Linux systems although there are others […]

Let's Connect

Unleash the full potential of your business with CloudSpinx. Our expert solutions specialists are standing by to answer your questions and tailor a plan that perfectly aligns with your unique needs.
You will get a response from our solutions specialist within 12 hours
We understand emergencies can be stressful. For immediate assistance, chat with us now

Contact CloudSpinx today!

Download CloudSpinx Profile

Discover the full spectrum of our expertise and services by downloading our detailed Company Profile. Simply enter your first name, last name, and email address.