Exercício – Explorar a funcionalidade de um cluster do Kubernetes

Concluído

Existem várias opções disponíveis ao executar o Kubernetes localmente. Lembre-se de que pode instalar o Kubernetes em computadores ou máquinas virtuais (VMs) ou utilizar uma solução baseada na cloud, como o Azure Kubernetes Service (AKS).

O seu objetivo neste exercício é explorar uma instalação do Kubernetes e explorar um cluster de nó único. Neste exercício, você aprenderá a configurar e instalar um ambiente MicroK8s que é fácil de configurar e derrubar. Em seguida, você implanta um serviço Kubernetes e o expande para várias instâncias para hospedar um site.

Nota

Este exercício é opcional e inclui os passos que mostram como eliminar e desinstalar o software e os recursos que utilizará no exercício.

Tenha em atenção que existem outras opções como o MiniKube, e o suporte do Kubernetes no Docker, para fazer o mesmo.

O que é o MicroK8s?

O MicroK8s é uma opção para implementar um cluster do Kubernetes de nó único como um pacote único para dispositivos IoT (Internet das Coisas) e estações de trabalho de destino. Canonical, o criador do Ubuntu Linux, originalmente desenvolvido e atualmente mantém MicroK8s.

Pode instalar o MicroK8s no Linux, Windows e macOS. No entanto, as instruções de instalação são ligeiramente diferentes para cada sistema operativo. Escolha a opção mais adequada para o seu ambiente.

Instalar o MicroK8s no Linux

A instalação de Linux do MicroK8s é a opção de instalação com o menor número de passos. Mude para uma janela de terminal e execute os comandos nas seguintes instruções:

  1. Instale a aplicação snap do MicroK8s. Este passo pode demorar alguns minutos a concluir, dependendo da velocidade da ligação à Internet e computador.

    sudo snap install microk8s --classic
    

    Uma instalação bem-sucedida apresenta a seguinte mensagem.

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

Está pronto para instalar suplementos no cluster.

Instalar o MicroK8s no Windows

Para executar o MicroK8s no Windows, utilize o Multipass. O Multipass é um gestor de VMs leve para Linux, Windows e macOS.

  1. Transfira e instale a versão mais recente do Multipass para Windows a partir do GitHub.

  2. Numa consola de comandos, execute o comando de iniciação do Multipass para configurar e executar a imagem microk8s-vm. Este passo pode demorar alguns minutos a concluir, dependendo da velocidade da ligação à Internet e computador.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. Depois de receber a confirmação de inicialização para microk8s-vm, execute o multipass shell microk8s-vm comando para acessar a instância da VM.

    multipass shell microk8s-vm
    

    Uma vez que o multipass está funcionando, você pode acessar a VM do Ubuntu para hospedar seu cluster e instalar o MicroK8s.

  4. Instale a aplicação snap do MicroK8s. Este passo pode demorar alguns minutos a concluir, dependendo da velocidade da ligação à Internet e computador.

    sudo snap install microk8s --classic
    

    Uma instalação bem-sucedida mostra a seguinte mensagem:

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

Está pronto para instalar suplementos no cluster.

Instalar o MicroK8s no macOS

Para executar o MicroK8s no macOS, utilize o Multipass. O Multipass é um gestor de VMs leve para Linux, Windows e macOS.

  1. Tem duas opções para instalar o Multipass no macOS. Transfira e instale a versão mais recente do Multipass para macOS a partir do GitHub ou, para instalar o Multipass com o comando brew cask install multipass, utilize o Homebrew.

    brew install --cask multipass
    
  2. Numa consola de comandos, execute o comando de iniciação do Multipass para configurar e executar a imagem microk8s-vm. Este passo pode demorar alguns minutos a concluir, dependendo da velocidade da ligação à Internet e computador.

    multipass launch --name microk8s-vm --memory 4G --disk 40G
    
  3. Depois de receber a confirmação de inicialização para microk8s-vm, execute o multipass shell microk8s-vm comando para inserir a instância da VM.

    multipass shell microk8s-vm
    

    Neste ponto, você pode acessar a VM do Ubuntu para hospedar seu cluster. Ainda tem de instalar o MicroK8s. Siga estes passos.

  4. Instale a aplicação snap do MicroK8s. Este passo pode demorar alguns minutos a concluir, dependendo da velocidade da ligação à Internet e computador.

    sudo snap install microk8s --classic
    

    Uma instalação bem-sucedida mostra a seguinte mensagem:

    2020-03-16T12:50:59+02:00 INFO Waiting for restart...
    microk8s v1.17.3 from Canonical✓ installed
    

