Requisitos de Configuração
Para este guia, utilize um ambiente com as seguintes especificações:
- 3 máquinas virtuais ou servidores físicos com pelo menos 2 núcleos de CPU e 4 GB de RAM cada.
- Sistema operacional CentOS 7.6 ou compatível (versões 7.5 ou superior).
- Acesso root ou privilégios sudo em todas as máquinas.
As versões de software instaladas serão:
- Kubernetes v1.16.0
- Calico 3.8.2
- Nginx Ingress Controller 1.5.5
- Docker 18.09.7
Verificação do CentOS e Configuração do Hostname
Execute os comandos abaixo em todos os nós (master e workers) para verificar o sistema operacional e configurar o nome do host.
# Verificar a versão do CentOS
cat /etc/redhat-release
# Definir um hostname único para cada máquina
hostnamectl set-hostname nome-do-host
# Confirmar a alteração
hostnamectl status
# Adicionar o hostname ao arquivo /etc/hosts
echo "127.0.0.1 $(hostname)" >> /etc/hosts
# Verificar a arquitetura e quantidade de CPUs
lscpu
Nota: O hostname não deve ser "localhost" e a arquitetura deve ser x86_64 com pelo menos 2 CPUs.
Instalação do Docker e Kubelet
Em todos os nós, instale as dependências necessárias:
# Atualizar os pacotes
yum update -y
# Instalar Docker
yum install -y docker
systemctl enable docker && systemctl start docker
# Instalar utilitários NFS
yum install -y nfs-utils
# Adicionar repositório do Kubernetes e instalar componentes
cat <<eof> /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet</eof>
Inicialização do Nó de Controle (Master)
No nó master, execute os seguintes passos. Defina variáveis de ambiente para a configuração:
# Ajustar conforme o IP real do nó master (rede interna)
export IP_CONTROLADOR=192.168.1.100
# Definir um nome DNS para a API server
export DNS_APISERVER=k8s-api.example.com
# Especificar a rede de pods (CIDR)
export CIDR_PODS=10.244.0.0/16
# Configurar o nome da API server no /etc/hosts
echo "${IP_CONTROLADOR} ${DNS_APISERVER}" >> /etc/hosts
# Inicializar o cluster Kubernetes
kubeadm init --apiserver-advertise-address=${IP_CONTROLADOR} --pod-network-cidr=${CIDR_PODS} --service-dns-domain=${DNS_APISERVER}
Após a inicialização, configure o kubectl para o usuário root:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Inicialização dos Nós de Trabalho (Workers)
No nó master, gere o comando de junção:
kubeadm token create --print-join-command
O comando gerado será semelhante a:
kubeadm join k8s-api.example.com:6443 --token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
Em cada nó worker, execute o comando de junção. Certifique-se de configurar o /etc/hosts priemiro:
# Adicionar o IP do master e o nome da API server ao /etc/hosts
echo "192.168.1.100 k8s-api.example.com" >> /etc/hosts
# Executar o comando de junção gerado no master
kubeadm join k8s-api.example.com:6443 --token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
Instalação do Ingress Controller
No nó master, aplique a configuração do Nginx Ingress Controller:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.5/deploy/static/provider/cloud/deploy.yaml
Configure um registro DNS para apontar um domínio (por exemplo, *.app.example.com) para o IP de um dos nós workers.
Verificação da Instalação
No nó master, verifique o status dos nós e pods:
# Listar os nós do cluster
kubectl get nodes -o wide
# Verificar os pods no namespace do sistema
kubectl get pods -n kube-system -o wide
A saída deve mostrar todos os nós no estado "Ready" e os pods essneciais em execução.