Executando o Ubuntu em Nós de Trabalho Usando Imagens Personalizadas

Descubra como incluir nós de trabalho que executam a distribuição do Ubuntu Linux em clusters criados com o Kubernetes Engine (OKE), usando imagens personalizadas e scripts cloud-init.

O Ubuntu é uma distribuição Linux de código aberto popular que é comumente usada para executar cargas de trabalho com uso intensivo de GPU e IA/ML. Ao criar clusters com o Kubernetes Engine (OKE), você pode usar imagens personalizadas e scripts cloud-init para criar os seguintes tipos de nó de trabalho para executar o Ubuntu:

  • nós gerenciados
  • nós auto-gerenciados

Observe que você não pode criar nós virtuais para executar o Ubuntu usando imagens personalizadas e scripts cloud-init.

Em um nível alto, o processo para criar um nó de trabalho para executar o Ubuntu é:

Disponibilidade e Compatibilidade

Esta tabela lista as releases do Ubuntu para as quais a Oracle fornece pacotes de nós, juntamente com as versões do Kubernetes com as quais cada pacote de nós é compatível. Os pacotes de nós que a Oracle fornece são projetados para funcionar nas arquiteturas x86 e ARM.

Versão do Ubuntu Pacote a ser usado com o Kubernetes 1.27 Pacote a ser usado com o Kubernetes 1.28 Pacote a ser usado com o Kubernetes 1.29 Pacote a ser usado com o Kubernetes 1.30 Pacote a ser usado com o Kubernetes 1.31 Pacote para usar com o Kubernetes 1.32 Pacote para usar com o 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

Etapa 1: Criar uma imagem personalizada com base em uma instância de computação existente que executa a release do Ubuntu necessária

Nesta etapa, você usa o serviço Compute para criar uma imagem personalizada de uma instância de computação que já esteja executando a release do Ubuntu desejada nos nós de trabalho do cluster do Kubernetes.

Observe que você cria a imagem como uma imagem 'personalizada', mesmo que não a modifique.

  1. Decida qual release do Ubuntu e qual versão do Kubernetes você deseja nos nós de trabalho.

    A Oracle fornece pacotes de nós para diferentes releases do Ubuntu, e cada pacote de nós é compatível com determinadas versões do Kubernetes. Para obter mais informações, consulte Disponibilidade e Compatibilidade.

  2. Identifique uma instância de computação existente que esteja executando a release do Ubuntu necessária.

    Esta é a instância de computação que você usará como base da imagem personalizada.

    Se ainda não existir uma instância de computação adequada, siga as instruções em Criando uma Instância na documentação do serviço Compute para criar uma instância de computação adequada agora.

  3. Siga as instruções em Gerenciando Imagens Personalizadas na documentação do serviço Compute para criar uma imagem personalizada com base na instância de computação existente que está executando a release do Ubuntu necessária.
  4. Anote o OCID da imagem personalizada que você criou.

Etapa 2: Construa o URL do qual fazer download de um pacote de nós do Ubuntu

Nesta etapa, você constrói o URL a partir do qual fará download do pacote de nós do Ubuntu fornecido pela Oracle.

O URL de download depende da release do Ubuntu e da versão do Kubernetes que você deseja nos nós de trabalho. O URL de download inclui o local do Object Storage, bem como detalhes da versão específica do Ubuntu e do Kubernetes.

Lembre-se de que as versões do Kubernetes executadas nos nós do plano de controle e nos nós de trabalho (incluindo nós autogerenciados) devem ser compatíveis, conforme descrito na política de suporte de desvio de versão do Kubernetes na documentação do Kubernetes. É sua responsabilidade construir o URL de download para um pacote de nós que contenha uma versão compatível do Kubernetes. O Kubernetes Engine não verifica se a versão do Kubernetes no pacote de nós especificado é compatível com a versão do Kubernetes executada nos nós de plano de controle do cluster.

Construa o URL de download da seguinte forma:

  1. Abra um novo arquivo de texto no seu editor de texto preferencial.
  2. Crie o URL de download da seguinte forma:
    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

    em que:

    • <ubuntu-release> é um dos seguintes, de acordo com a release do Ubuntu que você deseja executar no nó de trabalho:

      • ubuntu-jammy (Ubuntu 22.04)
      • ubuntu-noble (Ubuntu 24.04)
    • <kubernetes-version> é um dos seguintes, de acordo com a versão secundária do Kubernetes que você deseja executar no nó de trabalho:
      • kubernetes-1.27
      • kubernetes-1.28
      • kubernetes-1.29
      • kubernetes-1.30
      • kubernetes-1.31
      • kubernetes-1.32
      • kubernetes-1.33

    Por exemplo, se você quiser executar o Ubuntu 22.04 e o Kubernetes versão 1.29 nos nós de trabalho, crie o seguinte URL de download para o pacote de nós apropriado:

    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. (opcional) Salve o arquivo de texto em um local conveniente, pois você precisa do URL de download na próxima etapa.