Está pronto para instalar suplementos no cluster.

Preparar o cluster

Para visualizar o status dos complementos instalados no cluster, execute o status comando no MicroK8s. Estes suplementos fornecem vários serviços, alguns dos quais abordou anteriormente. Por exemplo, a funcionalidade de DNS.

  1. Para verificar o estado da instalação, execute o comando microk8s.status --wait-ready.

    sudo microk8s.status --wait-ready
    

    Observe que há vários complementos desabilitados no cluster. Não se preocupe com os suplementos que não reconhece.

    microk8s is running
    addons:
    cilium: disabled
    dashboard: disabled
    dns: disabled
    fluentd: disabled
    gpu: disabled
    helm3: disabled
    helm: disabled
    ingress: disabled
    istio: disabled
    jaeger: disabled
    juju: disabled
    knative: disabled
    kubeflow: disabled
    linkerd: disabled
    metallb: disabled
    metrics-server: disabled
    prometheus: disabled
    rbac: disabled
    registry: disabled
    storage: disabled
    
  2. Na lista, você precisa habilitar os complementos DNS, Painel e Registro. Aqui estão os objetivos de cada complemento:

    Suplementos Propósito
    DNS Implementa o serviço coreDNS.
    Dashboard Implementa o serviço kubernetes-dashboard e vários serviços que suportam a funcionalidade. É uma interface de utilizador baseada na Web e de fins gerais para clusters do Kubernetes.
    Registo Implementa um registo privado e vários serviços que suportam a funcionalidade. Para armazenar contentores privados, utilize este registo.

    Para instalar os suplementos, execute o seguinte comando.

    sudo microk8s.enable dns dashboard registry
    

Agora você está pronto para acessar seu cluster com kubectlo .

Explorar o cluster do Kubernetes

O MicroK8s fornece uma versão do kubectl que pode utilizar para interagir com o novo cluster do Kubernetes. Esta cópia do kubectl permite-lhe ter uma instalação paralela de outra instância do kubectl ao nível do sistema sem afetar a funcionalidade.

  1. Execute o comando snap alias para criar um alias microk8s.kubectl para kubectl. Este passo simplifica a utilização.

    sudo snap alias microk8s.kubectl kubectl
    

    A seguinte saída aparece quando o comando é concluído com êxito:

    Added:
      - microk8s.kubectl as kubectl
    

Apresentar informações do nó de cluster

