How to create a Kubernetes’s sandbox environment?. How to experience Kubernetes in Laptop/Desktop? MiniQube is developed for desktop/Laptop environment to experience the Kubernetes cluster. “Minikube” runs a single-node Kubernetes cluster inside the Virtual Machine on Laptop/Desktop with help of virtualization technology (Virtual Box, KVM, VMware Fusion). This article will walk through the deployment of Minikube on RHEL 7 / CentOS 7 using KVM virtualization.
Note: Virtualization (VT) required only to create the VM for MiniKube. (Not mandatory for actual Kubernetes deployment)
Envirnonemt:
- Redhat Enterprise Linux 7 / CentOS 7
- MiniKube
- Access to Base & Extra CentOS/Redhat Repository
Installing & Configuring KVM (Virtualization Technology)
1. Login to RHEL 7/CentOS 7 and install KVM packages.
[root@kubebase ~]# yum -y install qemu-kvm libvirt libvirt-daemon-kvm Loaded plugins: fastestmirror Determining fastest mirrors * base: mirrors.viethosting.com * extras: mirrors.viethosting.com * updates: mirrors.viethosting.com base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:02 updates | 3.4 kB 00:00:00 (1/4): base/7/x86_64/primary_db | 6.0 MB 00:00:03 (2/4): base/7/x86_64/group_gz | 166 kB 00:00:16 (3/4): extras/7/x86_64/primary_db | 201 kB 00:00:17 (4/4): updates/7/x86_64/primary_db | 5.0 MB 00:01:33 Resolving Dependencies
2. Start KVM services and enable to make it persistent across reboot.
[root@kubebase ~]# systemctl start libvirtd [root@kubebase ~]# systemctl enable libvirtd
3. Ensure that Laptop/Desktop is supporting the VT technology.
[root@kubebase ~]# virt-host-validate QEMU: Checking for hardware virtualization : PASS QEMU: Checking if device /dev/kvm exists : PASS QEMU: Checking if device /dev/kvm is accessible : PASS QEMU: Checking if device /dev/vhost-net exists : PASS QEMU: Checking if device /dev/net/tun exists : PASS QEMU: Checking for cgroup 'memory' controller support : PASS QEMU: Checking for cgroup 'memory' controller mount-point : PASS QEMU: Checking for cgroup 'cpu' controller support : PASS QEMU: Checking for cgroup 'cpu' controller mount-point : PASS QEMU: Checking for cgroup 'cpuacct' controller support : PASS QEMU: Checking for cgroup 'cpuacct' controller mount-point : PASS QEMU: Checking for cgroup 'cpuset' controller support : PASS QEMU: Checking for cgroup 'cpuset' controller mount-point : PASS QEMU: Checking for cgroup 'devices' controller support : PASS QEMU: Checking for cgroup 'devices' controller mount-point : PASS QEMU: Checking for cgroup 'blkio' controller support : PASS QEMU: Checking for cgroup 'blkio' controller mount-point : PASS QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform) LXC: Checking for Linux >= 2.6.26 : PASS LXC: Checking for namespace ipc : PASS LXC: Checking for namespace mnt : PASS LXC: Checking for namespace pid : PASS LXC: Checking for namespace uts : PASS LXC: Checking for namespace net : PASS LXC: Checking for namespace user : PASS LXC: Checking for cgroup 'memory' controller support : PASS LXC: Checking for cgroup 'memory' controller mount-point : PASS LXC: Checking for cgroup 'cpu' controller support : PASS LXC: Checking for cgroup 'cpu' controller mount-point : PASS LXC: Checking for cgroup 'cpuacct' controller support : PASS LXC: Checking for cgroup 'cpuacct' controller mount-point : PASS LXC: Checking for cgroup 'cpuset' controller support : PASS LXC: Checking for cgroup 'cpuset' controller mount-point : PASS LXC: Checking for cgroup 'devices' controller support : PASS LXC: Checking for cgroup 'devices' controller mount-point : PASS LXC: Checking for cgroup 'blkio' controller support : PASS LXC: Checking for cgroup 'blkio' controller mount-point : PASS
Ensure “firewalld” service is up and running.
[root@kubebase ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-05-21 14:36:01 EDT; 4min 10s ago Docs: man:firewalld(1) Main PID: 740 (firewalld) CGroup: /system.slice/firewalld.service └─740 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid May 21 14:35:58 kubebase systemd[1]: Starting firewalld - dynamic firewall daemon... May 21 14:36:01 kubebase systemd[1]: Started firewalld - dynamic firewall daemon. [root@kubebase ~]#
You might get the following error if you don’t enable firewalld.
12575 start.go:529] StartHost: create: Error creating machine: Error in driver during machine creation: creating network: creating network minikube-net: virError(Code=89, Domain=47, Message=’The name org.fedoraproject.FirewallD1 was not provided by any .service files’)
X Unable to start VM: create: Error creating machine: Error in driver during machine creation: creating network: creating network minikube-net: virError(Code=89, Domain=47, Message=’The name org.fedoraproject.FirewallD1 was not provided by any .service files’)
* Sorry that minikube crashed. If this was unexpected, we would love to hear from you:
– https://github.com/kubernetes/minikube/issues/new
Configure Kubernetes Repo:
4. Configure Kubernetes repo to install Kubernetes components.
[root@kubebase yum.repos.d]# cd /etc/yum.repos.d [root@kubebase yum.repos.d]# cat Kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg [root@kubebase yum.repos.d]# pwd /etc/yum.repos.d [root@kubebase yum.repos.d]#
5. Install “kubectl” binary.
[root@kubebase yum.repos.d]# yum -y install kubectl Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.viethosting.com * extras: mirrors.viethosting.com * updates: mirrors.viethosting.com kubernetes/x86_64/signature | 454 B 00:00:00 Retrieving key from https://packages.cloud.google.com/yum/doc/yum-key.gpg Importing GPG key 0xA7317B0F: Userid : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>" Fingerprint: d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f From : https://packages.cloud.google.com/yum/doc/yum-key.gpg Retrieving key from https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg kubernetes/x86_64/signature | 1.4 kB 00:00:00 !!! kubernetes/x86_64/primary | 49 kB 00:00:02 kubernetes 351/351 Resolving Dependencies --> Running transaction check <<<<<< Output Truncated >>>>> Running transaction Installing : kubectl-1.14.2-0.x86_64 1/1 Verifying : kubectl-1.14.2-0.x86_64 1/1 Installed: kubectl.x86_64 0:1.14.2-0 Complete!
6. Download the following components from Google repository.
- docker-machine-driver-kvm2
- minikube-linux-amd64 (minikube)
[root@kubebase ~]# wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -O minikube --2019-05-21 15:10:12-- https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 Resolving storage.googleapis.com (storage.googleapis.com)... 173.194.73.128, 2a00:1450:4010:c05::80 Connecting to storage.googleapis.com (storage.googleapis.com)|173.194.73.128|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 41728440 (40M) [application/octet-stream] Saving to: ‘minikube’ 100%[=======================================================>] 41,728,440 1.11MB/s in 37s 2019-05-21 15:10:54 (1.08 MB/s) - ‘minikube’ saved [41728440/41728440] [root@kubebase ~]# wget https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 --2019-05-21 15:11:14-- https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 Resolving storage.googleapis.com (storage.googleapis.com)... 64.233.161.128, 2a00:1450:4010:c0e::80 Connecting to storage.googleapis.com (storage.googleapis.com)|64.233.161.128|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 37581096 (36M) [application/octet-stream] Saving to: ‘docker-machine-driver-kvm2’ 100%[========================================================>] 37,581,096 1.18MB/s in 39s 2019-05-21 15:11:59 (952 KB/s) - ‘docker-machine-driver-kvm2’ saved [37581096/37581096] [root@kubebase ~]#
7. Modify the file permission and move the binary to the command search path.
[root@kubebase ~]# chmod 755 minikube docker-machine-driver-kvm2 [root@kubebase ~]# mv minikube docker-machine-driver-kvm2 /usr/local/bin/ [root@kubebase ~]#
8. Check the “minikube” version.
[root@kubebase ~]# minikube version minikube version: v1.1.0 [root@kubebase ~]# kubectl version -o json { "clientVersion": { "major": "1", "minor": "14", "gitVersion": "v1.14.2", "gitCommit": "66049e3b21efe110454d67df4fa62b08ea79a19b", "gitTreeState": "clean", "buildDate": "2019-05-16T16:23:09Z", "goVersion": "go1.12.5", "compiler": "gc", "platform": "linux/amd64" } }
Deploying Minikube Cluster:
8. Start the minikube using KVM driver.
[root@kubebase ~]# minikube start --vm-driver kvm2 * minikube v1.1.0 on linux (amd64) * Tip: Use 'minikube start -p ' to create a new cluster, or 'minikube delete' to delete this one. * Restarting existing kvm2 VM for "minikube" ... * Waiting for SSH access ... * Configuring environment for Kubernetes v1.14.2 on Docker 18.09.6 * Relaunching Kubernetes v1.14.2 using kubeadm ... * Verifying: apiserver proxy etcd scheduler controller dns * Done! kubectl is now configured to use "minikube" [root@kubebase ~]#
If you get the following error, just delete the “minikube” VM and re-create it
Tip: Use ‘minikube start -p ‘ to create a new cluster, or ‘minikube delete’ to delete this one.
E0522 03:48:03.458345 1488 start.go:529] StartHost: Error getting state for host: getting connection: looking up domain: virError(Code=0, Domain=0, Message=’Missing error’)
X Unable to start VM: Error getting state for host: getting connection: looking up domain: virError(Code=0, Domain=0, Message=’Missing error’)
* Sorry that minikube crashed. If this was unexpected, we would love to hear from you:
– https://github.com/kubernetes/minikube/issues/new
Delete the “minikube” VM using the following command.
[root@kubebase ~]# minikube delete * Deleting "minikube" from kvm2 ... * The "minikube" cluster has been deleted. [root@kubebase ~]# minikube start --vm-driver kvm2 * minikube v1.1.0 on linux (amd64) * 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 X Failed to get driver URL: connection is shut down * Sorry that minikube crashed. If this was unexpected, we would love to hear from you: - https://github.com/kubernetes/minikube/issues/new [root@kubebase ~]#
Validating Minikube Health status:
9. Check the Kubernetes cluster status and ensure all the components are running
[root@kubebase ~]# minikube status host: Running kubelet: Running apiserver: Running kubectl: Correctly Configured: pointing to minikube-vm at 192.168.39.250
10. Checking the minikube service list. Dashboard namespace is missing here.
[root@kubebase ~]# minikube service list |-------------|------------|--------------| | NAMESPACE | NAME | URL | |-------------|------------|--------------| | default | kubernetes | No node port | | kube-system | kube-dns | No node port | |-------------|------------|--------------|
11. Checking the “Minikube” docker environment.
[root@kubebase ~]# minikube docker-env export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.39.250:2376" export DOCKER_CERT_PATH="/root/.minikube/certs" export DOCKER_API_VERSION="1.39" # Run this command to configure your shell: # eval $(minikube docker-env)
12. Checking the Kubernetes cluster info.
[root@kubebase ~]# kubectl cluster-info Kubernetes master is running at https://192.168.39.250:8443 KubeDNS is running at https://192.168.39.250:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
13. Get the Kubernetes node status.
[root@kubebase ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready 2m33s v1.14.2 [root@kubebase ~]# virsh list Id Name State ---------------------------------------------------- 1 minikube running [root@kubebase ~]#
14. How to access the “Minikube” VM and how to check the running containers for K8s? Execute “minikube ssh”
[root@kubebase ~]# minikube ssh _ _ _ _ ( ) ( ) ___ ___ (_) ___ (_)| |/') _ _ | |_ __ /' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\ | ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/ (_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____) $ hostname minikube $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ad8a971620ca eb516548c180 "/coredns -conf /etc…" 2 minutes ago Up 2 minutes k8s_coredns_coredns-fb8b8dccf-8nr2q_kube-system_754dcbdd-7c6a-11e9-ac49-3c4a73c3bd3b_1 33f143a9716e eb516548c180 "/coredns -conf /etc…" 2 minutes ago Up 2 minutes k8s_coredns_coredns-fb8b8dccf-5szrq_kube-system_7552ebd8-7c6a-11e9-ac49-3c4a73c3bd3b_1 24fb3d16c349 4689081edb10 "/storage-provisioner" 3 minutes ago Up 3 minutes k8s_storage-provisioner_storage-provisioner_kube-system_77744985-7c6a-11e9-ac49-3c4a73c3bd3b_0 a6e71c8b6a48 k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_storage-provisioner_kube-system_77744985-7c6a-11e9-ac49-3c4a73c3bd3b_0 8eab3bbc36dc 5c24210246bb "/usr/local/bin/kube…" 3 minutes ago Up 3 minutes k8s_kube-proxy_kube-proxy-h7xtp_kube-system_754e770e-7c6a-11e9-ac49-3c4a73c3bd3b_0 6dfc217ab40e k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_coredns-fb8b8dccf-5szrq_kube-system_7552ebd8-7c6a-11e9-ac49-3c4a73c3bd3b_0 b74e2bf106ea k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-proxy-h7xtp_kube-system_754e770e-7c6a-11e9-ac49-3c4a73c3bd3b_0 65abe116b7fc k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_coredns-fb8b8dccf-8nr2q_kube-system_754dcbdd-7c6a-11e9-ac49-3c4a73c3bd3b_0 48f7a41de231 5eeff402b659 "kube-apiserver --ad…" 3 minutes ago Up 3 minutes k8s_kube-apiserver_kube-apiserver-minikube_kube-system_f0c7fec2368e56b97aab5eecfcc129ce_0 d6f51369e061 2c4adeb21b4f "etcd --advertise-cl…" 3 minutes ago Up 3 minutes k8s_etcd_etcd-minikube_kube-system_949db6759563e191943a9567caecc738_0 1f6ba3ce6775 119701e77cbc "/opt/kube-addons.sh" 3 minutes ago Up 3 minutes k8s_kube-addon-manager_kube-addon-manager-minikube_kube-system_0abcb7a1f0c9c0ebc9ec348ffdfb220c_0 4f7e30421a8b 8be94bdae139 "kube-controller-man…" 3 minutes ago Up 3 minutes k8s_kube-controller-manager_kube-controller-manager-minikube_kube-system_9c1e365bd18b5d3fc6a5d0ff10c2b125_0 f2ebfba2662f ee18f350636d "kube-scheduler --bi…" 3 minutes ago Up 3 minutes k8s_kube-scheduler_kube-scheduler-minikube_kube-system_9b290132363a92652555896288ca3f88_0 e250137f88af k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-apiserver-minikube_kube-system_f0c7fec2368e56b97aab5eecfcc129ce_0 a65431299b17 k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_etcd-minikube_kube-system_949db6759563e191943a9567caecc738_0 c6534ed33926 k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-scheduler-minikube_kube-system_9b290132363a92652555896288ca3f88_0 d719dee6a5ea k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-addon-manager-minikube_kube-system_0abcb7a1f0c9c0ebc9ec348ffdfb220c_0 590ab88ce56d k8s.gcr.io/pause:3.1 "/pause" 3 minutes ago Up 3 minutes k8s_POD_kube-controller-manager-minikube_kube-system_9c1e365bd18b5d3fc6a5d0ff10c2b125_0 $
15. To check the Kubeneters components version, execute the following command.
[root@kubebase ~]# kubectl version -o json { "clientVersion": { "major": "1", "minor": "14", "gitVersion": "v1.14.2", "gitCommit": "66049e3b21efe110454d67df4fa62b08ea79a19b", "gitTreeState": "clean", "buildDate": "2019-05-16T16:23:09Z", "goVersion": "go1.12.5", "compiler": "gc", "platform": "linux/amd64" }, "serverVersion": { "major": "1", "minor": "14", "gitVersion": "v1.14.2", "gitCommit": "66049e3b21efe110454d67df4fa62b08ea79a19b", "gitTreeState": "clean", "buildDate": "2019-05-16T16:14:56Z", "goVersion": "go1.12.5", "compiler": "gc", "platform": "linux/amd64" } } [root@kubebase ~]#
You could also list the “minikube” VM using the virsh command.
[root@kubebase yum.repos.d]# virsh list --all Id Name State ---------------------------------------------------- 2 minikube running [root@kubebase yum.repos.d]#
We have successfully deployed “Minikube” on RHEL 7/CentOS 7. Kubernetes dashboard namespace is missing in the service list. In the next article, we will deploy the dashboard and access it.
Share it! Comment it!! Be Sociable!!!
Leave a Reply