Installation sur un nœud unique avec k0s
k0s est une distribution Kubernetes légère, adaptée à une installation Geocore sur un nœud unique. Ce guide utilise un hôte Ubuntu Server et suit les recommandations pour un déploiement sur une machine unique.
Avant de commencerCommencez par satisfaire les prérequis OnPremise. En particulier, assurez-vous d’avoir accès au registre Centiloc Harbor et quekubectlet Helm sont disponibles sur l’hôte.
Sur un hôte Ubuntu Server vierge, installez et démarrez un contrôleur k0s sur un nœud unique :
curl -sSLf https://get.k0s.sh | sudo sh
sudo k0s install controller --single
sudo systemctl daemon-reload
sudo k0s start
sudo k0s kubeconfig admin > ~/.kube/config
Vérifiez que le nœud est prêt :
kubectl get nodes
La sortie doit afficher un nœud avec l’état Ready :
NAME STATUS ROLES AGE VERSION
myk0s Ready control-plane 1d v1.28.2+k0s
Sur un nœud unique, Geocore peut déployer PostgreSQL dans le cluster. Créez un répertoire sur l’hôte pour ses données persistantes :
sudo mkdir -p /opt/geocore/pg/data
sudo chown $USER:$USER -R /opt/geocore
sudo chmod 777 -R /opt/geocore
Créez un fichier myvalues.yaml. Les sections suivantes sont indépendantes : ajoutez-les toutes au même fichier et remplacez chaque valeur fictive par vos propres valeurs.
Configurez les identifiants Harbor, les paramètres de flux d’un nœud unique, les identifiants PostgreSQL utilisés par Geocore et le paramètre Keycloak actuel :
global:
imageCredentials:
registry: harbor.centiloc.com
email: <your-email>
password: <your-password>
username: <your-username>
configuration:
streamTech: "KAFKA"
keycloak:
url: ""
postgresql:
primary:
user: "custom_user"
password: "strong_password"
dbname: "db_geocore"
replicas: []
postgresql:
enabled: true
auth:
postgresPassword: "very_strong_password"
storagePath: "/opt/geocore/pg/data"
kafka:
enabled: true
replicaCount: 1
Keycloak n’est actuellement pas disponibleLe chart Geocore OnPremise actuel n’inclut pas Keycloak. Laissezglobal.keycloak.urlvide.
MQTT doit rester directement accessible par les plateaux. Exposez le broker en NodePort. La configuration suivante active TLS par défaut ; remplacez X.X.X.X par l’adresse IP de l’hôte k0s.
emqx:
enabled: true
replicaCount: 1
allPassword: "very_strong_password"
service:
type: NodePort
nodePorts:
mqttssl: 30883
mqtt: 30881
emqxConfig:
EMQX_SSL_CLIENT_OPTS__SERVER_NAME_INDICATION: "X.X.X.X"
# Pour activer TCP non chiffré, commentez la ligne ci-dessus et décommentez :
# EMQX_LISTENERS__TCP__DEFAULT__ENABLE: "true"
Exposez le service NTP de Geocore en NodePort, à la même adresse que MQTT :
ntp:
service:
type: NodePort
Par défaut, le service est disponible sur le port UDP 30123. Les plateaux nécessitent le port UDP 123, qui se situe hors de la plage NodePort de Kubernetes. Redirigez le port UDP 123 vers le port 30123 sur l’hôte.
Installez nftables :
sudo apt-get update
sudo apt install nftables
Identifiez l’interface réseau de l’hôte qui reçoit le trafic des plateaux :
ip -o addr | grep 'k0s_single_machine_cluster_IP' | awk '{print $2}'
Ajoutez la règle suivante à /etc/nftables.conf, en remplaçant your_interface_name par le nom de l’interface :
table ip geocore {
chain prerouting {
type filter hook prerouting priority mangle; policy accept;
iifname "your_interface_name" udp dport 123 \
dup to 127.0.0.1 udp dport set 30123 notrack
}
chain input {
type filter hook input priority mangle; policy accept;
iifname lo udp dport 123 ip daddr set 127.0.0.1 notrack
}
}
Appliquez la configuration :
sudo nft -f /etc/nftables.conf
La prise en charge RS485 est désactivée par défaut. Activez l’agent de passerelle uniquement si le déploiement le requiert :
parcontrol3:
gwagent:
replicaCount: "1"
Choisissez une méthode d’accès et ajoutez sa configuration à myvalues.yaml. Consultez Exposition des services pour le modèle complet d’exposition.
Utilisez le LoadBalancer Envoy de Contour lorsque l’API et Centui doivent être disponibles sur les ports HTTPS standard. Les valeurs suivantes configurent TLS :
core:
geo:
tlsEnabled: true
centui:
tlsEnabled: true
apiURL: "api.k0s.example.test"
centuiURL: "centui.k0s.example.test"
Les valeurs apiURL et centuiURL doivent correspondre exactement aux valeurs api.domain et centui.domain de la configuration Ingress. Faites pointer les deux noms vers l’adresse Envoy de Contour.
Conservez les services Geocore en ClusterIP. Exposez le service Envoy de Contour en NodePort et faites pointer les deux noms DNS, ou les entrées correspondantes du fichier hosts des clients, vers l’adresse IP de l’hôte k0s.
core:
geo:
tlsEnabled: false
centui:
tlsEnabled: false
apiURL: "api.k0s.example.test:30180"
centuiURL: "centui.k0s.example.test"
Après avoir installé Contour avec le NodePort HTTP Envoy 30180 et les routes Geocore, ouvrez Centui à l’adresse http://centui.k0s.example.test:30180. Centui atteint le point d’accès gRPC-Web Envoy à l’adresse http://api.k0s.example.test:30180.
Suivez Installer Contour et Envoy et sélectionnez les valeurs de routage HTTP non chiffré dans le guide Ingress.
Une fois que myvalues.yaml contient les sections requises, installez Geocore dans l’espace de noms geocore :
helm install geocore oci://harbor.centiloc.com/centiloc/geocore \
--namespace geocore \
--create-namespace \
-f myvalues.yaml
Vérifiez que les pods sont en cours d’exécution :
kubectl get pods --namespace geocore
MQTT et NTP sont exposés via les NodePorts configurés ci-dessus. Continuez avec Exposer les services Geocore pour installer Contour, créer les routes Geocore obligatoires et publier les enregistrements DNS. Ouvrez ensuite Centui à l’adresse Envoy configurée.
Pour supprimer le cluster k0s, suivez les instructions officielles de réinitialisation de k0s.