Instalação do Kubernetes v1.16 com kubeadm

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.

Tags: kubernetes kubeadm Docker CentOS ingress-nginx

Publicado em 6-4 05:35 por Thomas