quinta-feira, 11 de janeiro de 2024

Orquestração de Contêineres com Fedora CoreOS e Kubernetes

 



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 : 




Nenhum comentário:

Postar um comentário