Trabalhando com configmaps

Saiba como trabalhar com configmaps no Code Engine. No Code Engine, é possível armazenar suas informações como pares chave-valor em configmaps que podem ser consumidos por seu app, tarefa ou carga de trabalho de função usando variáveis de ambiente.

O que são configmaps e por que eu os usaria?

No Code Engine, os segredos e configmaps são pares chave-valor. Quando mapeados para variáveis de ambiente, os relacionamentos NAME=VALUE são configurados de tal forma que o nome da variável de ambiente corresponde à "key" de cada entrada nesses mapas, e o valor da variável de ambiente é o "value" dessa chave.

Um mapa de configuração fornece um método para incluir informações de dados não sensíveis em sua implementação. Ao referenciar valores de seu configmap como variáveis de ambiente, é possível desacoplar informações específicas de sua implementação e manter seu app, tarefa ou função móvel. Um mapa de configuração contém informações em pares chave-valor.

Como os segredos e os configmaps são entidades semelhantes (exceto que os segredos são armazenados com mais segurança), a maneira como você interage e trabalha com segredos e configmaps também é semelhante. Para saber mais sobre segredos, consulte Trabalhando com segredos.

Eu vejo configmaps que eu não criei. Posso excluí-los?

O Code Engine cria automaticamente os mapas de configuração istio-ca-root e kube-root-ca em seu namespace. Code Engine usa esses configmaps internamente. Se você excluir esses configmaps, o Code Engine os recria automaticamente.

Criando mapas de configuração

Crie mapas de configuração com o Code Engine.

Criando um configmap por meio do console

Crie configmaps com o console do Code Engine.

Antes de iniciar, crie um projeto.

  1. Após seu projeto estar no status Ativo, clique no nome de seu projeto no Página Projetos Code Engine.
  2. Na página Visão geral, clique em Segredos e configmaps.
  3. Na página Segredos e configmaps, clique em Criar para criar seu configmap.
  4. Na página Criar segredo ou configmap, conclua as etapas a seguir:
    1. Clique em Configmap e clique em Avançar.
    2. Forneça um nome; por exemplo, myconfigmap.
    3. Clique em Incluir par chave-valor. Especifique um ou mais pares chave-valor para este configmap. Por exemplo, especifique uma chave como key1 com o valor de value1 e especifique outra chave como key2 com o valor de value2. Observe que é possível especificar valores em uma ou mais linhas. O nome que você escolher para sua chave não precisa ser o mesmo nome da sua variável de ambiente.
    4. Clique em Criar para criar o configmap.

Agora que o seu configmap é criado por meio do console, acesse a página Segredos e configmaps para visualizar uma lista de segredos e configmaps definidos É possível aplicar filtros para customizar a lista para atender às suas necessidades

Criar um configmap com a CLI

Crie mapas de configuração com a CLI do Code Engine.

É possível preencher um configmap de diversas maneiras. É possível preenchê-lo especificando os pares chave-valor diretamente na linha de comandos ou é possível apontar para um arquivo.

Antes de Iniciar

Quando você criar (ou atualizar) um configmap de um arquivo, o formato deverá ser --from-file FILE ou --from-file KEY=FILE. No Code Engine, ao usar um arquivo para especificar valores de configmap, todo o conteúdo dentro do arquivo se torna o valor para o par chave-valor. Ao usar o formato de opção de --from-file KEY=FILE, o KEY é o nome da variável de ambiente que é conhecida para seu app, tarefa ou carga de trabalho de função. Ao usar o formato da opção --from-file FILE, FILE é o nome da variável de ambiente que é conhecida para sua tarefa, app ou função. Se o seu arquivo contiver um ou mais pares chave-valor, use a opção --from-env-file para incluir uma variável de ambiente para cada par chave-valor no arquivo especificado. Quaisquer linhas no arquivo especificado que estejam vazias ou começam com # serão ignoradas.

Criando um mapa de configuração com a CLI

