ConfigMap trong Kubernetes là gì? Cách tạo và sử dụng ConfigMap chi tiết

Đã kiểm duyệt nội dung
Đánh giá
Khi làm việc thực tế với Kubernetes, mình nhận ra việc hard-code cấu hình vào container khiến quá trình deploy và cập nhật trở nên rối rắm, dễ lỗi hơn nhiều so với tưởng tượng. Sau khi áp dụng ConfigMap vào các project, mình có thể tách riêng cấu hình khỏi code, giúp quản lý linh hoạt và giảm đáng kể rủi ro khi thay đổi môi trường. Trong bài viết này, mình sẽ chia sẻ cách tạo và sử dụng ConfigMap dựa trên chính trải nghiệm triển khai thực tế để bạn có thể áp dụng ngay vào hệ thống của mình.
Những điểm chính
Đối với mình, ConfigMap không chỉ là một resource cấu hình đơn thuần mà còn là chìa khóa giúp tách biệt config khỏi application, từ đó tối ưu quy trình deploy và vận hành Kubernetes hiệu quả hơn. Để giúp bạn hiểu rõ và áp dụng đúng trong thực tế, bài viết dưới đây sẽ cung cấp các nội dung trọng tâm gồm:
- Khái niệm: Biết được ConfigMap là một đối tượng API trong Kubernetes được sử dụng để lưu trữ các dữ liệu cấu hình không nhạy cảm dưới dạng các cặp key–value.
- Tính năng chính của ConfigMap trong Kubernetes: Hiểu rõ các khả năng như lưu trữ key-value, inject vào Pod và hỗ trợ cấu hình linh hoạt theo từng môi trường triển khai.
- Mục đích sử dụng ConfigMap trong Kubernetes: Biết khi nào nên dùng ConfigMap để tách config khỏi image, giúp tăng tính tái sử dụng và giảm rủi ro khi cập nhật ứng dụng.
- Cách sử dụng ConfigMap trong Kubernetes: Hiểu toàn bộ quy trình từ tạo, cấu hình đến áp dụng ConfigMap vào hệ thống thực tế để đảm bảo vận hành ổn định.
- Biết thêm Vietnix là nhà cung cấp dịch vụ Enterprise Cloud và S3 Object Storage uy tín, chất lượng.
- Câu hỏi thường gặp: Được giải đáp các thắc mắc về mục đích, cách tạo và sự khác biệt giữa ConfigMap và Secret, giúp củng cố kiến thức và làm rõ các vấn đề kỹ thuật.

ConfigMap trong Kubernetes là gì?
ConfigMap là một đối tượng API trong Kubernetes được sử dụng để lưu trữ các dữ liệu cấu hình không nhạy cảm dưới dạng các cặp key–value. Mục đích cốt lõi của ConfigMap là thực hiện nguyên tắc decoupling – Tách biệt hoàn toàn mã nguồn của ứng dụng khỏi các tham số cấu hình. Nhờ đó, bạn có thể triển khai cùng một container image trên nhiều môi trường khác nhau (như Dev, Staging, Production) mà chỉ cần thay đổi ConfigMap tương ứng mà không cần phải đóng gói lại image.

Để chạy ổn định các workload container hóa, doanh nghiệp cần một hạ tầng cloud server đủ mạnh, linh hoạt và tách biệt tài nguyên để không bị phụ thuộc vào giới hạn của từng máy chủ vật lý đơn lẻ. Đây cũng là lý do Vietnix phát triển Enterprise Cloud – Nền tảng cloud server cho phép bạn làm chủ cụm CPU, RAM, Storage riêng biệt trên hạ tầng AMD EPYC và 100% NVMe, dễ dàng khởi tạo, mở rộng hay tối ưu từng cloud server theo nhu cầu thực tế của hệ thống Kubernetes. Liên hệ ngay để được tư vấn chi tiết về dịch vụ!
Tính năng chính của ConfigMap trong Kubernetes
Các tính năng chính của ConfigMap trong Kubernetes có thể kể đến như:
- Lưu trữ cấu hình linh hoạt: Cho phép lưu trữ các tham số hệ thống, thông số kết nối hoặc toàn bộ nội dung file cấu hình (như .yaml, .properties, .conf) dưới dạng cặp key-value hoặc tập tin thô.
- Tách biệt mã nguồn và cấu hình: Giữ cho logic xử lý trong mã nguồn hoàn toàn độc lập với các thiết lập môi trường. Điều này giúp đơn giản hóa việc quản lý cấu hình giữa các môi trường Dev/Staging/Production và cho phép tái sử dụng cùng một Container Image duy nhất.
- Cơ chế phân phối dữ liệu đa dạng: Cung cấp dữ liệu trực tiếp vào Pod thông qua 3 phương thức:
- Biến môi trường: Truyền trực tiếp vào tiến trình của ứng dụng.
- Volume Mount: Gắn ConfigMap thành các tệp tin thực tế bên trong thư mục của Container (hỗ trợ cập nhật dữ liệu thời gian thực).
- Đối số dòng lệnh: Sử dụng các giá trị trong ConfigMap để thiết lập tham số khởi chạy cho ứng dụng.

