Kubernetes: instalação e configuração

Postado por Paulo André Soares de Mendonça em November 02, 2019 · 8 minutos de leitura

Kubernetes: instalação e configuração

Nesse artigo será apresentado o modo de configuração do cluster Kubernetes, caso tenha interesse em montar o ambiente para desenvolvimento ou para teste uma boa opção seria o Minikube.

Instalação docker

O comando a seguir o docker será instalado tando para distribuições linux da família Debian quando Red Hat. A instalação deverá ser feita em todos os servidores.

curl -fsSL https://get.docker.com | bash

O comando acima irá adicionar o repositório específico e em seguida instalar o docker.

Desabilitando a memória swap do linux

Para instalar o kubernetes é necessário desligar a memória de swap do linux. Existe uma issue a respeito do swap que ainda não foi corrigida. A configuração deverá ser feita em todos os servidores.

swapoff -a

Ao reiniciar a máquina o swap irá retornar

Para persistir que o swap permaneça desligada, você deve comentar as opções de swap do arquivo:

vim /etc/fstab

Ou executar o comando para desabilitar de forma automática:

sed -Ei 's/(.*swap.*)/#\1/g' /etc/fstab

kubelet, kubeadm e kubectl

Para continuar na configuração do nosso cluster é necessário instalar as 3 ferramentas a seguir:

  • kubeadm: irá instalar e configurar os vários componentes de um cluster de uma maneira padrão.
  • kubelet: É um tipo agente que roda em todos os nodes e lida com operações.
  • kubectl: É uma ma ferramenta CLI usada para emitir comandos para o cluster através de seu servidor de API.

Instalação kubelet kubeadm kubectl - Debian, Ubuntu e similares

A instalação dos pacotes a seguir deverá ser feita em todos os servidores do cluster.

Adicionar o repositórios executando o seguinte comando:

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

Em seguida atualizar a lista de pacotes de instalar o Kubelet, kubeadm e o kubectl:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Instalação kubelet kubeadm kubectl - Red Hat, Centos, Fedora e similares

Edicionar o arquivo do repositório

vim /etc/yum.repos.d/kubernetes.repo

Colocando os seguinte conteúdo:

[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

Desabilitar o firewall e ajustar as configurações de segurança

setenforce 0
systemctl stop firewalld
systemctl disable firewalld

Em seguida instalar o Kubelet, kubeadm e o kubectl:

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

É importante configurar alguns parâmetros de kernel no sysctl:

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system

Agora em ambas as distribuições é muito importante também verificar se o drive cgroup usado pelo kubelet é o mesmo usado pelo Docker, para verificar isso execute o seguinte comando:

docker info | grep -i cgroup

Cgroup Driver: cgroupfs

sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
systemctl restart kubelet

Flannel

O Flannel foi criado pelo CoreOS para o Kubernetes, também pode ser usada como uma solução geral de rede definida por software para outros fins. Para atender aos requisitos de rede do kubernetes, a ideia do flannel é simples: ele cria outra rede plana que seja executada acima da rede host, que é a chamada rede de sobreposição. Todos os containers (Pod) receberão um endereço IP nessa rede de sobreposição. Eles se comunicam chamando o endereço IP um do outro diretamente.

Flannel

Exite outras soluções de network fabric que estão descritos no site do Kubernetes, para o nosso exemplo iremos utilizar o flannel.

Instalando o Flannel

O comando a seguir deverá ser executado no node master.

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

Inicializar o servidor Master e integrar os demais nós

Finalizada a instalação, o próximo passo é eleger o servidor que será master no nosso cluster e iniciá-lo.

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

O Flannel exige que na inicialização do cluster, seja utilizado a opção –pod-network-cidr=10.244.0.0/16

A saída será algo parecido com isso:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join <IP_ADDRESS>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<TOKEN>

No final pode-se observar que foram apresentados dois comandos para configurar o nosso cluster.

Primeiramente devemos executar o comando abaixo no node master:

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

E em seguida iremos utilizar o segundo comando que deverá ser executando nas máquinas que farão parte do cluster, algo parecido com o comando abaixo:

kubeadm join <IP_ADDRESS>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<TOKEN>

O próximo passo será executar o seguinte comando para visualizar os nós:

kubectl get nodes

O resultado deverá algo parecido com:

NAME              STATUS     ROLES    AGE     VERSION
k8s-master        Ready      master   5m10s   v1.16.2
k8s-slave-01      Ready      <none>   50s     v1.16.2
k8s-slave-02      Ready      <none>   53s     v1.16.2

Como resultado você irá visualizar os todos os nodes conectados com o status de ready.

Referências

https://www.radishlogic.com/tag/minikube/
https://blog.4linux.com.br/kubernetes-configurando-um-cluster-multi-master/
https://www.digitalocean.com
https://veronez.dev/2019/01/28/montando-o-seu-cluster-kubernetes-por-12-euros-por-mes/
https://medium.com/@fidelissauro/kubernetes-criando-um-cluster-simples-com-o-kubeadm-e50a9eb4f4a6
https://www.linuxtips.io/post/descomplicando-o-kubernetes-02