Mục lục
- 1. Giới thiệu chung
- 2. ConfigMap và Secret trong Kubernetes là gì?
- 3. Tạo ConfigMap và triển khai ConfigMap trên Kubernetes
- Tạo ConfigMap cho ứng dụng
- Triển khai ConfigMap trên Kubernetes
- Cấu hình sử dụng ConfigMap trong Pods
- Lấy thông tin cấu hình bên bên trong ConfigMap thông qua biến môi trường
- Lấy thông tin cấu hình bên bên trong ConfigMap thông qua Mounted Volume
- 4. Tạo Secret và triển khai Secret trên Kubernetes
- Tạo Secret cho ứng dụng
- Triển khai Secret trên Kubernetes
- Cấu hình sử dụng Secret trong Pods
- Lấy thông tin cấu hình bên bên trong Secret thông qua biến môi trường
- Lấy thông tin cấu hình bên bên trong Secret thông qua Mounted Volume
- 5. Tổng kết
1. Giới thiệu chung
Trong những bài trước, các cấu hình của ứng dụng như: thông tin database (username, password) hoặc thông tin URI gọi đến các ứng dụng khác,... được cấu hình và thêm vào bên trong container khi ứng dụng khởi chạy thông qua các biến môi trường. Vì các thông tin cấu hình của ứng dụng sẽ thay đổi tùy theo môi trường mà ứng dụng này triển khai nên thường trong file cấu hình Deployment sẽ không định nghĩa trực tiếp các thông tin cấu hình này mà sẽ sử dụng hai đối tượng ConfigMap và Secret trong Kubernetes để quản lý các cấu hình ứng dụng theo từng môi trường trường hiệu quả và dễ dàng hơn.
Trong bài viết này chúng ta cùng nhau tìm hiểu hai đối tượng giúp lưu trữ những cấu hình, đó là ConfigMap và Secret trong Kubernetes. Để tránh bị trùng lặp, mình sẽ chỉ cấu hình Students-service, còn Courses-service cũng sẽ có cấu hình tương tự.
2. ConfigMap và Secret trong Kubernetes là gì?
ConfigMap: là đối tượng trong Kubernetes giúp lưu trữ các thông tin cấu hình của ứng dụng dưới dạng key-value. ConfigMap thường được dùng để cấu hình những thông tin ít nhạy cảm và dữ liệu trong ConfigMap được lưu trữ dưới dạng plaintext (định nghĩa với data
) và base64 encoded (định nghĩa với binaryData
). Pods của ứng dụng có thể lấy dữ liệu được lưu trong ConfigMap bằng cách: sử dụng biến môi trường hoặc sử dụng volume để mount file cấu hình vào trong container. ConfigMap cần triển khai trước khi triển khai ứng dụng nếu không các pod của ứng dụng sẽ không khởi chạy được vì không tìm thấy ConfigMap đã chỉ định trong file cấu hình và pod chỉ có thể đọc được ConfigMap trên cùng namespace.
Bạn có thể tìm hiểu thêm về ConfigMap tại trang web chính thức của Kubernetes.
Secret: là đối tượng trong Kubernetes giúp lưu trữ các thông tin cấu hình của ứng dụng dưới dạng key-value. Secret thì thường được dùng để cấu hình các thông tin nhạy cảm như: thông tin database (username, password), thông tin secretKey, accessKey,... và các thông tin cấu hình này sẽ được mã hóa bằng base64. Pods của ứng dụng có thể lấy dữ liệu được lưu trong Secret bằng cách: sử dụng biến môi trường hoặc sử dụng volume để mount file cấu hình vào trong container. Secret phải được triển khai trước khi triển khai ứng dụng nếu không pod của ứng dụng sẽ không khỏi chạy được vì không tìm thấy Secret đã chỉ định trong file cấu hình và pod chỉ có thể đọc được Secret trên cùng namespace.
Bạn có thể tìm hiểu thêm về Secret tại trang web chính thức của Kubernetes.
3. Tạo ConfigMap và triển khai ConfigMap trên Kubernetes
Tạo ConfigMap cho ứng dụng
ConfigMap là đối tượng khá đơn giản để định nghĩa trong Kubernetes, các thông tin cấu hình thì định nghĩa dưới trường data
(dữ liệu dưới dạng plaintext) hoặc binaryData
(dữ liệu dưới dạng base64 encoded) theo format key=value, tên của ConfigMap được định nghĩa tại trường metadata.name
.
Tạo file cấu hình students-cm.yaml cho Students-service:
apiVersion: v1
kind: ConfigMap
metadata:
name: students-cm
data:
SERVER_PORT: "8080"
MYSQL_URL: "jdbc:mysql://mysql:3306/students"
MYSQL_USERNAME: "students"
MYSQL_PASSWORD: "VNTechies2023"
Tạo file cấu hình courses-cm.yaml cho Courses-service:
apiVersion: v1
kind: ConfigMap
metadata:
name: courses-cm
data:
SERVER_PORT: "8080"
MYSQL_URL: "jdbc:mysql://mysql:3306/courses"
MYSQL_USERNAME: "courses"
MYSQL_PASSWORD: "VNTechies2023"
STUDENTS_URI: "http://students-service"
Các thành phần của ConfigMap:
Tên | Định nghĩa |
---|---|
apiVersion | Version của Kubernetes API mà bạn sử dụng để tạo object/resource. Hai file cấu hình trên là: v1 . |
kind | Loại object/resource của Kubernetes. Hai file cấu hình trên là: ConfigMap . |
metadata.name | Định nghĩa tên của ConfigMap. Hai file cấu hình trên là: students-cm và courses-cm . |
data | Chứa các thông tin cấu hình của ứng dụng theo format key=value. |
Triển khai ConfigMap trên Kubernetes
Để triển khai ConfigMap trên Kubernetes sử dụng lệnh: kubectl apply -f <file-path>
.
# 1. Triển khai ConfigMap trên Kubernetes
kubectl apply -f students-cm.yaml
configmap/students-cm created
kubectl apply -f courses-cm.yaml
configmap/courses-cm created
# 2. Lấy danh sách ConfigMap
kubectl get configmap
NAME DATA AGE
students-cm 4 58s
courses-cm 5 48s
Cấu hình sử dụng ConfigMap trong Pods
Khi triển khai ConfigMap thành công thì Pods có thể sử dụng các thông tin cấu hình bên trong ConfigMap bằng một số cách như sau:
- Sử dụng biến môi trường: Thường sử dụng cho các thông tin cấu hình không quá lớn (< 1MB). Khi thay đổi thông tin cấu hình ở ConfigMap thì các Pod CẦN restart lại để cập nhật thông tin cấu hình mới nhất.
- Sử dụng Volume: Sẽ mount file cấu hình dưới dạng volume và thường dùng cho các file cấu hình lớn. Khi thay đổi thông tin cấu hình ở ConfigMap thì các Pod KHÔNG CẦN restart lại để cập nhật thông tin cấu hình mới nhất.
Lấy thông tin cấu hình bên bên trong ConfigMap thông qua biến môi trường
Sử dụng trường spec.containers.envFrom.configMapRef
để chỉ định tên ConfigMap muốn lấy. File cấu hình dưới đây chỉ định muốn lấy dữ liệu cấu hình ở ConfigMap tên là students-cm
và tất cả dữ liệu bên trong ConfigMap sẽ được thêm vào bên trong container theo kiểu biến môi trường khi container khởi chạy. Cấu hình sẽ tương tự đối với Courses-service.
apiVersion: apps/v1
kind: Deployment
metadata:
name: students-service
labels:
app: students-service
spec:
selector:
matchLabels:
app: students-service
replicas: 3
template:
metadata:
labels:
app: students-service
spec:
containers:
- name: students-service
image: thanhnb1/students-service:latest
# Định nghĩa lấy thông tin cấu hình ở ConfigMap nào.
envFrom:
- configMapRef:
# Tên ConfigMap
name: students-cm
ports:
- containerPort: 8080
restartPolicy: Always
Bạn cũng có thể cấu hình lấy từng dữ liệu bên trong ConfigMap và các biến môi trường này sẽ được thêm vào container khi container khởi chạy.
apiVersion: apps/v1
kind: Deployment
metadata:
name: students-service
labels:
app: students-service
spec:
selector:
matchLabels:
app: students-service
replicas: 3
template:
metadata:
labels:
app: students-service
spec:
containers:
- name: students-service
image: thanhnb1/students-service:latest
env:
# Tên biến môi trường.
- name: SERVER_PORT
valueFrom:
# Lấy biến môi trường từ ConfigMap.
configMapKeyRef:
# Tên ConfigMap.
name: students-cm
# Tên key sẽ lấy được định nghĩa ở phần `data` trong ConfigMap.
key: SERVER_PORT
- name: MYSQL_URL
valueFrom:
configMapKeyRef:
name: students-cm
key: MYSQL_URL
- name: MYSQL_USERNAME
valueFrom:
configMapKeyRef:
name: students-cm
key: MYSQL_USERNAME
- name: MYSQL_PASSWORD
valueFrom:
configMapKeyRef:
name: students-cm
key: MYSQL_PASSWORD
ports:
- containerPort: 8080
restartPolicy: Always
Lấy các biến môi trường bên trong Pod:
# 1. Lâý danh sách pods:
kubectl get pods
NAME READY STATUS RESTARTS AGE
students-service-6698fcb486-8lfzt 1/1 Running 0 4m25s
students-service-6698fcb486-xtk5n 1/1 Running 0 4m25s
students-service-6698fcb486-mlzk6 1/1 Running 0 4m25s
# 2. Lấy biên môi trường bên trong pod:
kubectl exec -it po/students-service-6698fcb486-mlzk6 sh -- env
...
...
# Đây là các thông tin cấu hình lấy từ ConfigMap
MYSQL_URL=jdbc:mysql://mysql:3306/students
MYSQL_USERNAME=students
SERVER_PORT=8080
MYSQL_PASSWORD=VNTechies2023
MYSQL_SERVICE_PORT=3306
...
Lấy thông tin cấu hình bên bên trong ConfigMap thông qua Mounted Volume
Khi ứng dụng Spring boot khởi chạy thì sẽ nó sẽ tự động tìm và load file cấu hình application.properties
hoặc application.yaml
. Nếu bạn muốn chỉ định một file cấu hình khác (chính là file cấu hình mà sẽ ta mounted vào container của ứng dụng) thì có thể chỉ định đường dẫn đến file đó bằng cách thêm tham số --spring.config.location=file:<path-config-file>
khi chạy file jar trong Dockerfile.
FROM adoptopenjdk/openjdk11:latest
WORKDIR /workspace
COPY target/*-SNAPSHOT.jar /workspace/app.jar
ENV TZ="Asia/Ho_Chi_Minh"
EXPOSE 8080
ENTRYPOINT ["java","-jar","/workspace/app.jar", "--spring.config.location=file:/config/application.yaml"]
Tạo file students-cm-volume.yaml để tạo cấu hình ConfigMap cho ứng dụng:
apiVersion: v1
kind: ConfigMap
metadata:
name: students-cm
data:
application.yaml: |-
server:
port: 8080
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://mysql:3306/students
username: students
password: VNTechies2023
jpa:
hibernate.ddl-auto: update
generate-ddl: true
show-sql: false
ConfigMap có thể được mounted vào bên trong container giống như sử dụng volume. Thông tin cấu hình bên trong ConfigMap sẽ được mounted vào bên trong container thông qua trường volumeMounts
.
apiVersion: apps/v1
kind: Deployment
metadata:
name: students-service
labels:
app: students-service
spec:
selector:
matchLabels:
app: students-service
replicas: 3
template:
metadata:
labels:
app: students-service
spec:
containers:
- name: students-service
image: thanhnb1/students-service:latest
ports:
- containerPort: 8080
volumeMounts:
# File "application.yaml" trong ConfigMap sẽ được mounted vào folder "/config" bên trong contaienr.
- mountPath: /config
name: application-config
readOnly: true
volumes:
# Tên ở phần "volumes.name" phải giống với "volumeMounts.name".
- name: application-config
configMap:
name: students-cm
# Sử dụng trường "items" này để mô tả cụ thể file bên trong ConfigMap sẽ được mounted và trong container.
# Ở trường hợp này file "application.yaml" trong ConfigMap sẽ được mounted vào trong container.
items:
- key: application.yaml
path: application.yaml
restartPolicy: Always
Triển khai và lấy chi tiết ConfigMap trên Kubernetes:
# Triển khai ConfigMap
kubectl apply -f students-cm-volume.yaml
configmap/students-cm created
# Lấy danh sách ConfigMap
kubectl get cm
NAME DATA AGE
students-cm 1 80m
# Lấy data cấu hình trong ConfigMap
kubectl describe cm/students-cm
Name: students-cm
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
application.yaml:
----
server:
port: 8080
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://mysql:3306/students
username: students
password: VNTechies2023
jpa:
hibernate.ddl-auto: update
generate-ddl: true
show-sql: false
BinaryData
====
Events: <none>
Triển khai file cấu hình ứng dụng và lấy data được cấu hình trong ConfigMap được mounted vào container giống volume:
kubectl apply -f students-deployment-configmap-volume.yaml
deployment.apps/students-service created
# Lấy danh sach pods
kubectl get pods
NAME READY STATUS RESTARTS AGE
students-service-f7cc674f-m7xqv 1/1 Running 0 86m
students-service-f7cc674f-nq8fc 1/1 Running 0 86m
students-service-f7cc674f-lzwg4 1/1 Running 0 86m
# File cấu hình trong configMap được đã được mounted vào folder "config" trong container
kubectl exec -it students-service-f7cc674f-nq8fc sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bin boot config dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var workspace
# cd config
# ls
application.yaml
# cat application.yaml
server:
port: 8080
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://mysql:3306/students
username: students
password: VNTechies2023
jpa:
hibernate.ddl-auto: update
generate-ddl: true
show-sql: false
Gọi API lấy các thông tin cấu hình ứng dụng:
kubectl port-forward po/students-service-f7cc674f-lzwg4 8080:8080
# API đơn giản để demo ứng dụng đã lấy các thông tin cấu hình từ ConfigMap.
curl http://localhost:8080/api/configs/v1
AppConfigs{SERVER_PORT=8080, MYSQL_URL='jdbc:mysql://mysql:3306/students', MYSQL_USERNAME='students', MYSQL_PASSWORD='VNTechies2023'}
Phần trên chúng ta đã cấu hình ứng dụng Spring Boot bằng cách mounted file config "application.yaml" vào bên trong folder "/config". Theo lý thuyết thì khi thực hiện cập nhật ConfigMap thì file config "application.yaml" được mouted vào container trước đó cũng sẽ thay đổi theo mà Pod không cần restart. Nhưng vì Spring Boot thường để cấu hình thành bean mặc định bean sẽ chỉ được khởi tạo một lần (theo cấu hình bean mặc định) khi ứng dụng Spring Boot khởi chạy và sẽ tái sử dụng, nên dù ConfigMap có thay đổi và file "application.yaml" được mounted vào container đã thay đổi thì khi lấy các thông tin cấu hình vẫn không được cập nhật. Để ứng dụng Spring Boot cập nhật được thông tin cấu hình mới khi ConfigMap thay đổi thì ứng dụng Spring Boot của chúng ta cần phải thay đổi cách thức lấy thông tin cấu hình (có thể là cấu hình scope cho bean, viết API để làm mới lại cấu hình,..).
Hãy xem xét ứng dụng của bạn là gì và cách thức ứng dụng của bạn lấy cấu hình thế nào để lựa chọn một trong hai cách (biến môi trường, mounted volume) lấy cấu hình từ ConfigMap cho phù hợp.
4. Tạo Secret và triển khai Secret trên Kubernetes
Tạo Secret cho ứng dụng
Hai ứng dụng Courses-service và Students-service phía trên có thông tin kết nối đến database gồm username và password đang để ở ConfigMap và không được mã hóa. Phần này ta sẽ sử dụng đối tượng Secret trong Kyberentes để lưu trữ thông tin kết nối đến database cho hai ứng dụng để tăng thêm một chút bảo mật với những dữ liệu nhạy cảm.
Tạo file courses-sc.yaml để cấu hình Secret cho Courses-service:
apiVersion: v1
kind: Secret
metadata:
name: courses-sc
type: Opaque
data:
# Thông tin cấu hình ở dạng encode Base64.
MYSQL_USERNAME: Y291cnNlcw==
MYSQL_PASSWORD: Vk5UZWNoaWVzMjAyMw==
Tạo file students-sc.yaml để cấu hình Secret cho Students-service:
apiVersion: v1
kind: Secret
metadata:
name: students-sc
type: Opaque
data:
# Thông tin cấu hình ở dạng encode Base64.
MYSQL_USERNAME: c3R1ZGVudHM=
MYSQL_PASSWORD: Vk5UZWNoaWVzMjAyMw==
Các thành phần của ConfigMap:
Tên | Định nghĩa |
---|---|
apiVersion | Version của Kubernetes API mà bạn sử dụng để tạo object/resource. Hai file cấu hình trên là: v1 . |
kind | Loại object/resource của Kubernetes. Hai file cấu hình trên là: Secret . |
metadata.name | Định nghĩa tên của Secret. Hai file cấu hình trên là: students-sc và courses-sc . |
type | Kubernetes Secret có một số loại trong đó type: Opaque là loại mặc định. Bạn có thể xem thêm các loại Secret ở đây. |
data | Chứa các thông tin cấu hình của ứng dụng theo format key=value và được encode base64. |
Triển khai Secret trên Kubernetes
Triển khai Secret trên Kubernetes bằng lệnh: kubectl apply -f <file-path>
# Triển khai Secret.
kubectl apply -f courses-sc.yaml
secret/courses-sc created
kubectl apply -f students-sc.yaml
secret/students-sc created
# Lấy danh sách Secret.
kubectl get secret
NAME TYPE DATA AGE
courses-sc Opaque 2 109s
students-sc Opaque 2 30s
Cấu hình sử dụng Secret trong Pods
Khi triển khi Secret thành công trên Kubernetes thì có một số cách để Pod có thể sử dụng được Secret như:
- Sử dụng biến môi trường: Giống với ConfigMap các thông tin trong Secret sẽ được inject vào trong container và khi thay đổi thông tin cấu hình ở Secret thì các cũng Pod CẦN restart lại để cập nhật thông tin cấu hình mới nhất.
- Sử dụng Volume: Giống với ConfigMap khi thay đổi thông tin cấu hình ở Secret thì các Pod KHÔNG CẦN restart lại để cập nhật thông tin cấu hình mới nhất.
Lấy thông tin cấu hình bên bên trong Secret thông qua biến môi trường
Định nghĩa tên Secret ở trường spec.containers.envFrom.secretRef
để chỉ định Secret muốn lấy. Trong file cấu hình dưới đây đang lấy thông tin cấu hình ở Secret có tên là students-sc
và tất cả thông tin cấu hình sẽ được thêm vào bên trong container dưới dạng biến môi trường khi container khởi chạy. Cấu hình sẽ tương tự đối với Courses-service.
apiVersion: apps/v1
kind: Deployment
metadata:
name: students-service
labels:
app: students-service
spec:
selector:
matchLabels:
app: students-service
replicas: 3
template:
metadata:
labels:
app: students-service
spec:
containers:
- name: students-service
image: thanhnb1/students-service:latest
envFrom:
# Thông tin kết nối database thì lấy trong Secret.
- secretRef:
name: students-sc
# Thông tin còn lại thì lấy trong ConfigMap.
- configMapRef:
name: students-cm
ports:
- containerPort: 8080
restartPolicy: Always
Bạn cũng có thể cấu hình lấy từng dữ liệu bên trong Secret à các biến môi trường này sẽ được thêm vào container khi container khởi chạy.
apiVersion: apps/v1
kind: Deployment
metadata:
name: students-service
labels:
app: students-service
spec:
selector:
matchLabels:
app: students-service
replicas: 3
template:
metadata:
labels:
app: students-service
spec:
containers:
- name: students-service
image: thanhnb1/students-service:latest
ports:
- containerPort: 8080
env:
# Lấy thông tin từ ConfigMap.
- name: SERVER_PORT
valueFrom:
configMapKeyRef:
name: students-cm
key: SERVER_PORT
- name: MYSQL_URL
valueFrom:
configMapKeyRef:
name: students-cm
key: MYSQL_URL
# Lấy thông tin từ Secret.
- name: MYSQL_USERNAME
valueFrom:
# Lấy biến môi trường từ Secret.
secretKeyRef:
# Tên Secret.
name: students-cm
# Tên key sẽ lấy được định nghĩa ở phần `data` trong Secret.
key: MYSQL_USERNAME
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: students-cm
key: MYSQL_PASSWORD
restartPolicy: Always
Lấy các biến môi trường bên trong Pod:
# 1. Lâý danh sách pods:
kubectl get po
NAME READY STATUS RESTARTS AGE
students-service-6cd8f7bdbf-trlz7 1/1 Running 0 9s
students-service-6cd8f7bdbf-qxxg6 1/1 Running 0 9s
students-service-6cd8f7bdbf-bdlkf 1/1 Running 0 9s
# 2. Lấy biên môi trường bên trong pod:
kubectl exec -it po/students-service-6cd8f7bdbf-bdlkf sh -- env
...
# Đây là các thông tin cấu hình của ứng dụng lấy từ ConfigMap và Secret.
MYSQL_URL=jdbc:mysql://mysql:3306/students
MYSQL_USERNAME=students
SERVER_PORT=8080
MYSQL_PASSWORD=VNTechies2023
MYSQL_SERVICE_PORT=3306
...
Lấy thông tin cấu hình bên bên trong Secret thông qua Mounted Volume
Tương tự như ConfigMap bạn cũng có thể cấu hình để mounted một file cấu hình vào bên trong container bằng cách sử dụng volume.
Tạo file students-sc-volume.yaml để tạo Secret:
apiVersion: v1
kind: Secret
metadata:
name: students-sc-volume
type: Opaque
data:
app.firstSecret: Zmlyc3Qgc2VjcmV0IHNwcmluZyBib290IGRlbW8u
Tạo file students-deployment-secret-volume.yaml để cấu hình ứng dụng lấy dữ liệu từ Secret thông qua mount volume.
apiVersion: apps/v1
kind: Deployment
metadata:
name: students-service
labels:
app: students-service
spec:
selector:
matchLabels:
app: students-service
replicas: 3
template:
metadata:
labels:
app: students-service
spec:
containers:
- name: students-service
image: thanhnb1/students-service:latest
ports:
- containerPort: 8080
envFrom:
# Thông tin kết nối database thì lấy trong Secret.
- secretRef:
name: students-sc
# Thông tin còn lại thì lấy trong ConfigMap.
- configMapRef:
name: students-cm
volumeMounts:
# Secret sẽ được mount vào bên trong folder "/config/app/secrets".
- mountPath: /config/app/secrets
name: app-secrets
readOnly: true
volumes:
# Tên ở phần "volumes.name" phải giống với "volumeMounts.name".
- name: app-secrets
secret:
secretName: students-sc-volume
items:
- key: app.firstSecret
path: app.firstSecret
restartPolicy: Always
Triển khai Secret và ứng dụng:
# 1. Triển khai ConfigMap trên Kubernetes:
kubectl apply -f students-cm.yaml
# 2. Triển khai Secret trên Kubernetes:
kubectl apply -f students-sc.yaml
# 3. Triển khai Secret trên Kubernetes:
kubectl apply -f students-sc-volume.yaml
# 4. Triển khai ứng dụng trên Kubernetes:
kubectl apply -f students-deployment-secret-volume.yaml
# 5. Lấy danh sách pods:
kubectl get po
NAME READY STATUS RESTARTS AGE
students-service-8457ff899f-nls5k 1/1 Running 0 11s
students-service-8457ff899f-5rztk 1/1 Running 0 8s
students-service-8457ff899f-jj225 1/1 Running 0 5s
kubectl exec -it po/students-service-8457ff899f-jj225 sh
# 6. Xem các biến môi trường bên được lấy từ ConfigMap và Secret bên trong container:
# printenv
....
MYSQL_USERNAME=students
MYSQL_PASSWORD=VNTechies2023
MYSQL_URL=jdbc:mysql://mysql:3306/students
MYSQL_SERVICE_PORT=3306
SERVER_PORT=8080
TZ=Asia/Ho_Chi_Minh
....
# 7. Xem secret đã được mount vào trong container ở folder "config/app/secrets":
# ls
app.jar
# cd ..
# ls
bin dev lib libx32 opt run sys var
boot etc lib32 media proc sbin tmp workspace
config home lib64 mnt root srv usr
# cd config/app/secrets
# ls
app.firstSecret
# cat app.firstSecret
first secret spring boot demo.# ^C
#
5. Tổng kết
Trong bài này chúng ta đã tìm hiểu hai đổi tượng ConfigMap và Secret trong Kubernetes để lưu trữ các thông tin cấu hình của ứng dụng. Cũng đã tìm hiểu cấu hình ứng dụng cũng có thể lấy dữ liệu ở ConfigMap, Secret thông qua 2 cách: sử dụng biến môi trường và mounted volume. Hãy xem xét yêu cầu của ứng dụng để lựa chọn cách sử dụng configmap và secret phù hợp.