Hometutorials
minikube elastic metal
Jump toUpdate content

Setting up Kubernetes with Minikube on an Elastic Metal Server

Reviewed on 16 August 2023Published 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
Requirements:

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
    minikube
    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
    NAME READY UP-TO-DATE AVAILABLE AGE
    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:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    hello-node LoadBalancer 10.102.149.85 <pending> 8080:32112/TCP 2s
    kubernetes ClusterIP 10.96.0.1 <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.