Tuyển dụng
Viettel IDC

Init container là gì? Cách hoạt động và cấu hình trong Kubernetes

02/07/2026

Trong Kubernetes, ứng dụng có thể gặp lỗi ngay khi khởi động nếu database, Service, tệp cấu hình hoặc dữ liệu phụ thuộc chưa sẵn sàng. Init container được thiết kế để xử lý các tác vụ chuẩn bị này trước khi container chính hoạt động, qua đó bảo đảm Pod khởi tạo theo đúng trình tự. Cùng Viettel IDC tìm hiểu Init container là gì, cách hoạt động, vai trò và cấu hình cơ bản trong bài viết dưới đây. 

Init container là gì?

Init container là một loại container chuyên biệt trong Kubernetes, được chạy trước các container ứng dụng chính trong cùng một Pod. Nhiệm vụ của nó là chuẩn bị môi trường, kiểm tra điều kiện cần thiết hoặc tạo dữ liệu ban đầu để ứng dụng có thể khởi động đúng cách.

Ví dụ: Một ứng dụng web chỉ có thể hoạt động khi Service cơ sở dữ liệu mydb đã sẵn sàng. Init container sẽ liên tục kiểm tra tên miền nội bộ của Service này bằng lệnh nslookup. Khi mydb được tìm thấy, init container hoàn thành và Kubernetes mới khởi động container ứng dụng. 

Init container là gì?

Init container trong Kubernetes hoạt động như thế nào?

Khi một Pod được tạo, kubelet sẽ chuẩn bị mạng, volume và các tài nguyên cần thiết trước khi chạy init container. Nếu Pod có nhiều init container, Kubernetes sẽ thực thi chúng tuần tự theo đúng thứ tự được khai báo trong trường initContainers.

Mỗi init container phải hoàn thành thành công trước khi container tiếp theo bắt đầu. Nếu một init container gặp lỗi, kubelet sẽ thử chạy lại theo restartPolicy của Pod. Trong thời gian này, container ứng dụng vẫn chưa được khởi động và Pod thường ở trạng thái Pending hoặc PodInitializing.

Sau khi toàn bộ init container hoàn tất, kubelet mới khởi chạy các container ứng dụng. Các container chính lúc này có thể chạy song song và sử dụng dữ liệu, tệp cấu hình hoặc volume mà init container đã chuẩn bị trước đó.

Init container trong Kubernetes hoạt động như thế nào?

Vai trò của init container trong Kubernetes

Kubernetes init container đảm nhiệm các tác vụ chuẩn bị cần thiết trước khi container ứng dụng bắt đầu hoạt động. Cơ chế này giúp Pod chỉ khởi chạy ứng dụng khi môi trường, dữ liệu và các dịch vụ phụ thuộc đã sẵn sàng.

- Chuẩn bị môi trường chạy: Tạo thư mục, tệp cấu hình hoặc dữ liệu ban đầu mà ứng dụng cần sử dụng.

- Kiểm tra dịch vụ phụ thuộc: Chờ database, API, DNS hoặc Service khác hoạt động trước khi container chính khởi động.

- Kiểm soát thứ tự khởi động: Bảo đảm các tác vụ khởi tạo được hoàn thành theo đúng trình tự, tránh ứng dụng chạy quá sớm.

- Tách công cụ thiết lập khỏi image chính: Đưa các tiện ích như curl, sed, awk hoặc dig sang image riêng, giúp image ứng dụng gọn nhẹ hơn.

- Chia sẻ dữ liệu qua volume: Tạo hoặc tải dữ liệu vào volume dùng chung để container ứng dụng truy cập sau đó.

- Tăng cường bảo mật: Hạn chế đưa công cụ, quyền truy cập hoặc Secret không cần thiết vào container ứng dụng, qua đó giảm bề mặt tấn công.

- Hỗ trợ tự động hóa quá trình khởi tạo: Thực hiện các tác vụ như clone mã nguồn, tạo cấu hình động hoặc đăng ký Pod với hệ thống quản lý.

