Olá, Minikube!
Este tutorial demonstra como executar uma aplicação exemplo no Kubernetes utilizando o minikube. O tutorial fornece uma imagem de contêiner que utiliza o NGINX para repetir todas as requisições.
Objetivos
- Instalar uma aplicação exemplo no minikube.
- Executar a aplicação.
- Visualizar os logs da aplicação.
Antes de você começar
Este tutorial assume que você já tem uma instância do minikube
configurada.
Veja minikube start para instruções
de como instalar.
Você também irá precisar instalar o kubectl
.
Veja instalando ferramentas para instruções de como
instalar.
Criando um cluster do minikube
minikube start
Abra o painel (dashboard)
Abra o painel (dashboard) do Kubernetes. Você pode fazer isso de duas formas distintas:
Abra um novo terminal e rode o comando:
# Inicie um novo terminal e deixe este comando rodando.
minikube dashboard
Agora, retorne para o terminal onde você executou o comando minikube start
.
Nota:
O comando dashboard
habilita o complemento do painel e abre o proxy no navegador
padrão. Você pode criar recursos do Kubernetes no painel, como Deployment e
Service.
Se você estiver executando num ambiente com o usuário root, veja Abrir o Painel com URL.
Por padrão, o painel só é acessível pela rede virtual interna do Kubernetes. O
comando dashboard
cria um proxy temporário para tornar o painel acessível por
fora da rede virtual do Kubernetes.
Para parar o proxy, utilize o comando Ctrl+C
para encerrar o processo.
Após o término do comando, o painel permanece executando no cluster do Kubernetes.
Você pode executar o comando dashboard
novamente para criar outro proxy para
acessar o painel.
Se você não deseja que o minikube abra um navegador para você, rode o comando
dashboard
com a opção de linha de comando --url
. O minikube irá imprimir
uma URL que você poderá abrir no navegador de sua preferência.
Abra um novo terminal e rode o comando:
# Inicie um novo terminal e deixe este comando rodando.
minikube dashboard --url
Agora, retorne para o terminal onde você executou o comando minikube start
.
Criando um Deployment
Um Pod do Kubernetes consiste em um ou mais contêineres agrupados para fins de administração e gerenciamento de rede. O Pod deste tutorial possui apenas um contêiner. Um Deployment do Kubernetes verifica a integridade do seu Pod e reinicia o contêiner do Pod caso este seja finalizado. Deployments são a maneira recomendada de gerenciar a criação e escalonamento dos Pods.
Usando o comando
kubectl create
para criar um Deployment que gerencia um Pod. O Pod executa um contêiner baseado na imagem do Docker disponibilizada.kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.4
Visualize o Deployment:
kubectl get deployments
A saída será semelhante a:
NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 1m
Visualize o Pod:
kubectl get pods
A saída será semelhante a:
NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
Visualize os eventos do cluster:
kubectl get events
Visualize a configuração do
kubectl
:kubectl config view
Criando um Serviço
Por padrão, um Pod só é acessível utilizando o seu endereço IP interno no cluster
Kubernetes. Para dispobiblilizar o contêiner hello-node
fora da rede virtual do
Kubernetes, você deve expor o Pod como um
Service do Kubernetes.
Exponha o Pod usando o comando
kubectl expose
:kubectl expose deployment hello-node --type=LoadBalancer --port=8080
O parâmetro
--type=LoadBalancer
indica que você deseja expor o seu serviço fora do cluster Kubernetes.A aplicação dentro da imagem de teste escuta apenas na porta TCP 8080. Se você usou
kubectl expose
para expor uma porta diferente, os clientes não conseguirão se conectar a essa outra porta.Visualize o serviço que você acabou de criar:
kubectl get services
A saída será semelhante a:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
Em provedores de nuvem que fornecem serviços de balanceamento de carga para o Kubernetes, um IP externo seria provisionado para acessar o serviço. No minikube, o tipo
LoadBalancer
torna o serviço acessível por meio do comandominikube service
.Execute o comando a seguir:
minikube service hello-node
Este comando abre uma janela do navegador que serve o seu aplicativo e exibe o retorno da requisição ao aplicativo.
Habilitando Complementos (addons)
A ferramenta minikube inclui um conjunto integrado de complementos que podem ser habilitados, desabilitados e executados no ambiente Kubernetes local.
Liste os complementos suportados atualmente:
minikube addons list
A saída será semelhante a:
addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled helm-tiller: disabled ingress: disabled ingress-dns: disabled logviewer: disabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled storage-provisioner-gluster: disabled
Habilite um complemento, por exemplo,
metrics-server
:minikube addons enable metrics-server
A saída será semelhante a:
The 'metrics-server' addon is enabled
Visualize o Pod e o Service que você acabou de criar:
kubectl get pod,svc -n kube-system
A saída será semelhante a:
NAME READY STATUS RESTARTS AGE pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m pod/metrics-server-67fb648c5 1/1 Running 0 26s pod/etcd-minikube 1/1 Running 0 34m pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-apiserver-minikube 1/1 Running 0 34m pod/kube-controller-manager-minikube 1/1 Running 0 34m pod/kube-proxy-rnlps 1/1 Running 0 34m pod/kube-scheduler-minikube 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
Desabilite o complemento
metrics-server
:minikube addons disable metrics-server
A saída será semelhante a:
metrics-server was successfully disabled
Limpeza
Agora você pode remover todos os recursos criados no seu cluster:
kubectl delete service hello-node
kubectl delete deployment hello-node
Encerre o cluster do minikube:
minikube stop
(Opcional) Apague a máquina virtual (VM) do minikube:
# Opcional
minikube delete
Se você desejar utilizar o minikube novamente para aprender mais sobre o Kubernetes, você não precisa apagar a VM.
Próximos passos
- Aprenda mais sobre objetos Deployment.
- Aprenda mais sobre implantar aplicações.
- Aprenda mais sobre objetos Service.