Como instalar um cluster Kubernetes no CentOS 7
Doado pelo Google à comunidade Opensource, o Kubernetes tornou-se agora a ferramenta preferida de gerenciamento de contêineres. Ele pode gerenciar e orquestrar não apenas tempos de execução do docker, mas também tempos de execução de contêineres e Rkt.
Um cluster Kubernetes típico geralmente teria um nó mestre e vários nós de trabalho ou Minions. Os nós de trabalho são então gerenciados a partir do nó mestre, garantindo assim que o cluster seja gerenciado a partir de um ponto central.
Também é importante mencionar que você também pode implantar um cluster Kubernetes de nó único, que geralmente é recomendado para cargas de trabalho muito leves e que não sejam de produção. Para isso, você pode usar o Minikube, que é uma ferramenta que executa um cluster Kubernetes de nó único em uma máquina virtual em seu nó.
Leitura recomendada: Como instalar um cluster Kubernetes no CentOS 8
Neste tutorial, vamos percorrer uma instalação de cluster Kubernetes de vários nós no CentOS 7 Linux. Este tutorial é baseado em linha de comando, então você precisará acessar a janela do seu terminal.
Pré-requisitos
- Vários servidores executando Centos 7 (1 nó mestre, 2 nós de trabalho). É recomendado que seu Nó Mestre tenha pelo menos 2 CPUs, embora este não seja um requisito estrito.
- Conectividade com a Internet em todos os seus nós. Estaremos buscando pacotes Kubernetes e docker do repositório. Da mesma forma, você precisará ter certeza de que o gerenciador de pacotes yum está instalado por padrão e pode buscar pacotes remotamente.
- Você também precisará de acesso a uma conta com privilégios sudo ou root. Neste tutorial, usarei minha conta root.
Nosso cluster de 3 nós será parecido com isto:
Instalação do Cluster Kubernetes no Master-Node
Para que o Kubernetes funcione, você precisará de um mecanismo de conteinerização. Para esta instalação, usaremos o docker por ser o mais popular.
As etapas a seguir serão executadas no Nó Mestre.
Etapa 1: preparar nome de host, firewall e SELinux
Em seu nó mestre, defina o nome do host e se você não tiver um servidor DNS, atualize também seu arquivo /etc/hosts.
hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF
Você pode executar ping em worker-node-1 e worker-node-2 para testar se seu arquivo host atualizado está correto usando o comando ping.
ping 10.128.0.29
ping 10.128.0.30
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
reboot
Defina as seguintes regras de firewall nas portas. Certifique-se de que cada comando firewall-cmd retorne um sucesso.
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: configurar o repositório Kubernetes
Você precisará adicionar repositórios Kubernetes manualmente, pois eles não vêm instalados por padrão no CentOS 7.
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 e o Docker
Com o repositório de pacotes pronto, você pode prosseguir e instalar os pacotes kubeadm e docker.
yum install kubeadm docker -y
Quando a instalação for concluída com sucesso, habilite e inicie ambos os serviços.
systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker
Etapa 4: inicializar o mestre do Kubernetes e configurar o usuário padrão
Agora estamos prontos para inicializar o mestre do Kubernetes, mas antes disso você precisa desabilitar o swap para executar o comando “kubeadm init“.
swapoff -a
A inicialização do mestre Kubernetes é um processo totalmente automatizado gerenciado pelo comando “kubeadm init“ que você executará.
kubeadm init
Você pode querer copiar a última linha e salvá-la em algum lugar porque precisará executá-la nos nós de trabalho.
kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5 \ --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41
Dica: Às vezes, este comando pode reclamar dos argumentos (args) passados, então edite-o para evitar qualquer erros. Portanto, você excluirá o caractere '\'
que acompanha o --token
e seu comando final ficará assim.
kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5 --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41
Após inicializar o Kubernetes com sucesso, você precisará permitir que seu usuário comece a usar o cluster. No nosso caso, queremos executar esta instalação como usuário root, portanto iremos em frente e executaremos esses comandos como root. Você pode mudar para um usuário habilitado para sudo de sua preferência e executar o seguinte usando sudo.
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 verifique se o comando kubectl está ativado.
kubectl get nodes
Neste ponto, você também notará que o status do nó mestre é ‘NotReady’. Isso ocorre porque ainda não implantamos a rede de pods 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.
Configurando nós de trabalho para ingressar no cluster Kubernetes
As etapas a seguir serão executadas nos nós de trabalho. Essas etapas devem ser executadas em cada nó de trabalho ao ingressar no cluster Kubernetes.
Etapa 1: preparar nome de host, firewall e SELinux
Em seu worker-node-1 e worker-node-2, defina o nome do host e caso você não tenha um servidor DNS, atualize também seu mestre e trabalhador nós no arquivo /etc/hosts.
hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF
Você pode executar ping em master-node para testar se seu arquivo host atualizado está correto.
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
Defina as seguintes regras de firewall nas portas. Certifique-se de que todos os comandos firewall-cmd retornem sucesso.
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 repositório Kubernetes
Você precisará adicionar repositórios Kubernetes manualmente, pois eles não vêm pré-instalados no CentOS 7.
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 e o Docker
Com o repositório de pacotes pronto, você pode prosseguir e instalar os pacotes kubeadm e docker.
yum install kubeadm docker -y
Inicie e habilite ambos os serviços.
systemctl enable docker
systemctl start docker
systemctl enable kubelet
systemctl start kubelet
Etapa 4: Junte-se ao nó de trabalho ao cluster Kubernetes
Agora exigimos o token que o kubeadm gerou 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 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5 --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41
Conforme sugerido na última linha, volte ao seu nó-mestre e verifique se nó de trabalho-1 e nó de trabalho-2 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.
Leitura recomendada: Como implantar o Nginx em um cluster Kubernetes
Neste ponto, concluímos com sucesso a instalação de um cluster Kubernetes no Centos 7 e integramos com sucesso dois nós de trabalho. Agora você pode começar a criar seus pods e implantar seus serviços.