Lembre-se de que o cluster do Kubernetes existe com base em planos de controlo e de nós de trabalho. Vamos explorar o novo cluster para ver o que está instalado.

  1. Verifique os nós que estão em execução no cluster.

    Sabe que o MicroK8s é uma instalação de cluster de nó único, por isso espera ver apenas um nó. No entanto, tenha em atenção que este nó é o plano de controlo e um nó de trabalho no cluster. Confirme esta configuração ao executar o comando kubectl get nodes. Para recuperar informações sobre todos os recursos no cluster, execute o kubectl get comando:

    sudo kubectl get nodes
    

    O resultado é semelhante ao exemplo a seguir, que mostra que há apenas um nó no cluster com o nome microk8s-vm. Observe que o nó está em um estado Pronto . O estado preparado indica que o plano de controlo pode agendar cargas de trabalho neste nó.

    NAME          STATUS   ROLES    AGE   VERSION
    microk8s-vm   Ready    <none>   35m   v1.17.3
    

    Pode obter mais informações do recurso específico pedido. Por exemplo, vamos supor que você precise encontrar o endereço IP do nó. Para obter informações adicionais do servidor de API, execute o -o wide parâmetro:

    sudo kubectl get nodes -o wide
    

    O resultado é semelhante ao exemplo a seguir. Observe que agora você pode ver o endereço IP interno do nó, o sistema operacional em execução no nó, a versão do kernel e o tempo de execução do contêiner.

    NAME          STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
    microk8s-vm   Ready    <none>   36m   v1.17.3   192.168.56.132   <none>        Ubuntu 18.04.4 LTS   4.15.0-88-generic   containerd://1.2.5
    
  2. O próximo passo é explorar os serviços em execução no cluster. Tal como acontece com os nós, para localizar informações sobre os serviços em execução no cluster, execute o comando kubectl get.

    sudo kubectl get services -o wide
    

    O resultado é semelhante ao exemplo a seguir, mas observe que apenas um serviço está listado. Você instalou complementos no cluster anteriormente e esperaria ver esses serviços também.

    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
    kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   37m   <none>
    

    A razão para a listagem de serviço único é que o Kubernetes usa um conceito chamado namespaces para dividir logicamente um cluster em vários clusters virtuais.

    Para buscar todos os serviços em todos os namespaces, passe o --all-namespaces parâmetro:

    sudo kubectl get services -o wide --all-namespaces
    

    O resultado é semelhante ao exemplo a seguir. Tenha em atenção que tem três nomes de espaços no seu cluster. Os nomes de espaços container-registry e kube-system são a predefinição. Aqui, pode ver as instâncias do registry, kube-dns e kubernetes-dashboard que instalou. Há também serviços de suporte que foram instalados juntamente com alguns dos complementos.

    NAMESPACE            NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE   SELECTOR
    container-registry   registry                    NodePort    10.152.183.36    <none>        5000:32000/TCP           28m   app=registry
    default              kubernetes                  ClusterIP   10.152.183.1     <none>        443/TCP                  37m   <none>
    kube-system          dashboard-metrics-scraper   ClusterIP   10.152.183.130   <none>        8000/TCP                 28m   k8s-app=dashboard-metrics-scraper
    kube-system          heapster                    ClusterIP   10.152.183.115   <none>        80/TCP                   28m   k8s-app=heapster
    kube-system          kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   28m   k8s-app=kube-dns
    kube-system          kubernetes-dashboard        ClusterIP   10.152.183.132   <none>        443/TCP                  28m   k8s-app=kubernetes-dashboard
    kube-system          monitoring-grafana          ClusterIP   10.152.183.88    <none>        80/TCP                   28m   k8s-app=influxGrafana
    kube-system          monitoring-influxdb         ClusterIP   10.152.183.232   <none>        8083/TCP,8086/TCP        28m   k8s-app=influxGrafana
    

    Agora que pode ver os serviços em execução no cluster, pode agendar uma carga de trabalho no nó de trabalho.

Instalar um servidor Web num cluster

Queremos agendar um servidor Web no cluster para servir um site para os seus clientes. Pode escolher entre várias opções. Para este exemplo, você usa NGINX.

Lembre-se de que pode utilizar ficheiros de manifesto de pod para descrever os seus pods, conjuntos de réplicas e implementações para definir cargas de trabalho. Como você não cobriu esses arquivos em detalhes, você executa kubectl para passar diretamente as informações para o servidor de API.

