Minikube é uma ferramenta que facilita executar o Kubernetes localmente, executando um cluster de Kubernetes com um único nó.



É muito bom para testar funcionalidades, aprender a trabalhar com o Kubernetes ou passar raiva tentando interpretar um tutorial de instalação de uma ferramenta do Kubernetes no seu Minikube.



Vamos ver nesse artigo também o Helm, que é um gerenciador de pacotes do Kubernetes. Imagine um apt-get, npm, pip, etc… só que para instalar pacotes de recursos pré-configurados.



Instalando o Minikube



Para instalar no OSX:



Você pode usar o Homebrew, que é o modo mais fácil: brew cask install minikube



Ou instalar via linha de comando mesmo:



curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.30.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/



Para instalar no Linux:



curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.30.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/



Requisitos



  • kubectl



macOS





Linux



  • VirtualBox ou KVM



  • É possível rodar o Minikube com a opção a —-vm-driver=none, rodando os componentes do Kubernetes direto no host, ao invés de uma VM. Docker será necessário. Se você usar essa opção, configure uma Bridge Network para o docker. Senão, ele poderá mudar entre as reinicializações de rede, causando perda de conectividade ao cluster.



minikube start



Nota: para alguns exemplos abaixo, como deployar um app, talvez seja necessário uma alocação melhor de recursos para o minikube suportar, se estiver tendo problema, pare o minikube minikube stop e reinicie ele com mais memória: minikube start --memory=4096 --cpus=4





Para poder trabalhar com o daemon do docker no seu mac/linux, use o comando docker-env:



minikube docker-env





Basta rodar: eval $(minikube docker-env)



Para acessar o dashboard do Kuberntes: minikube dashboard



Instalando o Helm



OSX:



brew install kubernetes-helm



Linux:



curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh



Para iniciar o helm, basta digitar: helm init



Caso ocorra algum problema, tente usar com essas flags:



helm init --service-account default --client-only



Agora é só ver os pacotes disponíveis com o comando helm search





Se essa é primeira vez que você está tendo contato com Kubernetes, seu contexto do kubectl já vai estar correto, caso contrário (você já tenha usado o kubectl alguma vez em outro cluster) rode o comando a seguir para mudar o contexto para o minikube:



kubectl config use-context minikube





Acessando a VM



Basta digitarminikube ssh





Caso queira mais detalhes sobre o que está acontecendo ao digitar esse comando, basta dar um exit e rodar novamente o comando com a seguinte flag:



minikube ssh -v 7



Habilitando o Ingress



O ingress é um conjunto de regras que permite que as conexões de entrada cheguem nos services do cluster do Kubernetes, já que normalmente, o cluster do kubernetes é protegido por firewall da Internet. Os recursos do Kubernetes, como servicespods, e etc, têm IPs somente roteáveis pela rede do cluster e não estão diretamente acessíveis fora do cluster.



Basta rodar minikube addons enable ingress e voilá, tudo funcionando. Caso queira ver todos os addons rodando: minikube addons list





Visualizando namespaces



É possível visualizar no painel do Kubernetes digitando minikube dashboard e clicando em Namespaces no menu lateral





Via linha de comando, os namespaces estão disponíveis através do comandokubectl get namespaces --show-labels:





Criando namespaces de desenvolvimento, QA e produção



{

"kind": "Namespace",

"apiVersion": "v1",

"metadata": {

"name": "dev",

"labels": {

"name": "dev"

}

}

}






Basta salvar o arquivo e rodar kubectl create -f namespace-dev.json e você terá seu cluster de desenvolvimento.



{

"kind": "Namespace",

"apiVersion": "v1",

"metadata": {

"name": "qa",

"labels": {

"name": "qa"

}

}

}



Para QA: kubectl create -f namespace-qa.json



{

"kind": "Namespace",

"apiVersion": "v1",

"metadata": {

"name": "prod",

"labels": {

"name": "prod"

}

}

}



E por fim, em produção: kubectl create -f namespace-prod.json



Caso você rode novamente o comando de listar os namespaces, verá que agora eles estão criados: kubectl get namespaces --show-labels





Deployando uma aplicação no cluster



Vamos fazer um deploy de um encurtador de url direto no minikube. O código fonte pode ser conferido aqui.



Primeiro vamos criar um deploy para o banco de dados (Postgres), com o arquivo abaixo:



apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: postgres

spec:

template:

metadata:

labels:

app: postgres

spec:

containers:

- name: postgres

image: postgres:9.6.5

ports:

- containerPort: 5432

env:

- name: POSTGRES_DB

value: url_shortener_db

- name: POSTGRES_USER

value: user

- name: POSTGRES_PASSWORD

value: mysecretpassword



kubectl create -f deployment-postgres-minikube.yaml





Para verificar se foi criado corretamente, basta digitar:



kubectl get pods --selector=app=postgres





Para ver se o pod está rodando, basta executar:



kubectl exec -it postgres-74bdd6978d-k8f9p bash



Uma vez dentro do seu pod, você pode rodar o comando para ver se o Postgres está funcionando corretamente:



psql -U user -d url_shortener_db





Atenção: pode ser necessário rodar su — postgresantes, caso você esteja como root, pois o postgresql não permite acesso como usuário root.



Agora vamos expor o pod, através de um serviço:



apiVersion: v1

kind: Service

metadata:

name: postgres

spec:

ports:

- port: 5432

selector:

app: postgres



kubectl create -f service-postgres-minikube.yaml





Para checar que o serviço está de pé: 



kubectl get services



Agora que já temos o banco de dados, é hora de deployar a aplicação:



apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: webapp

spec:

template:

metadata:

labels:

app: webapp

spec:

containers:

- image: xcoulon/go-url-shortener:0.1.0

name: go-url-shortener

env:

- name: POSTGRES_HOST

value: postgres

- name: POSTGRES_PORT

value: 5432

- name: POSTGRES_DATABASE

value: url_shortener_db

- name: POSTGRES_USER

value: user

- name: POSTGRES_PASSWORD

value: mysecretpassword

ports:

- containerPort: 8080



kubectl create -f deployment-webapp-minikube.yaml





Para verificar o pod do webapp rodando execute o comando a seguir



kubectl get all -l app=webapp



Com isso, podemos ver que o status do pod está Running :)
Agora vamos dar uma olhada nos logs:



kubectl logs po/webapp-78c4f886f5-wtrl9



Você pode encontrar uma explicação mais detalhada aqui (em inglês).



O Minikube é um projeto muito legal, se você estiver disposto a ter um pouco de paciência, pois nem sempre será rápido!



RECADO FINAL! Ter um cluster de Kubernetes para aprender, explorar ferramentas ou mesmo tentar desenvolver Controllers custa caro, então o Minikube se torna uma ótima alternativa ao prover um ambiente de exploração a zero custo.



Autor: Guilherme Esteves


Social

Contact us

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Opportunities

Our content

Social

Contact us

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Opportunities

Our content

Social

Contact us

Almeda Campinas 802, CJ 12, Jardim Paulista,

São Paulo - SP, 01404-001

Opportunities

Our content