|
| 1 | +--- |
| 2 | +title: Olá, Minikube! |
| 3 | +content_type: tutorial |
| 4 | +weight: 5 |
| 5 | +menu: |
| 6 | + main: |
| 7 | + title: "Iniciar" |
| 8 | + weight: 10 |
| 9 | + post: > |
| 10 | + <p>Pronto para meter a mão na massa? Vamos criar um cluster Kubernetes simples e executar uma aplicação exemplo.</p> |
| 11 | +card: |
| 12 | + name: tutorials |
| 13 | + weight: 10 |
| 14 | +--- |
| 15 | + |
| 16 | +<!-- overview --> |
| 17 | + |
| 18 | +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. |
| 19 | + |
| 20 | +{{< note >}} |
| 21 | +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/). |
| 22 | +{{< /note >}} |
| 23 | + |
| 24 | +## Objetivos |
| 25 | + |
| 26 | +* Instalar uma aplicação exemplo no minikube. |
| 27 | +* Executar a aplicação. |
| 28 | +* Visualizar os logs da aplicação. |
| 29 | + |
| 30 | +## Antes de você iniciar |
| 31 | + |
| 32 | +Este tutorial disponibiliza uma imagem de contêiner que utiliza o NGINX para retornar todas as requisições. |
| 33 | + |
| 34 | +<!-- lessoncontent --> |
| 35 | + |
| 36 | +## Criando um cluster do Minikube |
| 37 | + |
| 38 | +1. Clique no botão abaixo **para iniciar o terminal do Katacoda**. |
| 39 | + |
| 40 | + {{< kat-button >}} |
| 41 | + |
| 42 | +{{< note >}} |
| 43 | +Se você instalou o Minikube localmente, execute: `minikube start`. |
| 44 | +{{< /note >}} |
| 45 | + |
| 46 | +2. Abra o painel do Kubernetes em um navegador: |
| 47 | + |
| 48 | + ```shell |
| 49 | + minikube dashboard |
| 50 | + ``` |
| 51 | + |
| 52 | +3. Apenas no ambiente do Katacoda: Na parte superior do terminal, clique em **Preview Port 30000**. |
| 53 | + |
| 54 | +## Criando um Deployment |
| 55 | + |
| 56 | +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. |
| 57 | + |
| 58 | +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. |
| 59 | + |
| 60 | + ```shell |
| 61 | + kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 |
| 62 | + ``` |
| 63 | + |
| 64 | +2. Visualizando o Deployment: |
| 65 | + |
| 66 | + ```shell |
| 67 | + kubectl get deployments |
| 68 | + ``` |
| 69 | + |
| 70 | + A saída será semelhante a: |
| 71 | + |
| 72 | + ``` |
| 73 | + NAME READY UP-TO-DATE AVAILABLE AGE |
| 74 | + hello-node 1/1 1 1 1m |
| 75 | + ``` |
| 76 | + |
| 77 | +3. Visualizando o Pod: |
| 78 | + |
| 79 | + ```shell |
| 80 | + kubectl get pods |
| 81 | + ``` |
| 82 | + |
| 83 | + A saída será semelhante a: |
| 84 | + |
| 85 | + ``` |
| 86 | + NAME READY STATUS RESTARTS AGE |
| 87 | + hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m |
| 88 | + ``` |
| 89 | + |
| 90 | +4. Visualizando os eventos do cluster: |
| 91 | + |
| 92 | + ```shell |
| 93 | + kubectl get events |
| 94 | + ``` |
| 95 | + |
| 96 | +5. Visualizando a configuração do `kubectl`: |
| 97 | + |
| 98 | + ```shell |
| 99 | + kubectl config view |
| 100 | + ``` |
| 101 | + |
| 102 | +{{< note >}} |
| 103 | +Para mais informações sobre o comando `kubectl`, veja o [kubectl overview](/docs/reference/kubectl/overview/). |
| 104 | +{{< /note >}} |
| 105 | + |
| 106 | +## Criando um serviço |
| 107 | + |
| 108 | +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. |
| 109 | + |
| 110 | +1. Expondo o Pod usando o comando `kubectl expose`: |
| 111 | + |
| 112 | + ```shell |
| 113 | + kubectl expose deployment hello-node --type=LoadBalancer --port=8080 |
| 114 | + ``` |
| 115 | + |
| 116 | + O parâmetro `--type=LoadBalancer` indica que você deseja expor o seu serviço fora do cluster Kubernetes. |
| 117 | + |
| 118 | + A aplicação dentro da imagem `k8s.gcr.io/echoserver` "escuta" apenas na porta TCP 8080. Se você usou |
| 119 | + `kubectl expose` para expor uma porta diferente, os clientes não conseguirão se conectar a essa outra porta. |
| 120 | + |
| 121 | +2. Visualizando o serviço que você acabou de criar: |
| 122 | + |
| 123 | + ```shell |
| 124 | + kubectl get services |
| 125 | + ``` |
| 126 | + |
| 127 | + A saída será semelhante a: |
| 128 | + |
| 129 | + ``` |
| 130 | + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
| 131 | + hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s |
| 132 | + kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m |
| 133 | + ``` |
| 134 | + |
| 135 | + 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`. |
| 136 | + |
| 137 | +3. Executar o comando a seguir: |
| 138 | + |
| 139 | + ```shell |
| 140 | + minikube service hello-node |
| 141 | + ``` |
| 142 | + |
| 143 | +4. (**Apenas no ambiente do Katacoda**) Clicar no sinal de mais e então clicar em **Select port to view on Host 1**. |
| 144 | + |
| 145 | +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`. |
| 146 | + |
| 147 | +Isso abre uma janela do navegador, acessa o seu aplicativo e mostra o retorno da requisição. |
| 148 | + |
| 149 | +## Habilitando Complementos (addons) |
| 150 | + |
| 151 | +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. |
| 152 | + |
| 153 | +1. Listando os complementos suportados atualmente: |
| 154 | + |
| 155 | + ```shell |
| 156 | + minikube addons list |
| 157 | + ``` |
| 158 | + |
| 159 | + A saída será semelhante a: |
| 160 | + |
| 161 | + ``` |
| 162 | + addon-manager: enabled |
| 163 | + dashboard: enabled |
| 164 | + default-storageclass: enabled |
| 165 | + efk: disabled |
| 166 | + freshpod: disabled |
| 167 | + gvisor: disabled |
| 168 | + helm-tiller: disabled |
| 169 | + ingress: disabled |
| 170 | + ingress-dns: disabled |
| 171 | + logviewer: disabled |
| 172 | + metrics-server: disabled |
| 173 | + nvidia-driver-installer: disabled |
| 174 | + nvidia-gpu-device-plugin: disabled |
| 175 | + registry: disabled |
| 176 | + registry-creds: disabled |
| 177 | + storage-provisioner: enabled |
| 178 | + storage-provisioner-gluster: disabled |
| 179 | + ``` |
| 180 | + |
| 181 | +2. Habilitando um complemento, por exemplo, `metrics-server`: |
| 182 | + |
| 183 | + ```shell |
| 184 | + minikube addons enable metrics-server |
| 185 | + ``` |
| 186 | + |
| 187 | + A saída será semelhante a: |
| 188 | + |
| 189 | + ``` |
| 190 | + metrics-server was successfully enabled |
| 191 | + ``` |
| 192 | + |
| 193 | +3. Visualizando os Pods e os Serviços que você acabou de criar: |
| 194 | + |
| 195 | + ```shell |
| 196 | + kubectl get pod,svc -n kube-system |
| 197 | + ``` |
| 198 | + |
| 199 | + A saída será semelhante a: |
| 200 | + |
| 201 | + ``` |
| 202 | + NAME READY STATUS RESTARTS AGE |
| 203 | + pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m |
| 204 | + pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m |
| 205 | + pod/metrics-server-67fb648c5 1/1 Running 0 26s |
| 206 | + pod/etcd-minikube 1/1 Running 0 34m |
| 207 | + pod/influxdb-grafana-b29w8 2/2 Running 0 26s |
| 208 | + pod/kube-addon-manager-minikube 1/1 Running 0 34m |
| 209 | + pod/kube-apiserver-minikube 1/1 Running 0 34m |
| 210 | + pod/kube-controller-manager-minikube 1/1 Running 0 34m |
| 211 | + pod/kube-proxy-rnlps 1/1 Running 0 34m |
| 212 | + pod/kube-scheduler-minikube 1/1 Running 0 34m |
| 213 | + pod/storage-provisioner 1/1 Running 0 34m |
| 214 | + |
| 215 | + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
| 216 | + service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s |
| 217 | + service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m |
| 218 | + service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s |
| 219 | + service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s |
| 220 | + ``` |
| 221 | + |
| 222 | +4. Desabilitando o complemento `metrics-server`: |
| 223 | + |
| 224 | + ```shell |
| 225 | + minikube addons disable metrics-server |
| 226 | + ``` |
| 227 | + |
| 228 | + A saída será semelhante a: |
| 229 | + |
| 230 | + ``` |
| 231 | + metrics-server was successfully disabled |
| 232 | + ``` |
| 233 | + |
| 234 | +## Removendo os recursos do Minikube |
| 235 | + |
| 236 | +Agora você pode remover todos os recursos criados no seu cluster: |
| 237 | + |
| 238 | +```shell |
| 239 | +kubectl delete service hello-node |
| 240 | +kubectl delete deployment hello-node |
| 241 | +``` |
| 242 | +(**Opcional**) Pare a máquina virtual (VM) do Minikube: |
| 243 | + |
| 244 | +```shell |
| 245 | +minikube stop |
| 246 | +``` |
| 247 | +(**Opcional**) Remova a VM do Minikube: |
| 248 | + |
| 249 | +```shell |
| 250 | +minikube delete |
| 251 | +``` |
| 252 | + |
| 253 | +## Próximos passos |
| 254 | + |
| 255 | +* Aprender mais sobre [Deployment objects](/docs/concepts/workloads/controllers/deployment/). |
| 256 | +* Aprender mais sobre [Deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/). |
| 257 | +* Aprender mais sobre [Service objects](/docs/concepts/services-networking/service/). |
| 258 | + |
0 commit comments