Crie um configmap com o comando configmap create de uma das formas a seguir,

  • Crie um configmap diretamente na linha de comandos usando a opção --from-literal no formato KEY=VALUE. Por exemplo,

    ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
    
  • Crie um configmap usando a opção --from-file para apontar para um arquivo. Ao utilizar esta opção, todo o conteúdo do arquivo se torna o valor para o par chave-valor. Para este exemplo, use um arquivo denominado colors.txt, que contém o texto blue, green, red.

    • O exemplo a seguir usa o formato --from-file KEY=FILE com o comando configmap create:

      ibmcloud ce configmap create --name mycolorconfigmap --from-file TARGET=colors.txt
      
    • O comando de exemplo a seguir usa o formato --from-file FILE com o comando configmap create. Neste exemplo, TARGET (sem extensão) é o nome do arquivo, que é o mesmo nome da variável de ambiente que é conhecido para o exemplo de tarefa myjob.

      ibmcloud ce configmap create --name mycolorconfigmap2  --from-file TARGET
      
  • Crie um configmap usando a opção --from-env-file para apontar para um arquivo que contenha uma ou mais linhas que correspondem ao formato KEY=VALUE. Cada linha do arquivo especificado é incluída como um par chave-valor. Quaisquer linhas no arquivo especificado que estejam vazias ou começam com # serão ignoradas. Para este exemplo, use um arquivo denominado colors_multi.txt que contém os pares chave-valor: color1=yellow, color2=orange e color3=purple.

    ibmcloud ce configmap create --name mycolorconfigmapmulti --from-env-file colors_multi.txt
    

Listando os configmaps com a CLI

Agora que o configmap está criado, use o comando configmap list para listar todos os configmaps em seu projeto ou use o comando configmap get para exibir detalhes sobre um configmap específico. Por exemplo,

ibmcloud ce configmap get --name mycolorconfigmap

Saída de exemplo

Getting configmap 'mycolorconfigmap'...
OK

Name:          mycolorconfigmap
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           11s
Created:       2020-10-14 14:10:57 -0400 EDT

Data:
---
TARGET: blue, green, red

Atualizando configmaps

É possível mudar os pares chave-valor para os configmaps existentes.

Atualizando configmaps por meio do console

É possível atualizar um configmap existente e seus pares chave-valor por meio do console.

  1. É possível atualizar os pares chave-valor para os seus configmaps definidos por meio do console de uma das maneiras a seguir.

    • Acesse a página Segredos e configmaps para seu projeto e localize o configmap que deseja atualizar. Clique no nome do configmap que deseja atualizar para abri-lo.
    • Se o seu configmap for referenciado por um aplicativo, tarefa ou carga de trabalho de função, use os links na tabela de variáveis de ambiente na guia Variáveis ambientais de sua carga de trabalho. Esses links levam você diretamente para o seu configmap (mapa de configuração)
  2. Clique em Editar e faça as atualizações para o seu configmap.

  3. Clique em Salvar para salvar as mudanças no seu configmap.

Se seu configmap atualizado for referenciado por uma carga de trabalho de app, tarefa ou função, sua carga de trabalho deverá ser reiniciada para que os novos dados entrem em vigor.

  • Apps - Na página para o seu app, clique em Nova revisão e, em seguida, em Salvar e implementar. Como alternativa, é possível esperar que seu app escale para zero e, quando a escala dele for aumentada, ele usará o configmap atualizado.
  • Tarefas - Na página para a sua tarefa, clique em Enviar tarefa para executar a sua tarefa ou você pode executar uma tarefa novamente. Esta nova execução de tarefa usa o configmap atualizado.
  • Função-Sua função é reiniciada quando ela é chamada novamente. É possível testar sua função clicando em Testar função na página de função..

Atualizando configmaps com a CLI

