Mostrando postagens com marcador FedoraCOREOS. Mostrar todas as postagens
Mostrando postagens com marcador FedoraCOREOS. Mostrar todas as postagens

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 : 




sábado, 11 de novembro de 2023

AWX no fedora CoreOS

   O AWX é uma plataforma de automação de TI de código aberto que fornece recursos para automação de tarefas operacionais, gerenciamento de configuração e orquestração de fluxos de trabalho. Ele é uma versão upstream do Red Hat Ansible Tower e é mantido pela comunidade.

 O Ansible é uma ferramenta de automação de TI que permite automatizar tarefas de gerenciamento de configuração, implantação de aplicativos e orquestração de infraestrutura. O AWX, por sua vez, é uma implementação de código aberto do Ansible Tower, oferecendo uma interface web para criar, monitorar e executar playbooks Ansible.

Algumas das principais características do AWX incluem:

* Interface Gráfica:

Fornece uma interface web intuitiva para gerenciar e executar playbooks do Ansible.

* Controle de Acesso:

Permite configurar políticas de controle de acesso para diferentes usuários e equipes.

* Agendamento de Tarefas:

Oferece a capacidade de agendar a execução automatizada de playbooks em horários específicos.

*Histórico e Auditoria:

Registra o histórico de execução das tarefas e fornece recursos de auditoria.

* Integração com Outras Ferramentas:

Pode ser integrado a outras ferramentas e sistemas através de APIs.

* Orquestração:

Suporta a orquestração de fluxos de trabalho mais complexos envolvendo várias tarefas e servidores.

  O AWX é útil para organizações que desejam adotar práticas de DevOps, automação de infraestrutura e gerenciamento de configuração para melhorar a eficiência operacional e reduzir a probabilidade de erros humanos em ambientes de TI.


Mão na Massa 

Vamos instalar o Awx de forma single host , facilidando muito a instalação mas não é o ideal , o correto é ele rodar em cluster , mas isso fica outro tutorial 

Instale o K3s 

sudo curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.27.6+k3s1 sudo sh -s - --write-kubeconfig-mode 644

Reinicie o host

$ sudo systemctl reboot


AWX Operator

vamos clonar o repo do Kurokobo , pois vamos instalar de forma single host e onde podemos deixar nossas playbook centralizado no host também 

$ git clone https://github.com/kurokobo/awx-on-k3s.git

$ cd awx-on-k3s/

$ git checkout 2.7.2

$ kubectl apply -k operator

e para ver se ficou ok 



Vamos preparar as arquivos de configuração inicial 

Crie o certificado 

$ AWX_HOST="awx.home.local"

$ openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -out ./base/tls.crt -keyout ./base/tls.key -subj "/CN=${AWX_HOST}/O=${AWX_HOST}" -addext "subjectAltName = DNS:${AWX_HOST}"

Ajuste o hostname no arquivo base/awx.yaml

...
spec:
  ...
  ingress_type: ingress
  ingress_tls_secret: awx-secret-tls
  hostname: awx.home.local     👈👈👈
...

Ajuste a senha no arquivo base/kustomization.yaml 

..
  - name: awx-postgres-configuration
    type: Opaque
    literals:
      - host=awx-postgres-13
      - port=5432
      - database=awx
      - username=awx
      - password=Ansible123!     👈👈👈
      - type=managed

  - name: awx-admin-password
    type: Opaque
    literals:
      - password=Ansible123!     👈👈👈
...
Vamos ajustar agora os dados persistentes , 
ajuste o arquivo base/pv.yaml e adicionar o caminho /home/<user>/data/..

$ cd ~
$ sudo mkdir -p data/postgres-13
$ sudo mkdir -p data/projects
$ sudo chmod 755 data/postgres-13
$  chown 1000:0 data/projects
 Execute o Deploy
$ kubectl apply -k base
Podes acompanhar o progresso pelo comando
$ kubectl -n awx logs -f deployments/awx-operator-controller-manager
Após finalizado só acessar pelo hosname configurado 



Referencia:  https://github.com/kurokobo/awx-on-k3s





terça-feira, 20 de julho de 2021

Podman Machine

 Podman Machine é um recurso que ajuda a criar uma máquina virtual (VM) com Fedora CoreOS básico para usar com contêineres e cargas de trabalho em contêiner.


Para iniciar uma vm com podman use o comando

podman machine init <nome da vm > se não use ele vai usar um nome default


$ podman machine init


$ podman machine init fcoreos

use o comando podman machine start <nome da vm >para iniciar a vm se não colocar o nome ele inicia a vm default

$ podman machine start fcoreos

Pode listar as vm que tu tens e se estão rodando ou não com o comando podman machine list

$ podman machine list


e para acessar a VM use o comando

podman machine ssh <nome da vm>onde irar acessar via ssh a VM se não colocar o nome ele ira acessar a mv default caso esteja rodando se não ele não vai conectar via ssh e tem que por o nome da vm para acessar


