configmaps

In Kubernetes, ConfigMap is a resource that allows you to store configuration data separately from your application code. It's commonly used to manage environment variables, configuration files, and other configuration-related data. Here's a basic guide on how to use ConfigMap:

1. Create a ConfigMap:

You can create a ConfigMap using the kubectl create configmap command or by defining a YAML file. Let's create a simple ConfigMap using a YAML file:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  DATABASE_URL: "mysql://username:password@hostname:port/database"
  API_KEY: "my-secret-api-key"

Save this YAML file (e.g., my-configmap.yaml) and apply it to your cluster:

kubectl apply -f my-configmap.yaml

2. Use ConfigMap in Pods:

You can reference the ConfigMap in your pod definition by mounting it as a volume or using environment variables. Here's an example using environment variables:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: mycontainer
      image: myimage
      env:
        - name: DATABASE_URL
          valueFrom:
            configMapKeyRef:
              name: my-configmap
              key: DATABASE_URL
        - name: API_KEY
          valueFrom:
            configMapKeyRef:
              name: my-configmap
              key: API_KEY

This example creates a pod named mypod with a container that uses environment variables sourced from the my-configmap ConfigMap.

3. View ConfigMap Data:

You can view the data stored in a ConfigMap using the following command:

kubectl get configmap my-configmap -o yaml

4. Update ConfigMap:

If you need to update the data in a ConfigMap, you can edit it directly or use the kubectl apply command with an updated YAML file.

kubectl apply -f my-updated-configmap.yaml

Remember to update your pods if you make changes to the ConfigMap data.

5. ConfigMap with Helm:

If you're using Helm for managing Kubernetes applications, you can define ConfigMap in your Helm charts. For example, in your values.yaml:

configMap:
  my-configmap:
    DATABASE_URL: "mysql://username:password@hostname:port/database"
    API_KEY: "my-secret-api-key"

And in your templates/ folder, create a configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data: { { - toYaml .Values.configMap.my-configmap | nindent 2 } }

This allows you to manage ConfigMap configurations using Helm.