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
- Três servidores executando CentOS 8 – 1 nó mestre e 2 nós de trabalho.
- É 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.
- 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.
- 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.
- 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.