Neste tutorial mostraremos como montar um cluster de Kubernentes no Fedora Core OS usando o Kubespray.
O Kubespray é uma ferramenta bastante útil para criação de clusters Kubernetes, pois ela automatiza praticamente todas as etapas de criação do cluster que vai desde a preparação do SO carregando módulos de kernel até a instalação do docker/containerd e o deploy de todos os nodes do cluster.
Para isto o Kubespray utiliza o ansible pra fazer as configurações iniciais e a configuração do cluster propriamente dita.
Inicialmente precisamos configurar uma chave SSH no Node onde vamos execurar o Kubespray e copiar essa chave SSH para os outros hosts para que o Kubespray consiga acessar os hosts e fazer o deploy do Kubernetes. Para isso precisamos segir os passos a seguir:
[core@node1 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/home/core/.ssh/id_rsa): [ENTER]
Enter passphrase (empty for no passphrase): [ENTER]
Enter same passphrase again: [ENTER]
Your identification has been saved in /var/home/core/.ssh/id_rsa
Your public key has been saved in /var/home/core/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:ITWu7b9dnaIE+mZ0f6HQITWvrlg+ePXI9P45cvDRJ3s core@node2
The key's randomart image is:
+---[RSA 3072]----+
| o |
| o . o |
| . o . o |
| + . . . . |
| . S. o o .|
| ....o *.++|
| .o ooB.O+=|
| .==+.OoBE|
| oo+=+ =++|
+----[SHA256]-----+
id_rsa --> chave privada
id_rsa.pub --> chave pública
[core@node1 ~]$ mkdir chave
[core@node1 ~]$ cd chave/
[core@node1 chave]$ vi id_rsa
[core@node1 chave]$ vi id_rsa.pub
[core@node1 chave]$ chmod 600 id_rsa
[core@node1 chave]$ eval $(ssh-agent -s)
[core@node1 chave]$ ssh-add id_rsa
[core@node1 chave]$ ssh-copy-id -i ~/.ssh/id_rsa.pub core@192.168.1.3
[core@node1 chave]$ ssh-copy-id -i ~/.ssh/id_rsa.pub core@192.168.1.4
[core@node1 chave]$ ssh-copy-id -i ~/.ssh/id_rsa.pub core@192.168.1.10
Para testar se a chave SSH foi instalada com sucesso faça acesso o SSH.
[core@node1 ~]$ ssh 'core@192.168.1.3'
[core@node1 ~]$ ssh 'core@192.168.1.4'
[core@node1 ~]$ ssh 'core@192.168.1.10'
Abaixo segue os passos necessários para criarmos nosso cluster Kubernetes utilizando o Kubespray:
[core@node1 ~]$ sudo rpm-ostree install libselinux-python3 vim-enhanced htop mc wget telnet tcpdump screen
[core@node1 ~]$ sudo rpm-ostree install libselinux-python3 vim-enhanced htop mc wget telnet tcpdump screen open-vm-tools
Após o término da instalação dos pacotes será necessário reiniciar o host.
[core@node1 ~]$ sudo timedatectl set-timezone America/Sao_Paulo
[core@node1 ~]$ git clone https://github.com/kubernetes-sigs/kubespray.git
[core@node1 ~]$ cd kubespray
[core@node1 ~]$ git checkout release-2.15
[core@node1 ~]$ pip3 install -r requirements.txt
[core@node1 ~]$ cp -rfp inventory/sample inventory/mycluster
[core@node1 ~]$ declare -a IPS=(192.168.1.3 192.168.1.4)
[core@node1 ~]$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
Os IPs devem estar separados por espaço.
[core@node1 ~]$ vim inventory/mycluster/group_vars/etcd.yml
Substitua a seguinte linha etcd_deployment_type: docker --> etcd_deployment_type: host
[core@node1 ~]$ vim inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
Substitua a seguinte linha container_manager: docker --> container_manager: containerd
[core@node1 ~]$ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
[core@node1 ~]# kubectl create deployment nginx --image=nginx
[core@node1 ~]# kubectl create service nodeport nginx --tcp=80:80
[core@node1 ~]# kubectl get svc
Execute os comandos acima com o usuário root dentro de algum dos nodes master do cluster Kubernetes.