Exercício – Explorar a funcionalidade de um cluster do Kubernetes
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:
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.
Transfira e instale a versão mais recente do Multipass para Windows a partir do GitHub.
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
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.
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.
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
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
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.
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.
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
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 kubectl
o .
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.
Execute o comando
snap alias
para criar um aliasmicrok8s.kubectl
parakubectl
. 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.
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 okubectl 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
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
ekube-system
são a predefinição. Aqui, pode ver as instâncias doregistry
,kube-dns
ekubernetes-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.
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
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
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.
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>
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.
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.
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.