Lộ trình
Cloud Native Computing FoundationAssociateTuần 1: Nền tảngBài 4 / 30

Ngày 4: Init Container

Thời lượng: 45 phút
Mục tiêu: 2 nhiệm vụ chính
Tiến độ lộ trình
ckadngày 4
hoàn thành4 / 30 bài
Bối cảnh bài học

Dùng Init Container để chuẩn bị dữ liệu, chờ dependency và chạy migration có kiểm soát; debug ordering, retry, shared volume và init state trước khi app start.

đọc hiểuthực hànhcheckpoint
Bài giảng hôm nay

Học hiểu, rồi mới thực hành

Dùng Init Container để chuẩn bị dữ liệu, chờ dependency và chạy migration có kiểm soát; debug ordering, retry, shared volume và init state trước khi app start.

Bắt đầu đọc bài giảng

Nhiệm vụ bài học hôm nay

  • Học use case Init Container
  • Thực hành Pod chờ dependency sẵn sàng bằng Init Container
Instructor walkthrough

Bài giảng chi tiết: từ bài toán đến bằng chứng

Scenario xuyên suốt

Pod không có app container Ready vì init chưa hoàn tất; người học thường nhìn app logs rỗng hoặc restart Pod. Init Container chạy tuần tự trước app, có filesystem/network contract riêng và failure của nó giữ Pod ở Init trạng thái.

01Đọc bài toán

Xác định actor, workload, constraint và trạng thái cuối cần đạt.

02Vẽ luồng / boundary

Chỉ ra request, dependency, identity và failure domain trước khi chọn công cụ.

03Chọn và thực hành

Thay đổi nhỏ nhất trong lab cô lập; command nào cũng phải nói rõ nó kiểm tra điều gì.

04Kiểm chứng / recovery

Đối chiếu trạng thái thực tế, tạo một failure variant và ghi cách hoàn tác.

Cách nối lý thuyết với thực tế
  • Init Containers chạy tuần tự và phải thành công trước app containers; mỗi init có image/command/resource/security context riêng.
  • Init có thể chuẩn bị file trong emptyDir, chờ DNS/TCP dependency hoặc migration; retry phải có timeout/backoff, không loop vô hạn che outage.
  • Pod phase/reason và `.status.initContainerStatuses` khác app container status; đọc init logs bằng `-c INIT_NAME`.
  • Init và app có thể share volume nhưng không share process; Service readiness của dependency và race condition cần thiết kế explicit.

Init là gate trước app

Pod chạy init theo thứ tự; init phải exit 0 thì app containers mới start. Dùng init cho prepare file, wait dependency hoặc migration có kiểm soát. Khi stuck, xem init status/reason, events và logs đúng container; app logs rỗng là expected nếu app chưa được start.

Dependency và repeatability

Wait loop cần timeout/backoff và signal lỗi; kiểm tra Service/DNS/port từ init context. Shared emptyDir chỉ truyền file, không biến dependency thành healthy. Migration phải idempotent hoặc có lock/rollback; restart Pod có thể chạy init lại.

Bài tập

Tạo dependency mock + init chuẩn bị marker, verify thứ tự, mô phỏng dependency/permission/command failure, sửa và tạo variant restart. Ghi state transition Init:Completed → app Ready và cleanup/data caveat.

Terminal reference

Command list và cách dùng

Chạy từng lệnh theo đúng thứ tự. Trước các lệnh có thể tạo hoặc thay đổi tài nguyên, hãy kiểm tra profile, account và region.

Commands · read-only checkpoints
kubectl get pod -n ckad-day4 -o wide
kubectl describe pod POD_NAME -n ckad-day4
kubectl logs POD_NAME -n ckad-day4 -c INIT_NAME --tail=100
kubectl get pod POD_NAME -n ckad-day4 -o jsonpath="{.status.initContainerStatuses[*].state} {.status.initContainerStatuses[*].restartCount}{"\n"}"
kubectl get svc,endpoints -n ckad-day4 -o wide
kubectl get events -n ckad-day4 --sort-by=.lastTimestamp
Hands-on lab

Thực hành theo scenario

  1. Tạo namespace `ckad-day4`; dựng dependency mock và Pod có init `wait-for-dependency`/`prepare-config` ghi marker vào emptyDir, app đọc marker. Ghi expected order và success condition.
  2. Quan sát `kubectl get pod -o wide`, describe/events, `.status.initContainerStatuses` và logs riêng của init/app; chứng minh app chưa start khi init chưa pass.
  3. Mô phỏng dependency chưa sẵn sàng, DNS/port sai, permission sai và init command không idempotent; ghi retry/timeout behavior, không chạy loop vô hạn.
  4. Sửa đúng dependency/reference/command/volume/permission, verify Init:Completed → app Running/Ready, rồi tạo variant đổi marker hoặc restart Pod để kiểm tra repeatability.
  5. Cleanup Pod/Service/ConfigMap/Secret/namespace lab; ghi data/migration risk và không gọi init migration production từ bài demo chưa có backup/rollback.
Evidence checkpoint

Kiểm chứng kết quả

Không coi lệnh chạy thành công là đủ. Hãy đối chiếu output với trạng thái mong đợi:

  • Init ordering và completion state được chứng minh.
  • Đọc đúng init status/logs/events, không nhầm app logs.
  • Dependency wait có timeout/retry và failure diagnosis.
  • Shared volume/migration idempotency/permissions có variant.
  • Cleanup và data-safety caveat rõ.
Transfer to exam / production

Bẫy thường gặp và trade-off

Pod stuck ở Init thường không có app log để đọc. Xem `describe`, Events và `logs -c <init-container>`; sửa init command/dependency/volume rồi chờ status Completed trước khi debug app.

Checkpoint · 3 phút

Kiểm tra nhanh

Câu hỏi: Pod đang Init:0/1 và app container chưa có log. Kiểm tra nào đúng nhất?

Kết thúc bài

Checklist trước khi sang Ngày 2