Vai trò của init container trong Kubernetes

So sánh init container và container thông thường

Init container và container thông thường đều nằm trong cùng một Pod, có thể sử dụng image riêng, khai báo tài nguyên và gắn volume. Điểm khác biệt chính nằm ở thời điểm khởi chạy, vòng đời và mục đích sử dụng của từng loại container.

Tiêu chí

Init container

Container thông thường

Thời điểm khởi chạy

Chạy trước container ứng dụng.

Chạy sau khi tất cả init container hoàn thành.

Mục đích

Chuẩn bị môi trường, dữ liệu hoặc kiểm tra điều kiện cần thiết.

Thực hiện chức năng chính của ứng dụng.

Vòng đời

Chạy đến khi hoàn thành nhiệm vụ rồi dừng.

Thường hoạt động trong suốt vòng đời của Pod.

Thứ tự thực thi

Các init container chạy tuần tự.

Nhiều container ứng dụng có thể chạy đồng thời.

Điều kiện hoàn thành

Phải thoát thành công để quá trình khởi tạo tiếp tục.

Thường được kỳ vọng duy trì trạng thái hoạt động.

Probe

Init container thông thường không hỗ trợ livenessProbe, readinessProbe và startupProbe.

Hỗ trợ các probe để kiểm tra tình trạng và khả năng phục vụ.

Khi xảy ra lỗi

Container ứng dụng chưa được khởi động và kubelet có thể chạy lại init container.

Được xử lý theo restartPolicy của Pod.

Trường khai báo

spec.initContainers.

spec.containers.

So sánh init container và sidecar container

Init container và sidecar container đều có thể khởi động trước container ứng dụng chính nhưng phục vụ hai mục đích khác nhau. Init container thực hiện tác vụ có điểm kết thúc rõ ràng, trong khi sidecar container tiếp tục chạy để hỗ trợ ứng dụng trong suốt vòng đời của Pod.

Tiêu chí

Init container

Sidecar container

Mục đích

Chuẩn bị điều kiện trước khi ứng dụng khởi động.

Cung cấp chức năng hỗ trợ liên tục cho ứng dụng.

Thời gian hoạt động

Hoàn thành nhiệm vụ rồi dừng.

Tiếp tục chạy cùng container ứng dụng.

Quan hệ với container chính

Container chính chỉ chạy sau khi init container hoàn thành.

Hoạt động song song với container chính sau khi được khởi tạo.

Cách thực thi

Nhiều init container chạy tuần tự.

Chạy đồng thời với các container ứng dụng.

Probe

Init container thông thường không hỗ trợ các probe.

Có thể sử dụng probe để kiểm soát trạng thái hoạt động.

Trao đổi dữ liệu

Thường thông qua volume dùng chung.

Có thể trao đổi qua volume hoặc mạng nội bộ của Pod.

Trường hợp sử dụng

Tạo tệp cấu hình, chờ Service, chuẩn bị dữ liệu.

Thu thập log, chạy proxy, đồng bộ dữ liệu hoặc giám sát.

Thời điểm kết thúc

Kết thúc trước khi ứng dụng bắt đầu hoạt động.

Thường kết thúc khi Pod hoặc container ứng dụng dừng.

Tính chất tác vụ

Hữu hạn, có trạng thái hoàn thành rõ ràng.

Liên tục, cần duy trì trong thời gian ứng dụng hoạt động.

So sánh init container và sidecar container

Hướng dẫn cấu hình init container trong Kubernetes

Init container được khai báo trong trường initContainers của đặc tả Pod, nằm cùng cấp với trường containers. Mỗi init container có thể sử dụng image, lệnh thực thi, volume và tài nguyên riêng tùy theo tác vụ khởi tạo.

Bước 1: Khai báo init container trong Pod

Trước tiên, thêm trường initContainers vào phần spec của Pod. Mỗi phần tử trong trường này đại diện cho một init container và cần có tên, image cùng lệnh thực thi cụ thể.

