Exécution d'Ubuntu sur des noeuds de travail à l'aide d'images personnalisées

Découvrez comment inclure des noeuds de travail qui exécutent la distribution Ubuntu Linux dans des grappes créées avec Kubernetes Engine (OKE), à l'aide d'images personnalisées et de scripts cloud-init.

Ubuntu est une distribution Linux à code source libre populaire qui est généralement utilisée pour exécuter des charges de travail GPU et AI/ML. Lorsque vous créez des grappes avec Kubernetes Engine (OKE), vous pouvez utiliser des images personnalisées et des scripts cloud-init pour créer les types de noeud de travail suivants pour exécuter Ubuntu :

  • noeuds gérés
  • noeuds autogérés

Notez que vous ne pouvez pas créer de noeuds virtuels pour exécuter Ubuntu à l'aide d'images personnalisées et de scripts cloud-init.

À un niveau élevé, le processus de création d'un noeud de travail pour exécuter Ubuntu est le suivant :

Disponibilité et compatibilité

Ce tableau répertorie les versions d'Ubuntu pour lesquelles Oracle fournit des ensembles de noeuds, ainsi que les versions de Kubernetes avec lesquelles chaque ensemble de noeuds est compatible. Les ensembles de noeuds fournis par Oracle sont conçus pour fonctionner sur les architectures x86 et ARM.

Version d'Ubuntu Ensemble à utiliser avec Kubernetes 1.27 Ensemble à utiliser avec Kubernetes 1.28 Ensemble à utiliser avec Kubernetes 1.29 Ensemble à utiliser avec Kubernetes 1.30 Ensemble à utiliser avec Kubernetes 1.31 Ensemble à utiliser avec Kubernetes 1.32 Ensemble à utiliser avec Kubernetes 1.33
Jammy (Ubuntu 22.04) oci-oke-node-all-1.27.10 oci-oke-node-all-1.28.10 oci-oke-node-all-1.29.1 oci-oke-node-all-1.30.10 oci-oke-node-all-1.31.10 oci-oke-node-all-1.32.1 oci-oke-node-all-1.33.1
Noble (Ubuntu 24.04) oci-oke-node-all-1.27.10 oci-oke-node-all-1.28.10 oci-oke-node-all-1.29.1 oci-oke-node-all-1.30.10 oci-oke-node-all-1.31.10 oci-oke-node-all-1.32.1 oci-oke-node-all-1.33.1

Étape 1 : Créer une image personnalisée basée sur une instance de calcul existante exécutant la version requise d'Ubuntu

Dans cette étape, vous utilisez le service de calcul pour créer une image personnalisée à partir d'une instance de calcul qui exécute déjà la version d'Ubuntu voulue sur les noeuds de travail de la grappe Kubernetes.

Notez que vous créez l'image en tant qu'image 'personnalisée', même si vous ne la modifiez pas.

  1. Déterminez quelle version d'Ubuntu et quelle version de Kubernetes vous voulez sur les noeuds de travail.

    Oracle fournit des ensembles de noeuds pour différentes versions d'Ubuntu, et chaque ensemble de noeuds est compatible avec certaines versions de Kubernetes. Pour plus d'informations, voir Disponibilité et compatibilité.

  2. Identifiez une instance de calcul existante qui exécute la version Ubuntu dont vous avez besoin.

    Il s'agit de l'instance de calcul à utiliser comme base de l'image personnalisée.

    Si aucune instance de calcul appropriée n'existe déjà, suivez les instructions sous Création d'une instance dans la documentation du service de calcul pour créer une instance de calcul appropriée maintenant.

  3. Suivez les instructions sous Gestion des images personnalisées dans la documentation du service de calcul pour créer une image personnalisée basée sur l'instance de calcul existante exécutant la version d'Ubuntu dont vous avez besoin.
  4. Notez l'OCID de l'image personnalisée que vous avez créée.

Étape 2 : Construisez l'URL à partir de laquelle télécharger un package de noeuds Ubuntu

Dans cette étape, vous construisez l'URL à partir de laquelle télécharger l'ensemble de noeuds Ubuntu fourni par Oracle.

L'URL de téléchargement dépend de la version d'Ubuntu et de la version de Kubernetes que vous voulez sur les noeuds de travail. L'URL de téléchargement inclut l'emplacement du stockage d'objets, ainsi que les détails de la version particulière d'Ubuntu et de Kubernetes.

