# Requisitos do sistema operacional * Debian Linux ou qualquer distro Linux bem atualizada. Nota: WSL não suportado! * Foi utilizado Arch Linux para a criação do passo-a-passo * Docker Engine instalado ([guia instalação](https://docs.docker.com/engine/install/)) * [K3d](https://k3d.io/stable/) instalado * [FluxCD CLI](https://fluxcd.io/flux/installation/#install-the-flux-cli) instalado # Passo-a-passo Para configurar um K8s (Kubernetes) cluster local, vamos usar o [K3d](https://k3d.io/stable/) para gerenciar o cluster local, que executa todos os components do [K3s](https://k3s.io/) (distribuição de K8s _lightweight_) dentro de containers do Docker, facilitando a inicialização e removendo o acoplamento com o sistema operacional tradicional do K3s. Criaremos um cluster local de desenvolvimento: `caronashow-localdev` Em cada etapa abaixo,  ## Criação do cluster de K8s Inicialização básica ```sh # Comando para criação abaixo $ k3d cluster create caronashow-localdev [...] # Logs do comando # Fim com sucesso INFO[0012] Cluster 'caronashow-localdev' created successfully! INFO[0012] You can now use it like this: kubectl cluster-info # Confirme se está tudo funcionando: $ kubectl cluster-info Kubernetes control plane is running at https://0.0.0.0:33531 CoreDNS is running at https://0.0.0.0:33531/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://0.0.0.0:33531/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. ``` ## Criação de repositório Git É necessário criar um repositório Git. Ele será usado para definir o estado de todos os manifests (os arquivos `.yaml`) do cluster. Qualquer repositório git que seja acessível pelo cluster é suficiente. Recomendo criar um repositório pessoal no GitLab para seus testes. Anote a URL usada para clonar o repositório via SSH (ssh://) e clone ele localmente no seu computador (git clone). Dentro do repositório, crie a seguinte estrutura de pastas: ├── clusters │   └── dev Os arquivos do cluster serão criados em `/clusters/dev/`. Essa estrutura permitirá a criação de múltiplos clusters nesse repositório no futuro. ## Inicialização do FluxCD O FluxCD é responsável por manter o estado do cluster em sincronismo com o estados dos manifests no repositório Git. ```sh flux bootstrap git \ --url= \ --path=clusters/dev \ --private-key-file= ► cloning branch "main" from Git repository "ssh://seugit.org:22/seu/caronashow-local-clusters.git" ✔ cloned repository ► generating component manifests ✔ generated component manifests ✔ component manifests are up to date ► installing components in "flux-system" namespace ✔ installed components ✔ reconciled components ► determining if source secret "flux-system/flux-system" exists ► generating source secret ✔ public key: ``` Esse comando vai executar e chegar em um pergunta. Apenas responda `y`. ```sh Please give the key access to your repository: y ► applying source secret "flux-system/flux-system" ✔ reconciled source secret ► generating sync manifests ✔ generated sync manifests ✔ committed sync manifests to "main" ("redacted") ► pushing sync manifests to "ssh://seugit.org:22/seu/caronashow-local-clusters.git" ► applying sync manifests ✔ reconciled sync configuration ◎ waiting for GitRepository "flux-system/flux-system" to be reconciled ✔ GitRepository reconciled successfully ◎ waiting for Kustomization "flux-system/flux-system" to be reconciled ✔ Kustomization reconciled successfully ► confirming components are healthy ✔ helm-controller: deployment ready ✔ kustomize-controller: deployment ready ✔ notification-controller: deployment ready ✔ source-controller: deployment ready ✔ all components are healthy ``` Para verificar que funcionou corretamente, atualize sua branch local (`git pull`) e observe se o Flux criou um commit no seu repositório adicionando os arquivos como visto abaixo: ├── clusters │   └── dev │       └── flux-system │           ├── gotk-components.yaml │           ├── gotk-sync.yaml │           └── kustomization.yaml