{"id":41735,"date":"2016-10-26T14:54:13","date_gmt":"2016-10-26T09:24:13","guid":{"rendered":"http:\/\/www.tothenew.com\/blog\/?p=41735"},"modified":"2016-10-27T10:09:33","modified_gmt":"2016-10-27T04:39:33","slug":"getting-started-with-minikube","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/getting-started-with-minikube\/","title":{"rendered":"Getting Started with MiniKube"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41737 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/kube7-logo.png\" alt=\"kube7-logo\" width=\"560\" height=\"136\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/kube7-logo.png 560w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/kube7-logo-300x72.png 300w\" sizes=\"(max-width: 560px) 100vw, 560px\" \/><\/p>\n<p><strong>Kubernetes<\/strong> is one of the best orchestration tools for managing containerized applications.<\/p>\n<p>Features of Kubernetes:<br \/>\n1. Open Source<br \/>\n2. Support for multiple OS (Run anywhere)<br \/>\n3. Production Readiness<\/p>\n<p>In this blog, we are going to <a title=\"Getting started with Kubernetes\" href=\"http:\/\/www.tothenew.com\/blog\/getting-started-with-kubernetes\/\">set up Kubernetes<\/a>\u00a0on our local environment through <strong>Minikube.<\/strong><br \/>\n<strong>Minikube<\/strong> supports Kubernetes features such as:<\/p>\n<ul>\n<li>DNS (Domain Name System)<\/li>\n<li>NodePorts and LoadBalancer<\/li>\n<li>ConfigMaps<\/li>\n<li>Secrets etc.<\/li>\n<\/ul>\n<p><strong>Minikube<\/strong>\u00a0does not \u00a0provide\u00a0support for cloud provider specific features:<\/p>\n<ul>\n<li>LoadBalancers<\/li>\n<li>PersistentVolumes<\/li>\n<li>Ingress<\/li>\n<\/ul>\n<p>Let&#8217;s start!<\/p>\n<p>I am using Ubuntu 14.04 for setting <strong>Minikube<\/strong> cluster.<\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Requirements<\/strong><\/span><strong>:<\/strong><\/p>\n<ul>\n<li>Checking that our system supports <strong>VT-x\/AMD-v virtualization<\/strong> by running this command:<\/li>\n<\/ul>\n<p>[js]<br \/>\ncat \/proc\/cpuinfo | grep &#8216;vmx\\|svm&#8217;<br \/>\n[\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41741 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-102611.png\" alt=\"Screenshot from 2016-10-24 10:26:11\" width=\"1298\" height=\"620\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-102611.png 1298w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-102611-300x143.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-102611-1024x489.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-102611-624x298.png 624w\" sizes=\"(max-width: 1298px) 100vw, 1298px\" \/>if this command gives an output then it&#8217;s good.<\/p>\n<ul>\n<li>Currently, <strong>Minikube<\/strong>\u00a0supports:\n<ul>\n<li>VirtualBox<\/li>\n<li>VMWarefusion<\/li>\n<li>KVM<\/li>\n<li>xhyve<\/li>\n<\/ul>\n<\/li>\n<li>Installing recent\u00a0<strong style=\"font-size: 1rem;\">VirtualBox<\/strong><span style=\"font-size: 1rem;\"> or <\/span><strong style=\"font-size: 1rem;\">VMWare fusion<\/strong><span style=\"font-size: 1rem;\">. We will be using <\/span><strong style=\"font-size: 1rem;\">VirtualBox.<\/strong><\/li>\n<\/ul>\n<p>[js]<br \/>\nsudo apt-get install virtualbox<br \/>\n[\/js]<\/p>\n<p><strong>Now let&#8217;s get started:<\/strong><\/p>\n<ul>\n<li>Downloading binaries:<br \/>\n<strong>minikube\u00a0<\/strong> binaries:<img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41791 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-153057.png\" alt=\"Screenshot from 2016-10-24 15:30:57\" width=\"1294\" height=\"138\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-153057.png 1294w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-153057-300x31.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-153057-1024x109.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-153057-624x66.png 624w\" sizes=\"(max-width: 1294px) 100vw, 1294px\" \/><strong>kubectl<\/strong> binaries:<br \/>\n<img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41787 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/kubectl-binary.png\" alt=\"kubectl binary\" width=\"1298\" height=\"143\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/kubectl-binary.png 1298w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/kubectl-binary-300x33.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/kubectl-binary-1024x112.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/kubectl-binary-624x68.png 624w\" sizes=\"(max-width: 1298px) 100vw, 1298px\" \/><br \/>\nFor different k8s version, follow the link:<br \/>\nhttp:\/\/kubernetes.io\/docs\/getting-started-guides\/minikube\/#install-kubectl<\/li>\n<\/ul>\n<ul>\n<li>Starting our Kubernetes cluster:<br \/>\n<strong>We can also specify which driver<\/strong> we want to use by <em>&#8220;minikube start &#8211;vm-driver=xx&#8221;<\/em><\/li>\n<\/ul>\n<p>[js]<br \/>\nminikube start<br \/>\n[\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41742 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-start.png\" alt=\"minikube start\" width=\"1301\" height=\"214\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-start.png 1301w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-start-300x49.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-start-1024x168.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-start-624x102.png 624w\" sizes=\"(max-width: 1301px) 100vw, 1301px\" \/>Now as we can see our minikube cluster has been configured. Also, a hidden directory in our home has been created <strong><em>&#8220;<\/em>.<em>minikube&#8221;\u00a0<\/em><\/strong>where all the configurations and ssh key, certificates etc. are stored.<\/p>\n<ul>\n<li>Checking the status of minikube:<\/li>\n<\/ul>\n<p>[js]<br \/>\nminikube status<br \/>\n[\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41758 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-status.png\" alt=\"minikube status\" width=\"527\" height=\"151\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-status.png 527w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-status-300x85.png 300w\" sizes=\"(max-width: 527px) 100vw, 527px\" \/><\/p>\n<ul>\n<li>Let&#8217;s see how many pods are running:<\/li>\n<\/ul>\n<p>[js]<br \/>\nkubectl get pods &#8211;all-namespaces<br \/>\n[\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41799 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/get-pods.png\" alt=\"get pods\" width=\"880\" height=\"112\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/get-pods.png 880w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/get-pods-300x38.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/get-pods-624x79.png 624w\" sizes=\"(max-width: 880px) 100vw, 880px\" \/><\/p>\n<ul>\n<li>Getting nodes:<\/li>\n<\/ul>\n<p>[js]<br \/>\nkubectl get nodes<br \/>\n[\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41795 alignnone\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-154553.png\" alt=\"Screenshot from 2016-10-24 15:45:53\" width=\"323\" height=\"91\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-154553.png 323w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/Screenshot-from-2016-10-24-154553-300x84.png 300w\" sizes=\"(max-width: 323px) 100vw, 323px\" \/><\/p>\n<ul>\n<li><strong>Minikube<\/strong> dashboard:<\/li>\n<\/ul>\n<p>[js]<br \/>\nminikube dashboard<br \/>\n[\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-41743 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/dashboard.png\" alt=\"dashboard\" width=\"677\" height=\"380\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/dashboard.png 1366w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/dashboard-300x168.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/dashboard-1024x575.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/dashboard-624x350.png 624w\" sizes=\"(max-width: 677px) 100vw, 677px\" \/><\/p>\n<ul>\n<li>Now we can deploy all our applications by dashboard or through kubectl commands.<\/li>\n<\/ul>\n<p>Let&#8217;s deploy a Nginx application by kubectl command line interface:<br \/>\n<strong style=\"font-size: 1rem;\">Steps:<\/strong><\/p>\n<ol>\n<li><strong>kubectl run <\/strong>command will create a deployment\n<p>[js] kubectl run my-nginx &#8211;image=nginx &#8211;replicas=1 &#8211;port=80 [\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-41803\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-deployment.png\" alt=\"nginx deployment\" width=\"749\" height=\"64\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-deployment.png 749w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-deployment-300x25.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-deployment-624x53.png 624w\" sizes=\"(max-width: 749px) 100vw, 749px\" \/><\/li>\n<li>Checking if our pod is up and running\n<p>[js]kubectl get pods[\/js]<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-41811\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-get-pod.png\" alt=\"nginx get pod\" width=\"697\" height=\"91\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-get-pod.png 697w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-get-pod-300x39.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/nginx-get-pod-624x81.png 624w\" sizes=\"(max-width: 697px) 100vw, 697px\" \/><\/li>\n<li>If we want to go inside our node, just type <em>minikube\u00a0ssh<\/em>\n<p>[js]minikube ssh[\/js]<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-41855 aligncenter\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-ssh.png\" alt=\"minikube ssh\" width=\"891\" height=\"394\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-ssh.png 891w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-ssh-300x132.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/minikube-ssh-624x275.png 624w\" sizes=\"(max-width: 891px) 100vw, 891px\" \/><\/p>\n<p>Now, we can see that <i>&#8220;my-nginx&#8221;<\/i>\u00a0 deployment has been created and can be seen on our dashboard<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-41820\" src=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/deployment-dashboard.png\" alt=\"deployment dashboard\" width=\"1366\" height=\"768\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2016\/10\/deployment-dashboard.png 1366w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/deployment-dashboard-300x168.png 300w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/deployment-dashboard-1024x575.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2016\/10\/deployment-dashboard-624x350.png 624w\" sizes=\"(max-width: 1366px) 100vw, 1366px\" \/><\/p>\n<p>With the above steps, you can now setup minikube and test out your application locally instead of <a title=\"DevOps in AWS\" href=\"http:\/\/www.tothenew.com\/devops-aws\">running on servers<\/a> or cloud.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes is one of the best orchestration tools for managing containerized applications. Features of Kubernetes: 1. Open Source 2. Support for multiple OS (Run anywhere) 3. Production Readiness In this blog, we are going to set up Kubernetes\u00a0on our local environment through Minikube. Minikube supports Kubernetes features such as: DNS (Domain Name System) NodePorts and [&hellip;]<\/p>\n","protected":false},"author":919,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":7},"categories":[2348,1],"tags":[4143,4142,3965,4141],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/41735"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/919"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=41735"}],"version-history":[{"count":0,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/41735\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=41735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=41735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=41735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}