We are happy to announce the availability of stand-alone node packages for Ubuntu in Oracle Cloud Infrastructure Kubernetes Engine (OKE). These node packages provide the software components and configurations required to transform Ubuntu images into functional worker nodes in OKE, unlocking the full potential of both technologies.
Ubuntu is one of the most popular Linux distributions and has established itself as the standard OS for running GPU-intensive and AI/ML workloads. While OCI has supported Ubuntu Platform Images, users could not run Ubuntu-based worker nodes in their OKE Clusters. With the addition of Ubuntu node packages, users can now create custom Ubuntu images optimized for OKE, unlocking the full potential of their accelerated AI/ML workloads. In just a few steps, you can start running Ubuntu-based managed and self-managed worker nodes in OKE today.
Availability
We offer node packages for Ubuntu 22.04 (Jammy) and Ubuntu 24.04 (Noble), available across Kubernetes versions 1.27, 1.28, and 1.29. These packages are designed to work seamlessly across x86 and ARM architectures. Customers can choose the base Ubuntu image, Kubernetes version, and configuration that best suits their specific requirements.
Node packages for different Ubuntu and Kubernetes versions are available through OCI-hosted APT repositories. To access a specific node package, you’ll need the base URL and parameters corresponding to the desired Ubuntu and Kubernetes versions.
Base URL:
https://objectstorage.us-sanjose-1.oraclecloud.com/p/45eOeErEDZqPGiymXZwpeebCNb5lnwzkcQIhtVf6iOF44eet_efdePaF7T8agNYq/n/odx-oke/b/okn-repositories-private/o/prod/
Ubuntu Version:
- ubuntu-jammy/
- ubuntu-noble/
Kubernetes Version:
kubernetes-1.27 stable mainkubernetes-1.28 stable mainkubernetes-1.29 stable main
Example for Ubuntu 24.04 (Noble) Kubernetes 1.29
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
Using Ubuntu Node Packages
Create a Custom Ubuntu Image
To use Ubuntu-based worker nodes, the first step is to build a custom image based on your desired Ubuntu version. You can refer to our technical documentation for detailed steps on creating the custom image. Once the image is created, be sure to note the OCID, as it will be needed later in the process. Even if no modifications are made to the base Ubuntu image, creating a custom image is still required.
Develop a Cloud-init Script
The next step is to create a cloud-init script that installs the necessary Ubuntu Node packages and bootstraps the OKE node. You’ll need the download URL from the previous step for this process. Keep in mind that this cloud-init script will be different for those used for managed and self-managed nodes.
Managed Nodes
#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} # URL obtained in the previous step
packages:
- oci-oke-node-all-1.29.1 # Replace with the appropriate version,oci-oke-node-all-1.28.10,oci-oke-node-all-1.27.10
runcmd:
- oke bootstrap
Self-Managed Nodes
#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} # URL obtained in the previous step
packages:
- oci-oke-node-all-1.29.1 # Replace with the appropriate version,oci-oke-node-all-1.28.10,oci-oke-node-all-1.27.10
write_files:
- path: /etc/oke/oke-apiserver
permissions: '0644'
content: 10.114.0.5 # IP address of the Kube-API server of the OKE cluster
- encoding: b64
path: /etc/kubernetes/ca.crt
permissions: '0644'
content: LS0tLS1...LS0tCg== # The base64-encoded CA certificate
runcmd:
- oke bootstrap --ca LS0tLS1...LS0tCg== --apiserver-host 10.114.0.5
You can follow the instructions in our documentation to extract IP Address and the base64-encoded CA certificate of your OKE cluster.
Deploying Ubuntu Worker Nodes
Next, you will add Ubuntu workers to your OKE cluster. For self-managed nodes, you will add compute instances as worker nodes, whereas for managed nodes, you will add node pools that contain your worker nodes.
Self-Managed Nodes
Before adding a self-managed node to an OKE cluster, ensure that all prerequisites are fulfilled and the appropriate IAM policies are in place.
Console
- Open the navigation menu and click Compute. Under Compute, click Instances.
- Click Create instance
- Under Image and shape select the Change Image and select My images and click Image OCID and select the ocid of the custom-built Ubuntu image
- Click Show advanced option and either paste or upload the cloud-init script from previous step.
- Fill in the rest of the tabs based on your environment.
- Click Create
CLI
Use the oci compute instance launch command (see documentation) and the required parameters to create a self-managed node.
oci compute instance launch --availability-domain <availability-domain> --compartment-id <compartment-ocid> --shape <shape> --subnet-id <subnet-ocid> --user-data-file <path to the cloud-init file> --image-id <ocid of your custom image> [OPTIONS]
Managed Nodes
To create a node pool using Managed Nodes, you’ll need to use the OCI CLI, as custom images for OKE worker nodes are currently only supported through the CLI. We’ll walk you through the steps for this process using the oci ce node-pool create command (see documentation).
Additionally, you must include your cloud-init file with the –node-metadata option. How you do this will vary depending on the system you’re using to execute the OCI CLI command:
- Cloud Shell: cat my-custom-cloud-init.yaml | base64 -w 0
- Mac: cat my-custom-cloud-init.yaml | base64 -b 0
oci ce node-pool create \
--cluster-id <oke cluster-ocid> \
--name <name of node pool> \
--node-image-id <custom image ocid> \
--compartment-id <compartment-ocid> \
--kubernetes-version v1.29.1 \
--node-shape <vm shape for the node pool> \
--placement-configs "[{\"availability-domain\":\"<availability domain> \", \"subnet-id\":\"<ocid of subnet>\", \"faultDomains\":[\"FAULT-DOMAIN-3\", \"FAULT-DOMAIN-1\"]}, \
--size <number of worker nodes> \
--region=<region> \
--node-metadata '{"user_data": "'$(cat my-custom-cloud-init.yaml | base64 -b 0)'"}' # From a MAC workstation
Getting Started
Whether you are building high-performance computing environments or have specific OS requirements, we are thrilled to offer customers a new level of flexibility and control over their Kubernetes clusters. Our team is actively working to provide a more integrated experience for customers to run Ubuntu-based workloads in OKE, so stay tuned for upcoming announcements and updates.
For more information on the concepts in this blog post, Oracle Cloud Infrastructure, or OKE see the following resources:
- OCI Kubernetes Engine website
- OKE resource center
- Overview of Kubernetes Engine (documentation)
- OKE OCI CLI Command Reference (documentation)
- Start your free trial of OCI
Disclaimer:
The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation.

