Exercício – Explorar a funcionalidade de um cluster do Kubernetes
Várias opções estão disponíveis ao executar o Kubernetes localmente. Você pode instalar o Kubernetes em computadores físicos ou VMs ou usar uma solução baseada em nuvem, como o AKS (Serviço de Kubernetes do Azure).
Neste exercício, sua meta é explorar uma instalação do Kubernetes com um cluster de nó único. Neste exercício, você aprenderá a configurar e instalar um ambiente do MicroK8s que é fácil de configurar e desativar. Em seguida, você implanta um serviço do Kubernetes e o dimensiona para várias instâncias para hospedar um site.
Observação
Este exercício é opcional e inclui etapas que mostram como excluir e desinstalar o software e os recursos que você usará no exercício.
Tenha em mente que há outras opções para fazer o mesmo, como o suporte ao Kubernetes e ao MiniKube no Docker.
O que é o MicroK8s?
O MicroK8s é uma opção para implantar um cluster de nó único do Kubernetes como pacote único em estações de trabalho de destino e dispositivos IoT (Internet das Coisas). A Canonical, criadora do Ubuntu Linux, desenvolveu o MicroK8s originalmente e ainda o mantém.
Você pode instalar o MicroK8s no Linux, no Windows e no macOS. No entanto, as instruções de instalação são ligeiramente diferentes para cada sistema operacional. Escolha a opção que melhor se adapta ao seu ambiente.
Instalar o MicroK8s no Linux
A instalação do Linux do MicroK8s é a opção de instalação com o menor número de etapas. Alterne para uma janela de terminal e execute os comandos das seguintes instruções:
Instale o aplicativo de ajuste MicroK8s. Essa etapa pode levar alguns minutos para ser concluída, dependendo da velocidade da sua conexão com a Internet e da área de trabalho.
sudo snap install microk8s --classicUma instalação bem-sucedida mostra a mensagem a seguir.
2020-03-16T12:50:59+02:00 INFO Waiting for restart... microk8s v1.17.3 from Canonical✓ installed
Agora você está pronto para instalar complementos no cluster.
Instalar o MicroK8s no Windows
Para executar o MicroK8s no Windows, use o Multipass. O Multipass é um gerenciador de VMs leve para Linux, Windows e macOS.
Baixe e instale a versão mais recente do Multipass para Windows do GitHub.
Em um console de comando, execute o comando de inicialização do Multipass para configurar e executar a imagem microk8s-vm. Essa etapa pode levar alguns minutos para ser concluída, dependendo da velocidade da sua conexão com a Internet e da área de trabalho.
multipass launch --name microk8s-vm --memory 4G --disk 40GDepois de receber a confirmação da inicialização da microk8s-vm, execute o comando
multipass shell microk8s-vmpara acessar a instância da VM.multipass shell microk8s-vmDepois que a multipassagem estiver funcionando, você poderá acessar a VM do Ubuntu para hospedar seu cluster e instalar o MicroK8s.
Instale o aplicativo de ajuste MicroK8s. Essa etapa pode levar alguns minutos para ser concluída, dependendo da velocidade da sua conexão com a Internet e da área de trabalho.
sudo snap install microk8s --classicUma 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
Agora você está pronto para instalar complementos no cluster.
Instalar o MicroK8s no macOS
Para executar o MicroK8s no macOS, use o Multipass. O Multipass é um gerenciador de VMs leve para Linux, Windows e macOS.
Você tem duas opções para instalar o Multipass no macOS. Baixe e instale a última versão do Multipass para macOS do GitHub ou use o Homebrew para instalar o Multipass com o comando
brew cask install multipass.brew install --cask multipassEm um console de comando, execute o comando de inicialização do Multipass para configurar e executar a imagem microk8s-vm. Essa etapa pode levar alguns minutos para ser concluída, dependendo da velocidade da sua conexão com a Internet e da área de trabalho.
multipass launch --name microk8s-vm --memory 4G --disk 40GDepois de receber a confirmação de inicialização da microk8s-vm, execute o comando
multipass shell microk8s-vmpara inserir a instância da VM.multipass shell microk8s-vmNesse ponto, você poderá acessar a VM do Ubuntu que para hospedar o seu cluster. Você ainda precisa instalar o MicroK8s. Siga estas etapas.
Instale o aplicativo de ajuste MicroK8s. Essa etapa pode levar alguns minutos para ser concluída, dependendo da velocidade da sua conexão com a Internet e da área de trabalho.
sudo snap install microk8s --classicUma 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
Agora você está pronto para instalar complementos no cluster.
Preparar o cluster
Para ver o status dos complementos instalados no cluster, execute o comando status no MicroK8s. Esses complementos fornecem vários serviços, alguns dos quais você abordou anteriormente. Um exemplo é a funcionalidade do DNS.
Para verificar o status da instalação, execute o comando
microk8s.status --wait-ready.sudo microk8s.status --wait-readyObserve que há vários complementos desabilitados em seu cluster. Não se preocupe com os complementos que você 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: disabledNa lista, você precisa habilitar os complementos DNS, Painel e Registro. Aqui estão as finalidades de cada complemento:
Complementos Finalidade DNS Implanta o serviço coreDNS.Painel Implanta o serviço kubernetes-dashboarde vários outros serviços que dão suporte à funcionalidade dele. É uma interface do usuário de uso geral, baseada na Web, para clusters do Kubernetes.Registro Implanta um Registro privado e vários serviços que dão suporte à funcionalidade dele. Para armazenar contêineres privados, use esse Registro. Para instalar os complementos, execute o comando a seguir.
sudo microk8s.enable dns dashboard registry
Agora estamos prontos para acessar seu cluster usando kubectl.
Explorar o cluster do Kubernetes
O MicroK8s fornece uma versão do kubectl que você pode usar para interagir com o novo cluster do Kubernetes. Essa cópia do kubectl permite que você tenha uma instalação paralela de outra instância kubectl no âmbito de todo o sistema, sem afetar a funcionalidade dela.
Execute o comando
snap aliaspara criar um aliasmicrok8s.kubectlparakubectl. Essa etapa simplifica o uso.sudo snap alias microk8s.kubectl kubectlA seguinte saída aparece quando o comando é concluído com êxito:
Added: - microk8s.kubectl as kubectl
Exibir informações sobre o nó de cluster
Lembre-se de que um cluster do Kubernetes existe fora dos painéis de controle e dos nós de trabalho. Vamos explorar o novo cluster para ver o que está instalado.
Verifique os nós que estão em execução no cluster.
Você sabe que o MicroK8s é uma instalação de cluster de nó único, portanto, você espera ver apenas um nó. Tenha em mente, contudo, que esse nó é o painel de controle e um nó de trabalho no cluster. Confirme essa configuração executando o comando
kubectl get nodes. Para recuperar informações sobre todos os recursos no seu cluster, execute o comandokubectl get:sudo kubectl get nodesO resultado é semelhante ao exemplo a seguir, que mostra a existência de apenas um nó no cluster com o nome
microk8s-vm. Observe que o nó está em um estado Pronto. O estado pronto indica que o painel de controle pode agendar cargas de trabalho nesse nó.NAME STATUS ROLES AGE VERSION microk8s-vm Ready <none> 35m v1.17.3É possível obter mais informações para o recurso específico solicitado. Por exemplo, vamos supor que você precise encontrar o endereço IP do nó. Para obter informações adicionais sobre o servidor de API, execute o parâmetro
-o wide:sudo kubectl get nodes -o wideO resultado é semelhante ao do exemplo a seguir. Observe que agora é possível ver o endereço IP interno do nó, o SO em execução no nó, a versão do kernel e o runtime de 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.5A próxima etapa é explorar os serviços em execução no cluster. Assim como ocorre com os nós, para encontrar informações sobre os serviços em execução no cluster, execute o comando
kubectl get.sudo kubectl get services -o wideO resultado é semelhante ao do exemplo a seguir, mas observe que apenas um serviço está listado. Você instalou suplementos no cluster anteriormente e espera conferir 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>O motivo da listagem de serviço único é que o Kubernetes utiliza 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 parâmetro
--all-namespaces:sudo kubectl get services -o wide --all-namespacesO resultado é semelhante ao do exemplo a seguir. Observe que há três namespaces no cluster. São eles os namespaces padrão,
container-registryekube-system. Aqui você pode ver as instânciasregistry,kube-dnsekubernetes-dashboardinstaladas. Você também verá os 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=influxGrafanaAgora que você pode ver os serviços em execução no cluster, você pode agendar uma carga de trabalho no nó de trabalho.
Instalar um servidor Web em um cluster
É interessante agendar um servidor Web no cluster para oferecer um site a seus clientes. Você pode escolher entre várias opções. Nesse exemplo, você usará o NGINX.
Lembre-se de que você pode usar arquivos de manifesto de pod para descrever seus pods, conjuntos de réplicas e implantações para definir cargas de trabalho. Como você não abordou esses arquivos em detalhes, você deverá usar kubectl para passar diretamente as informações ao servidor de API.
Embora o uso de kubectl seja útil, o uso de arquivos de manifesto é uma melhor prática. Os arquivos de manifesto permitem que você efetue roll forward ou reverta as implantações com facilidade no cluster. Esses arquivos também ajudam a documentar a configuração de um cluster.
Para criar sua implantação do NGINX, execute o comando
kubectl create deployment. Especifique o nome da implantação e a imagem de contêiner para criar somente uma instância do pod.sudo kubectl create deployment nginx --image=nginxO resultado é semelhante ao do exemplo a seguir:
deployment.apps/nginx createdPara buscar as informações sobre sua implantação, execute
kubectl get deployments:sudo kubectl get deploymentsO resultado é semelhante ao do exemplo a seguir. Observe que o nome da implantação corresponde ao nome que você forneceu a ela e que somente uma implantação com esse nome está em um estado pronto e disponível.
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 18sA implantação criou um pod. Para buscar informações sobre os pods do seu cluster, execute o comando
kubectl get pods:sudo kubectl get podsO resultado é semelhante ao do 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 Em execução.
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 conectando-se ao servidor Web usando o endereço IP do pod.
Para encontrar o endereço do pod, passe o parâmetro
-o wide:sudo kubectl get pods -o wideO resultado é semelhante ao do exemplo a seguir. Observe que o comando retorna o endereço IP e o nome do nó no qual 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>Para acessar o site, execute
wgetno IP listado antes:wget <POD_IP>O resultado é semelhante ao do exemplo a seguir:
--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 uma implantação de servidor Web em um cluster
Suponha que você observe um aumento repentino nos usuários que acessam o seu site e que ele comece a falhar devido a essa carga. Você poderá implantar mais instâncias do site em seu cluster e dividir a carga entre as instâncias.
Para escalar o número de réplicas na sua implantação, execute o comando kubectl scale. Especifique o número de réplicas de que precisa e o nome da implantação.
Para escalar o total de pods do NGINX para três, execute o comando
kubectl scale:sudo kubectl scale --replicas=3 deployments/nginxO resultado é semelhante ao do exemplo a seguir:
deployment.apps/nginx scaledO comando de dimensionamento permite que você dimensione a contagem de instâncias para cima ou para baixo.
Para verificar o número de pods em execução, execute o comando
kubectl gete passe novamente o parâmetro-o wide:sudo kubectl get pods -o wideO resultado é semelhante ao do exemplo a seguir. Observe que agora você vê três pods em execução, cada qual 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. Os exemplos incluem a instalação de um balanceador de carga e o mapeamento dos endereços IP do nó. Esse tipo de configuração faz parte dos aspectos avançados que você vai explorar futuramente. No resumo, há instruções se você optar por desinstalar e limpar sua VM.