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 configurationset-hostname.sh
: Sets node hostnamesetup-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 commandsupdate-routes.sh
: Updates ingress routes- Installation script are in
/usr/local/bin/