
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 configmap
for 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ê edit
vê configmap
todo 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 configmap
com 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.