Skip to main content
Centiloc Service Documentation
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

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 commencer
Commencez par satisfaire les prérequis OnPremise. En particulier, assurez-vous d’avoir accès au registre Centiloc Harbor et que kubectl et Helm sont disponibles sur l’hôte.

1. Installer k0s

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

2. Préparer le stockage persistant

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

3. Configurer 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.

Accès au registre et services principaux

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 disponible
Le chart Geocore OnPremise actuel n’inclut pas Keycloak. Laissez global.keycloak.url vide.

NodePort MQTT

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"

NodePort NTP

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

Prise en charge RS485 facultative

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"

4. Accéder à l’API et à Centui

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.

5. Installer Geocore

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

6. Vérifier l’accès externe

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.

Désinstaller le cluster

Pour supprimer le cluster k0s, suivez les instructions officielles de réinitialisation de k0s.