Pesquisa de site

Como instalar um cluster Kubernetes no CentOS 8


O processo de instalação de um Cluster Kubernetes no CentOS 8 é quase semelhante ao do CentOS 7 (que você pode consultar aqui), mas o o processo aqui tem algumas mudanças. Essas mudanças giram principalmente em torno da instalação do Docker.

A partir do CentOS 8 (e por extensão do RHEL 8), o docker agora foi nativamente substituído pelo podman e buildah que são ferramentas do Redhat. Na verdade, o pacote docker foi removido do repositório de pacotes padrão.

Com esta mudança, a equipe do Redhat pretende simplificar o processo de criação e utilização de containers, sem a necessidade de permissões especiais, e ao mesmo tempo, manter a compatibilidade com imagens docker e operá-las sem a necessidade de um daemon. O Podman promete oferecer mais flexibilidade ao executar em ambientes Kubernetes, mas o júri permanece indeciso.

Neste artigo, percorreremos o processo de instalação do Kubernetes em uma plataforma CentOS 8, rodando em Docker-CE (Community Edição). Em um artigo posterior, também executaremos uma instalação semelhante, usando podman para nossos contêineres.

Pré-requisitos

  1. Três servidores executando CentOS 8 – 1 nó mestre e 2 nós de trabalho.
  2. É recomendado que seus nós tenham pelo menos 2 CPUs com 2 GB de RAM ou mais por máquina. Este não é um requisito estrito, mas é em grande parte determinado pelas necessidades do aplicativo que você pretende executar.
  3. Conectividade com a Internet em todos os seus nós. Estaremos buscando pacotes Kubernetes e docker do repositório. Da mesma forma, você precisará certificar-se de que o gerenciador de pacotes DNF está instalado por padrão e pode buscar pacotes remotamente.
  4. Todos os seus nós também devem poder se conectar uns aos outros, seja em uma rede privada ou pública, conforme a disponibilidade.
  5. Você também precisará de acesso a uma conta com privilégios sudo ou root. Neste tutorial, usarei minha conta root.

Precaução

A maioria dos nós geralmente vem com endereços MAC exclusivos; no entanto, em alguns casos exclusivos, algumas máquinas virtuais podem ter endereços MAC idênticos. Portanto, é recomendado que você confirme se o Product_UUID e o endereço MAC não são idênticos em nenhum dos nós.

O Kubernetes usa esses valores para identificar exclusivamente os nós no cluster. Se esses valores não forem exclusivos para cada nó, o processo de instalação poderá falhar.

Para verificar o endereço MAC da interface de rede e compará-lo.

ip link

Para verificar o product_uuid e comparar, execute o seguinte comando.

cat /sys/class/dmi/id/product_uuid 

Arquitetura Lógica

Nossa instalação foi projetada para ter o Node-Mestre controlando os Nodos de Trabalho. Ao final desta instalação, nossa arquitetura lógica ficará mais ou menos assim.

Nó Mestre – Esta máquina geralmente atua como plano de controle e executa o banco de dados do cluster e o servidor API (com o qual a CLI do kubectl se comunica).

Nosso cluster Kubernetes de 3 nós será mais ou menos assim:

Instalação do Cluster Kubernetes no Master-Node

Para que o Kubernetes funcione, você precisará de um mecanismo de conteinerização. Conforme mencionado, usaremos Docker-CE.

As seguintes instituições serão executadas no CentOS 8 Master-Node.

Etapa 1: preparar nome de host, firewall e SELinux

Em seu CentOS 8 Master-Node, defina o nome do host do sistema e atualize o DNS em seu arquivo /etc/hosts.

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Em seguida, execute ping em worker-node-1 e worker-node-2 para verificar se o arquivo host atualizado está funcionando corretamente usando o comando ping.

ping 192.168.0.48
ping 192.168.0.49

Em seguida, desative o Selinux, pois isso é necessário para permitir que os contêineres acessem o sistema de arquivos host, necessário para redes de pods e outros serviços.

setenforce 0

Definir setenforce como 0 efetivamente define o SELinux como permissivo, o que desativa efetivamente o SELinux até a próxima reinicialização. Para desativá-lo completamente, use o comando abaixo e reinicie.

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

O Kubernetes utiliza várias portas para comunicação e acesso e essas portas precisam ser acessíveis ao Kubernetes e não limitadas pelo firewall.

Configure as regras de firewall nas portas.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Etapa 2: Instale o Docker-CE no CentOS 8

Você precisará adicionar o repositório Docker primeiro, pois ele não está mais na lista de pacotes padrão usando o seguinte comando dnf config-manager.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Instale também o pacote containerd.io, que está disponível como um daemon que gerencia o ciclo de vida completo do contêiner de seu sistema host, desde a transferência e armazenamento de imagens até a execução e supervisão do contêiner, armazenamento de baixo nível, anexos de rede e muito mais. .

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Agora instale a versão mais recente de um pacote docker-ce.

dnf install docker-ce

Agora você pode ativar e iniciar o serviço docker.

systemctl enable docker
systemctl start docker

Etapa 3: Instale o Kubernetes (Kubeadm) no CentOS 8

Em seguida, você precisará adicionar repositórios Kubernetes manualmente, pois eles não vêm instalados por padrão no CentOS 8.

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

Kubeadm ajuda você a inicializar um cluster Kubernetes mínimo viável que esteja em conformidade com as práticas recomendadas. Com o kubeadm, seu cluster deve passar nos testes de conformidade do Kubernetes.

