Architecture et Prérequis du Système
L'installation binaire permet un contrôle total sur les composants du cluster Kubernetes, facilitant ainsi la compréhension interne et la maintenance à long terme par rapport aux outils automatisés comme kubeadm. Cette procédure cible des machines sous CentOS 7.x.
Spécifications matérielles minimales :
- Porcesseur : 2 vCPUs ou plus.
- Mémoire : 2 Go de RAM minimum.
- Stockage : 30 Go d'espace disque.
- Réseau : Connectivité totale entre les nœuds et accès Internet pour les images.
- Système : Désactivation impérative du SWAP.
Configuration Initiale de l'Environnement
Préparez chaque nœud (Master et Workers) avec les configurations système nécessaires.
# Définition des hôtes
cat << 'EOF' >> /etc/hosts
192.168.208.128 k8s-master-01
192.168.208.129 k8s-worker-01
192.168.208.130 k8s-worker-02
EOF
# Nettoyage et optimisation système
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# Installation des utilitaires indispensables
yum install -y wget vim net-tools ntpdate ipvsadm ipset jq conntrack libseccomp
# Optimisation des paramètres du noyau pour Kubernetes
cat > /etc/sysctl.d/k8s-optimizations.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
fs.inotify.max_user_instances = 8192
EOF
sysctl --system
Infrastructure de Stockage : Cluster Etcd
Etcd est la base de données distribuée stockant l'état du cluster. Sa sécurisation par certificats SSL est primordiale.
# Installation des outils CFSSL pour la gestion des PKI
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssl_1.6.1_linux_amd64 -O /usr/local/bin/cfssl
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.1/cfssljson_1.6.1_linux_amd64 -O /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl*
# Configuration du service Etcd (exemple pour le master)
mkdir -p /etc/etcd/ssl /var/lib/etcd
cat > /etc/etcd/etcd.config.env << EOF
ETCD_NAME="node-01"
ETCD_DATA_DIR="/var/lib/etcd/cluster.etcd"
ETCD_LISTEN_CLIENT_URLS="https://192.168.208.128:2379,https://127.0.0.1:2379"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.208.128:2379"
EOF
Le fichier d'unité Systemd pour Etcd doit pointer vers les certificats générés via CFSSL pour activer l'authentification mutuelle TLS (mTLS).
Déploiement du Control Plane (Master)
Le Master héberge l'API Server, le Controller Manager et le Scheduler. Les binaires doivent être placés dans /usr/local/bin/.
Configuration de kube-apiserver
L'API Server est le point d'entrée central. Voici un exemple de configuration pour le fichier /etc/kubernetes/apiserver.env :
APISERVER_ARGS="--secure-port=6443 \
--advertise-address=192.168.208.128 \
--authorization-mode=RBAC,Node \
--etcd-servers=https://192.168.208.128:2379 \
--service-cluster-ip-range=10.255.0.0/16 \
--token-auth-file=/etc/kubernetes/token.csv \
--tls-cert-file=/etc/kubernetes/ssl/apiserver.pem \
--tls-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem \
--client-ca-file=/etc/kubernetes/ssl/ca.pem \
--allow-privileged=true \
--v=2"
Kube-Controller-Manager et Kube-Scheduler
Ces composants nécessitent des fichiers kubeconfig pour s'authentifier auprès de l'API Server local. Ils gèrent respectivement l'état des ressources et le placement des pods.
# Exemple d'activation du scheduler
systemctl enable --now kube-scheduler
Configuration des Nœuds Workers
Les workers exécutent les charges de travail via Docker, Kubelet et Kube-proxy.
Moteur de conteneur : Docker
Installez Docker et configurez le driver cgroup sur systemd pour garantir la stabilité avec Kubelet.
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {"max-size": "50m"}
}
EOF
systemctl enable --now docker
Initialisation de Kubelet (TLS Bootstrapping)
Kubelet utilise le mécanisme de bootstrap pour obtenir automatiquement ses certificats. Sur le master, générez un token et associez-le au rôle system:node-bootstrapper.
# Sur le nœud worker (kubelet-config.yml)
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
address: 0.0.0.0
port: 10250
cgroupDriver: systemd
clusterDNS: ["10.255.0.2"]
clusterDomain: "cluster.local"
authentication:
anonymous:
enabled: false
webhook:
enabled: true
Une fois Kubelet démarré, approuvez la demande de certificat (CSR) sur le master : kubectl certificate approve <CSR_NAME>.
Réseau et Services Additionnels
Le cluster nécessite un plugin CNI (Container Network Interface) pour la communication entre pods.
- Calico : Gère le routage L3 et les politiques réseau. Appliquez le manifeste via
kubectl apply -f calico.yaml. - CoreDNS : Indispensable pour la résolution de noms interne au cluster.
- Dashboard : Interface graphique optionnelle pour la gestion visuelle des ressources.
Vérifiez l'état final du cluster avec la commande suivante :
kubectl get nodes
kubectl get cs