Etapa 3: Criar um script cloud-init para instalar o pacote de nós do Ubuntu e fazer bootstrap do nó de trabalho

Nesta etapa, você cria um script cloud-init para fazer download e instalar o pacote de nós do Ubuntu fornecido pela Oracle e para fazer bootstrap do nó de trabalho.

Observe que há uma lógica diferente a ser adicionada ao script cloud-init, dependendo se você deseja executar o Ubuntu em nós gerenciados ou em nós autogerenciados.

Criando um script cloud-init para nós gerenciados

Para criar um script cloud-init para executar o Ubuntu em nós gerenciados:

  1. Crie um novo arquivo de script cloud-init do zero com um tipo de arquivo suportado pelo cloud-init (como .yaml) e adicione a seguinte lógica ao arquivo de script:
    #cloud-config
    apt:
     sources:
       oke-node: {source: 'deb [trusted=yes] <download-url>'}
    packages:                                                       
     - <oci-package-name>
    runcmd:
     - oke bootstrap

    em que:

    • <download-url> é o URL do qual será feito download do pacote de nós do Ubuntu que você construiu na etapa anterior (consulte Etapa 2: Construir o URL do qual será feito download de um pacote de nós do Ubuntu). Por exemplo, 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> é um dos seguintes, de acordo com a versão secundária do Kubernetes que você deseja executar no nó gerenciado:
      • 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

      A versão secundária do Kubernetes deve corresponder à versão secundária do Kubernetes especificada ao construir o URL de download (consulte Etapa 2: Construir o URL do qual fazer download de um pacote de nós do Ubuntu).

    Por exemplo, se você quiser executar o Ubuntu 22.04 (jammy) e o Kubernetes versão 1.29.1 nos nós gerenciados, adicione a seguinte lógica ao arquivo 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. Salve o arquivo de script cloud-init.

Criando um script cloud-init para nós autogerenciados

Para criar um script cloud-init para executar o Ubuntu em nós autogerenciados:

  1. Siga as instruções em Criando Scripts Cloud-init para Nós Autogerenciados para obter o ponto final privado da API do Kubernetes do cluster aprimorado ao qual você deseja adicionar o nó autogerenciado, usando a Console ou a CLI.
  2. Siga as instruções em Criando Scripts Cloud-init para Nós Autogerenciados para obter o certificado da CA codificado em base64 do cluster no arquivo kubeconfig do cluster, usando a Console ou a CLI.
  3. Crie um novo arquivo de script cloud-init do zero com um tipo de arquivo suportado pelo cloud-init (como .yaml) e adicione a seguinte lógica ao arquivo 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>

    em que:

    • <download-url> é o URL do qual será feito download do pacote de nós do Ubuntu que você construiu na etapa anterior (consulte Etapa 2: Construir o URL do qual será feito download de um pacote de nós do Ubuntu). Por exemplo, 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> é um dos seguintes, de acordo com a versão secundária do Kubernetes que você deseja executar no nó autogerenciado:

      • 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

      A versão secundária do Kubernetes deve corresponder à versão secundária do Kubernetes especificada ao construir o URL de download (consulte Etapa 2: Construir o URL do qual fazer download de um pacote de nós do Ubuntu).

    • <cluster-endpoint> é o endereço IP do ponto final da API do Kubernetes do cluster que você obteve anteriormente.
    • <base64-encoded-certificate> é o certificado da CA codificado por base64 do cluster que você obteve anteriormente (começando com os caracteres LS0t).

    Por exemplo, se você quiser executar o Ubuntu 22.04 (Jammy) e o Kubernetes versão 1.29.1 em um nó autogerenciado, adicione a seguinte lógica ao arquivo 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. Salve o arquivo de script cloud-init.

Etapa 4: Adicionar nós de trabalho que executam o Ubuntu a um cluster

Nesta etapa, você usa o script cloud-init criado anteriormente para adicionar nós de trabalho que executam o Ubuntu a um cluster do Kubernetes.

Observe que há instruções diferentes a serem seguidas, dependendo se você deseja executar o Ubuntu em nós gerenciados ou em nós autogerenciados. Para nós gerenciados, você define um pool de nós gerenciados. Para nós autogerenciados, você adiciona instâncias de computação como nós de trabalho.

Observe que você precisa usar a CLI para criar nós gerenciados com base em imagens personalizadas.

