Jump toUpdate content
Setting up Kubernetes with Minikube on a Elastic Metal Server
- 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
- You have an account and are logged into the Scaleway console
- You have configured your SSH key
- You have created a Elastic Metal server which is running Ubuntu Bionic Beaver (18.04).
Downloading and Installing Minikube
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
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
Download the Minikube binary and make it executable:
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
Copy the binary file to
/usrlocal/bin/
to make it available system-wide, then remove the downloaded binary:cp minikube /usr/local/bin && rm minikube
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
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
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
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
Start Minikube:
minikube start --vm-driver=kvm2
An output informs you about the status of Minikube:
```
😄 minikube v1.1.0 on linux (amd64)
2019/05/27 15:11:47 No matching credentials were found, falling back on anonymous
🔥 Creating kvm2 VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
🐳 Configuring environment for Kubernetes v1.14.2 on Docker 18.09.6
💾 Downloading kubeadm v1.14.2
💾 Downloading kubelet v1.14.2
🚜 Pulling images ...
🚀 Launching Kubernetes ...
⌛ Verifying: apiserver proxy etcd scheduler controller dns
🏄 Done! kubectl is now configured to use "minikube"
```Check the health status of
minikube
:minikube status
host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.39.101Start an Echoserver deployment:
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.14 --port=8080
Once the deployment is created, a message confirms the step:
deployment.apps/hello-minikube created
Check the running pods and configured deployments:
kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-minikube-56cdb79778-qj7sd 1/1 Running 0 3m47skubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-minikube 1/1 1 1 5m59sExpose an echoserver deployment with NodePort
kubectl expose deployment hello-minikube --type=NodePort
curl
the service created by running the following command:curl $(minikube service hello-minikube --url)
A response similar to this example is shown:
Hostname: hello-minikube-56cdb79778-qj7sd
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://192.168.39.101:8080/
Request Headers:
accept=*/*
host=192.168.39.101:30090
user-agent=curl/7.58.0
Request Body:
-no body in request-Delete the
hello-minikube
service:kubectl delete services hello-minikube
Delete the deployment:
kubectl delete deployment hello-minikube
A confirmation displays:
deployment.extensions "hello-minikube" deleted
Stop Minikube:
minikube stop
A confirmation displays:
✋ Stopping "minikube" in kvm2 ...
🛑 "minikube" stopped.
For more information regarding Minikube and Kubernetes, check out the official documentation and the Minikube GitHub repository.