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
crie o arquivo de configuração do primeiro node
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
instalando o binário
caso queria instalar uma versão específica, rode:
inicie o servico
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
crie o arquivo de configuração dos nodes controllers secundários
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
instalando o binário
inicie o servico
controller 3, k8s-dev-charlie
crie o diretorio do rke2
crie o arquivo de configuração dos nodes controllers secundários
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
instalando o binário
inicie o servico
instalando nodes worker
worker 1, k8s-dev-delta
crie o diretorio do rke2
crie o arquivo de configuração dos nodes controllers secundários
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
instalando o binário
inicie o servico
worker 2, k8s-dev-echo
crie o diretorio do rke2
crie o arquivo de configuração dos nodes controllers secundários
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
instalando o binário
inicie o servico
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
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:
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.