Objetivos
- Saiba mais sobre implantações de aplicativos.
- Implante seu primeiro aplicativo no Kubernetes com o kubectl.
Deployments do Kubernetes
Assim que o seu cluster Kubernetes estiver em execução você pode implantar seu aplicativo contêinerizado nele. Para fazer isso, você precisa criar um objeto Deployment do Kubernetes. O Deployment instrui o Kubernetes sobre como criar e atualizar instâncias do seu aplicativo. Depois de criar um Deployment, a camada de gerenciamento do Kubernetes aloca as instâncias do aplicativo incluídas nesse Deployment para serem executadas em nós individuais do cluster.
Depois que as instâncias do aplicativo são criadas, o controlador de Deployment do Kubernetes monitora continuamente essas instâncias. Se o nó em que uma instância está alocada ficar indisponível ou for excluído, o controlador de Deployment substituirá a instância por uma instância em outro nó no cluster. Isso fornece um mecanismo de autocorreção para lidar com falhas ou manutenção da máquina.
Em um mundo de pré-orquestração, os scripts de instalação eram utilizados para iniciar aplicativos, mas não permitiam a recuperação de falha da máquina. Ao criar suas instâncias de aplicativo e mantê-las em execução entre nós, os Deployments do Kubernetes fornecem uma abordagem fundamentalmente diferente para o gerenciamento de aplicativos.
Resumo:
- Deployments
- Kubectl
O objeto Deployment é responsável por criar e atualizar instâncias de seu aplicativo
Implante seu primeiro aplicativo no Kubernetes
Você pode criar e gerenciar uma implantação usando a interface de linha de comando do Kubernetes, o kubectl. O kubectl usa a API do Kubernetes para interagir com o cluster. Neste módulo, você aprenderá os comandos Kubectl mais comuns necessários para criar Deployments que executam seus aplicativos em um cluster Kubernetes.
Quando você cria um Deployment, você precisa especificar a imagem de contêiner para seu aplicativo e o número de réplicas que deseja executar. Você pode alterar essas informações posteriormente, atualizando seu Deployment; os Módulos 5 e 6 do bootcamp explicam como você pode dimensionar e atualizar seus Deployments.
Os aplicativos precisam ser empacotados em um dos formatos de contêiner suportados para serem implantados no Kubernetes
Para criar seu primeiro Deployment, você usará o aplicativo hello-node empacotado em um contêiner que utiliza o NGINX para repetir todas as requisições. (Se você ainda não tentou criar o aplicativo hello-node e implantá-lo usando um contêiner, você pode fazer isso primeiro seguindo as instruções do tutorial Olá, Minikube!).
Você precisará ter o kubectl instalado também. Se você precisar de instruções de instalação, veja instalando ferramentas.
Agora que você já sabe o que são Deployments, vamos implantar nosso primeiro aplicativo!
Noções básicas do kubectl
O formato comum de um comando kubectl é: kubectl ação recurso
Isto executa a ação especificada (como por exemplo create,
describe ou delete) no recurso
especificado (por exemplo, node ou deployment).
Você pode utilizar --help
após o subcomando
para obter informações adicionais sobre parâmetros permitidos
(por exemplo, kubectl get nodes --help
).
Verifique que o kubectl está configurado para comunicar-se com seu
cluster rodando o comando kubectl version
.
Certifique-se de que o kubectl está instalado e que você consegue ver as versões do cliente e do servidor.
Para visualizar os nós do cluster, execute o comando kubectl
get nodes
.
Você verá os nós disponíveis. Posteriormente, o Kubernetes irá escolher onde implantar nossa aplicação baseado nos recursos disponíveis nos nós.
Implante uma aplicação
Vamos implantar nossa primeira aplicação no Kubernetes utilizando
o comando kubectl create deployment
. Precisaremos
fornecer o nome do Deployment e a localização da imagem de contêiner
do aplicativo (inclua a URL completa do repositório para images
hospedadas fora do Docker Hub).
kubectl create deployment kubernetes-bootcamp
--image=gcr.io/google-samples/kubernetes-bootcamp:v1
Excelente! Você acabou de implantar sua primeira aplicação através da criação de um Deployment. Este comando efetuou algumas ações para você:
- buscou um nó utilizável onde a instância da aplicação pode ser executada (temos somente um nó disponível)
- alocou a aplicação para rodar naquele nó
- configurou o cluster para realocar a instância em um novo nó sempre que necessário
Para listar seus Deployments existentes, utilize o comando
kubectl get deployments
:
kubectl get deployments
Podemos observar que há um Deployment rodando uma única instância da sua aplicação. A instância está executando dentro de um contêiner no seu nó.
Visualize o aplicativo
Pods que rodam dentro do Kubernetes estão rodando em uma rede privada e isolada.
Por padrão, eles são visíveis a outros Pods e Services dentro do mesmo
cluster do Kubernetes, mas não de fora daquela rede.
Ao usarmos kubectl
, estamos interagindo através de um
endpoint de API para comunicar-nos com a nossa aplicação.
Iremos discutir outras opções de como expor sua aplicação fora do cluster do Kubernetes no Módulo 4.
O comando kubectl
pode criar um proxy que encaminha
comunicações para dentro da rede privada que engloba todo o cluster. O
proxy pode ser encerrado utilizando a sequência control-C e não irá
imprimir nenhum tipo de saída enquanto estiver rodando.
Você precisa abrir uma segunda janela do terminal para executar o proxy.
kubectl proxy
Agora temos uma conexão entre nosso host (o terminal online) e o cluster do Kubernetes. O proxy habilita acesso direto à API através destes terminais.
Você pode ver todas as APIs hospedadas através do endpoint do
proxy. Por exemplo, podemos obter a versão diretamente através da API
utilizando o comando curl
:
curl http://localhost:8001/version
kubectl proxy
que você iniciou acima está
rodando no segundo terminal.O servidor da API irá automaticamente criar um endpoint para cada Pod, baseado no nome do Pod, que também estará acessível através do proxy.
Primeiro, precisaremos obter o nome do Pod. Iremos armazená-lo na variável de ambiente POD_NAME:
export POD_NAME=$(kubectl get pods -o go-template --template
'{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Nome do Pod: $POD_NAME
Você pode acessar o Pod através da API encaminhada, rodando o comando:
curl
http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME:8080/proxy/
Para que o novo Deployment esteja acessível sem utilizar o proxy, um Service é requerido. Isto será explicado nos próximos módulos.
Assim que você finalizar este tutorial, vá para Visualizando Pods e Nós.