Installation d'un Cluster Kubernetes K0s Single Node géré avec Muppy¶
Ce document décrit comment configurer un Cluster K0s single node pour une utilisation optimale avec muppy.io / Pack8s.
Danger
La version single-node avec une IP publique n'est pas secure et ne doit être utilisée que pour du développement ou du test avec des données sans importance. Si vous avez besoin de sécurité, un cluster Kubernetes managé ou reportez vous à la version 'secured' de ce guide.
Installation sur Ubuntu 20.04¶
1. Installer un serveur Linux compatible¶
- Ubuntu 20.04
- Au moins une 1 IP Publique
- Selon le provider utilisez une Clef SSH ou notez le user et le password root.
S' il existe, utilisez le "Server Type" correspondant à votre serveur. Par exemple pour Contabo, muppy provisionne un user mpyadm avec Clef SSH et bloque le login root via SSH.
2. Enrôlez le serveur dans Muppy¶
Créez ou importez un Host.
3. Installez Kubernetes avec K0s¶
- Connectez vous en SSH puis exécutez le commandes suivantes:
curl -sSLf https://get.k0s.sh | sudo sh
sudo mkdir -p /etc/k0s
sudo config create admin | sur tee -a /etc/k0s/k0s.yaml
spec.api.sans:
sudo k0s install controller -c /etc/k0s/k0s.yaml --single
sudo k0s start
# Récupérer l'IP Publique en copiant la sortie de la commande suivante
echo "# PUBLIC_IP_V4 => $(curl --silent ipinfo.io | jq .ip)"
# Récupérer un kubeconfig
sudo k0s kubeconfig admin > $HOSTNAME-kubeconfig.yaml
# puis téléchargez le fichier ou copiez son contenu dans le presse papier
# Check
sudo k0s kubectl get -A all
4. Enregistrez le cluster k8s dans Muppy¶
- Utilisez Muppy / K8s / K8s Clusters pour créer un Cluster.
- Uploadez le fichier de config via le champ Kubeconfig ou copiez/coller le contenu dans les champs "Kubeconfig" et "Kubeconfig" filename.
- Ajuster les valeurs
nameetserveravec l'IP de la gateway utilisée pour accéder au control plane - Renseignez les champs Qualifier et Provider
Cliquez sur "Update Info" et vérifiez que les Namespaces sont bien récupérés.
5. Installer les paquets d'infrastructure¶
Muppy a besoin installer les services d'infrastructure suivants:
- MetalLB
- Cert-Manager
- Traefik
- Kubernetes-Dashboard
- Muppy Kubernetes-Dashboard ingress
Ces paquets doivent être installés avec le Qualifier "Infrastructure"
Installation de MetalLB¶
Attention au problème: https://github.com/metallb/metallb/issues/1597, bien suivre les étapes suivantes.
1) Création du Package Release MetalLB
Dans Muppy, créer un Package Release en renseignant:
- Cluster
- Package Profile: MetalLB
- Qualifier: Infrastructure
- Editer les values pour ajouter l'IP Publique en tant que Range.
Attention si vous déployer sur un server publique, désactivez UFW le temps du déploiement (cf. § suivant).
2) Désactivation du Firewall
Connectez vous en SSH sur le serveur pour désactiver UFW et rebooter pour nettoyer toute trace du Firewall
sudo ufw disable
3) Installation du Package Release
Une fois que le serveur est revenu up, retournez dans Muppy pour installer le Package Release MetalLB
Selon les Clouds Providers, il peut être nécessaire de modifier la config metal-l2-pool pour annoncer les Pools sur chaque interface.
Exemples:
- OVH KimSuffi, il faut ajouter le bloc suivant dans la config: metallb-l2-pool.yaml
# OVH Kimsufi
spec:
interfaces:
- eno1
ipAddressPools:
- expensive-pool-1
# Infomaniak Public Cloud
spec:
interfaces:
- ens3
ipAddressPools:
- expensive-pool-1
- CONTABO VPS, rien à faire
**4) Réactivation du Firewall **
Une fois que le Package Release est installé, connectez vous en SSH et réactivez le firewall si vous l'avez coupé avec
sudo ufw enable
Lancez un petit nmap -p- pour vérifier que tout est fermé.
Warning
L'issue de l' installation de MetalLB dépend énormément de votre provider.
Parfois le fichier metallb-l2-pool.yaml est en erreur alors que metallb-native.yaml est bien déployé. Dans ce cas, vérifiez si le pod controller-??????-?? du namespace metallb-system est bien up. Si c'est le cas, relancez simplement un Apply Package. Il arrive que le webhook échoue parce qu'il a été appellé avant que le controller ne soit (complétement) up ce qui provoque un restart du controller.
Installation de Cert-Manager¶
Dans Muppy, créer un Package Release en renseignant:
- Cluster
- Package: cert-manager
- Qualifier: Infrastructure
Cliquez sur [Save]
Cliquez sur [Reload Templates]
Cliquez sur [Install]
Installation de Traefik Pack8s¶
Créez un Credential Vault de type Apache htpassword nommé traefik-dashboard et renseignez User et Password.
Dans Muppy, créer un Package Release en renseignant:
- Cluster
- Profile: Traefik Pack8s
- Namespace: traefik-pack8s
- Qualifier: Infrastructure
- Hostname: nobody
- Onglet Network
- Hostname generator: K8s hostname.namespace.cluster FQDN Generator
- DNS Domain
Cliquez sur [Save]
Cliquez sur [Reload Templates], [Refresh Dashboard]
Cliquez sur [Install]
Une fois que c'est terminé, cliquez sur [Update info]
Allez dans l'onglet Network et sélectionnez le Loadbalancer qui vient d'être créé.
Cliquez sur [Setup DNS Record]
Ouvrez le dashboard (n'oubliez pas d'ajouter /dashboard/ à l'URL).
Installation de Kubernetes-Dashboard¶
Dans Muppy, créer un Package Release en renseignant:
- Cluster
- Package: Kubernetes-Dashboard
- Qualifier: Infrastructure
Cliquez sur [Save]
Cliquez sur [Reload Templates]
Cliquez sur [Install]
Eventuellement faire Update info et affecter le namespace: kubernetes-dashboard créé par le package
Installation de Muppy k8s Dashboard ingress¶
Dans Muppy, créer un Package Release en renseignant:
- Cluster
- Profile: Muppy k8s Dashboard ingress
- Namespace:
- Qualifier: Infrastructure
- Hostname: hoob
- Onglet Network
- {hostname}.{cluster_name}.{{DNS Domain}}
- Loadbalancer
- Cliquez sur Setup DNS Record
Cliquez sur [Save]
Cliquez sur [Reload Templates]
Cliquez sur [Install]
Autorisation des Pods à accéder à PostgreSQL¶
- Récupérer le CIDR des Pods (utiliser le Dashboard pour inspecter les Nodes)
- Ajouter le CIDR dans le pg_hba.conf (via l'objet cluster de Muppy)
Valeurs relevés pour les CIDRs
- kube-router = 10.244.0.0/24
- calico microK8s = 10.1.0.0/16 - Calico Pods Range
Désinstallation de K0s¶
Voir https://docs.k0sproject.io/v1.23.6+k0s.2/install/
Références¶
- https://docs.k0sproject.io/v1.21.2+k0s.0/install/
- https://cloudnativelabs.github.io/post/2017-05-1-kube-network-policies/
- https://techviewleo.com/install-kubernetes-cluster-using-k0s
Utiliser le logging UFW¶
sudo ufw logging on
sudo tail -f /var/log/ufw.log
sudo ufw logging off
