Minikube: Kubernetes em Ambiente de Desenvolvimento

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 efetivo da ferramenta, sendo assim, nesse post vou explicar como fazer o download do minikube, que é a versão do Kubernetes utilizado em 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/

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 seguinte 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 é192.168.99.100, lembre-se que este 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 fazer com que o nosso minikube consiga responder por vários nomes no mesmo endereço IP:

alisson@alisson-avell:~$ minikube addons enable ingress
ingress was successfully enabled

Para testar se a conectividade está correta, 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:

alisson@alisson-avell:~$ kubectl create namespace alisson
namespace "alisson" created

Agora com o namespace criado, vamos fazer um deploy de uma aplicação:

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 verificar se o deploy da aplicação foi realizado com sucesso, execute o seguinte 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 =)

CURSOSCONSULTORIA    CONTATO

Anterior Socket em Python

About author

Alisson Machado
Alisson Machado 19 posts

Alisson Menezes, atua como Gerente de T.I, 9 anos de experiência em projetos FOSS (Free and Open Source Software) e Python. Formação em Análise de Sistemas pela FMU e cursando MBA em BigData pela FIA, possui certificações LPI1, LPI2 e SUSE CLA, LPI DevOps e Exim - DevOps Professional. Autor dos cursos Python Fundamentals, Python for Sysadmins, MongoDB for Developers/DBAs, DevSecOps, Co-Autor do Infraestrutura Ágil e Docker da 4Linux e palestrantes em eventos como FISL, TDC e Python Brasil. É entusiasta das mais diversas áreas em T.I como Segurança, Bancos de dados NoSQL, DataScience mas tem como foco DevOps e Automação.

View all posts by this author →

Você pode gostar também

Desenvolvimento

Curso MongoDB Presencial em São Paulo | 4Linux

Bancos de dados são a base dos projetos de desenvolvimento Web. Muitos desenvolvedores estão voltando sua atenção para o MongoDB, um banco de dados sem esquema que é popular para uma

Desenvolvimento

Por que aprender Python?

Dizem que se alguém quer trabalhar no Google, o caminho mais simples é aprender Python. Será este o único motivo? De fato, a linguagem Python é intensivamente usada pelo Google.

DevOps

Diferenças entre integração, entrega e implantação contínua

Continuous Integration (Integração Continua), Continuous Delivery (Entrega Continua) e Continuous Deployment (Implantação Continua) são práticas DevOps muito populares nos últimos anos, mas o que são e as diferenças entre elas