Skip to content

Cluster RKE2 Generic

Ajustes para não ter problemas.

apt remove apparmor selinux systemd-resolved -y
rm -f /etc/resolv.conf
echo nameserver 1.1.1.1 > /etc/resolv.conf
echo nameserver 8.8.8.8 >> /etc/resolv.conf
systemctl stop iptables
systemctl disable iptables
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
systemctl stop nftables
systemctl disable nftables
nft flush ruleset
apt update
apt upgrade -y
apt install vim netcat-openbsd screen htop iptables net-tools -y
reboot

arquitetura

controllers/servers

  • 192.168.111.210 rke-dev-alpha
  • 192.168.111.211 rke-dev-bravo
  • 192.168.111.212 rke-dev-charlie

workers

  • 192.168.111.213 rke-dev-delta
  • 192.168.111.214 rke-dev-echo

node primário

  • 192.168.111.210

advertise address

  • 192.168.111.210

instalando nodes controller

controller 1, k8s-dev-alpha

crie o diretorio do rke2

mkdir -p /etc/rancher/rke2

crie o arquivo de configuração do primeiro node

vim /etc/rancher/rke2/config.yaml

insira o conteúdo abaixo

write-kubeconfig-mode: "0644"
advertise-address: 192.168.111.210
token: aqui-coloque-o-token-que-voce-deseja-usar
node-name: k8s-dev-alpha
tls-san:
  - ip-externo
  - 192.168.111.210
  - 192.168.111.211
  - 192.168.111.212
  - 192.168.111.213
  - 192.168.111.214
  - 192.168.111.215
  - k8s-dev-alpha
  - k8s-dev-bravo
  - k8s-dev-charlie
  - k8s-dev-delta
  - k8s-dev-echo
  - dev.local
cluster-domain: dev.local
etcd-arg: "--quota-backend-bytes 2048000000"
etcd-snapshot-schedule-cron: "0 3 * * *"
etcd-snapshot-retention: 10

defina que esta instalando um servidor

export INSTALL_RKE2_TYPE="server"

instalando o binário

curl -sfL https://get.rke2.io | sudo sh -

caso queria instalar uma versão específica, rode:

export INSTALL_RKE2_VERSION=v1.33.7+rke2r1; curl -sfL https://get.rke2.io | sh -

inicie o servico

systemctl enable rke2-server
systemctl start rke2-server

verifique se está tudo funcionando

cd /etc/rancher/rke2
export KUBECONFIG=$PWD/rke2.yaml
curl http://install.gutocarvalho.net/k8s-tools.sh|bash
alias k=kubectl
k get nodes
k cluster-info
k get pods -A

controller 2, k8s-dev-bravo

crie o diretorio do rke2

mkdir -p /etc/rancher/rke2

crie o arquivo de configuração dos nodes controllers secundários

vim /etc/rancher/rke2/config.yaml

adicione o conteúdo

server: https://192.168.111.210:9345
token: aqui-coloque-o-token-que-voce-setou-no-primeiro-node
write-kubeconfig-mode: "0644"
advertise-address: 192.168.111.210
node-name: k8s-dev-bravo
tls-san:
  - ip-externo
  - 192.168.111.210
  - 192.168.111.211
  - 192.168.111.212
  - 192.168.111.213
  - 192.168.111.214
  - 192.168.111.215
  - k8s-dev-alpha
  - k8s-dev-bravo
  - k8s-dev-charlie
  - k8s-dev-delta
  - k8s-dev-echo
  - dev.local
cluster-domain: dev.local
etcd-arg: "--quota-backend-bytes 2048000000"
etcd-snapshot-schedule-cron: "0 3 * * *"
etcd-snapshot-retention: 10

defina que esta instalando um servidor

export INSTALL_RKE2_TYPE="server"

instalando o binário

curl -sfL https://get.rke2.io | sudo sh -

inicie o servico

systemctl start rke2-server

controller 3, k8s-dev-charlie

crie o diretorio do rke2

mkdir -p /etc/rancher/rke2

crie o arquivo de configuração dos nodes controllers secundários

vim /etc/rancher/rke2/config.yaml

adicione o conteúdo

server: https://192.168.111.210:9345
token: aqui-coloque-o-token-que-voce-setou-no-primeiro-node
write-kubeconfig-mode: "0644"
advertise-address: 192.168.111.210
node-name: k8s-dev-charlie
tls-san:
  - ip-externo
  - 192.168.111.210
  - 192.168.111.211
  - 192.168.111.212
  - 192.168.111.213
  - 192.168.111.214
  - 192.168.111.215
  - k8s-dev-alpha
  - k8s-dev-bravo
  - k8s-dev-charlie
  - k8s-dev-delta
  - k8s-dev-echo
  - dev.local
cluster-domain: dev.local
etcd-arg: "--quota-backend-bytes 2048000000"
etcd-snapshot-schedule-cron: "0 3 * * *"
etcd-snapshot-retention: 10

defina que esta intsalando um servidor

export INSTALL_RKE2_TYPE="server"

instalando o binário

curl -sfL https://get.rke2.io | sudo sh -

inicie o servico

systemctl start rke2-server