Gardez à l'esprit que les versions de Kubernetes qui s'exécutent sur les noeuds de plan de contrôle et sur les noeuds de travail (y compris les noeuds autogérés) doivent être compatibles, comme décrit dans la politique de prise en charge de l'écart de version de Kubernetes dans la documentation sur Kubernetes. Il vous incombe de construire l'URL de téléchargement d'un ensemble de noeuds qui contient une version compatible de Kubernetes. Le moteur Kubernetes ne vérifie pas que la version de Kubernetes dans l'ensemble de noeuds que vous spécifiez est compatible avec la version de Kubernetes exécutée sur les noeuds de plan de contrôle de la grappe.

Construisez l'URL de téléchargement comme suit :

  1. Ouvrez un nouveau fichier texte dans votre éditeur de texte préféré.
  2. Créez l'URL de téléchargement comme suit :
    https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/<ubuntu-release>/<kubernetes-version> stable main

    où :

    • <ubuntu-release> est l'un des suivants, selon la version d'Ubuntu que vous voulez exécuter sur le noeud de travail :

      • ubuntu-jammy (Ubuntu 22.04)
      • ubuntu-noble (Ubuntu 24.04)
    • <kubernetes-version> est l'un des suivants, selon la version mineure de Kubernetes que vous voulez exécuter sur le noeud de travail :
      • kubernetes-1.27
      • kubernetes-1.28
      • kubernetes-1.29
      • kubernetes-1.30
      • kubernetes-1.31
      • kubernetes-1.32
      • kubernetes-1.33

    Par exemple, si vous voulez exécuter Ubuntu 22.04 et Kubernetes version 1.29 sur les noeuds de travail, créez l'URL de téléchargement suivante pour l'ensemble de noeuds approprié :

    https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-noble/kubernetes-1.29 stable main
  3. (Facultatif) Enregistrez le fichier texte dans un emplacement pratique, car vous avez besoin de l'URL de téléchargement à l'étape suivante.

Étape 3 : Créer un script cloud-init pour installer l'ensemble de noeuds Ubuntu et initialiser le noeud de travail

Dans cette étape, vous créez un script cloud-init pour télécharger et installer l'ensemble de noeuds Ubuntu fourni par Oracle, et pour initialiser le noeud de travail.

Notez qu'il existe une logique différente à ajouter au script cloud-init, selon que vous souhaitez exécuter Ubuntu sur des noeuds gérés ou sur des noeuds autogérés.

Création d'un script cloud-init pour les noeuds gérés

Pour créer un script cloud-init pour exécuter Ubuntu sur des noeuds gérés :

  1. Créez un nouveau fichier de script cloud-init à partir de zéro avec un type de fichier pris en charge par cloud-init (tel que .yaml), et ajoutez la logique suivante au fichier de script :
    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] <download-url>'}
    packages:                                                       
     - <oci-package-name>
    runcmd:
     - oke bootstrap

    où :

    • <download-url> est l'URL à partir de laquelle télécharger l'ensemble de noeuds Ubuntu que vous avez construit à l'étape précédente (voir Étape 2 : Construire l'URL à partir de laquelle télécharger un ensemble de noeuds Ubuntu). Par exemple, https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable main
    • <oci-package-name> est l'un des suivants, selon la version mineure de Kubernetes que vous voulez exécuter sur le noeud géré :
      • oci-oke-node-all-1.27.10
      • oci-oke-node-all-1.28.10
      • oci-oke-node-all-1.29.1
      • oci-oke-node-all-1.30.10
      • oci-oke-node-all-1.31.10
      • oci-oke-node-all-1.32.1
      • oci-oke-node-all-1.33.1

      La version mineure de Kubernetes doit correspondre à la version mineure de Kubernetes que vous avez spécifiée lors de la création de l'URL de téléchargement (voir Étape 2 : Construire l'URL à partir de laquelle télécharger un ensemble de noeuds Ubuntu).

    Par exemple, si vous voulez exécuter Ubuntu 22.04 (jammy) et Kubernetes version 1.29.1 sur des noeuds gérés, ajoutez la logique suivante au fichier de script :

    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable main'}
    packages:                                                       
     - oci-oke-node-all-1.29.1
    runcmd:
     - oke bootstrap
  2. Enregistrez le fichier de script cloud-init.

Création d'un script cloud-init pour les noeuds auto-gérés

