Porquê Fedora CoreOS ?
O Fedora CoreOS é uma distribuição Linux mínima e otimizada para execução de contêineres. Construída sobre os princípios do sistema operacional imutável, o Fedora CoreOS garante uma base consistente para cargas de trabalho de contêineres. Suporta ferramentas como Ignition para configuração automática e atualizações transacionais, garantindo um ambiente consistente e confiável para a execução de aplicativos baseados em contêineres.
Antes da instalação do Fedora Coreos , vamos criar nosso arquivo .ign que é um arquivo base de instalação do Fedora CoreOS é nele que vamos definir algumas configurações como Hotname, repositórios, ajustes em algumas aruqivos de confs, etc...
Criando nosso Arquivo ign pra o Control Plane
k8s-control-plane.bu
variant: fcos
version: 1.4.0
storage:
links:
- path: /etc/localtime
target: ../usr/share/zoneinfo/America/Sao_Paulo
files:
# Hostname
- path: /etc/hostname
mode: 0644
contents:
inline: k8s-control-plane
- path: /etc/yum.repos.d/kubernetes.repo
mode: 0644
overwrite: true
contents:
inline: |
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
# Configure automatic loading of required Kernel modules on startup
- path: /etc/modules-load.d/crio-net.conf
mode: 0644
overwrite: true
contents:
inline: |
overlay
br_netfilter
# Set kernel parameters required by kubelet
- path: /etc/sysctl.d/kubernetes.conf
mode: 0644
overwrite: true
contents:
inline: |
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
passwd:
users:
- name: core
groups:
- wheel
- sudo
ssh_authorized_keys:
- ssh-rsa AAAAB3..............
Agora vamos gerar o arquivo ign
$ butane --pretty --strict k8s-control-plane.bu > k8s-control-plane.ign
Já temos nosso arquivo
Vamos criar agora os arquivos para os 2 workers
k8s-worker1.bu
variant: fcos
version: 1.4.0
storage:
links:
- path: /etc/localtime
target: ../usr/share/zoneinfo/America/Sao_Paulo
files:
# Hostname
- path: /etc/hostname
mode: 0644
contents:
inline: k8s-worker1
- path: /etc/yum.repos.d/kubernetes.repo
mode: 0644
overwrite: true
contents:
inline: |
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
# Configure automatic loading of required Kernel modules on startup
- path: /etc/modules-load.d/crio-net.conf
mode: 0644
overwrite: true
contents:
inline: |
overlay
br_netfilter
# Set kernel parameters required by kubelet
- path: /etc/sysctl.d/kubernetes.conf
mode: 0644
overwrite: true
contents:
inline: |
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
passwd:
users:
- name: core
groups:
- wheel
- sudo
ssh_authorized_keys:
- ssh-rsa AAAA........
A Diferença esta no hostname os demais continua a mesma coisa
cria o arquivo ign
$ butane --pretty --strict k8s-worker1.bu > k8s-worker1.ign
Efetue o mesmo com o worker2
No caso estou iniciando por um LiveCD , tém várias formas de instalaçao , vai do gosto de cada um
Ao iniciar o LiveCD efetuo o donwload do arquivo .ing e efetuo a instalação
como mostra a imagem abaixo
Efetuamos uma instalação de cada um usando o seu arquivo .ign
Agora após a instalação reinicie e acesse via ssh , e vamos instalar os pacotes nos 3 servers
$ sudo rpm-ostree install kubelet kubeadm cri-o
Renicie todos eles após a instalação dos pacotes
e vamos ativar os serviços nos 3 server
$ sudo systemctl enable --now crio
$ sudo systemctl enable kubelet
Feito isso nos 3 agora no Control-plane vamos criar um arquivo yml para iniciar o nosso cluster
$ vi config.yml
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.2
controllerManager:
extraArgs: # Specify a R/W directory for FlexVolumes (cluster won't work without this even though we use PVs)
flex-volume-plugin-dir: "/etc/kubernetes/kubelet-plugins/volume/exec"
networking: # Pod subnet definition
podSubnet: 10.244.0.0/16
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
e vamos executar
$ sudo kubeadm init --config config.yml
Agora vamos adicionar os node
Agora que o cluster está inicializado, vamos instalar o Weave Net:
$ kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
Pronto nosso Cluster esta no Ar
Pronto
Guia de Referencias :