instalando nodes worker

worker 1, k8s-dev-delta

crie o diretorio do rke2

mkdir -p /etc/rancher/rke2

crie o arquivo de configuração dos nodes controllers secundários

vim /etc/rancher/rke2/config.yaml

contedo

server: https://192.168.111.210:9345
token: aqui-coloque-o-token-que-voce-setou-no-primeiro-node
write-kubeconfig-mode: "0644"
advertise-address: 192.168.111.210
node-name: k8s-dev-delta
tls-san:
  - seu-ip-externo
  - 192.168.111.210
  - 192.168.111.211
  - 192.168.111.212
  - 192.168.111.213
  - 192.168.111.214
  - 192.168.111.215
  - k8s-dev-alpha
  - k8s-dev-bravo
  - k8s-dev-charlie
  - k8s-dev-delta
  - k8s-dev-echo
  - dev.local
cluster-domain: dev.local
etcd-arg: "--quota-backend-bytes 2048000000"
etcd-snapshot-schedule-cron: "0 3 * * *"
etcd-snapshot-retention: 10
etcd-snapshot-retention: 15

defina que esta insalando um servidor

export INSTALL_RKE2_TYPE="agent"

instalando o binário

curl -sfL https://get.rke2.io | sudo sh -

inicie o servico

systemctl start rke2-agent

worker 2, k8s-dev-echo

crie o diretorio do rke2

mkdir -p /etc/rancher/rke2

crie o arquivo de configuração dos nodes controllers secundários

vim /etc/rancher/rke2/config.yaml

contedo

server: https://192.168.111.210:9345
token: aqui-coloque-o-token-que-voce-setou-no-primeiro-node
write-kubeconfig-mode: "0644"
advertise-address: 192.168.111.210
node-name: k8s-dev-echo
tls-san:
  - seu-ip-externo
  - 192.168.111.210
  - 192.168.111.211
  - 192.168.111.212
  - 192.168.111.213
  - 192.168.111.214
  - 192.168.111.215
  - k8s-dev-alpha
  - k8s-dev-bravo
  - k8s-dev-charlie
  - k8s-dev-delta
  - k8s-dev-echo
  - dev.local
cluster-domain: dev.local
etcd-arg: "--quota-backend-bytes 2048000000"
etcd-snapshot-schedule-cron: "0 3 * * *"
etcd-snapshot-retention: 10
etcd-snapshot-retention: 15

defina que esta instalando um servidor

export INSTALL_RKE2_TYPE="agent"

instalando o binário

curl -sfL https://get.rke2.io | sudo sh -

inicie o servico

systemctl start rke2-agent

mantendo workloads rodando apenas nos nodes agent

do controller-1 rode:

cd /etc/rancher/rke2
export KUBECONFIG=$PWD/rke2.yaml
kubectl taint nodes -l node-role.kubernetes.io/control-plane node-role.kubernetes.io/control-plane=:NoSchedule

para checar

kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
NAME             TAINTS
rke-dev-alpha    [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
rke-dev-bravo    [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
rke-dev-charlie  [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
rke-dev-delta    <none>
rke-dev-echo     <none>

instalando versão específica

mencionando novamente pois vale a pena, caso queira instalar uma versão diferenta da última estável, use o comando abaixo

export INSTALL_RKE2_VERSION=v1.33.7+rke2r1; curl -sfL https://get.rke2.io | sh -

Aqui a lista de releases

  • https://github.com/rancher/rke2/releases

verificando tudo mais uma vez

do controller-1

cd /etc/rancher/rke2
export KUBECONFIG=$PWD/rke2.yaml
k get nodes
k get nodes -o wide
k cluster-info
k get pods -A
journalctl -u rke2-server

notas

sobre taints

A documentação fala sobre a possibilidasde de configurar o taint direto no config.yaml de cada node controller, contudo isso pode afetar o processo de instalação, alguns jobs podem ficar travados até ter um node agent rodando.

Aqui um exemplo que funcionaria:

node-taint:
  - "CriticalAddonsOnly=true:NoExecute"

No meu caso, prefiro rodar o taint depois do cluster pronto, manualmente, como mostrei acima.

  • https://docs.rke2.io/install/ha

oracle cloud

precisei rodar esses comandos nas maquinas OCI para tudo funcionar, e precisei de alguns reboots nos nodes quando aconteciam problemas para adicionar o terceiro node controller.

systemctl stop iptables
systemctl disable iptables
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
systemctl stop nftables
systemctl disable nftables
nft flush ruleset

no final funcionou.

nginx stream tcp

exemplo de configuração stream tcp do nginx.

upstream rke_80 {
  server ip-do-worker-1:80;
  server ip-do-worker-2:80;
  server ip-do-worker-3:80;
}

upstream rke_443 {
  server ip-do-worker-1:443;
  server ip-do-worker-2:443;
  server ip-do-worker-3:443;
}

server {
  listen     1.2.3.4:80;
  proxy_pass rke_80;

}

server {
  listen     1.2.3.4:443;
  proxy_pass rke_443;
}

Recomendo ter dois NGINX e usar o keepalived para flutuar o IP Público entre eles.