Alisson Machado
07 November 2018

Minikube: Kubernetes em Ambiente de Desenvolvimento

Kubernetes é um assunto muito falado hoje em dia, mas tão importante quanto saber fazer a instalação é saber fazer o uso da ferramenta, sendo assim, nesse post vou explicar como a gente faz o download do minikube, que é a versão do Kubernetes para ambientes de desenvolvimento e testes, com o objetivo de conhecer a tecnologia antes de implementar em produção. Todos os comandos abaixo estou rodando no meu notebook que é um Ubuntu 18.04. Instalando o Minikube:

sudo wget https://github.com/kubernetes/minikube/releases/download/v0.30.0/minikube-linux-amd64 -O /usr/local/bin/minikube

sudo chmod +x /usr/local/bin/minikube

Instalando o comando Kubectl:
sudo wget https://storage.googleapis.com/kubernetes-release/release/v1.12.2/bin/linux/amd64/kubectl -O /usr/local/bin/kubectl

sudo chmod +x /usr/local/bin/kubectl
O comando kubectl serve para fazer a administração do seu cluster de kubernetes, nele que vamos gerenciar os namespaces, pods, ingress e etc. Para iniciar o minikube digite o comando
alisson@alisson-avell:~$ minikube start

Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Downloading Minikube ISO
 170.78 MB / 170.78 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading kubeadm v1.10.0
Downloading kubelet v1.10.0
Finished Downloading kubelet v1.10.0
Finished Downloading kubeadm v1.10.0
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

Lembrando que é necessário ter o VirtualBox instalado. Agora que o minikube já iniciou, vamos ver o ip em que a máquina virtual está respondendo:
alisson@alisson-avell:~$ minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
Veja que no meu caso está em: 192.168.99.100, esse ip pode mudar de máquina para máquina. Ao iniciar o minikube, automaticamente ele configura o arquivo:
alisson@alisson-avell:~$ cat .kube/config

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /home/alisson/.minikube/ca.crt
    server: https://192.168.99.100:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /home/alisson/.minikube/client.crt
    client-key: /home/alisson/.minikube/client.key
Nesse arquivo temos o ip e os certificados para fazer a administração do cluster. Vamos habilitar também o ingress para pode fazer com que o nosso minikube consiga responder por vários nomes no mesmo ip:
alisson@alisson-avell:~$ minikube addons enable ingress
ingress was successfully enabled
Para testar se a conectividade está ok, execute o seguinte comando:
alisson@alisson-avell:~$ kubectl get namespaces
NAME          STATUS    AGE
default       Active    1h
kube-public   Active    1h
kube-system   Active    1h
Caso a saída seja parecida com a mostrada acima, está tudo ok. Agora vamos criar um novo namespace e fazer o deploy de uma aplicação.
alisson@alisson-avell:~$ kubectl create namespace alisson
namespace "alisson" created

Agora com o namespace criado vamos fazer um deploy:
alisson@alisson-avell:~$ kubectl --namespace=alisson run python -ti --port=8080 --image=alissonmenezes/python_app:v1 -l app=python
O comando acima vai executar a aplicação a partir de uma imagem do dockerhub, chamada python_app, com a tag v1, no repositório alissonmenezes. para ver se a aplicação foi feito o deploy com sucesso execute o comando:
alisson@alisson-avell:~$ kubectl --namespace=alisson get pods
NAME                      READY     STATUS    RESTARTS   AGE
python-7889c7c88d-vtbw7   1/1       Running   0          1m
Agora vamos criar um service para apontar a porta 80 do kubernetes para a 8080 dessa aplicação:
alisson@alisson-avell:~$ kubectl --namespace=alisson create service clusterip python --tcp=80:8080
service "python" created
Agora precisamos fazer a criação do ingress, para apontar o nome: python.alissonmachado.com.br para essa aplicação em execução. No caso do ingress, não temos um comando específico para fazer a criação dele, então vou criar um arquivo no formato yaml e executar o comando create. arquivo: python__ingress.yml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: python
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: python.alissonmachado.com.br
    http:
      paths:
      - path: /
        backend:
          serviceName: python
          servicePort: 80
Criando o ingress:
alisson@alisson-avell:~$ kubectl --namespace=alisson create -f python_ingress.yml 
ingress "python" created
Agora edite o /etc/hosts da sua máquina, colocando a seguinte entrada:
vim /etc/hosts

192.168.99.100  python.alissonmachado.com.br

E acesse no navegador: python.alissonmachado.com.br que já deve estar tudo funcionando =)