Apesar de a utilização do kubectl ser útil, a melhor prática é utilizar ficheiros de manifesto. Os ficheiros de manifesto permitem-lhe efetuar rollforward ou reverter implementações com facilidade no seu cluster. Esses arquivos também ajudam a documentar a configuração de um cluster.

  1. Para criar a sua implementação do NGINX, execute o comando kubectl create deployment. Especifique o nome da implementação e da imagem de contentor para criar uma única instância do pod.

    sudo kubectl create deployment nginx --image=nginx
    

    O resultado é semelhante ao seguinte exemplo:

    deployment.apps/nginx created
    
  2. Para obter as informações sobre sua implantação, execute kubectl get deployments:

    sudo kubectl get deployments
    

    O resultado é semelhante ao exemplo a seguir. Tenha em atenção que o nome da implementação corresponde ao nome que lhe atribuiu e que uma implementação com este nome está num estado preparado e disponível.

    NAME    READY   UP-TO-DATE   AVAILABLE   AGE
    nginx   1/1     1            1           18s
    
  3. A implementação criou um pod. Para obter informações sobre os pods do cluster, execute o kubectl get pods comando:

    sudo kubectl get pods
    

    O resultado é semelhante ao exemplo a seguir. Observe que o nome do pod é um valor gerado prefixado com o nome da implantação, e o pod tem um status de Running.

    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-86c57db685-dj6lz   1/1     Running   0          33s
    

Testar a instalação do site

Teste a instalação do NGINX ao ligar ao servidor Web através do endereço IP do pod.

  1. Para encontrar o endereço do pod, passe o -o wide parâmetro:

    sudo kubectl get pods -o wide
    

    O resultado é semelhante ao exemplo a seguir. Tenha em atenção que o comando devolve o endereço IP do nó e o nome do nó em que a carga de trabalho está agendada.

    NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE          NOMINATED NODE   READINESS GATES
    nginx-86c57db685-dj6lz   1/1     Running   0          4m17s   10.1.83.10   microk8s-vm   <none>           <none>
    
  2. Para acessar o site, execute wget no IP listado anteriormente:

    wget <POD_IP>
    

    O resultado é semelhante ao seguinte exemplo:

    --2020-03-16 13:34:17--  http://10.1.83.10/
    Connecting to 10.1.83.10:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 612 [text/html]
    Saving to: 'index.html'
    
    index.html                                    100%[==============================================================================================>]     612  --.-KB/s    in 0s
    
    2020-03-16 13:34:17 (150 MB/s) - 'index.html' saved [612/612]
    

Dimensionar a implementação de um servidor Web num cluster

Imagine que repara num aumento súbito de utilizadores a aceder ao seu site e o site começa a falhar devido à carga. Pode implementar mais instâncias do site no seu cluster e dividir a carga pelas instâncias.

Para dimensionar o número de réplicas na sua implementação, execute o comando kubectl scale. Especificamos o número de réplicas necessárias e o nome da implementação.

  1. Para dimensionar o total de pods NGINX para três, execute o kubectl scale comando:

    sudo kubectl scale --replicas=3 deployments/nginx
    

    O resultado é semelhante ao seguinte exemplo:

    deployment.apps/nginx scaled
    

    O comando de dimensionamento permite-lhe aumentar ou reduzir a contagem de instâncias.

  2. Para verificar o número de pods em execução, execute o kubectl get comando e passe novamente o -o wide parâmetro:

    sudo kubectl get pods -o wide
    

    O resultado é semelhante ao exemplo a seguir. Agora pode ver três pods em execução, cada um com um endereço IP exclusivo.

    NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE          NOMINATED NODE   READINESS GATES
    nginx-86c57db685-dj6lz   1/1     Running   0          7m57s   10.1.83.10   microk8s-vm   <none>           <none>
    nginx-86c57db685-lzrwp   1/1     Running   0          9s      10.1.83.12   microk8s-vm   <none>           <none>
    nginx-86c57db685-m7vdd   1/1     Running   0          9s      10.1.83.11   microk8s-vm   <none>           <none>
    ubuntu@microk8s-vm:~$
    

Você precisaria aplicar várias outras configurações ao cluster para expor efetivamente seu site como um site voltado para o público. Por exemplo, inclua a instalação de endereços IP de um balanceador de carga e nó de mapeamento. Este tipo de configuração faz parte de aspetos avançados que iremos explorar no futuro. No resumo, há instruções se você optar por desinstalar e limpar sua VM.