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.