Kubeadm também oferece suporte a outras funções do ciclo de vida do cluster, como upgrades, downgrade e gerenciamento de tokens de inicialização. O Kubeadm também é de fácil integração com outras ferramentas de orquestração, como Ansible e Terraform.

Com o repositório de pacotes pronto, você pode prosseguir e instalar o pacote kubeadm.

dnf install kubeadm -y 

Quando a instalação for concluída com sucesso, habilite e inicie o serviço.

systemctl enable kubelet
systemctl start kubelet

Etapa 4: crie um plano de controle mestre com kubeadm

O mestre do Kubernetes, que atua como o plano de controle do cluster, executa alguns serviços críticos necessários para o cluster. Dessa forma, o processo de inicialização fará uma série de pré-verificações para garantir que a máquina esteja pronta para executar o Kubernetes. Essas pré-verificações expõem avisos e saem em caso de erros. kubeadm init faz download e instala os componentes do plano de controle do cluster.

Agora é hora de inicializar o mestre Kubernetes, mas antes disso, você deve desabilitar a troca para executar o comando “kubeadm init“.

swapoff -a

A inicialização do Kubernetes master é um processo totalmente automatizado que é controlado pelo comando “kubeadm init“ conforme mostrado.

kubeadm init

Em seguida, copie o comando a seguir e armazene-o em algum lugar, pois precisamos executar esse comando nos nós de trabalho posteriormente.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Dica: Às vezes, o comando acima pode gerar erros sobre os argumentos passados, portanto, para evitar erros, você precisa remover o caractere '\' e seu comando final ficará assim.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Depois que o Kubernetes for inicializado com sucesso, você deverá permitir que seu usuário comece a usar o cluster. Em nosso cenário, usaremos o usuário root. Você também pode iniciar o cluster usando o usuário sudo conforme mostrado.

Para usar root, execute:

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

Para usar um usuário habilitado para sudo, execute:

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

Agora confirme se o comando kubectl está ativado.

kubectl get nodes

Neste momento, você verá que o status do nó mestre é ‘NotReady’. Isso ocorre porque ainda não implantamos a rede de pod no cluster.

A rede pod é a rede de sobreposição do cluster, que é implantada sobre a rede de nós atual. Ele foi projetado para permitir conectividade em todo o pod.

Etapa 5: configure sua rede de pods

A implantação do cluster de rede é um processo altamente flexível dependendo das suas necessidades e há muitas opções disponíveis. Como queremos manter nossa instalação o mais simples possível, usaremos o plugin Weavenet que não requer nenhuma configuração ou código extra e fornece um endereço IP por pod, o que é ótimo para nós. Se quiser ver mais opções, confira aqui.

Esses comandos serão importantes para obter a configuração da rede do pod.

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Agora, se você verificar o status do seu nó mestre, ele deverá estar ‘Pronto’.

kubectl get nodes

A seguir, adicionamos os nós de trabalho ao cluster.

Adicionando nós de trabalho ao cluster Kubernetes

As instruções a seguir serão executadas em cada nó de trabalho ao ingressar no cluster Kubernetes.

Etapa 1: preparar nome de host, firewall e SELinux

Primeiro defina o nome do host em seu worker-node-1 e worker-node-2 e, em seguida, adicione as entradas de host ao /etc/hosts > arquivo.

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Em seguida, execute ping em seu nó mestre a partir de seus nós de trabalho para confirmar se seu arquivo host atualizado está funcionando bem usando o comando ping.

192.168.0.47

Em seguida, desative o SElinux e atualize suas regras de firewall.

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Etapa 2: configurar o Docker-CE e o repositório Kubernetes

Adicione o repositório Docker primeiro usando o gerenciador de configuração DNF.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Em seguida, adicione o pacote containerd.io.

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Com esses dois pacotes instalados, instale a versão mais recente do docker-ce.

dnf install docker-ce

Habilite e inicie o serviço docker.

systemctl enable docker
systemctl start docker

Você precisará adicionar repositórios Kubernetes manualmente, pois eles não vêm pré-instalados no CentOS 8.

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

Etapa 3: Instale o Kubeadm no CentOS 8

Com o repositório de pacotes pronto, você pode prosseguir e instalar o kubeadm.

dnf install kubeadm -y 

Inicie e ative o serviço.

systemctl enable kubelet
systemctl start kubelet

Etapa 4: Junte-se ao nó de trabalho ao cluster Kubernetes

Agora exigimos o token gerado pelo kubeadm init para ingressar no cluster. Você pode copiá-lo e colá-lo em node-1 e node-2 se tiver copiado em algum lugar.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78

Conforme sugerido na última linha, volte ao seu nó-mestre e verifique se o nó-1 do trabalhador e o nó-2 do trabalhador se juntaram ao cluster usando o seguinte comando.

kubectl get nodes

Se todas as etapas forem executadas com êxito, você deverá ver node-1 e node-2 com status pronto no nó mestre. Neste ponto, você implantou com sucesso um cluster Kubernetes no CentOS 8.

Leitura recomendada: Como implantar o Nginx em um cluster Kubernetes

Algumas limitações

O cluster que criamos aqui tem um único nó mestre e, como tal, se o nó mestre falhar, seu cluster poderá perder dados e precisará ser recriado do zero.

Por esse motivo, recomendo uma configuração altamente disponível.