Você está vendo a documentação do Kubernetes versão: v1.23
Kubernetes v1.23 a documentação não é mais mantida ativamente. A versão que você está visualizando no momento é uma cópia estática. Para obter a documentação atualizada, consulte última versão.
Olá, Minikube!
Este tutorial mostra como executar uma aplicação exemplo no Kubernetes utilizando o Minikube e o Katacoda. O Katacoda disponibiliza um ambiente Kubernetes gratuito e acessível via navegador.
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
-
Clique no botão abaixo para iniciar o terminal do Katacoda.
minikube start
.
-
Abra o painel do Kubernetes em um navegador:
minikube dashboard
-
Apenas no ambiente do Katacoda: Na parte superior do terminal, clique em Preview Port 30000.
Criando um Deployment
Um Pod 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 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.
-
Usando o comando
kubectl create
para criar um Deployment que gerencia um Pod. O Pod executa um contêiner baseado na imagem docker disponibilizada.kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
-
Visualizando 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
-
Visualizando 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
-
Visualizando os eventos do cluster:
kubectl get events
-
Visualizando a configuração do
kubectl
:kubectl config view
kubectl
, veja o kubectl overview.
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 Kubernetes.
-
Expondo 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
k8s.gcr.io/echoserver
"escuta" apenas na porta TCP 8080. Se você usoukubectl expose
para expor uma porta diferente, os clientes não conseguirão se conectar a essa outra porta. -
Visualizando 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 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 comandominikube service
. -
Executar o comando a seguir:
minikube service hello-node
-
(Apenas no ambiente do Katacoda) Clicar no sinal de mais e então clicar em Select port to view on Host 1.
-
(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ê digitaria30369
.
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 complementos que podem ser habilitados, desabilitados e executados no ambiente Kubernetes local.
-
Listando 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
-
Habilitando um complemento, por exemplo,
metrics-server
:minikube addons enable metrics-server
A saída será semelhante a:
metrics-server was successfully enabled
-
Visualizando os Pods e os Serviços 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
-
Desabilitando o complemento
metrics-server
: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:
kubectl delete service hello-node
kubectl delete deployment hello-node
(Opcional) Pare a máquina virtual (VM) do Minikube:
minikube stop
(Opcional) Remova a VM do Minikube:
minikube delete
Próximos passos
- Aprender mais sobre Deployment objects.
- Aprender mais sobre Deploying applications.
- Aprender mais sobre Service objects.