Mục đích sử dụng ConfigMap trong Kubernetes
ConfigMap được sử dụng để cung cấp các giá trị cấu hình cho ứng dụng theo cách tách biệt hoàn toàn với mã nguồn và image container, giúp quản lý cấu hình linh hoạt giữa nhiều môi trường triển khai khác nhau. Một số ứng dụng của ConfigMap trong Kubernetes như sau:
- Tách cấu hình khỏi mã nguồn: ConfigMap cho phép đưa các tham số phụ thuộc môi trường như hostname, IP database, URL dịch vụ bên thứ ba,… ra ngoài, không cần sửa mã nguồn hay build lại container khi thay đổi. Nhờ đó, cùng một image có thể dùng cho dev, staging, production, chỉ cần gán ConfigMap phù hợp cho từng môi trường.
- Hỗ trợ thay đổi cấu hình linh hoạt: ConfigMap đặc biệt hữu ích khi các giá trị cấu hình có thể thay đổi độc lập với vòng đời cập nhật code, ví dụ đổi địa chỉ database hoặc endpoint API mà không cần redeploy lại ứng dụng. Ứng dụng chỉ việc đọc lại cấu hình từ biến môi trường hoặc file mount từ ConfigMap là đã áp dụng được thay đổi.
- Chuẩn bị cấu hình trước khi triển khai: Người quản trị có thể tạo và tinh chỉnh ConfigMap trước khi triển khai Pod, từ đó kiểm soát hành vi của ứng dụng mà không cần chỉnh sửa manifest Deployment. Cách làm này giúp quy trình CI/CD gọn hơn, pipeline chỉ deploy image chuẩn, còn cấu hình được quản lý tách biệt ở tầng cluster.
- Tăng khả năng port và đa môi trường: Khi ứng dụng được thiết kế để đọc cấu hình từ environment hoặc filesystem, ConfigMap có thể chạy thống nhất cả trong Kubernetes lẫn môi trường local, chỉ khác nguồn cung cấp biến môi trường. Điều này loại bỏ các rào cản khi di chuyển hoặc mở rộng hệ thống trên nhiều môi trường khác nhau.

