website/content/pt-br/docs/tutorials/hello-minikube.md

316 lines
9.4 KiB
Markdown

---
title: Olá, Minikube!
content_type: tutorial
weight: 5
card:
name: tutorials
weight: 10
---
<!-- overview -->
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.
## {{% heading "objectives" %}}
* Instalar uma aplicação exemplo no minikube.
* Executar a aplicação.
* Visualizar os logs da aplicação.
## {{% heading "prerequisites" %}}
Este tutorial assume que você já tem uma instância do `minikube` configurada.
Veja [minikube start](https://minikube.sigs.k8s.io/docs/start/) para instruções
de como instalar.
Você também irá precisar instalar o `kubectl`.
Veja [instalando ferramentas](/pt-br/docs/tasks/tools/#kubectl) para instruções de como
instalar.
<!-- lessoncontent -->
## Criando um cluster do minikube
```shell
minikube start
```
## Abra o painel (_dashboard_)
Abra o painel (_dashboard_) do Kubernetes. Você pode fazer isso de duas formas
distintas:
{{< tabs name="dashboard" >}}
{{% tab name="Abra um navegador" %}}
Abra um **novo** terminal e rode o comando:
```shell
# Inicie um novo terminal e deixe este comando rodando.
minikube dashboard
```
Agora, retorne para o terminal onde você executou o comando `minikube start`.
{{< note >}}
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](#open-dashboard-with-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.
{{< /note >}}
{{% /tab %}}
{{% tab name="Copie e cole a URL" %}}
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:
```shell
# Inicie um novo terminal e deixe este comando rodando.
minikube dashboard --url
```
Agora, retorne para o terminal onde você executou o comando `minikube start`.
{{% /tab %}}
{{< /tabs >}}
## Criando um Deployment
Um [*Pod*](/docs/concepts/workloads/pods/) 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*](/docs/concepts/workloads/controllers/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.
1. 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.
```shell
kubectl create deployment hello-node --image=registry.k8s.io/echoserver:1.4
```
1. Visualize o Deployment:
```shell
kubectl get deployments
```
A saída será semelhante a:
```
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
```
1. Visualize o Pod:
```shell
kubectl get pods
```
A saída será semelhante a:
```
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
```
1. Visualize os eventos do cluster:
```shell
kubectl get events
```
1. Visualize a configuração do `kubectl`:
```shell
kubectl config view
```
{{< note >}}
Para mais informações sobre o comando `kubectl`, consulte
[visão geral do kubectl](/docs/reference/kubectl/).
{{< /note >}}
## 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*](/docs/concepts/services-networking/service/) do Kubernetes.
1. Exponha o Pod usando o comando `kubectl expose`:
```shell
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.
1. Visualize o serviço que você acabou de criar:
```shell
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 comando
`minikube service`.
1. Execute o comando a seguir:
```shell
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 {{< glossary_tooltip text="complementos" term_id="addons" >}}
que podem ser habilitados, desabilitados e executados no ambiente Kubernetes local.
1. Liste os complementos suportados atualmente:
```shell
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
```
2. Habilite um complemento, por exemplo, `metrics-server`:
```shell
minikube addons enable metrics-server
```
A saída será semelhante a:
```
The 'metrics-server' addon is enabled
```
3. Visualize o Pod e o Service que você acabou de criar:
```shell
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
```
4. Desabilite o complemento `metrics-server`:
```shell
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:
```shell
kubectl delete service hello-node
kubectl delete deployment hello-node
```
Encerre o cluster do minikube:
```shell
minikube stop
```
(Opcional) Apague a máquina virtual (VM) do minikube:
```shell
# Opcional
minikube delete
```
Se você desejar utilizar o minikube novamente para aprender mais sobre o Kubernetes,
você não precisa apagar a VM.
## {{% heading "whatsnext" %}}
* Aprenda mais sobre [objetos Deployment](/docs/concepts/workloads/controllers/deployment/).
* Aprenda mais sobre [implantar aplicações](/docs/tasks/run-application/run-stateless-application-deployment/).
* Aprenda mais sobre [objetos Service](/docs/concepts/services-networking/service/).