Pour créer un script cloud-init pour exécuter Ubuntu sur des noeuds autogérés :

  1. Suivez les instructions sous Création de scripts Cloud-init pour les noeuds autogérés pour obtenir le point d'extrémité privé de l'API Kubernetes de la grappe améliorée à laquelle vous voulez ajouter le noeud autogéré, à l'aide de la console ou de l'interface de ligne de commande.
  2. Suivez les instructions sous Création de scripts Cloud-init pour les noeuds autogérés pour obtenir le certificat AC encodé en base64 de la grappe à partir du fichier kubeconfig de la grappe, à l'aide de la console ou de l'interface de ligne de commande.
  3. Créez un nouveau fichier de script cloud-init à partir de zéro avec un type de fichier pris en charge par cloud-init (tel que .yaml), et ajoutez la logique suivante au fichier de script :
    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] <download-url>'}
    packages:
     - <oci-package-name>
    write_files:
    - path: /etc/oke/oke-apiserver
     permissions: '0644'
     content: <cluster-endpoint>
    - encoding: b64
     path: /etc/kubernetes/ca.crt
     permissions: '0644'
     content: <base64-encoded-certificate>
    runcmd:
      - oke bootstrap --ca <base64-encoded-certificate> --apiserver-host <cluster-endpoint>

    où :

    • <download-url> est l'URL à partir de laquelle télécharger l'ensemble de noeuds Ubuntu que vous avez construit à l'étape précédente (voir Étape 2 : Construire l'URL à partir de laquelle télécharger un ensemble de noeuds Ubuntu). Par exemple, https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable main
    • <oci-package-name> est l'un des suivants, selon la version mineure de Kubernetes que vous voulez exécuter sur le noeud autogéré :

      • oci-oke-node-all-1.27.10
      • oci-oke-node-all-1.28.10
      • oci-oke-node-all-1.29.1
      • oci-oke-node-all-1.30.10
      • oci-oke-node-all-1.31.10
      • oci-oke-node-all-1.32.1
      • oci-oke-node-all-1.33.1

      La version mineure de Kubernetes doit correspondre à la version mineure de Kubernetes que vous avez spécifiée lors de la création de l'URL de téléchargement (voir Étape 2 : Construire l'URL à partir de laquelle télécharger un ensemble de noeuds Ubuntu).

    • <cluster-endpoint> est l'adresse IP du point d'extrémité de l'API Kubernetes de la grappe que vous avez obtenu précédemment.
    • <base64-encoded-certificate> est le certificat d'autorité de certification encodé en base64 de la grappe que vous avez obtenu précédemment (commençant par les caractères LS0t).

    Par exemple, si vous voulez exécuter Ubuntu 22.04 (Jammy) et Kubernetes version 1.29.1 sur un noeud autogéré, ajoutez la logique suivante au fichier de script :

    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/ubuntu-jammy/kubernetes-1.29 stable main'}
    packages:
     - oci-oke-node-all-1.29.1
    write_files:
    - path: /etc/oke/oke-apiserver
     permissions: '0644'
     content: 10.114.0.5
    - encoding: b64
     path: /etc/kubernetes/ca.crt
     permissions: '0644'
     content: LS0tLS1...LS0tCg==
    runcmd:
      - oke bootstrap --ca LS0tLS1...LS0tCg== --apiserver-host 10.114.0.5
  4. Enregistrez le fichier de script cloud-init.

Étape 4 : Ajouter des noeuds de travail exécutant Ubuntu à une grappe

Dans cette étape, vous utilisez le script cloud-init que vous avez créé précédemment pour ajouter des noeuds de travail exécutant Ubuntu à une grappe Kubernetes.

Notez qu'il existe différentes instructions à suivre, selon que vous souhaitez exécuter Ubuntu sur des noeuds gérés ou sur des noeuds autogérés. Pour les noeuds gérés, vous définissez un groupe de noeuds gérés. Pour les noeuds autogérés, vous ajoutez des instances de calcul en tant que noeuds de travail.

Notez que vous devez utiliser l'interface de ligne de commande pour créer des noeuds gérés basés sur des images personnalisées.

Ajout de noeuds de travail Ubuntu en tant que noeuds gérés

