Esecuzione di Ubuntu sui nodi di lavoro mediante immagini personalizzate
Scopri come includere i nodi di lavoro che eseguono la distribuzione Ubuntu Linux nei cluster creati con Kubernetes Engine (OKE), utilizzando immagini personalizzate e script di cloud-init.
Ubuntu è una popolare distribuzione Linux open source che viene comunemente utilizzata per eseguire carichi di lavoro ad alta intensità di GPU e AI/ML. Quando si creano cluster con Kubernetes Engine (OKE), è possibile utilizzare immagini personalizzate e script di cloud-init per creare i seguenti tipi di nodo di lavoro per eseguire Ubuntu:
- nodi gestiti
- nodi auto gestiti
Si noti che non è possibile creare nodi virtuali per eseguire Ubuntu utilizzando immagini personalizzate e script di cloud-init.
A un livello elevato, il processo per la creazione di un nodo di lavoro per l'esecuzione di Ubuntu è:
- Passo 1: creare un'immagine personalizzata basata su un'istanza di computazione esistente che esegue la release di Ubuntu richiesta. Oracle fornisce pacchetti nodo per diverse release di Ubuntu e ogni pacchetto nodo è compatibile con determinate versioni di Kubernetes. Per ulteriori informazioni, vedere Disponibilità e compatibilità.
- Passo 2: creare l'URL da cui scaricare un package di nodi Ubuntu. L'URL da cui scaricare il package di nodi Ubuntu fornito da Oracle dipende sia dalla release Ubuntu che dalla versione Kubernetes che si desidera eseguire sul nodo di lavoro. Per ogni combinazione supportata di release Ubuntu e versione Kubernetes è disponibile un URL di download diverso.
- Passo 3: creare uno script cloud-init per installare il package di nodi Ubuntu e eseguire il bootstrap del nodo di lavoro. Lo script cloud-init da creare dipende dal fatto che il nodo di lavoro su cui si desidera eseguire Ubuntu sia un nodo gestito o un nodo autogestito.
- Passo 4: aggiungere i nodi di lavoro che eseguono Ubuntu a un cluster. Il modo in cui si aggiungono nodi Ubuntu a un cluster dipende dal fatto che si desideri aggiungere i nodi come nodi gestiti o come nodi autogestiti. Per i nodi gestiti, definire un pool di nodi gestiti. Per i nodi autogestiti, è possibile aggiungere istanze di computazione come nodi di lavoro.
Disponibilità e compatibilità
Questa tabella elenca le release di Ubuntu per le quali Oracle fornisce pacchetti di nodi, insieme alle versioni di Kubernetes con le quali ogni pacchetto di nodi è compatibile. I pacchetti nodo forniti da Oracle sono progettati per funzionare sia sulle architetture x86 che su quelle ARM.
Release di Ubuntu | Package da utilizzare con Kubernetes 1.27 | Package da utilizzare con Kubernetes 1.28 | Package da utilizzare con Kubernetes 1.29 | Package da utilizzare con Kubernetes 1.30 | Package da utilizzare con Kubernetes 1.31 | Package da utilizzare con Kubernetes 1.32 | Package da utilizzare con 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.1 |
oci-oke-node-all-1.32.1 |
oci-oke-node-all-1.33.0 |
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.1 |
oci-oke-node-all-1.32.1 |
oci-oke-node-all-1.33.0 |
Passo 1: creare un'immagine personalizzata basata su un'istanza di computazione esistente che esegue la release Ubuntu richiesta
In questo passo, puoi utilizzare il servizio di computazione per creare un'immagine personalizzata da un'istanza di computazione che sta già eseguendo la release Ubuntu che desideri sui nodi di lavoro nel cluster Kubernetes.
Si noti che l'immagine viene creata come immagine 'personalizzata', anche se non viene modificata.
- Decidi quale release di Ubuntu e quale versione di Kubernetes desideri sui nodi di lavoro.
Oracle fornisce pacchetti nodo per diverse release di Ubuntu e ogni pacchetto nodo è compatibile con determinate versioni di Kubernetes. Per ulteriori informazioni, vedere la sezione relativa a disponibilità e compatibilità.
-
Identifica un'istanza di computazione esistente che esegue la release Ubuntu richiesta.
Si tratta dell'istanza di computazione che verrà utilizzata come base dell'immagine personalizzata.
Se non esiste già un'istanza di computazione adatta, seguire le istruzioni riportate in Creazione di un'istanza nella documentazione del servizio di computazione per creare ora un'istanza di computazione adatta.
- Seguire le istruzioni riportate nella sezione Gestione delle immagini personalizzate della documentazione del servizio di computazione per creare un'immagine personalizzata basata sull'istanza di computazione esistente che esegue la release Ubuntu richiesta.
- Prendere nota dell'OCID dell'immagine personalizzata creata.
Passo 2: Costruire l'URL da cui scaricare un pacchetto nodo Ubuntu
In questo passo viene creato l'URL da cui scaricare il package di nodi Ubuntu fornito da Oracle.
L'URL di download dipende dalla release Ubuntu e dalla versione Kubernetes che si desidera utilizzare sui nodi di lavoro. L'URL di download include la posizione dello storage degli oggetti, nonché i dettagli della release Ubuntu e della versione Kubernetes specifiche.
Tenere presente che le versioni di Kubernetes in esecuzione sui nodi del piano di controllo e sui nodi di lavoro (inclusi i nodi autogestiti) devono essere compatibili, come descritto nel criterio di supporto dello sfasamento della versione Kubernetes nella documentazione di Kubernetes. È responsabilità dell'utente creare l'URL di download per un pacchetto nodo contenente una versione Kubernetes compatibile. Kubernetes Engine non controlla che la versione Kubernetes nel package di nodi specificato sia compatibile con la versione Kubernetes in esecuzione sui nodi del piano di controllo del cluster.
Creare l'URL di download come indicato di seguito.
- Aprire un nuovo file di testo nell'editor di testo preferito.
- Creare l'URL di download come indicato di seguito.
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
Dove:
-
<ubuntu-release>
è uno dei seguenti, in base alla release di Ubuntu che si desidera eseguire sul nodo di lavoro:ubuntu-jammy
(Ubuntu 22.04)ubuntu-noble
(Ubuntu 24.04)
<kubernetes-version>
è una delle seguenti, in base alla versione secondaria di Kubernetes che si desidera eseguire sul nodo di lavoro:kubernetes-1.27
kubernetes-1.28
kubernetes-1.29
kubernetes-1.30
kubernetes-1.31
kubernetes-1.32
kubernetes-1.33
Ad esempio, se si desidera eseguire Ubuntu 22.04 e Kubernetes versione 1.29 sui nodi di lavoro, creare il seguente URL di download per il package di nodi appropriato:
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
-
- (facoltativo) Salvare il file di testo in una posizione comoda, in quanto è necessario l'URL di download nel passo successivo.
Passo 3: Creare uno script cloud-init per installare il pacchetto nodo Ubuntu e eseguire il bootstrap del nodo di lavoro
In questo passo viene creato uno script cloud-init per scaricare e installare il package di nodi Ubuntu fornito da Oracle e per eseguire il bootstrap del nodo di lavoro.
Si noti che esiste una logica diversa da aggiungere allo script cloud-init, a seconda che si desideri eseguire Ubuntu su nodi gestiti o su nodi autogestiti.
Creazione di uno script cloud-init per i nodi gestiti
Per creare uno script cloud-init per eseguire Ubuntu sui nodi gestiti, effettuare le operazioni riportate di seguito.
- Creare un nuovo file di script cloud-init da zero con un tipo di file supportato da cloud-init (ad esempio .yaml) e aggiungere la logica seguente al file di script:
#cloud-config apt: sources: oke-node: {source: 'deb [trusted=yes] <download-url>'} packages: - <oci-package-name> runcmd: - oke bootstrap
Dove:
<download-url>
è l'URL da cui scaricare il package di nodi Ubuntu creato nel passo precedente (vedere Passo 2: Costruire l'URL da cui scaricare un package di nodi Ubuntu). Ad esempio,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>
è uno dei seguenti, in base alla versione secondaria di Kubernetes che si desidera eseguire sul nodo gestito: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.1
oci-oke-node-all-1.32.1
oci-oke-node-all-1.33.0
La versione secondaria Kubernetes deve corrispondere alla versione secondaria Kubernetes specificata durante la creazione dell'URL di download (vedere Passo 2: costruire l'URL da cui scaricare un pacchetto nodo Ubuntu).
Ad esempio, se si desidera eseguire Ubuntu 22.04 (jammy) e Kubernetes versione 1.29.1 sui nodi gestiti, aggiungere la logica seguente al file di 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
- Salvare il file script cloud-init.
Creazione di uno script cloud-init per i nodi autogestiti
Per creare uno script cloud-init per eseguire Ubuntu su nodi autogestiti, procedere come segue.
- Seguire le istruzioni riportate in Creazione di script cloud-init per nodi autogestiti per ottenere l'endpoint privato API Kubernetes del cluster avanzato a cui si desidera aggiungere il nodo autogestito utilizzando la console o l'interfaccia CLI.
- Seguire le istruzioni riportate in Creazione di script cloud-init per nodi autogestiti per ottenere il certificato CA base64-encoded del cluster dal file kubeconfig del cluster, utilizzando la console o l'interfaccia CLI.
- Creare un nuovo file di script cloud-init da zero con un tipo di file supportato da cloud-init (ad esempio .yaml) e aggiungere la logica seguente al file di 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>Dove:
<download-url>
è l'URL da cui scaricare il package di nodi Ubuntu creato nel passo precedente (vedere Passo 2: Costruire l'URL da cui scaricare un package di nodi Ubuntu). Ad esempio,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>
è una delle seguenti, in base alla versione secondaria di Kubernetes che si desidera eseguire sul nodo autogestito: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.1
oci-oke-node-all-1.32.1
oci-oke-node-all-1.33.0
La versione secondaria Kubernetes deve corrispondere alla versione secondaria Kubernetes specificata durante la creazione dell'URL di download (vedere Passo 2: costruire l'URL da cui scaricare un pacchetto nodo Ubuntu).
<cluster-endpoint>
è l'indirizzo IP dell'endpoint API Kubernetes del cluster ottenuto in precedenza.<base64-encoded-certificate>
è il certificato CA codificato in base64 del cluster ottenuto in precedenza (a partire dai caratteriLS0t
).
Ad esempio, se si desidera eseguire Ubuntu 22.04 (Jammy) e Kubernetes versione 1.29.1 su un nodo autogestito, aggiungere la logica seguente al file di 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
- Salvare il file script cloud-init.
Passo 4: aggiungere nodi di lavoro che eseguono Ubuntu a un cluster
In questo passo, puoi utilizzare lo script cloud-init creato in precedenza per aggiungere nodi di lavoro che eseguono Ubuntu a un cluster Kubernetes.
Tieni presente che ci sono diverse istruzioni da seguire, a seconda che tu voglia eseguire Ubuntu su nodi gestiti o su nodi autogestiti. Per i nodi gestiti, definire un pool di nodi gestiti. Per i nodi autogestiti, è possibile aggiungere istanze di computazione come nodi di lavoro.
Tenere presente che è necessario utilizzare l'interfaccia CLI per creare nodi gestiti basati su immagini personalizzate.
Aggiunta dei nodi di lavoro Ubuntu come nodi gestiti
Per aggiungere nodi gestiti che eseguono Ubuntu in un cluster esistente
- Aprire un prompt dei comandi e utilizzare il comando oci ce node-pool create per creare un nuovo pool di nodi.
- Oltre ai parametri obbligatori richiesti dal comando:
- Includere il parametro
--node-image-id
e specificare l'OCID dell'immagine personalizzata creata nel Passo 1: creare un'immagine personalizzata basata su un'istanza di computazione esistente che esegue la release Ubuntu richiesta. - Includere il parametro
--node-metadata
e specificare lo script cloud-init creato per i nodi gestiti nel Passo 3: creare uno script cloud-init per installare il package di nodi Ubuntu ed eseguire il bootstrap del nodo di lavoro, nel formato appropriato per l'ambiente in uso:- Linux:
--node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64 -w 0)'"}'
- Mac:
--node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64- b 0)'"}'
Dove:<cloud-init-file>
è il nome del file cloud-init creatobase64
specifica che il file deve essere codificato con base64
- Linux:
Ad esempio, è possibile immettere il seguente comando in una workstation 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)'"}'
Tenere presente che la versione di Kubernetes specificata utilizzando il parametro
--kubernetes-version
deve corrispondere alla versione di Kubernetes specificata nello script cloud-init (vedere Passo 3: creare uno script cloud-init per installare il package di nodi Ubuntu e eseguire il bootstrap del nodo di lavoro). - Includere il parametro
Aggiunta dei nodi di lavoro Ubuntu come nodi autogestiti
Prima di creare un nodo autogestito, verificare che:
- Il cluster a cui si desidera aggiungere il nodo autogestito viene configurato in modo appropriato per i nodi autogestiti. Vedere Requisiti cluster.
- Un gruppo dinamico e un criterio IAM esistono già per consentire all'istanza di computazione che ospita il nodo autogestito di unirsi a un cluster avanzato creato con Kubernetes Engine. Vedere Creazione di un gruppo dinamico e di un criterio per i nodi autogestiti.
Utilizzo di Console
- Creare una nuova istanza di computazione per ospitare il nodo autogestito:
- Aprire il menu di navigazione e selezionare Computazione. In Computazione, selezionare Istanze.
- Segui le istruzioni riportate nella documentazione del servizio di computazione per creare una nuova istanza di computazione. Tenere presente che devono esistere criteri appropriati per consentire alla nuova istanza di computazione di entrare nel cluster avanzato. Vedere Creazione di un gruppo dinamico e di un criterio per i nodi autogestiti.
- Nella sezione Immagine e forma fare clic su Modifica immagine.
- Fare clic su Immagini personali, selezionare l'opzione OCID immagine, quindi immettere l'OCID dell'immagine personalizzata creata nel Passo 1: creare un'immagine personalizzata basata su un'istanza di computazione esistente che esegue la release di Ubuntu richiesta.
- Fare clic su Mostra opzioni avanzate e, nella scheda Gestione, selezionare l'opzione Incolla script cloud-init.
- Copiare e incollare lo script cloud-init creato per i nodi autogestiti nel Passo 3: creare uno script cloud-init per installare il package di nodi Ubuntu ed eseguire il bootstrap del nodo di lavoro nel campo Script cloud-init.
- Fare clic su Crea per creare l'istanza di computazione per ospitare il nodo autogestito.
Quando viene creata, l'istanza di computazione viene aggiunta come nodo autogestito al cluster con l'endpoint API Kubernetes specificato nello script cloud-init.
- (Facoltativo) Verificare che il nodo autogestito sia stato aggiunto al cluster Kubernetes e che le etichette siano state aggiunte al nodo e impostate come previsto, seguendo le istruzioni riportate in Creazione di nodi autogestiti.
Uso dell'interfaccia CLI
- Aprire un prompt dei comandi e immettere il comando
oci Compute instance launch
e i parametri richiesti per creare un nodo autogestito. - Oltre ai parametri obbligatori richiesti dal comando:
- Includere il parametro
--image-id
e specificare l'OCID dell'immagine personalizzata creata nel Passo 1: creare un'immagine personalizzata basata su un'istanza di computazione esistente che esegue la release Ubuntu richiesta. - Includere il parametro
--user-data-file
e specificare lo script cloud-init creato per i nodi autogestiti nel Passo 3: creare uno script cloud-init per installare il package di nodi Ubuntu ed eseguire il bootstrap del nodo di lavoro.
Ad esempio, è possibile immettere il comando seguente:
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
Quando viene creata, l'istanza di computazione viene aggiunta come nodo autogestito al cluster con l'endpoint API Kubernetes specificato nello script cloud-init.
- Includere il parametro