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 : 




domingo, 7 de janeiro de 2024

Criando um Pod com ansible no Podman


 

Uma dica rápida de  iniciar um pod simples com ansible no podman

Tenho uma prática de sempre ter um arquivo de hosts para minhas playbook , isso ajuda muito ,

nesse caso é o meu localhost


Vamos criar agora no nosso arquivo YAML , nesse arquivo, vamos efetuar 

o pull da imagem do wilffly,  criar o pod e rodar o container , ou seja 

teremos 3 execução, o pull da imagem, criação do pod e a execução do container .

aqui esta o arquivo com a conf simples de um pod 


Agora vamos executar nossa playbook

$ ansible-playbook -i hosts pod.yaml


Feito , agora podemos analisar o pod



Verificando o acesso via web


Feito , simples rápido e fácil 

Guia de Referencia : 

https://docs.ansible.com/ansible/latest/collections/containers/podman/podman_pod_module.html


terça-feira, 2 de janeiro de 2024

Iniciando um container no Podman com Ansible

 

Uma dica rápida de  iniciar um container simples com ansible no podman


Como é um servidor remoto , efetuei a copia da chave ssh 

$ ssh-copy-id fedora.server

Criei um arquivo host para ansible

$ vim hosts

e adicionei o server


Vamos criar agora no nosso arquivos YAML , nesse arquivo , vamos efetuar 

o pull da imagem do wilffly , e efetuar run do container na porta 8080 , ou seja 

teremos 2 execução , o pull da imagem e a execução do container .


Uma playbook praticamente simples 

Agora vamos rodar 


$ ansible-playbook -i hosts wildfly.yaml


Podemos validar caso queira 

$ ansible fedora.server -i hosts -a "podman ps"


E podemos ver o wildfly rodando 


Pronto , simples rápido e fácil


Guia de Referncia: 
https://www.redhat.com/sysadmin/automate-podman-ansible 

https://fedoramagazine.org/using-ansible-to-configure-podman-containers/