Pour ajouter des noeuds gérés exécutant Ubuntu dans une grappe existante

  1. Ouvrez une invite de commande et utilisez la commande oci ce node-pool create pour créer un nouveau groupe de noeuds.
  2. En plus des paramètres obligatoires requis par la commande :
    1. Incluez le paramètre --node-image-id et spécifiez l'OCID de l'image personnalisée que vous avez créée à l'étape 1 : Créer une image personnalisée basée sur une instance de calcul existante exécutant la version Ubuntu requise.
    2. Incluez le paramètre --node-metadata et spécifiez le script cloud-init que vous avez créé pour les noeuds gérés à l'étape 3 : Créer un script cloud-init pour installer l'ensemble de noeuds Ubuntu et initialiser le noeud de travail, dans le format approprié pour votre environnement :
      • Linux : --node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64 -w 0)'"}'
      • Mac : --node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64- b 0)'"}'
      où :
      • <cloud-init-file> est le nom du fichier cloud-init que vous avez créé
      • base64 indique que le fichier doit être encodé en base64

    Par exemple, vous pouvez entrer la commande suivante sur une station de travail Mac :

    oci ce node-pool create \
    --cluster-id ocid1.cluster.oc1.iad.aaaa______m4w \
    --name my-ubuntu-nodepool \
    --node-image-id ocid1.image.oc1.iad.aaaa______zpq \
    --compartment-id ocid1.tenancy.oc1..aaa______q4a \
    --kubernetes-version v1.29.1 \
    --node-shape VM.Standard2.1 \
    --placement-configs "[{\"availabilityDomain\":\"PKGK:US-ASHBURN-AD-1\", \"subnetId\":\"ocid1.subnet.oc1.iad.aaaa______kfa\"}]" \
    --size 3 \
    --region us-ashburn-1 \
    --node-metadata '{"user_data": "'$(cat my-mgd-ubuntu-cloud-init.yaml | base64 -b 0)'"}'

    Notez que la version de Kubernetes que vous spécifiez à l'aide du paramètre --kubernetes-version doit correspondre à la version de Kubernetes que vous avez spécifiée dans le script cloud-init (voir Étape 3 : Créer un script cloud-init pour installer l'ensemble de noeuds Ubuntu et initialiser le noeud de travail).

Ajout de noeuds de travail Ubuntu en tant que noeuds autogérés

Avant de créer un noeud autogéré, vérifiez que :

Utilisation de la console

  1. Créez une instance de calcul pour héberger le noeud autogéré :
    1. Ouvrez le menu de navigation et sélectionnez Calcul. Sous Calcul, sélectionnez Instances.
    2. Pour créer une nouvelle instance de calcul, suivez les instructions de la documentation du service de calcul. Notez que des politiques appropriées doivent exister pour permettre à la nouvelle instance de calcul de se joindre à la grappe améliorée. Voir Création d'un groupe dynamique et d'une politique pour les noeuds autogérés.
    3. Dans la section Image et forme, sélectionnez Modifier l'image.
    4. Sélectionnez Mes images, sélectionnez l'option OCID de l'image, puis entrez l'OCID de l'image personnalisée que vous avez créée à l'étape 1 : Créer une image personnalisée basée sur une instance de calcul existante exécutant la version Ubuntu requise.
    5. Sélectionnez Afficher les options avancées et, dans l'onglet Gestion, sélectionnez l'option Coller le script cloud-init.
    6. Copiez et collez le script cloud-init que vous avez créé pour les noeuds autogérés à l'étape 3 : Créer un script cloud-init pour installer l'ensemble de noeuds Ubuntu et amorcer le noeud de travail, dans le champ Script Cloud-init.
    7. Sélectionnez Créer pour créer l'instance de calcul pour héberger le noeud autogéré.

    Lorsque l'instance de calcul est créée, elle est ajoutée en tant que noeud autogéré à la grappe avec le point d'extrémité de l'API Kubernetes que vous avez spécifié dans le script cloud-init.

  2. (Facultatif) Vérifiez que le noeud autogéré a été ajouté à la grappe Kubernetes et que des étiquettes ont été ajoutées au noeud et définies comme prévu, en suivant les instructions sous Création de noeuds autogérés.

Utilisation de l'interface de ligne de commande

  1. Ouvrez une invite de commande et entrez la commande oci Compute instance launch et les paramètres requis pour créer un noeud auto-géré.
  2. En plus des paramètres obligatoires requis par la commande :
    1. Incluez le paramètre --image-id et spécifiez l'OCID de l'image personnalisée que vous avez créée à l'étape 1 : Créer une image personnalisée basée sur une instance de calcul existante exécutant la version Ubuntu requise.
    2. Incluez le paramètre --user-data-file et spécifiez le script cloud-init que vous avez créé pour les noeuds autogérés à l'étape 3 : Créer un script cloud-init pour installer l'ensemble de noeuds Ubuntu et initialiser le noeud de travail.

    Par exemple, vous pouvez entrer la commande suivante :

    oci compute instance launch \
    --availability-domain zkJl:PHX-AD-1 \
    --compartment-id ocid1.compartment.oc1..aaaaaaa______neoq \
    --shape VM.Standard2.2 \
    --subnet-id ocid1.subnet.oc1.phx.aaaaaaa______hzia \
    --user-data-file my-selfmgd-ubuntu-cloud-init.yaml \
    --image-id ocid1.image.oc1.phx.aaaaaaa______slcr

    Lorsque l'instance de calcul est créée, elle est ajoutée en tant que noeud autogéré à la grappe avec le point d'extrémité de l'API Kubernetes que vous avez spécifié dans le script cloud-init.