Content
Setup K3d + FluxCD + Git genérico
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)
-
K3d instalado
-
FluxCD CLI instalado
Passo-a-passo
Para configurar um K8s (Kubernetes) cluster local, vamos usar o K3d para gerenciar o cluster local, que executa todos os components do K3s (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
# 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.
flux bootstrap git \
--url=<ssh://seugit:22/meu/repositorio> \
--path=clusters/dev \
--private-key-file=<path até sua chave privada>
► 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: <sua chave pública>
Esse comando vai executar e chegar em um pergunta. Apenas responda y.
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