russell.ballestrini.net/content/2017-03-21-minikube.rst

181 lines
4.2 KiB
ReStructuredText

Minikube
########
:date: 2017-03-21 12:38
:author: Russell Ballestrini
:tags: Guide, Kubernetes
:slug: minikube
:status: published
Minikube allows you to run a self contained, single node, Kubernetes cluster on your workstation.
Once installed and configured, you may use ``kubectl`` to interact with it, just like a production Kubernetes cluster.
.. contents::
Reference: https://kubernetes.io/docs/getting-started-guides/minikube/
install
==========
Requirements: Virtualbox
install kubectl
-----------------
Reference: https://kubernetes.io/docs/tasks/kubectl/install/
.. code-block:: bash
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin
install minikube
----------------------
Reference: https://github.com/kubernetes/minikube/releases
.. code-block:: bash
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.17.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
start
==========
Supported hypervisors: virtualbox, vmwarefusion, kvm, xhyve
.. code-block:: bash
minikube start --vm-driver=virtualbox
If this is your first time starting minikube, it will perform the following:
.. code-block:: bash
Starting local Kubernetes cluster...
Starting VM...
Downloading Minikube ISO 89.24 MB / 89.24 MB [==============================================] 100.00% 0s
SSH-ing files into VM...
Setting up certs...
Starting cluster components...
Connecting to cluster...
Setting up kubeconfig...
Kubectl is now configured to use the cluster
Also, you should see a new VM running in VirtualBox, like this:
.. image:: /uploads/2017/virtualbox-running-minikube.png
:width: 350
:alt: virtualbox running minikube.
To verify that `kubectl` is configured to use minikube look at the config file (`~/.kube/config`).
Also try running:
* `kubectl get nodes`
* `kubectl get services`
You can also connect to the VirtualBox guest using SSH to have a look around.
In my case the Minikube VM was assigned ``192.168.99.100``.
.. code-block:: bash
ssh -i ~/.minikube/machines/minikube/id_rsa docker@192.168.99.100
You can see all the containers running with:
.. code-block:: bash
docker ps
ps aux
Exit out, you really don't need to interact at this level
Instead we will treat Minikube as a "real" Kubernetes cluster and only use the ``kubectl`` tool.
demo
==========
create a deployment
----------------------
In this example we create an echoserver cluster.
.. code-block:: bash
kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
this command will create -
1 ``deployment``:
.. code-block:: bash
kubectl get deployments
1 ``replicaset``:
.. code-block:: bash
kubectl get replicasets
1 ``pod``:
.. code-block:: bash
kubectl get pods
To make the echoserver accessible externally, you need to ``expose`` the ``deployment``, like this:
.. code-block:: bash
kubectl expose deployment hello-minikube --type=NodePort
The expose command creates -
1 ``service``:
.. code-block:: bash
kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.0.0.1 <none> 443/TCP 2d
hello-minikube 10.0.0.225 <nodes> 8080:31136/TCP 58m
To access the service, you connect to the Minikube's IP address on the exposed port.
In my case the Minikube VirtualBox IP is ``192.168.99.100`` and the exposed port is ``31136`` as listed above.
The minikube tool has a shortcut for this info, try:
.. code-block:: bash
minikube service hello-minikube --url
http://192.168.99.100:31136
Toss this into a web browser on your local machine and it should echo back!
scale a deployment
-----------------------
Scale up the ``deployment`` named ``hello-minikube`` by setting the number of ``replicas`` to ``3``:
.. code-block:: bash
kubectl scale deployment hello-minikube --replicas=3
verify:
.. code-block:: bash
kubectl get deployments
kubectl get pods
delete a deployment
-----------------------
trash this demo (delete the ``deployment``, ``replicaset``, ``pods``, and ``service``):
.. code-block:: bash
kubectl delete deployment hello-minikube