É possível atualizar um configmap existente e seus pares chave-valor com a CLI.

  1. Para mudar o valor de um par chave-valor em um mapa de configuração, use o comando configmap update. Vamos atualizar o configmap myliteralconfigmap para mudar o valor da chave TARGET de Sunshine para Stranger.

    ibmcloud ce configmap update --name myliteralconfigmap --from-literal "TARGET=Stranger"
    
  2. Agora que seu configmap foi atualizado, use o comando configmap get para exibir detalhes sobre um configmap específico.. Por exemplo,

    ibmcloud ce configmap get --name myliteralconfigmap
    

    Saída de exemplo

    Getting configmap 'myliteralconfigmap'...
    OK
    
    Name:          myliteralconfigmap
    ID:            abcdefgh-abcd-abcd-abcd-c88e2775388e
    Project Name:  myproject
    Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
    Age:           21m
    Created:       2021-05-14T07:57:11-04:00
    
    Data:
    ---
    TARGET: Stranger
    

Referenciando configmaps

Sua carga de trabalho de app, tarefa ou função pode consumir e usar as informações que são armazenadas em um configmap usando variáveis de ambiente.

Referenciando configmaps por meio do console

É possível usar o console para criar variáveis de ambiente para seu app, tarefa ou carga de trabalho de função que referenciam totalmente um configmap ou chaves individuais de referência em um configmap.

Para poder referenciar um configmap, ele deverá existir. Consulte Criar um configmap.

No console, é possível fazer referência a apenas uma chave individual de um configmap definido por variável de ambiente. Se você precisar referenciar mais de uma chave de um configmap, repita as etapas para definir outra variável de ambiente que referencie uma chave diferente...

  1. Para referenciar um configmap definido a partir de sua carga de trabalho de app, tarefa ou função, crie uma variável de ambiente. A variável de ambiente pode referenciar totalmente um configmap existente ou referenciar uma chave individual em um configmap existente. Por exemplo, vamos referenciar totalmente o configmap myconfigmap por meio do aplicativo myapp. Ao referenciar totalmente um configmap (ou segredo), é possível opcionalmente especificar um prefix. Ao usar um prefixo como myconfigmap_, cada chave é prefixada com myconfigmap_.

  2. Depois de criar as variáveis de ambiente, deve-se reiniciar a carga de trabalho de aplicativo, tarefa ou função para que as mudanças entrem em vigor. Para apps, salve e implemente seu app para atualizá-lo com as variáveis de ambiente que você definiu. Para tarefas e funções, sua carga de trabalho será atualizada na próxima vez que for chamada com as variáveis de ambiente que você definiu.

  3. Após o status do aplicativo mudar para Pronto, será possível testar o aplicativo. Clique em Testar aplicativo e, em seguida, clique em Enviar solicitação na área de janela Testar aplicativo. Para abrir o aplicativo em uma página da web, clique em URL do aplicativo. Neste myapp de exemplo, porque especificamos um prefixo para o configmap myconfigmap totalmente referenciado, todas as chaves deste configmap são referenciadas como variáveis de ambiente e são prefixadas com myconfigmap_. Por exemplo, essas variáveis de ambiente são exibidas como myconfigmap_key1=value1 e myconfigmap_key2=value2.

Para atualizar uma variável de ambiente que faz referência a um configmap, consulte atualizações de variáveis de ambiente e considerações sobre atualização de variáveis de ambiente.

Para remover uma variável de ambiente que referencia um configmap, consulte Excluindo variáveis de ambiente.

Referenciando configmaps com a CLI

Para usar configmaps com cargas de trabalho de app, tarefa ou função, é possível configurar variáveis de ambiente que referenciam totalmente um configmap ou referenciam chaves individuais em um configmap com a CLI.

Referência os configmaps existentes com a CLI

Para usar um configmap com uma carga de trabalho de app, tarefa ou função com a CLI, especifique a opção --env-from-configmap nos comandos a seguir.