spec:

  initContainers:

    - name: prepare-data

      image: busybox:1.36

      command: ["sh", "-c", "echo 'App is ready' > /data/status.txt"]

Trong ví dụ trên, init container có tên prepare-data sử dụng image busybox để tạo tệp status.txt trước khi ứng dụng khởi động.

Bước 2: Tạo volume dùng chung

Nếu init container cần truyền tệp hoặc dữ liệu cho container ứng dụng, bạn có thể khai báo một volume dùng chung. Loại emptyDir thường được sử dụng vì volume này tồn tại trong suốt vòng đời của Pod.

volumes:

  - name: shared-data

    emptyDir: {}

 

Volume shared-data sẽ được tạo khi Pod khởi động và có thể được gắn vào cả init container lẫn container ứng dụng.

Bước 3: Gắn volume vào init container

Tiếp theo, sử dụng volumeMounts để gắn volume vào init container. Dữ liệu được tạo tại đường dẫn này sẽ được lưu trong volume dùng chung.

initContainers:

  - name: prepare-data

    image: busybox:1.36

    command: ["sh", "-c", "echo 'App is ready' > /data/status.txt"]

    volumeMounts:

      - name: shared-data

        mountPath: /data

Trong cấu hình trên, init container ghi tệp vào thư mục /data, tương ứng với volume shared-data.

Bước 4: Khai báo container ứng dụng

Container ứng dụng được cấu hình trong trường containers. Container này cũng cần gắn cùng volume để truy cập dữ liệu mà init container đã chuẩn bị.

containers:

  - name: app-container

    image: nginx:1.27

    volumeMounts:

      - name: shared-data

        mountPath: /usr/share/nginx/html

 

Kubernetes chỉ khởi động app-container sau khi init container prepare-data thực thi thành công.

Bước 5: Hoàn thiện tệp cấu hình YAML

Cấu hình đầy đủ của Pod có thể được viết như sau:

apiVersion: v1

kind: Pod

metadata:

  name: init-container-demo

spec:

  initContainers:

    - name: prepare-data

      image: busybox:1.36

      command:

        - sh

        - -c

        - echo "App is ready" > /data/status.txt

      volumeMounts:

        - name: shared-data

          mountPath: /data

 

  containers:

    - name: app-container

      image: nginx:1.27

      volumeMounts:

        - name: shared-data

          mountPath: /usr/share/nginx/html

 

  volumes:

    - name: shared-data

      emptyDir: {}

Trong ví dụ này, init container tạo tệp status.txt trong volume shared-data. Sau khi tác vụ hoàn thành, Kubernetes mới khởi động container Nginx và gắn volume đó vào thư mục nội dung của ứng dụng.

Bước 6: Triển khai và kiểm tra Pod

Lưu cấu hình vào tệp, chẳng hạn init-container-demo.yaml, sau đó triển khai bằng lệnh:

kubectl apply -f init-container-demo.yaml

Kiểm tra trạng thái Pod:

kubectl get pod init-container-demo

 

Nếu init container chưa hoàn thành, Pod có thể hiển thị trạng thái như Init:0/1. Khi init container chạy thành công, container ứng dụng sẽ khởi động và Pod chuyển sang trạng thái Running.

Kết luận

Qua bài viết, bạn đã hiểu Init container là gì và cách thành phần này chuẩn bị môi trường, dữ liệu hoặc kiểm tra các điều kiện phụ thuộc trước khi ứng dụng khởi động. Dù chỉ hoạt động trong giai đoạn đầu của Pod, init container lại góp phần quan trọng trong quá trình chuẩn hóa luồng triển khai và hạn chế lỗi phát sinh khi các dịch vụ chưa sẵn sàng.

Khi hệ thống Kubernetes mở rộng, doanh nghiệp cần một nền tảng đủ ổn định để triển khai workload mà không phải tự xử lý toàn bộ phần hạ tầng bên dưới. Viettel Dedicated Kubernetes Service (vDKS) hỗ trợ rút ngắn quá trình xây dựng cụm, đơn giản hóa vận hành và tạo thêm dư địa cho đội ngũ kỹ thuật tập trung phát triển ứng dụng. 