Cách sử dụng ConfigMap trong Kubernetes
- Tạo ConfigMap bằng nhiều cách
- Dùng ConfigMap làm biến môi trường
- Dùng ConfigMap dưới dạng file cấu hình
- Kết hợp ConfigMap với Deployment và Pod thực tế
1. Tạo ConfigMap bằng nhiều cách
- Tạo ConfigMap từ file hoặc thư mục:
ConfigMap có thể được tạo trực tiếp từ một hoặc nhiều file cấu hình với tham số –from-file, Kubernetes sẽ lấy tên file hoặc key định nghĩa làm khóa trong ConfigMap. Ví dụ tạo ConfigMap từ thư mục chứa nhiều file cấu hình:
mkdir configmap-example
wget https://kubernetes.io/examples/configmap/game.properties \
-O configmap-example/game.properties
wget https://kubernetes.io/examples/configmap/ui.properties \
-O configmap-example/ui.properties
# Tạo config map
$kubectl create configmap game-config-example --from-file=configmap-example/
configmap/game-config-example created
kubectl describe configmaps game-config-example
ame: game-config-example
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
BinaryData
====
Events: <none>
kubectl get configmaps game-config-example -o yaml
apiVersion: v1
data:
game.properties: |-
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
ui.properties: |
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
kind: ConfigMap
metadata:
creationTimestamp: "2026-03-12T08:50:53Z"
name: game-config-example
namespace: default
resourceVersion: "1721999"
uid: da2457f8-6ed8-4ac9-b29b-0b46808da397
Trong trường hợp chỉ muốn lấy một file, bạn có thể chỉ định đường dẫn cụ thể:
kubectl create configmap game-config-example-2 \
--from-file=configmap-example/game.properties
kubectl describe configmap game-config-example-2- Tạo ConfigMap từ env file:
Kubernetes hỗ trợ tạo ConfigMap từ env file với định dạng NAME=VALUE trên mỗi dòng thông qua –from-env-file. Ví dụ:
cat configmap-example/game.properties
kubectl create configmap game-config-env-file-example \
--from-env-file=configmap-example/game.properties
kubectl get configmap game-config-env-file-example -o yamlCách này tiện khi đã có sẵn file biến môi trường dùng chung cho nhiều môi trường triển khai.
- Tạo ConfigMap từ giá trị literal và key tùy chỉnh:
Bạn có thể tạo ConfigMap nhanh từ các cặp key value truyền trực tiếp trên dòng lệnh với –from-literal hoặc chỉ định key khác tên file bằng cú pháp –from-file==. Ví dụ:
kubectl create configmap game-config-key-example \
--from-file=game-key-example-data=configmap-example/game.properties
configmap/game-config-key-example created
kubectl get configmap game-config-key-example -o yaml
apiVersion: v1
data:
game-key-example-data: |-
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
kind: ConfigMap
metadata:
creationTimestamp: "2026-03-12T09:01:18Z"
name: game-config-key-example
namespace: default
resourceVersion: "1724007"
uid: 6bc77fe4-d5dd-430c-a504-4e63f5fd6e16
Hoặc tạo từ literal:
kubectl create configmap config-example-values \
--from-literal=example.value=one \
--from-literal=example-type=2 \
--from-literal=example.url="http://example.com"
configmap/config-example-values created
kubectl get configmap config-example-values -o yaml
➜ ~ kubectl get configmap config-example-values -o yaml
apiVersion: v1
data:
example-type: "2"
example.url: http://example.com
example.value: one
kind: ConfigMap
metadata:
creationTimestamp: "2026-03-12T09:01:58Z"
name: config-example-values
namespace: default
resourceVersion: "1724137"
uid: 6c68568b-3006-4e19-8a92-b4875531d70b
- Tạo ConfigMap từ manifest YAML:
ConfigMap cũng được định nghĩa như các tài nguyên Kubernetes khác thông qua file YAML với trường data hoặc binaryData. Ví dụ:
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-config
data:
database_host: "192.168.0.1"
debug_mode: "1"
log_level: "verbose"Áp dụng vào cluster:
kubectl apply -f demo-config.yaml
configmap/demo-config created
kubectl get configmaps
NAME DATA AGE
demo-config 3 9s
kubectl describe configmap demo-config
Name: demo-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
database_host:
----
192.168.0.1
debug_mode:
----
1
log_level:
----
verbose
BinaryData
====
Events: <none>2. Dùng ConfigMap làm biến môi trường
- Load toàn bộ ConfigMap vào Pod bằng envFrom:
Cách phổ biến nhất là nạp toàn bộ key value trong ConfigMap thành biến môi trường trong container bằng envFrom.configMapRef. Ví dụ:
apiVersion: v1
kind: Pod
metadata:
name: env-configmap
spec:
containers:
- name: app
image: busybox:latest
command: ["/bin/sh", "-c", "printenv"]
envFrom:
- configMapRef:
name: myconfigmapTriển khai và xem log:
kubectl apply -f env-configmap.yaml
kubectl logs pod/env-configmapCác key trong ConfigMap như username, access_level sẽ xuất hiện dưới dạng biến môi trường trong Pod.
- Mapping từng key ConfigMap sang biến môi trường cụ thể:
Khi chỉ cần một hoặc vài giá trị, bạn có thể dùng env.valueFrom.configMapKeyRef để map từng key và đặt tên biến môi trường tùy ý. Ví dụ:
apiVersion: v1
kind: Pod
metadata:
name: env-configmap
spec:
containers:
- name: envars-test-container
image: nginx
env:
- name: CONFIGMAP_USERNAME
valueFrom:
configMapKeyRef:
name: myconfigmap
key: usernameTrong container, biến CONFIGMAP_USERNAME sẽ nhận giá trị từ key username trong ConfigMap, các key khác không được nạp vào môi trường.
- Sử dụng biến môi trường từ ConfigMap trong command container:
Biến môi trường lấy từ ConfigMap có thể chèn trực tiếp vào trường command hoặc args của Pod để truyền cấu hình cho ứng dụng dưới dạng tham số dòng lệnh. Ví dụ:
apiVersion: v1
kind: Pod
metadata:
name: demo-pod
spec:
containers:
- name: app
image: demo-app:latest
env:
- name: DATABASE_HOST
valueFrom:
configMapKeyRef:
name: demo-config
key: database_host
command: ["demo-app", "--database-host", "$(DATABASE_HOST)"]Khi container khởi động, lệnh thực thi sẽ được bổ sung giá trị host từ ConfigMap mà không cần hardcode trong manifest.
3. Dùng ConfigMap dưới dạng file cấu hình
- Mount ConfigMap làm volume trong Pod:
ConfigMap có thể được mount vào Pod như một volume read only, mỗi key trong ConfigMap tương ứng với một file dưới thư mục mount. Ví dụ:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
configMap:
name: myconfigmapSau khi Pod chạy, thư mục /etc/foo sẽ chứa các file có tên trùng với key trong ConfigMap, ứng dụng có thể đọc nội dung file để lấy cấu hình.
- Mount file cấu hình ứng dụng từ ConfigMap:
Với các ứng dụng cần file như application.properties hoặc application.yaml, bạn có thể lưu nội dung file trực tiếp trong ConfigMap rồi mount vào đường dẫn mà ứng dụng đọc cấu hình. Ví dụ:
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
application.properties: |
server.port=8080
database.url=jdbc:mysql://mysql:3306/mydb
database.user=dbuser
database.password=dbpasswordDeployment mount file này vào container:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-container
image: my-web-app:latest
volumeMounts:
- name: config-volume
mountPath: /config/application.properties
subPath: application.properties
volumes:
- name: config-volume
configMap:
name: app-config
items:
- key: application.properties
path: application.propertiesỨng dụng chỉ cần đọc file /config/application.properties như file cấu hình thông thường.
4. Kết hợp ConfigMap với Deployment và Pod thực tế
- Truyền cấu hình cho Deployment qua envFrom:
ConfigMap có thể gắn trực tiếp vào Deployment để tất cả Pod của ReplicaSet cùng kế thừa cấu hình. Ví dụ:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-container
image: my-web-app:latest
envFrom:
- configMapRef:
name: web-configTrong đó web-config là ConfigMap chứa các tham số như server.port, database.url, database.user, database.password.
- Mapping nhiều ConfigMap và kiểm tra trong Pod:
Khi cần chia tách cấu hình ứng dụng và cấu hình log, bạn có thể dùng nhiều ConfigMap và map từng key vào biến môi trường tương ứng. Ví dụ:
apiVersion: v1
kind: ConfigMap
metadata:
name: application-configs
data:
app.value: "45000"
app.type: test-application
app.ui: web
---
apiVersion: v1
kind: ConfigMap
metadata:
name: application-log-configs
data:
log_level: WARNING
log_type: TEXT
---
apiVersion: v1
kind: Pod
metadata:
name: configmap-example-pod
spec:
containers:
- name: configmap-example-busybox
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
- name: APPLICATION_TYPE
valueFrom:
configMapKeyRef:
name: application-configs
key: app.type
- name: APPLICATION_UI_TYPE
valueFrom:
configMapKeyRef:
name: application-configs
key: app.ui
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: application-log-configs
key: log_level
restartPolicy: NeverSau khi tạo Pod, bạn có thể dùng kubectl logs kết hợp grep để kiểm tra các biến môi trường đã được set đúng giá trị từ ConfigMap.