O exemplo a seguir descreve como fazer referência a um configmap existente com um aplicativo usando a CLI.

  1. Use o comando configmap create para criar os dois configmaps a seguir para este cenário.

    ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
    
    ibmcloud ce configmap create --name myliteralconfigmap2 --from-literal TARGET=Stranger
    
  2. Implemente um aplicativo e faça referência ao configmap myliteralconfigmap. Para este exemplo, crie um app que utilize a imagem hello. Quando uma solicitação for enviada para esse app de amostra, o app lerá a variável de ambiente TARGET e imprimirá Hello ${TARGET}. Se esta variável de ambiente estiver vazia, Hello World será retornado. Faça referência ao configmap myliteralconfigmap. Para obter mais informações sobre o código usado para este exemplo, consulte hello.

    ibmcloud ce app create --name myhelloapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap
    
  3. Chame o aplicativo. O aplicativo retorna Hello Sunshine, que é o valor para a chave TARGET que é especificado no configmap myliteralconfigmap.

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
    

    Saída de exemplo

    Hello Sunshine
    
  4. Atualize o aplicativo novamente para usar o configmap myliteralconfigmap2.

    Quando você atualiza um aplicativo, tarefa ou função com uma variável de ambiente que referencia totalmente um configmap (ou segredo) para referenciar totalmente um configmap (ou segredo) diferente, as referências completas substituem outras referências completas na ordem em que elas são configuradas (o último conjunto referenciado substitui o primeiro conjunto).

    ibmcloud ce app update --name myhelloapp --env-from-configmap myliteralconfigmap2
    

    Saída de exemplo

    Updating application 'myhelloapp' to latest revision.
    [...]
    Run 'ibmcloud ce application get -n myhelloapp' to check the application status.
    OK
    
    https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
    
  5. Chame o aplicativo novamente. Desta vez, o aplicativo retornará Hello Stranger, que é o valor que é especificado no configmap myliteralconfigmap2.

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Saída de exemplo

    Hello Stranger
    
  6. Atualize o myliteralconfigmap2 para alterar o par chave-valor.

    ibmcloud ce configmap update --name myliteralconfigmap2 --from-literal "TARGET=Happy day"
    

    Execute o comando ibmcloud ce configmap get -n myliteralconfigmap2 para exibir detalhes do configmap.

    Saída de exemplo

    Name:          myliteralconfigmap2
    [...]
    Data:
    ---
    TARGET: Happy day
    
  7. Reinicie o aplicativo para que os novos dados entrem em vigor.

    ibmcloud ce app update --name myhelloapp
    
  8. Chame o aplicativo novamente. Desta vez, o aplicativo retornará Hello Happy day, que é o valor que é especificado no configmap myliteralconfigmap2.

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Saída de exemplo

    Hello Happy day
    

Como fazer referência aos configmaps que ainda não estão definidos na CLI

Se um configmap não existir antes de ser referenciado, a carga de trabalho de aplicativo, tarefa ou função não será implementada com êxito e uma tarefa ou função não será executada com êxito até que o configmap referenciado seja criado.

Se você estiver trabalhando com uma carga de trabalho de app, tarefa ou função e o configmap referenciado ainda não estiver definido, será possível usar a opção --force para evitar a verificação da existência do configmap referenciado. A opção --force pode ser usada com os comandos a seguir:

Ao usar a opção --force com esses comandos, a ação para criar, atualizar ou executar a carga de trabalho é concluída; no entanto, o app, a tarefa ou a carga de trabalho não será executada com êxito até que o configmap referenciado exista.. Se você incluir a opção --no-wait além da opção --force no comando, o sistema concluirá a ação e não esperará a execução bem-sucedida da carga de trabalho.

