Skip to content

Ducumentação de implantação de cluster Kubernetes realizada para a disciplina de Redes e Sistemas Distribuidos.

Notifications You must be signed in to change notification settings

Lucas-Alf/kubernetes-wiki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Tutorial para instalação do Kubernetes

Para a instalação do cluster Kubernetes foi utilizado os seguintes materiais como base:

Requisitos mínimos

É recomendado que o cluster envolva ao menos 3 maquinas, pois o Kubernetes em si também possui um custo computational para realizar a orquestração dos containers.

Master

  • Memoria: 2GB RAM
  • Processador: 2xCPU Cores

Nodos

  • Memoria: 1GB RAM
  • Processador: 1xCPU Core

Hardware utilizado

Para o desenvolvimento do cluster foram utilizadas máquinas virtuais disponibilizadas pelo LARCC.

O cluster foi composto por 4 VMs com a mesma configuração, sendo 1 Master e 2 Nodos.

Master / Nodos

  • Processador: 2xCores
  • Memória: 2GB RAM
  • Armazenamento: 20GB
  • OS: Ubuntu Server 20.04

Instalação do Kubernetes

As seguintes etapas devem ser realizadas tanto na maquina Master quanto nos Nodos como usuário administrador.

Atualizar o repositório de pacotes

sudo apt update

Desabilitar a utilização do espaço de Swap

O espaço de Swap do sistema operacional deve ser desabilitado para a instalação do Kubernetes, ao contrário podem ocorrer erros durante a execução.

swapoff -a

Verificar se existem partições de swap no fstab, caso existir devem ser removidas ou comentadas.

nano /etc/fstab

Alterar o Hostname da máquina

O Hostname da máquina será a forma como ela será identificada dentro do cluster, este nome irá aparecer no dashboard e nas consultas por nodos.

Para construir um padrão de nomenclaturas, podemos chamar a máquina Master de "kmaster" e os nodos de "knode0", "knode1", "knode2"...

nano /etc/hostname

Definir o IP como estático

Para que as maquinas do cluster não percam o seu IP caso sejam desligadas ou reiniciadas, é necessário definir o IP como estático.

Atualize o arquivo /etc/network/interfaces com uma configuração de IP estático, a formatação pode mudar dependendo da versão do Ubuntu.

Configurar o arquivo de hosts

Para que as maquinas possam se encontrar dentro do cluster, é necessário configurar o arquivo de hosts com os IPs estáticos configurados anteriormente.

  • No arquivo de hosts da maquina Master deve haver os IPs de todos os nodos.
  • Já nos nodos pode haver somente o IP da maquina master.
nano /etc/hosts

Instalar o pacote do OpenSSH-Server

sudo apt-get install openssh-server

Instalar os pacotes do Docker

O seguinte comando irá instalar Docker e todas as suas dependencies, podendo demorar um pouco.

sudo apt-get install -y docker.io

Instalar os pacotes do Curl

apt-get update && apt-get install -y apt-transport-https curl

Adicionar o repositório do kubernetes ao sistema

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update

Instalar os pacotes do kubeadm, Kubelet And Kubectl

apt-get install -y kubelet kubeadm kubectl

Configurar o Docker para utilizar o systemd como padrão

sudo nano /etc/docker/daemon.json

Adicionar o seguinte conteudo:

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

Reiniciar o serviço do docker

sudo systemctl restart docker

Reiniciar a máquina

Para garantir que as configurações realizadas no namespace e variaveis de ambiente foram aplicadas, temos que reiniciar a máquina.

sudo reboot

Pronto!

A configuração inicial do Kubernetes foi realizada, as próximas etapas serão definir uma maquina como Master, no nosso caso o "knode", e adicionar os nodos ao cluster.

Configuração do Master

As seguintes etapas devem ser realizadas somente na maquina Master.

Iniciar o cluster da maquina Master

O seguinte comando irá iniciar o cluster, altere o <ip-address-of-kmaster-vm> pelo IP da maquina master.

kubeadm init --apiserver-advertise-address=<ip-address-of-kmaster-vm> --pod-network-cidr=192.168.0.0/16