$ podman machine ssh fcoreos



E para parar a VM digite o comando

podman machine stop <nome da vm> caso esteja usando a vm default não precisa por o nome , mas caso contrário

tem que por o nome da vm que esta rodando

Tem o comando podman machine --help onde ajudar

$ podman machine --help


Espero que ajude

Guia de Referencia :

https://opensource.com/article/21/7/linux-podman

http://docs.podman.io/en/latest/markdown/podman-machine.1.html


segunda-feira, 12 de abril de 2021

Fedora CoreOS K3S AWX





Uma dica rápida pra subir o AWX no Fedora CoreOS com K3S

Primeiro, vamos instalar o pacote k3s-selinux via rpm-ostree:

# rpm-ostree install https://github.com/k3s-io/k3s-selinux/releases/download/v0.3.stable.0/k3s-selinux-0.3-0.el8.noarch.rpm

Reinicie 

#  systemctl reboot

Agora vamos fazer a instalação do k3s:

# export K3S_KUBECONFIG_MODE="644"
# export INSTALL_K3S_EXEC="--flannel-backend=host-gw"

# curl -sfL https://get.k3s.io | sh -


Vamos criar o diretório para o  Persistent Volume

#mkdir -p /var/k8s-pv/awx-postgres

# cat <<EOF >> awx-postgres-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-awx-postgres-0
  labels:
    type: local
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/var/k8s-pv/awx-postgres"
EOF


cria um arquivo agora 

# echo "
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
spec:
  tower_ingress_type: Ingress
" > awx.yml

Agora vamos executar 

# kubectl apply -f awx-postgres-pv.yml
# kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/devel/deploy/awx-operator.yaml
# kubectl apply -f awx.yml

Agora só acompanhar vendo os logs 

kubectl logs -f awx-operator-........

e ao final 


Verifique em qual porta esta rodando o awx no caso na porta 30922

 # kubectl get svc 




e verifique a senha de admin 

# kubectl get secret awx-admin-password -o jsonpath='{.data.password}' | base64 --decode

e só acessar agora 



 





sexta-feira, 17 de julho de 2020

Instalando Fedora COREOS no KVM


Vamos instalar em uma VM usando uma imagem livecd. 

Versão usada do Fedora CoreOs: 32.20200601.3.0 stable 

Máquina virtual KVM com Virt-Manager no Fedora 32. 

Link do download dessa versão 
https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200601.3.0/x86_64/fedora-coreos-32.20200601.3.0-live.x86_64.iso


Vamos criar o nosso arquivo ignition somente com a chave pública para podemos acessar o nosso Fedora CoreOS via ssh sem senha. 

Gere uma chave ssh: 

 ssh-keygen 

No seu diretório ~/.ssh terá 2 arquivos:
  • id_rsa
  • id_rsa.pub

Vamos usar o conteúdo do .pub. 

Crie o arquivo .fcc: 

 vim example.fcc 

com o conteúdo: 

variant: fcos
version: 1.0.0
passwd:
   users:
    - name: core
       ssh_authorized_keys:
         - ssh-rsa AAAA...


Uma maneira fácil de usar fcct é executá-lo em um contêiner com podman, no caso eu estou usando o Fedora 32 que vem com o podman por padrão. 

Baixe o container do fcct: 

 podman pull quay.io/coreos/fcct:release 

Execute fcct no arquivo FCC: 

 podman run -i --rm quay.io/coreos/fcct:release --pretty --strict < example.fcc > example.ign 

Agora vamos usar o arquivo do example.ign para instalar o Fedora CoreOS e passar a nossa chave pública. 

Resumindo, o arquivo example.ign fica assim: 

{
  "ignition": {
    "version": "3.0.0"
  },
  "passwd": {
    "users": [
      {
        "name": "core",
        "sshAuthorizedKeys": [
          "ssh-rsa AAAA..........."
        ]
      }
    ]
  }
}

Esse seu arquivo envia para seu servidor web para podemos usar na instalação do Fedora CoreOS. 

Agora vamos iniciar o Livecd do Fedora CoreOS. 

Ao iniciar o Fedora CoreOS Live, já tem as instruções de instalação



Baixe o arquivo do seu servidor web no Fedora CoreOS: 

 curl -LO https://192.168.122.1/example.ign



E agora instale o Fedora CoreOS: 

 sudo coreos-installer install /dev/vda --ignition-file example.ign





Reinicie a máquina: 

 sudo reboot 

E ao iniciar irá mostrar o endereço IP que pode ser alterado mais tarde ou até mesmo pode add no arquivo .fcc.



Agora vamos acessar nosso Fedora CoreOS via ssh com usuário core sem senha: 

 ssh core@<ip do fedoracoreos>



Agora tu podes usar o podman para subir e testar seus containers. 

Espero que ajude!