O exemplo a seguir descreve como fazer referência a um configmap que ainda não está definido em um aplicativo usando a CLI.

  1. Crie um aplicativo e faça referência ao configmap indefinido myliteralconfigmap3. Para este exemplo, crie um app Code Engine que use a imagem icr.io/codeengine/hello. Quando uma solicitação for enviada para esse app de amostra, o app lerá a variável de ambiente TARGET e imprimirá Hello ${TARGET}. Se esta variável de ambiente estiver vazia, Hello World será retornado. Faça referência ao configmap myliteralconfigmap3. Para obter mais informações sobre o código usado para este exemplo, consulte hello.

    Ao usar a opção --no-wait com o comando app create, o aplicativo será criado e não esperará que o aplicativo esteja pronto.

    ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap3 --force --no-wait
    
  2. Use o comando app get para exibir detalhes da execução da tarefa, incluindo as informações da variável de ambiente. Observe que o aplicativo foi criado, mas ainda não foi totalmente implementado.

    ibmcloud ce app get --name myapp
    

    Saída de exemplo

    Name:            myapp
    [...]
    Status Summary:  Application is deploying
    
    Environment Variables:
        Type                      Name                 Value
        ConfigMap full reference  myliteralconfigmap3
    Image:                  icr.io/codeengine/hello
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK     Age  Reason
        ConfigurationsReady  false  10s
        Ready                false  10s  RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready.
        RoutesReady          false  10s  RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready.
    
    Events:
        Type    Reason   Age  Source              Messages
        Normal  Created  12s  service-controller  Created Configuration "myapp"
        Normal  Created  12s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                      Revision      Running  Status   Restarts  Age
        myapp-00001-deployment-566d5c79b9-wttqs  myapp-00001  0/2      Pending  0         11s
    
  3. Crie o configmap.

    ibmcloud ce configmap create --name myliteralconfigmap3 --from-literal TARGET=Everyone
    
  4. Reinicie o aplicativo para que os novos dados entrem em vigor.

    ibmcloud ce app update --name myapp
    
  5. Chame o aplicativo. O aplicativo retornará Hello Everyone, que é o valor especificado no configmap myliteralconfigmap3.

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Saída de exemplo

    Hello Everyone
    
  6. Atualize o aplicativo para fazer referência ao configmap myliteralconfigmap2 existente. O myliteralconfigmap2 é definido com o valor TARGET=Stranger. A atualização do aplicativo reinicia o aplicativo para que os novos dados entrem em vigor.

    Ao atualizar um aplicativo ou tarefa com uma variável de ambiente que referencia totalmente um configmap (ou segredo) a fim de referenciar totalmente um configmap (ou segredo) diferente, as referências integrais substituem outras referências integrais na ordem em que elas são configuradas (o último conjunto referenciado substitui o primeiro conjunto).

    ibmcloud ce app update --name myapp --env-from-configmap myliteralconfigmap2
    
  7. Chame o aplicativo novamente. Desta vez, o aplicativo retornará Hello Stranger, que é o valor que é especificado no configmap myliteralconfigmap2.

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Saída de exemplo

    Hello Stranger
    

Para obter cenários mais detalhados sobre referenciar segredos e mapas de configuração integrais como variáveis de ambiente, substituição de referências e remoção de referências na CLI, consulte Referenciando segredos e mapas de configuração.

Excluindo configmaps

Quando você não precisar mais de um configmap, será possível excluí-lo,

Excluindo configmaps do console

  1. Para excluir um configmap do console,
    1. Acesse a página Segredos e configmaps do Página Projetos Code Engine.
    2. Clique no configmap que deseja excluir para abrir sua página.
    3. Na página para o configmap específico, clique em Ações> Excluir configmap.
  2. Para excluir um par de valores de chave para um configmap específico do console,
    1. Acesse a página Segredos e configmaps do Página Projetos Code Engine.
    2. Clique no configmap que deseja alterar para abrir sua página.
    3. Na página para o configmap específico, exclua o par chave-valor que você deseja remover.

Também é possível excluir variáveis de ambiente definidas que referenciam segredos e configmaps. Para excluir uma variável de ambiente definida, na guia Variáveis de ambiente de seu app, tarefa ou função e exclua a variável de ambiente que você deseja excluir. Depois de excluir uma variável de ambiente definida, certifique-se de clicar em Salvar para salvar as mudanças em seu app, tarefa ou função. Para obter mais informações, consulte Excluir uma variável de ambiente.

Excluindo configmaps com a CLI

  • Para excluir um configmap com a CLI, use o comando configmap delete; por exemplo,

    ibmcloud ce configmap delete --name myliteralconfigmap -f
    

    Saída de exemplo

    Deleting configmap 'myliteralconfigmap'...
    OK
    

Também é possível excluir variáveis de ambiente que referenciam segredos e configmaps da CLI.