DEV Community

Cheedge Lee
Cheedge Lee

Posted on • Originally published at Medium

Kubernetes ConfigMap

1. ConfigMap type

  1. property-like key
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  api-url: "https://api.example.com"
  log-level: "debug"
Enter fullscreen mode Exit fullscreen mode
  1. file-like key
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  config.yaml: |
    apiVersion: v1
    data:
      app-name: "MyApp"
      app-version: "1.0"
Enter fullscreen mode Exit fullscreen mode

2. ConfigMap consume type

  1. Args
    • Inside a container command and args
    • samilar with the env var comsuming method
  2. Env var
    • Use it as environment variables for a container
    • normally used property-like key ConfigMap.
  3. Vol Mount
    • Add a file in read-only volume, for the application to read
    • can be used both property-like key and file-like ConfigMap
  4. Write code to run inside the Pod that uses the Kubernetes API to read a ConfigMap (not discuss it here)

3.1 Args

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  my-param: "Hello, Kubernetes!"

---
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: busybox
    command: ["/bin/sh"]
    args: ["-c", "sleep 3600", "echo $(MY_PARAM)> log.txt"]
    env: # use it here same as env
    - name: MY_PARAM
      valueFrom:
        configMapKeyRef:
          name: app-config
          key: my-param
Enter fullscreen mode Exit fullscreen mode

2.2 Env var

2.2.1 Use whole data

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  api-url: "https://api.example.com"
  log-level: "debug"

---
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: busybox
    command: ["bin/sh", "-c", "sleep 3600"]
    envFrom: # use whole data value
      - configMapRef:
          name: app-config
Enter fullscreen mode Exit fullscreen mode

2.2.2 Use some data

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  api-url: "https://api.example.com"
  log-level: "debug"

---
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: busybox
    command: ["bin/sh", "-c", "sleep 3600"]
    env:
    - name: API_URL
      valueFrom:
        configMapKeyRef:
          name: app-config
          key: api-url
    - name: LOG_LEVEL
      valueFrom: # use some data value
        configMapKeyRef:
          name: app-config
          key: log-level
Enter fullscreen mode Exit fullscreen mode

2.3 Vol Mount

2.3.1 use whole file

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  config.yaml: |
    apiVersion: v1
    data:
      app-name: "MyApp"
      app-version: "1.0"

---
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: busybox
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
      readOnly: true
  volumes:
  - name: config-volume
    configMap:
      name: app-config
Enter fullscreen mode Exit fullscreen mode

2.3.2 Use part data items from file

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  app-name: "MyApp"
  app-version-file: |
    appVersion "1.0"

---
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: busybox
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
      readOnly: true
  volumes:
  - name: config-volume
    configMap:
      name: app-config
      items:
      - key: app-name
        path: app-name
      - key: app-version-file
        path: app-version-file
Enter fullscreen mode Exit fullscreen mode

we can see the files inside the container:

/ # ls /etc/config/
app-name          app-version-file
/ # cat /etc/config/app-name 
/ # cat /etc/config/app-version-file 
appVersion "1.0"
/ # cat /etc/config/app-name 
MyApp
/ # tree /etc/config/
/etc/config/
├── app-name -> ..data/app-name
└── app-version-file -> ..data/app-version-file

0 directories, 2 files
Enter fullscreen mode Exit fullscreen mode

Above we can see it according to property-like key and file-like create different files.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more