Dois resultados deste comando devem ser anotados.

  1. Os comandos para copiar o arquivo .config do cluster serão exibidos como:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. O comando utilizado para fazer os nodos se juntarem ao cluster será algo como:
kubeadm join <ip-address-of-kmaster-vm>:port --token ...

Copiar o arquivo .config do cluster

Deve ser criado um novo usuário somente para o Kubernetes neste caso.

sudo adduser k8s
usermod -aG sudo k8s

Depois troque para o novo usuário, e execute os comandos.

su k8s
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Para verificar se o cluster foi iniciado com sucesso, pode executar o seguinte comando e verificar se os pods estão sendo iniciados.

kubectl get pods -o wide -A

Instalação da rede interna entre os Pods

No comando anterior deve ser notado que todos os Pods ficaram com o status "Running" menos o "kube-dns", para resolve isso, será instalado a rede intra-pod chamada de CALICO.

kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

Após instalação, todos Pods devem ficar com o status "Running", incluindo os novos pods do CALICO.

Instalação do Kubernetes Dashboard

A instalação do Dashboard deve ser realizada antes dos outros nodos se juntarem ao cluster, ao contrário pode ocorrer do Dashboard ser instalado em um nodo, e não no Master.

git clone https://github.com/Lucas-Alf/kubernetes-dashboard-config.git
cd kubernetes-dashboard-config
kubectl apply -f alternative.yaml

Para conseguir logar no Dashboard sem senha precisamos executar:

kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard

Configuração dos nodos

As seguintes etapas devem ser realizadas somente nas máquinas nodos do cluster.

Adicionando um nodo ao cluster

Para adicionar um novo nodo ao cluster somente é necessário executar o comando sudo kubeadm join ... que foi gerado durante a instalação do cluster, na maquina nodo que deseja adicionar.

Ao executar esse comando o nodo irá automaticamente entrar na cluster, e você poderá visualiza-lo no Dashboard.

Pode demorar alguns minutos até o novo nodo ficar utilizável, pois ao entrar no cluster ele irá começar a instalar uma série de dependências no nodo, o progresso da instalação é visível no Dashboard.

Acessando o Dashboard no LARCC

Para acessar o dashboard hospedado na VM dentro do LARCC, é necessário utilizar um serviço de relay.

  1. Criar uma conta em: https://webhookrelay.com/
  2. Instalar o webhook relay na máquina master:
curl https://my.webhookrelay.com/webhookrelay/downloads/install-cli.sh | bash
  1. Criar um novo token em: https://my.webhookrelay.com/tokens
  2. Logar com token na maquina master:
relay login -k meutoken -s meusecret
  1. Iniciar um PortForward em um segundo terminal
kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8001:80 --address 0.0.0.0
  1. Inicializar o Relay:
relay connect localhost:8001
  1. Acessar a URL gerada pelo Relay.

Instalando o LoadBalancer MetalLB

Habilitar o modo strict ARP.

kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system

Instalar o MetalLB

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml

Criar o arquivo de configuração do MetalLB

metallb-config.yaml

Alterar o range de IPs da configuração conforme o disponibilizado em aula.

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.20.202-192.168.20.204

Aplicar a configuração no cluster

kubectl apply -f metallb-config.yaml

Rodando uma aplicação de demonstração no cluster

Realizar o download da imagem de demonstração

git clone https://github.com/dockersamples/example-voting-app.git
cd example-voting-app

Aplicar a imagem no cluster

kubectl create namespace vote
kubectl create -f k8s-specifications/

Expor os novos serviços no load balancer

kubectl expose deployment vote -n vote --port=5000 --target-port=80 --name=vote-loadbalancer --type=LoadBalancer
kubectl expose deployment result -n vote --port=5001 --target-port=80 --name=result-loadbalancer --type=LoadBalancer

Fazer o PortForward do serviço que deseja visualizar.

Deve-se primeiro parar o PortForward do dashboard, somente um pode estar sendo executado por vez.

kubectl port-forward -n vote service/vote-loadbalancer 8001:5000 --address 0.0.0.0
kubectl port-forward -n vote service/result-loadbalancer 8001:5001 --address 0.0.0.0

About

Ducumentação de implantação de cluster Kubernetes realizada para a disciplina de Redes e Sistemas Distribuidos.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published