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/















quinta-feira, 28 de dezembro de 2023

Configurando Ceph no seu Cluster Proxmox






Vamos efetuar a configuração do Ceph em um cluster com proxmox

Configuração usado são 

2 Discos um para o Proxmox e outro para o Ceph

2 Redes uma rede publica e uma rede só para o replicação do ceph 

Na imagem abaixo temos um cluster já configurado 

 Vamos instalar o Ceph, vá em "Datacenter" > "Ceph " > "Install Ceph"


Efetuar essa conf de install Ceph nos 3 Servers




Nessa parte caso tenha 2 Redes fisicamente separada configure aqui , o ideal seria ter 2 redes uma publica e uma para o cluster do ceph



Vamos agora configurar os OSDs efetue o mesmo processo em cada servidor 






Configure o Monitor agora em cada  Server







Agora vamos criar o Pool 






Já está Disponivél entre os servers



Na hora da criação da VM só informar o storage a ser alocado o disco da VM ou do Container



Agora de até um Dashboard com algumas informações sobre o Ceph




Guia de Referencia:

https://www.virtualizationhowto.com/2023/06/mastering-ceph-storage-configuration-in-proxmox-8-cluster/



































                                                                                                                                                                             

quarta-feira, 29 de novembro de 2023

Autenticando Proxmox com FreeIPA

 O FreeIPA é um sistema de gerenciamento de identidade gratuito e de código aberto. FreeIPA é o projeto de código aberto upstream para o Red Hat Identity Management.

E nesse caso vamos efetuar a autenticação do proxmox pelo freeipa

No FreeIPA crie um grupo e adicione os usuários a serem usado no proxmox 

no caso eu criei um grupo chamado "proxmox" onde os usuários nesse grupo podem gerenciar o proxmox , mas claro posso criar outros grupos para ter restriçoes nos proxmox , exemplo só para iniciar e reiniciar um vm , etc.. 

e nesse grupo eu adicionei o meu usuário e o admin 

Agora no proxmox vá em 'Datacenter > Permissions > Realms > e vá em Add selecione LDAP Server'


A Imagem aqui é auto explicativo nas informações a serem informadas 
Só add o Realm , Base Domain Name: , em Server add o IP do FreeIPA
em User Attribute use o 'uid' 
Agora em Sync Options adicione as informações para efetuar o sync de usuários e grupos , resumindo seria a conexão ali o usuário , senha ...
e marque as 3 opções 

e Depois só fazer um Sync 


Feito isso , agora vamos ajustar a permissão do Grupo 

Vá em "Datacenter > Permissions > Add > Group Permission


Em Path add o " / " que é a raiz 
Em Group add o Grupo Criado no FreeIPA no caso o proxmox-home.local
Em Role add como Administrator ;
e com isso todos do grupo " proxmox" serão admin do proxmox 



Agora só logar 
Em Realm : altere para o Domínio 




Referencias : 
https://hyperionlocal.net/index.php/2021/12/17/freeipa-part-3-integrating-other-services-into-your-domain/ 

https://forum.proxmox.com/threads/configuring-freeipa-ldap-server-with-proxmox.113500/