Adicionando nós de trabalho do Ubuntu como nós gerenciados

Para adicionar nós gerenciados que executam o Ubuntu em um cluster existente

  1. Abra um prompt de comando e use o comando oci ce node-pool create para criar um novo pool de nós.
  2. Além dos parâmetros obrigatórios exigidos pelo comando:
    1. Inclua o parâmetro --node-image-id e especifique o OCID da imagem personalizada que você criou na Etapa 1: Criar uma imagem personalizada com base em uma instância de computação existente que executa a release necessária do Ubuntu.
    2. Inclua o parâmetro --node-metadata e especifique o script cloud-init que você criou para nós gerenciados na Etapa 3: Criar um script cloud-init para instalar o pacote de nós Ubuntu e inicializar o nó de trabalho, no formato apropriado para seu ambiente:
      • Linux: --node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64 -w 0)'"}'
      • Mac: --node-metadata '{"user_data": "'$(cat <cloud-init-file> | base64- b 0)'"}'
      em que:
      • <cloud-init-file> é o nome do arquivo cloud-init que você criou
      • base64 especifica que o arquivo deve ser codificado em base64

    Por exemplo, você pode informar o seguinte comando em uma estação de trabalho 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)'"}'

    Observe que a versão do Kubernetes especificada usando o parâmetro --kubernetes-version deve corresponder à versão do Kubernetes especificada no script cloud-init (consulte a Etapa 3: Criar um script cloud-init para instalar o pacote de nós do Ubuntu e fazer o bootstrap do nó de trabalho).

Adicionando nós de trabalho do Ubuntu como nós autogerenciados

Antes de criar um nó autogerenciado, confirme se:

  • O cluster ao qual você deseja adicionar o nó autogerenciado é configurado adequadamente para nós autogerenciados. Consulte Requisitos de Cluster.
  • Já existe um grupo dinâmico e uma política do serviço IAM para permitir que a instância de computação que hospeda o nó autogerenciado participe de um cluster aprimorado criado com o Kubernetes Engine. Consulte Criando um Grupo Dinâmico e uma Política para Nós Self-Managed.

Usando a Console

  1. Crie uma nova instância de computação para hospedar o nó autogerenciado:
    1. Abra o menu de navegação e selecione Computação. Em Compute, selecione Instâncias.
    2. Siga as instruções na documentação do serviço Compute para criar uma nova instância de computação. Observe que devem existir políticas apropriadas para permitir que a nova instância de computação entre no cluster aprimorado. Consulte Criando um Grupo Dinâmico e uma Política para Nós Self-Managed.
    3. Na seção Imagem e Forma, clique em Alterar imagem.
    4. Clique em Minhas imagens, selecione a opção OCID da Imagem e digite o OCID da imagem personalizada que você criou na Etapa 1: Criar uma imagem personalizada com base em uma instância de computação existente que executa a release necessária do Ubuntu.
    5. Clique em Mostrar opções avançadas e, na guia Gerenciamento, selecione a opção Colar script cloud-init.
    6. Copie e cole o script cloud-init criado para nós autogerenciados na Etapa 3: Criar um script cloud-init para instalar o pacote de nós do Ubuntu e fazer bootstrap do nó de trabalho, no campo script cloud-init.
    7. Clique em Criar para criar a instância de computação para hospedar o nó autogerenciado.

    Quando a instância de computação é criada, ela é adicionada como um nó autogerenciado ao cluster com o ponto final da API do Kubernetes especificado no script cloud-init.

  2. (Opcional) Verifique se o nó autogerenciado foi adicionado ao cluster do Kubernetes e se os labels foram adicionados ao nó e definidos conforme esperado, seguindo as instruções em Criando Nós Autogerenciados.

Usando a CLI

  1. Abra um prompt de comando e informe o comando oci Compute instance launch e os parâmetros necessários para criar um nó autogerenciado.
  2. Além dos parâmetros obrigatórios exigidos pelo comando:
    1. Inclua o parâmetro --image-id e especifique o OCID da imagem personalizada que você criou na Etapa 1: Criar uma imagem personalizada com base em uma instância de computação existente que executa a release necessária do Ubuntu.
    2. Inclua o parâmetro --user-data-file e especifique o script cloud-init criado para nós autogerenciados na Etapa 3: Criar um script cloud-init para instalar o pacote de nós do Ubuntu e fazer bootstrap do nó de trabalho.

    Por exemplo, você pode inserir o seguinte 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

    Quando a instância de computação é criada, ela é adicionada como um nó autogerenciado ao cluster com o ponto final da API do Kubernetes especificado no script cloud-init.