Geeky Stuff: Installation Process - gpillon/k4all GitHub Wiki

K4all Installation Phases

The installation process is divided into phases and varies by node type (bootstrap, control, worker). Each phase is managed by systemd services.

Common Installation Phases (All Node Types)

Phase 1: Base Setup

Handled by fck8s-k8s-setup-ph1.service: Key operations:

  • Installs required packages (kubeadm, kubectl, kubelet, crio, etc.)
  • Configures system for Kubernetes
  • Triggers reboot after completion

Phase 2: Network Configuration

Handled by fck8s-k8s-setup-ph2.service: Key operations:

  • Configures OpenvSwitch networking
  • Sets up static/dynamic IP based on configuration
  • Configures firewall rules for chosen CNI
  • Enables required services
flowchart TD
A[network-online.target] --> B[fck8s-set-static-ip]
C[fck8s-lvm-setup]
B --> D[fck8s-set-hostname]
D --> E[fck8s-k8s-setup-ph1]
E --> F[fck8s-k8s-setup-ph2]
F --> G[fck8s-k8s-setup-ph3]
G & H[crio] --> I[fck8s-k8s-setup-init]

Phase 3: Pre-Kubernetes Setup

Varies by node type, base script in setup-k8s-ph3.sh:

Node-Specific Installation Flow

Bootstrap Node

flowchart TD
A[network-online.target] --> B[fck8s-helm-setup]
C --> E["fck8s-taint-master-schedulable"]
C[fck8s-k8s-setup-init] --> D["fck8s-node-ready-and-schedulable"]
H --> P[fck8s-ingress-setup]
B & D & I & J[fck8s-lvm-setup] --> K[fck8s-topolvm-setup]
D --> F[fck8s-metric-server-setup]
B & D --> H[fck8s-dashboard-setup]

B & D --> I[fck8s-certmanager-setup]
B & D --> R[fck8s-cni-setup]

D --> L[fck8s-wait-default-service-account]
D --> M[fck8s-setup-ovs-cni]
D --> N[fck8s-setup-metallb]
D --> N[fck8s-setup-features]
L --> O[fck8s-custom-manifests-setup]
P --> Q[fck8s-update-routes]
P & D --> R[fck8s-update-routes.timer]

NOTE: fck8s-taint-master-schedulable: Name is deceptive, it means 'user workload schedulable'

Key Installation Scripts

Network Configuration

  • setup-k8s-ph2.sh: Configures Host OpenvSwitch & firewall (if configured, still WIP)
  • set-static-ip.sh: Configures static IP based on configuration
  • set-hostname.sh: Sets node hostname
  • setup-ovs-cni.sh: Configures OpenvSwitch CNI (Bootstrap Only)
  • setup-cni-calico.sh Configures Calico CNI (Bootstrap Only, Default CNI)
  • setup-cni-cilium.sh: Configures Cilium CNI (Bootstrap Only, Alternative CNI, Testing)

Kubernetes Setup

  • setup-k8s-init.sh: Setups Kubernetes (Bootstrap Only)

Feature Installation

setup-features.sh (Bootstrap Only) Handles optional features like:

  • Virtualization support
  • ArgoCD installation
  • Additional custom manifests

High Availability Setup (still WIP)

For HA clusters, additional configuration is handled by:

  • setup-k8s-ph3.sh (Control plane):

Post-Installation Services

Dashboard and Monitoring

  • Metric server installation
  • Kubernetes dashboard setup
  • Ingress controller configuration

Storage Setup

  • Volume setup
  • TopoLVM configuration

Network Services

  • MetalLB for load balancing
  • Ingress controller setup

Update and Maintenance

The installation creates maintenance scripts:

  • generate_join.sh: Generates cluster join commands
  • update-routes.sh: Updates ingress routes
  • Installation script are in /usr/local/bin/