# 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:

```yaml
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:

```bash
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:

```yaml
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:

```bash
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.

```bash
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`:

```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`:

```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.