Vietnix – Nhà cung cấp dịch vụ Enterprise Cloud và S3 Object Storage uy tín, chất lượng
Vietnix là nhà cung cấp dịch vụ Enterprise Cloud và S3 Object Storage uy tín, mang đến hạ tầng mạnh mẽ, ổn định và linh hoạt cho doanh nghiệp trong quá trình triển khai và mở rộng hệ thống. Với nền tảng được tối ưu về hiệu năng, khả năng mở rộng linh hoạt cùng các tiêu chuẩn bảo mật cao, Vietnix giúp doanh nghiệp dễ dàng vận hành các workload hiện đại như Kubernetes, lưu trữ dữ liệu lớn và xây dựng hệ thống phân tán hiệu quả. Đây là lựa chọn phù hợp cho các tổ chức đang tìm kiếm giải pháp hạ tầng đáng tin cậy để phát triển bền vững trong môi trường số!
Thông tin liên hệ:
- Website: https://vietnix.vn/
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh
Câu hỏi thường gặp
ConfigMap khác gì so với Secret?
ConfigMap chứa cấu hình không nhạy cảm và không mã hóa dữ liệu, trong khi Secret được thiết kế để lưu thông tin nhạy cảm như mật khẩu, token với cơ chế bảo vệ cao hơn ở mức hệ thống.
Các cách phổ biến để tạo ConfigMap là gì?
Bạn có thể tạo ConfigMap từ file, thư mục, giá trị literal hoặc manifest YAML thông qua lệnh kubectl create configmap hay kubectl apply -f đối với file cấu hình.
ConfigMap trong kubernetes là công cụ cốt lõi giúp quản lý cấu hình ứng dụng một cách linh hoạt, tách biệt khỏi mã nguồn và container image, giúp đơn giản hóa việc triển khai, mở rộng và bảo trì hệ thống trên nhiều môi trường khác nhau. Nhờ sử dụng đúng cách ConfigMap kết hợp với Secret, Deployment và Pod, kiến trúc hạ tầng Kubernetes sẽ dễ kiểm soát hơn, giảm rủi ro sai lệch cấu hình và hỗ trợ doanh nghiệp xây dựng nền tảng ứng dụng ổn định, dễ mở rộng trong dài hạn. Cảm ơn bạn đã theo dõi bài viết!
THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM
Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày














