← Retour aux guides

00 Prérequis et préparation

Installation des outils nécessaires, structure du dépôt et configuration initiale pour déployer Skube

taloskubernetessetup

Prérequis

Avant de commencer, assurez-vous d’avoir installé les outils suivants sur votre poste de travail.

Outils nécessaires

Nom URL Note
Git git-scm.com —
talosctl Documentation Talos ⚠️ Assurez-vous de prendre la dernière version
kubectl kubernetes.io —
velero velero.io (optionnel)

Structure du dépôt — structure de fichiers

kube/
├── README.md
├── .gitignore
│
├── docs/
│   ├── 00-prerequis.md
│   ├── 01-bootstrap-talos.md
│   ├── 02-bootstrap-flux.md
│   ├── 03-ajouter-un-cluster.md
│   └── 04-ajouter-une-app.md
│
├── model_node/                    # Je crée un template simple avec les IPs, le stockage et les hostnames que je patcherai
│   ├── PC01.yaml
│   ├── PC01.yaml
│   ├── PC02.yaml
│   └── PC02.yaml
│    
│
├── model_kube/                    # Fonctions simples du cluster
│   ├── mono-host/                 # <10 users, 1 node
│   └── mini-cluster-3node/        # <20-30 users, 3 nodes
│   
│
├── clusters/                      # ⭐ Un dossier par cluster réel déployé
│   ├── famille-maison/
│   │   ├── app-config/            # vars par app (non-secret, committed)
│   │   ├── node/                  # 🔒 gitignore — patchs IP/hostname finaux
│   │   └── talos/                 # 🔒 gitignore — configs générées avec secrets
│   │       ├── controlplane.yaml
│   │       ├── worker.yaml
│   │       └── talconfig.yaml
│   │
│   └── cluster-exemple-2/         # structure identique pour un futur cluster
│       └── ...
│
└── apps/                          # Définitions d'apps réutilisables (base commune)
    └── base/
        ├── pocket-id/
        │   ├── kustomization.yaml
        │   ├── deployment.yaml
        │   ├── service.yaml
        │   └── httproute.yaml
        ├── jellyfin/
        ├── vaultwarden/
        ├── seafile/
        ├── tuwunel/
        └── netbird-client/

Préparation du dépôt

Option 1 — Accès au dépôt distant

Si vous avez accès au dépôt Git distant, clonez-le directement :

git clone $URL

Option 2 — Créer le dépôt localement

Sinon, voici comment monter la structure du dépôt manuellement :

git init kube
cd ./kube

mkdir -p apps
mkdir -p docs
mkdir -p model_node
mkdir -p model_kube
mkdir -p clusters/_Model/node
mkdir -p clusters/_Model/talos

Ajoutez ensuite les patterns nécessaires au .gitignore :

cat > .gitignore <<EOF
*.env
clusters/*/talos
clusters/*/node
EOF

info; Note : les dossiers talos/ et node/ contiennent des configurations générées avec des secrets. Ils sont volontairement exclus du versioning Git.

Option 2 — (suite) model_kube par défaut

Voici deux modèles de configuration cluster par défaut.

info; Tenez compte que les modèles présentés ici peuvent ne pas être à jour. (Actuellement optimisés pour la version 1.14 et incompatibles avec les versions antérieures.)

Voici un modèle de configuration optimisé pour tester. Aucun CNI inclus par défaut : nous installerons Cilium dans les prochaines étapes, ainsi que FluxCD, qui installera Longhorn et Cert-Manager.

---
apiVersion: v1alpha1
kind: KubeAdmissionControlConfig
name: PodSecurity
configuration:
    exemptions:
        namespaces:
            - longhorn-system
---
apiVersion: v1alpha1
kind: KubeFlannelCNIConfig
$patch: delete
---
apiVersion: v1alpha1
kind: KubeProxyConfig
enabled: false
---
apiVersion: v1alpha1
kind: KubeExternalManifestConfig
name: fluxcd
url: https://github.com/fluxcd/flux2/releases/latest/download/install.yaml
---
apiVersion: v1alpha1
kind: KubeInlineManifestConfig
name: longhorn
manifest: |
      apiVersion: v1
      kind: Namespace
      metadata:
        name: longhorn-system
      ---
      apiVersion: source.toolkit.fluxcd.io/v1
      kind: HelmRepository
      metadata:
        name: longhorn
        namespace: longhorn-system
      spec:
        interval: 5m0s
        url: https://charts.longhorn.io/
      ---
      apiVersion: helm.toolkit.fluxcd.io/v2
      kind: HelmRelease
      metadata:
        name: longhorn
        namespace: longhorn-system
      spec:
        interval: 10m
        chart:
          spec:
            chart: longhorn
            version: "v1.12.1"
            sourceRef:
              kind: HelmRepository
              name: longhorn
              namespace: longhorn-system
            interval: 10m
        values:
          replicaCount: 1
          preUpgradeChecker:
            jobEnabled: false
          csi:
            attacherReplicaCount: 1
            provisionerReplicaCount: 1
            resizerReplicaCount: 1
            snapshotterReplicaCount: 1
---
apiVersion: v1alpha1
kind: KubeInlineManifestConfig
name: cert-manager 
manifest: |
      apiVersion: v1
      kind: Namespace
      metadata:
        name: cert-manager
      ---
      apiVersion: source.toolkit.fluxcd.io/v1
      kind: HelmRepository
      metadata:
        name: cert-manager
        namespace: cert-manager
      spec:
        type: "oci"
        interval: 5m0s
        url: oci://quay.io/jetstack/charts/
      ---
      apiVersion: helm.toolkit.fluxcd.io/v2
      kind: HelmRelease
      metadata:
        name: cert-manager
        namespace: cert-manager
      spec:
        interval: 10m
        chart:
          spec:
            chart: cert-manager
            version: "v1.21.1"
            sourceRef:
              kind: HelmRepository
              name: cert-manager
              namespace: cert-manager
            interval: 10m
        values:
          crds:
            enabled: true
          podDnsPolicy: "None"
          podDnsConfig:
            nameservers:
              - "1.1.1.1"
              - "1.0.0.1"

Option 2 — (suite) model_node

voici un model simple. Pour plus de documentation, consultez https://docs.siderolabs.com/talos/v1.14/networking/configuration/overview

---
## export talossrv="--insecure --nodes 192.168.0.100"
version: v1alpha1
machine:
    time:
      servers:
        - time.cloudflare.com
    install:
        disk: /dev/sde
        image: ## Allez sur https://factory.talos.dev/ et générez une image adaptée à vos besoins
        wipe: true
        grubUseUKICmdline: true 
---
apiVersion: v1alpha1
kind: HostnameConfig
hostname: bismuth
auto: off
---
apiVersion: v1alpha1
kind: ResolverConfig
nameservers:
    - address: 8.8.8.8
    - address: 1.1.1.1
---
apiVersion: v1alpha1
kind: LinkConfig
name: eth0
mtu: 1500
up: true
addresses:
    - address: 192.168.0.3/24
routes:
  - gateway: 192.168.0.1
    metric: 210
---