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

16/10/2026

vMaaS cập nhật thêm mô hình AI mới - Một API, nhiều mô hình lựa chọn linh hoạt, chi phí không đổi

Viettel Model as a Service (vMaaS) cập nhật thêm Gemma 3, Qwen3-VL và Llama Nemotron, đồng thời hỗ trợ thêm hơn 40 mô hình AI theo nhu cầu. Tìm hiểu cách chọn mô hình phù hợp qua một API.

15/10/2026

Thông báo về việc tổ chức đấu giá tài sản thanh lý tháng 10/2026

Công ty Cổ phần Viettel – CHT thông báo về việc đấu giá đối với danh mục tài sản: Tài sản thanh lý bao gồm: Lô 1 - Bình ắc quy + Lô 2 - Tủ Rack và thiết bị cơ điện.

14/10/2026

So sánh IDS và IPS: Sự khác biệt và cách lựa chọn phù hợp

So sánh IDS và IPS giúp doanh nghiệp hiểu rõ cách hai giải pháp phát hiện, ngăn chặn xâm nhập và lựa chọn phương án bảo vệ hệ thống mạng phù hợp.

14/10/2026

NVMe Hosting là gì? Ưu điểm, so sánh và cách lựa chọn

NVMe Hosting là gì? Tìm hiểu ưu điểm, so sánh với SSD SATA và HDD, cùng cách lựa chọn hosting phù hợp để tối ưu hiệu năng website.

14/10/2026

Sự khác biệt giữa các dịch vụ hosting của Việt Nam với quốc tế

Tìm hiểu sự khác biệt giữa các dịch vụ hosting của Việt Nam với quốc tế về tốc độ, chi phí, công nghệ và hỗ trợ kỹ thuật để chọn giải pháp phù hợp.

14/10/2026

So sánh dịch vụ hosting tại Viettel IDC với những nhà cung cấp khác: Nên chọn bên nào?

So sánh dịch vụ hosting tại Viettel IDC với những nhà cung cấp khác về giá, cấu hình, hiệu năng và bảo mật để chọn giải pháp phù hợp cho doanh nghiệp.

14/10/2026

Những nền tảng điện toán đám mây nào phù hợp nhất cho doanh nghiệp nhỏ? Cách lựa chọn hiệu quả

Những nền tảng điện toán đám mây nào phù hợp cho doanh nghiệp nhỏ? Tìm hiểu các lựa chọn phổ biến và tiêu chí chọn nền tảng phù hợp.

14/10/2026

Cách chọn máy chủ phù hợp cho website nhỏ tại Việt Nam: Từ cấu hình đến chi phí

Cách chọn máy chủ phù hợp cho website nhỏ tại Việt Nam dựa trên cấu hình, nhu cầu sử dụng, chi phí và khả năng mở rộng.

14/10/2026

Những yếu tố quan trọng khi lựa chọn dịch vụ Cloud Database để đảm bảo khả năng mở rộng và độ tin cậy

Những yếu tố quan trọng khi lựa chọn dịch vụ Cloud Database giúp doanh nghiệp đảm bảo khả năng mở rộng, hiệu năng và độ tin cậy cho hệ thống.

14/10/2026

Lỗi SQL Server Setup failed: Nguyên nhân và cách khắc phục

Lỗi SQL Server Setup failed do đâu? Tìm hiểu nguyên nhân, cách kiểm tra và khắc phục lỗi để cài đặt SQL Server thành công.