Como vincular o configmap ao arquivo externo?

Como vincular o configmap ao arquivo externo?

Com isso podemos criar um configmap vinculado a um arquivo externo.

kubectl create configmap database-config --from-file=database.properties

Mas quando editarmos o yaml, ele mostrará que o conteúdo completo do arquivo foi despejado lá.

Existe alguma maneira de apenas apontar para um arquivo em yaml também para que eu mantenha o arquivo de propriedades na mesma pasta que o configmap yaml e aplique a pasta com todos os yamls:

kubectl apply -f target_folder\

Por favor sugira.

Responder1

O que configmapé

Um ConfigMap é um objeto API usado para armazenar dados não confidenciais em pares chave-valor. Os pods podem consumir ConfigMaps como variáveis ​​de ambiente, argumentos de linha de comando ou como arquivos de configuração em um volume.

Um ConfigMap permite dissociar a configuração específica do ambiente das imagens do contêiner, para que seus aplicativos sejam facilmente portáteis.

Ou seja, quando configmapfor criado a partir de um arquivo externo (como o seu caso) ou de outros valores, o servidor API irá validar se tudo está correto e então irá salvá-lo em etcd. Isso também explica os motivos pelos quais quando você editconfigmaptodo o contexto. Isso acontece porque configmapé lido de etcd, e não de fontes externas.

Esse também é um dos motivos pelos quais não é recomendado armazenar arquivos grandes como configmaps ou segredos - isso afetará o desempenho do cluster Kubernetes, pois todos os objetos do cluster são armazenados no etcd.

Personalizar

Esta é uma das maneiras de atender ao seu requisito de executar um comando de criação/configuração configmapcom base no arquivo no mesmo diretório. É uma ferramenta autônoma para personalizar objetos Kubernetes por meio de um arquivo de personalização.

Criei um exemplo curto e simples para mostrar a ideia:

$ tree
.
├── application.properties
└── kustomization.yaml
0 directories, 2 files

$ cat kustomization.yaml 
generatorOptions:
  disableNameSuffixHash: true # this flag is used to avoid creation of new configmap, instead it will be modified when file context is changed
configMapGenerator:
- name: application-config
  files:
  - application.properties

$ cat application.properties 
listen.url=localhost:9010
client.url=some_url:3000

Teste isso, este comando iráapenas renderizarconfigmap, ele ainda não será criado:

$ kubectl kustomize application.settings/
apiVersion: v1
data:
  application.properties: |
    listen.url=localhost:9010
    client.url=some_url:3000
kind: ConfigMap
metadata:
  name: application-config

A etapa final éaplicaristo:

$ kubectl apply -k application.settings/
configmap/application-config created

$ kubectl get cm
NAME                 DATA   AGE
application-config   1      23s

Breve explicação para o comando acima:

Para aplicar esses recursos, execute kubectl apply com --kustomize ou -k flag.

informação relacionada