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.
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.
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
Para continuar na configuração do nosso cluster é necessário instalar as 3 ferramentas a seguir:
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
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
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.
Exite outras soluções de network fabric que estão descritos no site do Kubernetes, para o nosso exemplo iremos utilizar 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
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.
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