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

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

Ubuntu est une distribution open source Linux populaire qui est couramment utilisée pour exécuter des charges de travail gourmandes en GPU et IA/ML. Lorsque vous créez des clusters avec Kubernetes Engine (OKE), vous pouvez utiliser des images personnalisées et des scripts cloud-init pour créer les types de noeud de processus actif suivants afin d'exécuter Ubuntu :

  • noeuds gérés
  • nœuds autogérés

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

A un niveau général, le processus de création d'un noeud de processus actif pour exécuter Ubuntu est le suivant :

Disponibilité et compatibilité

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

Version d'Ubuntu Package à utiliser avec Kubernetes 1.27 Package à utiliser avec Kubernetes 1.28 Package à utiliser avec Kubernetes 1.29 Package à utiliser avec Kubernetes 1.30 Package à utiliser avec Kubernetes 1.31 Package à utiliser avec Kubernetes 1.32 Package à 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

Etape 1 : création d'une image personnalisée basée sur une instance de calcul existante exécutant la version d'Ubuntu requise

Cette étape consiste à utiliser le service Compute pour créer une image personnalisée à partir d'une instance de calcul qui exécute déjà la version Ubuntu de votre choix sur les noeuds de processus actif du cluster Kubernetes.

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

  1. Déterminez la version d'Ubuntu et la version de Kubernetes à utiliser sur les noeuds de processus actif.

    Oracle fournit des packages de noeuds pour différentes versions d'Ubuntu, et chaque package de noeud est compatible avec certaines versions de Kubernetes. Pour plus d'informations, reportez-vous à Disponibilité et compatibilité.

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

    Il s'agit de l'instance de calcul que vous utiliserez comme base pour l'image personnalisée.

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

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

Etape 2 : construction de l'URL à partir de laquelle télécharger un package de noeud Ubuntu

Cette étape consiste à créer l'URL à partir de laquelle télécharger le package de noeud 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 processus actif. L'URL de téléchargement inclut l'emplacement Object Storage, ainsi que les détails de la version d'Ubuntu et de la version de Kubernetes spécifiques.

N'oubliez pas que les versions de Kubernetes exécutées sur les noeuds de plan de contrôle et sur les noeuds de processus actif (y compris les noeuds autogérés) doivent être compatibles, comme décrit dans la stratégie de prise en charge des écarts de version de Kubernetes dans la documentation Kubernetes. Il vous incombe de créer l'URL de téléchargement pour un package de noeud contenant une version de Kubernetes compatible. Kubernetes Engine ne vérifie pas que la version de Kubernetes dans le package de noeuds indiqué est compatible avec la version de Kubernetes exécutée sur les noeuds de plan de contrôle du cluster.

Créez l'URL de téléchargement comme suit :

  1. Ouvrez un nouveau fichier texte dans l'éditeur de texte de votre choix.
  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 éléments suivants, selon la version d'Ubuntu à exécuter sur le noeud de processus actif :

      • ubuntu-jammy (Ubuntu 22,04)
      • ubuntu-noble (Ubuntu 24.04)
    • <kubernetes-version> est l'une des versions suivantes, selon la version mineure de Kubernetes à exécuter sur le noeud de processus actif :
      • 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 processus actif, créez l'URL de téléchargement suivante pour le package 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.

Etape 3 : création d'un script cloud-init pour installer le package de noeud Ubuntu et initialiser le noeud de processus actif

