1 - Usando kubectl para criar um Deployment
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.