--- title: Olá, Minikube! content_type: tutorial weight: 5 menu: main: title: "Iniciar" weight: 10 post: >

Pronto para meter a mão na massa? Vamos criar um cluster Kubernetes simples e executar uma aplicação exemplo.

card: name: tutorials weight: 10 --- Este tutorial mostra como executar uma aplicação exemplo no Kubernetes utilizando o [Minikube](https://minikube.sigs.k8s.io) e o [Katacoda](https://www.katacoda.com). O Katacoda disponibiliza um ambiente Kubernetes gratuito e acessível via navegador. {{< note >}} Você também consegue seguir os passos desse tutorial instalando o Minikube localmente. Para instruções de instalação, acesse: [iniciando com minikube](https://minikube.sigs.k8s.io/docs/start/). {{< /note >}} ## Objetivos * Instalar uma aplicação exemplo no minikube. * Executar a aplicação. * Visualizar os logs da aplicação. ## Antes de você iniciar Este tutorial disponibiliza uma imagem de contêiner que utiliza o NGINX para retornar todas as requisições. ## Criando um cluster do Minikube 1. Clique no botão abaixo **para iniciar o terminal do Katacoda**. {{< kat-button >}} {{< note >}} Se você instalou o Minikube localmente, execute: `minikube start`. {{< /note >}} 2. Abra o painel do Kubernetes em um navegador: ```shell minikube dashboard ``` 3. Apenas no ambiente do Katacoda: Na parte superior do terminal, clique em **Preview Port 30000**. ## Criando um Deployment Um [*Pod*](/docs/concepts/workloads/pods/) Kubernetes consiste em um ou mais contêineres agrupados para fins de administração e gerenciamento de rede. O Pod desse tutorial possui apenas um contêiner. Um [*Deployment*](/docs/concepts/workloads/controllers/deployment/) Kubernetes verifica a saúde do seu Pod e reinicia o contêiner do Pod caso o mesmo 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 docker disponibilizada. ```shell kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 ``` 2. Visualizando 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 ``` 3. Visualizando 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 ``` 4. Visualizando os eventos do cluster: ```shell kubectl get events ``` 5. Visualizando a configuração do `kubectl`: ```shell kubectl config view ``` {{< note >}} Para mais informações sobre o comando `kubectl`, veja o [kubectl overview](/docs/reference/kubectl/overview/). {{< /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 [*serviço*](/docs/concepts/services-networking/service/) Kubernetes. 1. Expondo 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 `k8s.gcr.io/echoserver` "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. 2. Visualizando 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 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 443/TCP 23m ``` Em provedores de Cloud 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`. 3. Executar o comando a seguir: ```shell minikube service hello-node ``` 4. (**Apenas no ambiente do Katacoda**) Clicar no sinal de mais e então clicar em **Select port to view on Host 1**. 5. (**Apenas no ambiente do Katacoda**) Observe o número da porta com 5 dígitos exibido ao lado de `8080` na saída do serviço. Este número de porta é gerado aleatoriamente e pode ser diferente para você. Digite seu número na caixa de texto do número da porta e clique em **Display Port**. Usando o exemplo anterior, você digitaria `30369`. Isso abre uma janela do navegador, acessa o seu aplicativo e mostra o retorno da requisição. ## Habilitando Complementos (addons) O 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. Listando 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. Habilitando um complemento, por exemplo, `metrics-server`: ```shell minikube addons enable metrics-server ``` A saída será semelhante a: ``` metrics-server was successfully enabled ``` 3. Visualizando os Pods e os Serviços 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 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 8083/TCP,8086/TCP 26s ``` 4. Desabilitando o complemento `metrics-server`: ```shell minikube addons disable metrics-server ``` A saída será semelhante a: ``` metrics-server was successfully disabled ``` ## Removendo os recursos do Minikube Agora você pode remover todos os recursos criados no seu cluster: ```shell kubectl delete service hello-node kubectl delete deployment hello-node ``` (**Opcional**) Pare a máquina virtual (VM) do Minikube: ```shell minikube stop ``` (**Opcional**) Remova a VM do Minikube: ```shell minikube delete ``` ## Próximos passos * Aprender mais sobre [Deployment objects](/docs/concepts/workloads/controllers/deployment/). * Aprender mais sobre [Deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/). * Aprender mais sobre [Service objects](/docs/concepts/services-networking/service/).