Ejecución de Ubuntu en nodos de trabajador mediante imágenes personalizadas
Descubra cómo incluir nodos de trabajador que ejecutan la distribución de Ubuntu Linux en clusters creados con Kubernetes Engine (OKE), mediante imágenes personalizadas y scripts cloud-init.
Ubuntu es una popular distribución de Linux de código abierto que se utiliza comúnmente para ejecutar cargas de trabajo de IA/ML y con uso intensivo de GPU. Al crear clusters con Kubernetes Engine (OKE), puede utilizar imágenes personalizadas y scripts cloud-init para crear los siguientes tipos de nodo de trabajador para ejecutar Ubuntu:
- nodos gestionados
- nodos gestionados automáticamente
Tenga en cuenta que no puede crear nodos virtuales para ejecutar Ubuntu mediante imágenes personalizadas y scripts cloud-init.
En general, el proceso para crear un nodo de trabajador para ejecutar Ubuntu es:
- Paso 1: Cree una imagen personalizada basada en una instancia informática existente que ejecute la versión de Ubuntu necesaria. Oracle proporciona paquetes de nodos para diferentes versiones de Ubuntu, y cada paquete de nodos es compatible con determinadas versiones de Kubernetes. Para obtener más información, consulte disponibilidad y compatibilidad.
- Paso 2: Cree la URL desde la que desea descargar un paquete de nodos de Ubuntu. La URL desde la que se descargará el paquete de nodos de Ubuntu proporcionado por Oracle depende tanto de la versión de Ubuntu como de la versión de Kubernetes que desee ejecutar en el nodo de trabajador. Hay una URL de descarga diferente para cada combinación soportada de versión de Ubuntu y versión de Kubernetes.
- Paso 3: Cree un script cloud-init para instalar el paquete de nodos de Ubuntu e inicie el nodo de trabajador. El script cloud-init que se va a crear depende de si el nodo de trabajador en el que desea ejecutar Ubuntu es un nodo gestionado o un nodo autogestionado.
- Paso 4: Agregar nodos de trabajador que ejecutan Ubuntu a un cluster. La forma en que se agregan nodos de Ubuntu a un cluster depende de si se desea agregar los nodos como nodos gestionados o como nodos autogestionados. Para los nodos gestionados, defina un pool de nodos gestionados. Para los nodos autogestionados, puede agregar instancias informáticas como nodos de trabajador.
Disponibilidad y compatibilidad
En esta tabla se muestran las versiones de Ubuntu con las que Oracle proporciona paquetes de nodos, junto con las versiones de Kubernetes con las que es compatible cada paquete de nodos. Los paquetes de nodos que proporciona Oracle están diseñados para funcionar en arquitecturas x86 y ARM.
Versión de Ubuntu | Paquete para utilizar con Kubernetes 1.27 | Paquete para utilizar con Kubernetes 1.28 | Paquete para utilizar con Kubernetes 1.29 | Paquete para utilizar con Kubernetes 1.30 | Paquete para utilizar con Kubernetes 1.31 | Paquete para usar con Kubernetes 1.32 | Paquete para usar 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 |
Paso 1: Crear una imagen personalizada basada en una instancia informática existente que ejecute la versión de Ubuntu necesaria
En este paso, utilizará el servicio Compute para crear una imagen personalizada a partir de una instancia informática que ya esté ejecutando la versión de Ubuntu que desee en los nodos de trabajador del cluster de Kubernetes.
Tenga en cuenta que la imagen se crea como una imagen "personalizada", aunque no modifique la imagen.
- Decida qué versión de Ubuntu y qué versión de Kubernetes desea en los nodos de trabajador.
Oracle proporciona paquetes de nodos para diferentes versiones de Ubuntu, y cada paquete de nodos es compatible con determinadas versiones de Kubernetes. Para obtener más información, consulte Disponibilidad y compatibilidad.
-
Identifique una instancia informática existente que ejecute la versión de Ubuntu que necesite.
Esta es la instancia informática que utilizará como base de la imagen personalizada.
Si aún no existe una instancia informática adecuada, siga las instrucciones de Creación de una instancia en la documentación del servicio Compute para crear una instancia informática adecuada ahora.
- Siga las instrucciones de Gestión de imágenes personalizadas en la documentación del servicio Compute para crear una imagen personalizada basada en la instancia informática existente que ejecuta la versión de Ubuntu que necesita.
- Anote el OCID de la imagen personalizada que ha creado.
Paso 2: Construir la URL desde la que descargar un paquete de nodos de Ubuntu
En este paso, construirá la URL desde la que descargar el paquete de nodos de Ubuntu proporcionado por Oracle.
La URL de descarga depende de la versión de Ubuntu y de la versión de Kubernetes que desee en los nodos de trabajador. La URL de descarga incluye la ubicación de Object Storage, así como detalles de la versión concreta de Ubuntu y la versión de Kubernetes.
Tenga en cuenta que las versiones de Kubernetes que se ejecutan en nodos de plano de control y en nodos de trabajador (incluidos los nodos autogestionados) deben ser compatibles, como se describe en la política de soporte de sesgo de versión de Kubernetes en la documentación de Kubernetes. Es su responsabilidad crear la URL de descarga para un paquete de nodos que contenga una versión de Kubernetes compatible. Kubernetes Engine no comprueba que la versión de Kubernetes en el paquete de nodos especificado sea compatible con la versión de Kubernetes que se ejecuta en los nodos de plano de control del cluster.
Cree la URL de descarga de la siguiente manera:
- Abra un nuevo archivo de texto en el editor de texto que desee.
- Cree la URL de descarga de la siguiente manera:
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
donde:
-
<ubuntu-release>
es uno de los siguientes, según la versión de Ubuntu que desea ejecutar en el nodo de trabajador:ubuntu-jammy
(Ubuntu 22.04)ubuntu-noble
(Ubuntu 24.04)
<kubernetes-version>
es uno de los siguientes, según la versión secundaria de Kubernetes que desea ejecutar en el nodo de trabajador:kubernetes-1.27
kubernetes-1.28
kubernetes-1.29
kubernetes-1.30
kubernetes-1.31
kubernetes-1.32
kubernetes-1.33
Por ejemplo, si desea ejecutar Ubuntu 22.04 y Kubernetes versión 1.29 en nodos de trabajador, cree la siguiente URL de descarga para el paquete de nodos adecuado:
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
-
- (Opcional) Guarde el archivo de texto en una ubicación conveniente, ya que necesita la URL de descarga en el siguiente paso.
Paso 3: Crear un script cloud-init para instalar el paquete de nodos de Ubuntu e iniciar el nodo de trabajador
En este paso, creará un script cloud-init para descargar e instalar el paquete de nodos de Ubuntu proporcionado por Oracle y para iniciar el nodo de trabajador.
Tenga en cuenta que hay una lógica diferente para agregar al script cloud-init, en función de si desea ejecutar Ubuntu en nodos gestionados o en nodos autogestionados.
Creación de un script cloud-init para nodos gestionados
Para crear un script cloud-init para ejecutar Ubuntu en nodos gestionados:
- Cree un nuevo archivo de script cloud-init desde cero con un tipo de archivo soportado por cloud-init (como .yaml) y agregue la siguiente lógica al archivo de script:
#cloud-config apt: sources: oke-node: {source: 'deb [trusted=yes] <download-url>'} packages: - <oci-package-name> runcmd: - oke bootstrap
donde:
<download-url>
es la URL desde la que descargar el paquete de nodos de Ubuntu que ha creado en el paso anterior (consulte Paso 2: Crear la URL desde la que descargar un paquete de nodos de Ubuntu). Por ejemplo,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>
es uno de los siguientes, según la versión secundaria de Kubernetes que desea ejecutar en el nodo gestionado: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 versión secundaria de Kubernetes debe coincidir con la versión secundaria de Kubernetes especificada al crear la URL de descarga (consulte Paso 2: Creación de la URL desde la que se descargará un paquete de nodos de Ubuntu).
Por ejemplo, si desea ejecutar Ubuntu 22.04 (jammy) y la versión 1.29.1 de Kubernetes en nodos gestionados, agregue la siguiente lógica al archivo 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
- Guarde el archivo de script de cloud-init.
Creación de un script cloud-init para nodos autogestionados
Para crear un script cloud-init para ejecutar Ubuntu en nodos autogestionados:
- Siga las instrucciones de Creación de scripts de cloud-init para nodos autogestionados para obtener el punto final privado de la API de Kubernetes del cluster mejorado al que desea agregar el nodo autogestionado mediante la consola o la CLI.
- Siga las instrucciones de Creating Cloud-init Scripts for Self-managed Nodes para obtener el certificado de CA codificado en base64 del cluster desde el archivo kubeconfig del cluster, mediante la consola o la CLI.
- Cree un nuevo archivo de script cloud-init desde cero con un tipo de archivo soportado por cloud-init (como .yaml) y agregue la siguiente lógica al archivo 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>donde:
<download-url>
es la URL desde la que descargar el paquete de nodos de Ubuntu que ha creado en el paso anterior (consulte Paso 2: Crear la URL desde la que descargar un paquete de nodos de Ubuntu). Por ejemplo,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>
es uno de los siguientes, según la versión secundaria de Kubernetes que desea ejecutar en el nodo autogestionado: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 versión secundaria de Kubernetes debe coincidir con la versión secundaria de Kubernetes especificada al crear la URL de descarga (consulte Paso 2: Creación de la URL desde la que se descargará un paquete de nodos de Ubuntu).
<cluster-endpoint>
es la dirección IP del punto final de API de Kubernetes del cluster que ha obtenido anteriormente.<base64-encoded-certificate>
es el certificado de CA codificado en base64 del cluster que ha obtenido anteriormente (a partir de los caracteresLS0t
).
Por ejemplo, si desea ejecutar Ubuntu 22.04 (Jammy) y Kubernetes versión 1.29.1 en un nodo autogestionado, agregue la siguiente lógica al archivo 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
- Guarde el archivo de script de cloud-init.
Paso 4: Agregar nodos de trabajador que ejecutan Ubuntu a un cluster
En este paso, utilizará el script cloud-init que ha creado anteriormente para agregar nodos de trabajador que ejecutan Ubuntu a un cluster de Kubernetes.
Tenga en cuenta que hay diferentes instrucciones que seguir, en función de si desea ejecutar Ubuntu en nodos gestionados o en nodos autogestionados. Para los nodos gestionados, defina un pool de nodos gestionados. Para los nodos autogestionados, puede agregar instancias informáticas como nodos de trabajador.
Tenga en cuenta que debe utilizar la CLI para crear nodos gestionados basados en imágenes personalizadas.
Agregando nodos de trabajador de Ubuntu como nodos gestionados
Para agregar nodos gestionados que ejecuten Ubuntu en un cluster existente
- Abra un símbolo del sistema y utilice el comando oci ce node-pool create para crear un nuevo pool de nodos.
- Además de los parámetros obligatorios requeridos por el comando:
- Incluya el parámetro
--node-image-id
y especifique el OCID de la imagen personalizada que ha creado en el Paso 1: Crear una imagen personalizada basada en una instancia informática existente que ejecute la versión de Ubuntu necesaria. - Incluya el parámetro
--node-metadata
y especifique el script cloud-init que ha creado para los nodos gestionados en el Step 3: Create a cloud-init script to install the Ubuntu node package and bootstrap the worker node, con el formato adecuado para su entorno:- Linux:
--node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64 -w 0)'"}'
- Mac:
--node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64- b 0)'"}'
donde:<cloud-init-file>
es el nombre del archivo cloud-init que ha creadobase64
especifica que el archivo se va a codificar en base64
- Linux:
Por ejemplo, puede introducir el siguiente comando en una estación de trabajo 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)'"}'
Tenga en cuenta que la versión de Kubernetes que especifique mediante el parámetro
--kubernetes-version
debe corresponder a la versión de Kubernetes especificada en el script cloud-init (consulte Paso 3: Creación de un script cloud-init para instalar el paquete de nodos de Ubuntu y realizar el inicialización del nodo de trabajador). - Incluya el parámetro
Agregando nodos de trabajador de Ubuntu como nodos autogestionados
Antes de crear un nodo autogestionado, confirme que:
- El cluster al que desea agregar el nodo autogestionado está configurado correctamente para los nodos autogestionados. Consulte Cluster Requirements.
- Ya existe un grupo dinámico y una política de IAM para permitir que la instancia informática que aloja el nodo autogestionado se una a un cluster mejorado creado con Kubernetes Engine. Consulte Creating a Dynamic Group and a Policy for Self-Managed Nodes.
Uso de la consola
- Cree una nueva instancia informática para alojar el nodo autogestionado:
- Abra el menú de navegación y seleccione Recursos informáticos. En Recursos informáticos, seleccione Instancias.
- Siga las instrucciones de la documentación del servicio de recursos informáticos para crear una nueva instancia informática. Tenga en cuenta que deben existir políticas adecuadas para permitir que la nueva instancia informática se una al cluster mejorado. Consulte Creating a Dynamic Group and a Policy for Self-Managed Nodes.
- En la sección Imagen y unidad, haga clic en Cambiar imagen.
- Haga clic en Mis imágenes, seleccione la opción OCID de imagen y, a continuación, introduzca el OCID de la imagen personalizada que ha creado en el Paso 1: Crear una imagen personalizada basada en una instancia informática existente que ejecute la versión de Ubuntu necesaria.
- Haga clic en Mostrar opciones avanzadas y, en el separador Gestión, seleccione la opción Pegar script cloud-init.
- Copie y pegue el script cloud-init que ha creado para los nodos autogestionados en el Paso 3: Crear un script cloud-init para instalar el paquete de nodos de Ubuntu e iniciar el nodo de trabajador en el campo Secuencia de comandos cloud-init.
- Haga clic en Crear para crear la instancia informática para alojar el nodo autogestionado.
Cuando se crea la instancia informática, se agrega como nodo autogestionado al cluster con el punto final de API de Kubernetes especificado en el script cloud-init.
- (Opcional) Verifique que el nodo autogestionado se ha agregado al cluster de Kubernetes y que las etiquetas se han agregado al nodo y se han definido como se esperaba, siguiendo las instrucciones de Creación de nodos autogestionados.
Uso de la CLI
- Abra un símbolo del sistema e introduzca el comando
oci Compute instance launch
y los parámetros necesarios para crear un nodo autogestionado. - Además de los parámetros obligatorios requeridos por el comando:
- Incluya el parámetro
--image-id
y especifique el OCID de la imagen personalizada que ha creado en el Paso 1: Crear una imagen personalizada basada en una instancia informática existente que ejecute la versión de Ubuntu necesaria. - Incluya el parámetro
--user-data-file
y especifique el script cloud-init que ha creado para los nodos autogestionados en el Paso 3: Crear un script cloud-init para instalar el paquete de nodos de Ubuntu e iniciar el nodo de trabajador.
Por ejemplo, puede introducir el siguiente comando:
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
Cuando se crea la instancia informática, se agrega como nodo autogestionado al cluster con el punto final de API de Kubernetes especificado en el script cloud-init.
- Incluya el parámetro