minikube elastic metal
Jump toUpdate content

Setting up Kubernetes with Minikube on an Elastic Metal Server

Reviewed on 16 August 2023 • Published on 27 May 2019
  • compute
  • Kubernetes
  • Minikube
  • server
  • Elastic-Metal-server

Kubernetes is an open-source platform for managing containerized workloads and services with a rapidly growing ecosystem. Kubernetes orchestrates computing, networking, and storage infrastructure on behalf of user workloads. The tool facilitates both: declarative configuration and automation and was released to the public by Google in 2014.

Kubernetes has several features. It can be thought of as:

  • a container platform
  • a microservices platform
  • a portable cloud platform and a lot more.

Minikube runs a single-node Kubernetes cluster inside a VM on your computer or cloud server for developing and testing applications.

Minikube supports Kubernetes features such as:

  • DNS
  • NodePorts
  • ConfigMaps and Secrets
  • Dashboards
  • Container Runtime: Docker, rkt, CRI-O and containerd
  • Enabling CNI (Container Network Interface)
  • Ingress
Security & Identity (IAM):

You may need certain IAM permissions to carry out some actions described on this page. This means:

  • you are the Owner of the Scaleway Organization in which the actions will be carried out, or
  • you are an IAM user of the Organization, with a policy granting you the necessary permission sets

Downloading and Installing Minikube

  1. Check if the CPU of your server supports hardware virtualization. The output of the following command shall not be empty:
    egrep --color 'vmx|svm' /proc/cpuinfo
  2. Minikube relies on a Hypervisor to run the Kubernetes VM. This tutorial uses KVM (Kernel Virtual Machine), but it is also possible to run Minikube on VirtualBox.
    apt-get install qemu qemu-kvm libvirt-bin virtinst curl
  3. Download the Minikube binary and make it executable:
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && sudo install minikube-linux-amd64 /usr/local/bin/minikube
  4. Download and install the KVM driver for Minikube:
    curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 && chmod +x docker-machine-driver-kvm2
  5. Copy the binary file to /usrlocal/bin/ to make it available system-wide, then remove the downloaded binary:
    cp docker-machine-driver-kvm2 /usr/local/bin/ && rm docker-machine-driver-kvm2
  6. Download and install kubectl, a CLI tool to manage Kubernetes:
    curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl
  7. Copy the binary file to /usrlocal/bin/ to make it available system-wide, then remove the downloaded binary:
    cp kubectl /usr/local/bin && rm kubectl

Using Minikube

  1. Start Minikube:

    minikube start --vm-driver=kvm2

    An output informs you about the status of Minikube:

    😄 minikube v1.31.1 on linux (amd64)
    ✨ Automatically selected the docker driver. Other choices: virtualbox, ssh
    📌 Using Docker Desktop driver with root privileges
    👍 Starting control plane node minikube in cluster minikube
    🚜 Pulling base image ...
    💾 Downloading Kubernetes v1.27.3 preload ...
    🔥 Creating docker container (CPUs=2, Memory=4000MB) ...
    🐳 Preparing Kubernetes v1.27.3 on Docker 24.0.4 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
    🔗 Configuring bridge CNI (Container Networking Interface) ...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
    🔎 Verifying Kubernetes components...
    🌟 Enabled addons: storage-provisioner
    🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  2. Check the health status of minikube:

    minikube status
    type: Control Plane
    host: Running
    kubelet: Running
    apiserver: Running
    kubeconfig: Configured
  3. Start a deployment that manages a pod. The pod runs a container based on the provided Docker image:

    kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080

    Once the deployment is created, a message confirms the step:

    deployment.apps/hello-node created
  4. Check the running pods and configured deployments:

    kubectl get deployments
    hello-node 1/1 1 1 98s

    Expose the pod to the public internet using the kubectl expose command

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080

    The --type=LoadBalancer flag indicates that you want to expose your service outside of the cluster.

  5. View the service you created in the previous step:

    hello-node LoadBalancer <pending> 8080:32112/TCP 2s
    kubernetes ClusterIP <none> 443/TCP 11m
  6. Run the following command to open a browser window that serves the app and shows the app’s response:

    minikube service hello-node
  7. Delete the hello-node service:

    kubectl delete services hello-node
  8. Delete the deployment:

    kubectl delete deployment hello-node

    A confirmation displays:

    deployment.extensions "hello-node" deleted
  9. Stop Minikube:

    minikube stop

    A confirmation displays:

    ✋ Stopping node "minikube" ...
    🛑 Powering off "minikube" via SSH ...
    🛑 1 node stopped.

For more information regarding Minikube and Kubernetes, check out the official documentation and the Minikube GitHub repository.