Cette étape consiste à créer un script cloud-init pour télécharger et installer le package de noeuds Ubuntu fourni par Oracle, et pour initialiser le noeud de processus actif.

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 les noeuds gérés, procédez comme suit :

  1. Créez un nouveau fichier 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 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 le package de noeuds Ubuntu que vous avez créé à l'étape précédente (reportez-vous à Etape 2 : construction de l'URL à partir de laquelle télécharger un package 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'une des versions suivantes, selon la version mineure de Kubernetes à 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 indiquée lors de la création de l'URL de téléchargement (reportez-vous à Etape 2 : construction de l'URL à partir de laquelle télécharger un package de noeud 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 autonomes

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

  1. Suivez les instructions de la section Création de scripts Cloud-init pour les noeuds autogérés pour obtenir l'adresse privée d'API Kubernetes du cluster amélioré auquel ajouter le noeud autogéré, à l'aide de la console ou de l'interface de ligne de commande.
  2. Suivez les instructions de la section Creating Cloud-init Scripts for Self-managed Nodes pour obtenir le certificat CA encodé en base64 du cluster à partir du fichier kubeconfig du cluster, à l'aide de la console ou de la CLI.
  3. Créez un nouveau fichier 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 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 le package de noeuds Ubuntu que vous avez créé à l'étape précédente (reportez-vous à Etape 2 : construction de l'URL à partir de laquelle télécharger un package 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'une des versions suivantes, selon la version mineure de Kubernetes à 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 indiquée lors de la création de l'URL de téléchargement (reportez-vous à Etape 2 : construction de l'URL à partir de laquelle télécharger un package de noeud Ubuntu).

    • <cluster-endpoint> est l'adresse IP de l'adresse d'API Kubernetes du cluster que vous avez obtenue précédemment.
    • <base64-encoded-certificate> est le certificat d'autorité de certification base64 du cluster que vous avez obtenu précédemment (en 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.

Etape 4 : ajout de noeuds de processus actif exécutant Ubuntu à un cluster

Cette étape consiste à utiliser le script cloud-init créé précédemment pour ajouter des noeuds de processus actif exécutant Ubuntu à un cluster 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 pool de noeuds gérés. Pour les noeuds autogérés, vous ajoutez des instances de calcul en tant que noeuds de processus actif.

Vous devez utiliser l'interface de ligne de commande pour créer des noeuds gérés en fonction d'images personnalisées.

Ajout de noeuds de processus actif Ubuntu en tant que noeuds gérés

Procédure d'ajout de noeuds gérés exécutant Ubuntu dans un cluster existant

  1. Ouvrez une invite de commande et utilisez la commande oci ce node-pool create pour créer un pool de noeuds.
  2. En plus des paramètres obligatoires requis par la commande :
    1. Incluez le paramètre --node-image-id et indiquez l'OCID de l'image personnalisée que vous avez créée à l'étape 1 : création d'une image personnalisée basée sur une instance de calcul existante exécutant la version d'Ubuntu requise.
    2. Incluez le paramètre --node-metadata et indiquez le script cloud-init que vous avez créé pour les noeuds gérés à l'étape 3 : création d'un script cloud-init pour installer le package de noeuds Ubuntu et initialiser le noeud de processus actif, au 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 un poste 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)'"}'

    La version de Kubernetes que vous indiquez à l'aide du paramètre --kubernetes-version doit correspondre à la version de Kubernetes indiquée dans le script cloud-init (reportez-vous à Etape 3 : création d'un script cloud-init pour installer le package de noeud Ubuntu et initialiser le noeud de processus actif).

Ajout de noeuds de processus actif Ubuntu en tant que noeuds autogérés

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

  • Le cluster auquel vous souhaitez ajouter le noeud autogéré est configuré de manière appropriée pour les noeuds autogérés. Reportez-vous à la section Cluster Requirements.
  • Un groupe dynamique et une stratégie IAM existent déjà pour permettre à l'instance de calcul hébergeant le noeud autogéré de rejoindre un cluster amélioré créé avec Kubernetes Engine. Reportez-vous à la section Creating a Dynamic Group and a Policy for Self-Managed Nodes.

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 Compute. Sous Compute, sélectionnez Instances.
    2. Suivez les instructions de la documentation du service Compute pour créer une instance de calcul. Les stratégies appropriées doivent exister pour permettre à la nouvelle instance de calcul de rejoindre le cluster amélioré. Reportez-vous à la section Creating a Dynamic Group and a Policy for Self-Managed Nodes.
    3. Dans la section Image et Forme, sélectionnez Modifier l'image.
    4. Sélectionnez Mes images, sélectionnez l'option OCID d'image, puis entrez l'OCID de l'image personnalisée que vous avez créée à l'étape 1 : création d'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éation d'un script cloud-init pour installer le package de noeud Ubuntu et initialiser le noeud de processus actif dans le champ Script cloud-init.
    7. Sélectionnez Créer pour créer l'instance de calcul destinée à héberger le noeud autogéré.

    Lorsque l'instance de calcul est créée, elle est ajoutée au cluster en tant que noeud autogéré avec l'adresse d'API Kubernetes indiquée dans le script cloud-init.

  2. (Facultatif) Vérifiez que le noeud autogéré a été ajouté au cluster Kubernetes et que des étiquettes ont été ajoutées au noeud et définies comme prévu, en suivant les instructions de la section Creating Self-Managed Nodes.

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 autogéré.
  2. En plus des paramètres obligatoires requis par la commande :
    1. Incluez le paramètre --image-id et indiquez l'OCID de l'image personnalisée que vous avez créée à l'étape 1 : création d'une image personnalisée basée sur une instance de calcul existante exécutant la version d'Ubuntu requise.
    2. Incluez le paramètre --user-data-file et indiquez le script cloud-init que vous avez créé pour les noeuds autogérés à l'étape 3 : création d'un script cloud-init pour installer le package de noeuds Ubuntu et initialiser le noeud de processus actif.

    Par exemple, vous pouvez saisir 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 au cluster en tant que noeud autogéré avec l'adresse d'API Kubernetes indiquée dans le script cloud-init.