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 --classic
Uma 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 40G
Depois de receber a confirmação da inicialização da microk8s-vm, execute o comando
multipass shell microk8s-vm
para acessar a instância da VM.multipass shell microk8s-vm
Depois 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 --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
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 multipass
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 40G
Depois de receber a confirmação de inicialização da microk8s-vm, execute o comando
multipass shell microk8s-vm
para inserir a instância da VM.multipass shell microk8s-vm
Nesse 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 --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
Agora você está pronto para instalar complementos no cluster.
Preparar o cluster
Para ver o status dos complementos instalados no cluster, execute o comando de status do 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-ready
Observe 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: disabled
Na 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-dashboard
e 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 alias
para criar um aliasmicrok8s.kubectl
parakubectl
. Essa etapa simplifica o uso.sudo snap alias microk8s.kubectl kubectl
A 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 nodes
O 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 wide
O 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.5
A 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 wide
O 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-namespaces
O resultado é semelhante ao do exemplo a seguir. Observe que há três namespaces no cluster. São eles os namespaces padrão,
container-registry
ekube-system
. Aqui você pode ver as instânciasregistry
,kube-dns
ekubernetes-dashboard
instaladas. 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=influxGrafana
Agora 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=nginx
O resultado é semelhante ao do exemplo a seguir:
deployment.apps/nginx created
Para buscar as informações sobre sua implantação, execute
kubectl get deployments
:sudo kubectl get deployments
O 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 18s
A implantação criou um pod. Para buscar informações sobre os pods do seu cluster, execute o comando
kubectl get pods
:sudo kubectl get pods
O 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 wide
O 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
wget
no 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/nginx
O resultado é semelhante ao do exemplo a seguir:
deployment.apps/nginx scaled
O 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 get
e passe novamente o parâmetro-o wide
:sudo kubectl get pods -o wide
O 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.