Thông tin chi tiết tại: https://viettelidc.com.vn/viettel-kubernetes-service 

Để được hỗ trợ tư vấn và tìm hiểu các dịch vụ của Viettel, bạn có thể liên hệ trực tiếp tới Viettel IDC qua các kênh:

- Hotline: 1800 8088 (miễn phí cước gọi)

- Fanpage: https://www.facebook.com/viettelidc  

Bình luận ()

Đăng nhập | Đăng ký
để gửi bình luận
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Xem thêm bình luận

Tin liên quan

28/09/2026

Trigger là gì trong DBMS? Cách hoạt động, các loại phổ biến và ứng dụng

Trigger là gì trong DBMS? Tìm hiểu cách trigger hoạt động, các loại phổ biến, ví dụ minh họa, ưu nhược điểm và khi nào nên sử dụng.

28/09/2026

Figma là gì? Nền tảng thiết kế và cộng tác trực tuyến

Figma là gì, có những tính năng nổi bật nào? Tìm hiểu Vector Network, Auto Layout, Dev Mode và vị thế hiện tại của Figma trong ngành thiết kế.

28/09/2026

Camera Cloud cần tốc độ mạng bao nhiêu? Cách tính băng thông cần thiết

Camera Cloud cần tốc độ mạng bao nhiêu? Tìm hiểu mức băng thông cần thiết, cách tính upload và các yếu tố ảnh hưởng đến tốc độ khi sử dụng Camera Cloud.

28/09/2026

Camera Cloud có bị hack không? Nguyên nhân và cách bảo mật

Camera Cloud có bị hack không? Tìm hiểu các rủi ro bảo mật, nguyên nhân bị xâm nhập và cách bảo vệ camera, tài khoản cùng dữ liệu hiệu quả.

28/09/2026

Viettel IDC: Nhà cung cấp VMware Sovereign Cloud duy nhất tại Đông Nam Á

Tại VMware Explore 2026 ở Las Vegas, Broadcom đã giới thiệu nhóm 57 nhà cung cấp dịch vụ đám mây chủ quyền trên nền tảng VMware Cloud Foundation. Viettel IDC là đơn vị duy nhất tại Đông Nam Á có tên trong danh sách này, đánh dấu bước tiến mới của doanh nghiệp Việt Nam trên thị trường hạ tầng cloud khu vực.

25/09/2026

Ghidra là gì? Chức năng và ứng dụng trong reverse engineering

Ghidra là gì? Tìm hiểu công cụ reverse engineering mã nguồn mở của NSA, các chức năng chính, ứng dụng thực tế và điểm khác biệt với IDA Pro.

25/09/2026

10 công cụ tối ưu hóa website theo từng mục tiêu

Tổng hợp 10 công cụ tối ưu hóa web cho tốc độ, SEO, trải nghiệm người dùng và chuyển đổi, kèm bảng so sánh và gợi ý lựa chọn theo nhu cầu.

25/09/2026

So sánh WHOIS và DNS Lookup: Điểm khác nhau và khi nào nên sử dụng

WHOIS và DNS Lookup khác nhau thế nào? Tìm hiểu định nghĩa, bảng so sánh, vai trò của RDAP thay thế WHOIS, và khi nào nên dùng công cụ nào.

25/09/2026

Cách test tải hệ thống: Quy trình và công cụ phổ biến

Cách test tải hệ thống hiệu quả gồm những bước nào? Tìm hiểu quy trình, chỉ số cần đo và công cụ phổ biến như JMeter, k6.

16/01/2025

Cloud Monitoring là gì? So sánh Hybrid Cloud và Multi Cloud Monitoring

Cloud Monitoring là quá trình theo dõi, quản lý và đánh giá hiệu suất của các tài nguyên và dịch vụ đám mây, bao gồm giám sát máy chủ, cơ sở dữ liệu, ứng dụng và hệ thống mạng