Ephemeral Containers là gì? Hướng dẫn cách sử dụng nhanh chóng và hiệu quả

Đã kiểm duyệt nội dung
Đánh giá
Ephemeral containers là một loại container đặc biệt trong Kubernetes, được thêm vào một Pod đang chạy để thực hiện các tác vụ tạm thời như gỡ lỗi hoặc kiểm tra hệ thống. Khác với các container thông thường, chúng không nhằm mục đích chạy ứng dụng chính mà chỉ phục vụ cho việc khắc phục sự cố mà không làm gián đoạn dịch vụ. Bài viết này sẽ khám phá chi tiết các ứng dụng thực tế của chúng và hướng dẫn cách triển khai để bạn tận dụng tối đa công cụ mạnh mẽ này.
Những điểm chính
- Khái niệm Ephemeral container: Giải thích ephemeral container là container tạm thời trong Kubernetes, không được đảm bảo tài nguyên và không tự khởi động lại khi lỗi.
- Đặc điểm chính của Ephemeral Containers: Liệt kê mục đích sử dụng (gỡ lỗi, kiểm tra Pod), vòng đời ngắn và không restart, được thêm linh động vào Pod đang chạy, các giới hạn về cổng mạng và tài nguyên.
- Lợi ích khi sử dụng ephemeral containers: Tập trung vào việc khắc phục hạn chế của kubectl exec khi container bị crash, pending hoặc image không có shell, công cụ debug.
- Hướng dẫn sử dụng ephemeral container: Hướng dẫn chi tiết từng tình huống gỡ lỗi, thay đổi hình ảnh,… bằng các lệnh.
- Giới thiệu Vietnix cung cấp hệ sinh thái dịch vụ như Enterprise Cloud, hosting, VPS, máy chủ riêng đáp ứng nhiều quy mô doanh nghiệp.
- Giải đáp thắc mắc: Trả lời các câu hỏi liên quan đến Ephemeral container

Ephemeral container là gì?
Ephemeral Container (Container tạm thời) là một loại container đặc biệt trong Kubernetes, được định nghĩa bởi vòng đời ngắn và không được đảm bảo về tính ổn định. Chúng không được cam kết về tài nguyên (CPU, memory) hay thời gian thực thi, và quan trọng nhất là sẽ không bao giờ được tự động khởi động lại khi gặp lỗi hoặc kết thúc tác vụ.

Vì những đặc tính này, chúng hoàn toàn không phù hợp để chạy các thành phần của một ứng dụng. Thay vào đó, mục đích chính của chúng là phục vụ cho các tác vụ kiểm tra, gỡ lỗi (troubleshooting) và chẩn đoán một pod đang hoạt động.
Mặc dù có nhiều điểm tương đồng với container thông thường, ephemeral container bị giới hạn đáng kể về cấu hình:
- Không thể cấu hình cổng mạng (port): Do không thể mở cổng, các trường liên quan như ports, livenessProbe, và readinessProbe đều không được phép sử dụng. Điều này củng cố vai trò của chúng là một công cụ kiểm tra nội bộ thay vì một dịch vụ mạng.
- Không thể khai báo tài nguyên (resources): Việc cấp phát tài nguyên cho một Pod là bất biến sau khi nó đã được tạo. Vì vậy, bạn không thể thiết lập trường resources (bao gồm requests và limits) cho một ephemeral container được thêm vào sau.
Thông thường, Ephemeral containers được tạo thông qua handler chuyên biệt trong API chứ không phải bằng cách thêm trực tiếp vào pod.spec. Điều này cũng có nghĩa bạn không thể dùng câu lệnh kubectl edit để thêm ephemeral container. Sau khi đã thêm vào một Pod, bạn cũng không thể chỉnh sửa hoặc xoá một ephemeral container giống như với container thông thường.
Trong khi Ephemeral Container là công cụ để gỡ lỗi ứng dụng, việc vận hành một môi trường Kubernetes hiệu quả đòi hỏi nền tảng hạ tầng vững chắc. Giải pháp Enterprise Cloud của Vietnix đáp ứng nhu cầu này bằng cách cung cấp hạ tầng mạnh mẽ, hỗ trợ triển khai và quản lý cụm Kubernetes. Điều này giúp doanh nghiệp tự chủ vận hành và tập trung vào phát triển ứng dụng thay vì lo lắng về cơ sở hạ tầng.
Các đặc điểm chính của Ephemeral Containers là gì?
- Mục đích sử dụng: Chủ yếu dùng cho việc gỡ lỗi (troubleshooting) và kiểm tra (inspection) các Pod đang hoạt động. Chúng đặc biệt hữu ích trong trường hợp container ứng dụng chính được xây dựng từ một image tối giản, không bao gồm các công cụ chẩn đoán cần thiết như curl, netcat, hay bash.
- Vòng đời (Lifecycle): Các container này chỉ tồn tại tạm thời và được định nghĩa là sẽ không bao giờ được tự động khởi động lại (restart) trong bất kỳ hoàn cảnh nào.
- Khởi tạo (Instantiation): Chúng được thêm vào một Pod đang tồn tại một cách linh động, khác với các container thông thường vốn phải được định nghĩa sẵn trong bản kê khai (manifest) ban đầu của Pod.
- Các giới hạn (Limitations): Không thể cấu hình cổng mạng (ports), do đó cũng không hỗ trợ các cơ chế kiểm tra livenessProbe và readinessProbe. Ngoài ra, việc cấp phát tài nguyên cho chúng cũng không được đảm bảo.
- Phương thức sử dụng: Cách phổ biến nhất để thêm một ephemeral container là sử dụng lệnh kubectl debug. Lệnh này cho phép gắn container tạm thời vào một Pod cụ thể để thực hiện các tác vụ chẩn đoán.
Lợi ích khi sử dụng ephemeral containers
Container tạm thời (ephemeral container) là một tính năng nâng cao trong Kubernetes, được thiết kế để debug tương tác cho các Pod đang chạy. Chúng đặc biệt hữu ích trong các tình huống mà kubectl exec không đủ khả năng, chẳng hạn như khi container ứng dụng bị treo hoặc được xây dựng từ các image tối giản (distroless) không chứa shell hay công cụ gỡ lỗi. Dưới đây là các điểm chính về cách sử dụng và lợi ích của chúng:
- Khắc phục hạn chế của kubectl exec: Hữu ích khi container mục tiêu đã bị crash, đang trong trạng thái chờ (pending), hoặc khi image của nó không có shell để thực thi lệnh.
- Gỡ lỗi cho các Image tối giản (Distroless): Các image distroless tăng cường bảo mật bằng cách loại bỏ shell và các công cụ không cần thiết. Container tạm thời cho phép bạn “gắn” một môi trường gỡ lỗi đầy đủ công cụ (như busybox hoặc ubuntu) vào Pod mà không cần thay đổi image gốc.
- Chia sẻ không gian tên tiến trình (Process Namespace Sharing): Đây là tính năng then chốt. Khi được kích hoạt, container tạm thời có thể “nhìn thấy” và tương tác với tất cả các tiến trình đang chạy trong các container khác của cùng một Pod. Điều này cho phép sử dụng các công cụ như ps, top, hoặc strace để kiểm tra ứng dụng chính.
- Sử dụng đơn giản qua kubectl debug: Cách được khuyến nghị để tạo và gắn một container tạm thời là sử dụng lệnh kubectl debug. Lệnh này giúp tự động hóa quá trình và cung cấp một giao diện tương tác (interactive shell) ngay lập tức để bắt đầu xử lý sự cố.

Hướng dẫn sử dụng ephemeral container
Gỡ lỗi bằng một ephemeral container
Kể từ Kubernetes v1.16, bạn có thể dùng lệnh kubectl debug để tạo một container tạm thời (ephemeral container) giúp gỡ lỗi cho các container khác.
Trường hợp bạn có một container đang chạy nhưng nó được xây dựng một cách tối giản, không chứa bất kỳ công cụ gỡ lỗi nào như shell (sh) hay bash. Ví dụ, khi bạn tạo một pod từ image k8s.gcr.io/pause:3.1 (một image siêu nhẹ không có shell):
kubectl run pod-not-debug-tool --image=k8s.gcr.io/pause:3.1 --restart=NeverLúc này, nếu bạn cố gắng truy cập vào pod này bằng lệnh kubectl exec để mở một shell, bạn sẽ thất bại:
$ kubectl exec -it pod-not-debug-tool -- shBạn sẽ nhận được lỗi:
OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown
command terminated with exit code 127
Đây là lúc Ephemeral Container (container tạm thời) phát huy tác dụng. Lệnh kubectl debug cho phép bạn “gắn” một container mới, đầy đủ công cụ, vào pod đang gặp sự cố. Bạn có thể sử dụng lệnh sau:
kubectl debug pod-not-debug-tool --image=busybox --target=pod-not-debug-tool
Giải thích lệnh:
- kubectl debug pod-not-debug-tool: Bắt đầu gỡ lỗi pod có tên pod-not-debug-tool.
- –image=busybox: Tạo một container gỡ lỗi tạm thời bằng image busybox (vì nó có sẵn shell và các công cụ cần thiết).
- –target=pod-not-debug-tool: Gắn container gỡ lỗi vào pod mục tiêu để có thể “nhìn thấy” và kiểm tra môi trường của pod đó.

Sau khi chạy lệnh, bạn sẽ ngay lập tức được đưa vào một shell (# hoặc $) bên trong container busybox vừa được tạo:
Defaulting debug container name to debugger-8xzrl.
If you don't see a command prompt, try pressing enter.
/ #Từ đây, bạn có toàn quyền truy cập vào môi trường của pod gốc để kiểm tra tiến trình, hệ thống tệp, mạng,… giúp việc gỡ lỗi trở nên cực kỳ dễ dàng.
Lưu ý
Bạn cần lưu ý rằng khi tạo cluster thì bạn phải bật tính năng ephemeral container lên. Ví dụ với cluster tạo bằng kubeadm, bạn cần thêm tuỳ chọn –feature-gates=EphemeralContainers=true trong quá trình khởi tạo. Ngoài ra, tuỳ chọn –target cũng phải được container runtime hỗ trợ.
Sao chép một Pod khi đang thay đổi lệnh
Khi gặp trường hợp một container trong pod không thể khởi động và bị crash ngay từ đầu, bạn có thể áp dụng cách sau để debug các pod ở trạng thái CrashLoopBackOff. Dưới đây là ví dụ về thao tác debug một pod mà bạn biết chắc sẽ xảy ra lỗi crash. Lệnh kiểm tra như sau:
kubectl run pod-crashed --image=busybox -- falseSau khi kiểm tra thì bạn sẽ có thể phát hiện ra lỗi CrashLoopBackOff trong kết quả.
kubectl describe pod pod-crashed
...Containers:
pod-crashed:
Container ID: docker://0474f222ac3ea249cc2377a818130c7405dbc8a558585b70ec8649540882b64f
Image: busybox
Image ID: docker-pullable://busybox@sha256:d80cd694d3e9467884fcb94b8ca1e20437d8a501096cdf367a5a1918a34fc2fd
Port: <none>
Host Port: <none>
Args:
false
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
Exit Code: 1
Tiếp theo, bạn sẽ chạy câu lệnh sau để debug lỗi:
kubectl debug pod-crashed -it --copy-to=pod-crashed-debug --container=container-crashed-debug --image=busybox -- shIf you don't see a command prompt, try pressing enter.
/ #
Câu lệnh này sẽ sao chép container pod-crashed vào trong container container-crashed-debug của pod pod-crashed-debug. Sau đó, bạn sẽ chạy lệnh sh ngay trong container container-crashed-debug để có thể kiểm tra và gỡ lỗi cho pod một cách thuận tiện hơn.
Sao chép Pod khi đang thay đổi container images
Trong một số trường hợp, container bạn chạy không có đủ công cụ hỗ trợ để thực hiện việc debug khi gặp lỗi crash. Lúc này, bạn có thể sao chép container đó sang một image khác tích hợp sẵn nhiều công cụ debug hơn.
kubectl run pod-crashed-two --image=busybox --restart=Never -- sleep 1d
Cụ thể thay vì sử dụng image busybox không có tool nslookup để ta debug dns server thì bạn có thể chuyển sang sử dụng image ubuntu có sẵn nslookup tool hoặc các image tương tự để thuận tiện cho việc kiểm tra và xử lý sự cố.
kubectl debug pod-crashed-two -it --copy-to=pod-crashed-debug-two --set-image=*=ubuntu --image=ubuntu -- sh
Lúc này, khi bạn sử dụng cú pháp –set-image thì toàn bộ container trong pod sẽ được chuyển sang sử dụng image ubuntu. Việc này giúp bạn dễ dàng thay đổi môi trường container để bổ sung các công cụ cần thiết cho việc kiểm tra và gỡ lỗi.
Process Namespace Sharing with Ephemeral Containers
Khi sử dụng tham số –share-processes cùng với –copy-to, bạn sẽ tạo ra một pod mới dựa trên cấu hình của pod hiện tại. Đồng thời kích hoạt tính năng chia sẻ không gian tiến trình cho pod mới này để các container trong cùng một pod có thể được debug trở nên dễ dàng và trực quan hơn.
$ kubectl debug -it pod-crashed --image=busybox --share-processes --copy-to=debug-share-pod --profile=general -- sh
Tiếp theo, bạn chạy lệnh ps để kiểm tra và quan sát các tiến trình đang hoạt động trong container. Lệnh này sẽ liệt kê danh sách toàn bộ tiến trình, giúp bạn xác định chính xác trạng thái hoặc tìm các tiến trình liên quan để phục vụ cho việc debug, xử lý vấn đề.
/ # ps auxKhi kiểm tra danh sách, bạn sẽ nhìn thấy tiến trình /pause đang chạy từ container busybox và tiến trình nginx của container trong nginx-deployment. Điều này giúp bạn dễ dàng quan sát và xác định được các tiến trình đang hoạt động trong từng container để phục vụ cho việc debug.
PID USER TIME COMMAND
1 65535 0:00 /pause
12 root 0:00 sh
36 root 0:00 ps aux
Khi sử dụng tính năng process namespace sharing, bạn cũng có thể truy cập vào hệ thống tập tin của container khác trong cùng pod. Ngoài ra, để truy cập vào nội dung của container mục tiêu, bạn sử dụng đường dẫn:/proc/<PID>/root (Trong đó <PID> là mã tiến trình của container bạn cần kiểm tra, thường là PID 1).
Ví dụ, để kiểm tra các file cấu hình trong thư mục /etc của container gốc, bạn chạy lệnh:
# ls /proc/1/root/etcTại đây, bạn sẽ quan sát được các file hệ thống của container mục tiêu như: hostname, hosts, mtab, resolv.conf… ngay từ bên trong container debug:
hostname hosts mtab resolv.conf
Vietnix – Nhà cung cấp Enterprise Cloud uy tín tại thị trường Việt Nam
Bên cạnh giải pháp Enterprise Cloud mạnh mẽ, Vietnix còn mang đến một hệ sinh thái dịch vụ toàn diện, từ dịch vụ thuê hosting, thuê VPS chất lượng, hiệu năng cao đến thuê máy chủ riêng, đáp ứng mọi quy mô và nhu cầu phát triển kinh doanh online của bạn.
Với hơn 13 năm kinh nghiệm và sự tin dùng từ 100,000+ khách hàng, Vietnix khẳng định vị thế qua hạ tầng ổn định, hiệu năng vượt trội với phần cứng CPU AMD EPYC, ổ cứng NVMe cùng đội ngũ hỗ trợ kỹ thuật chuyên nghiệp 24/7. Vietnix không chỉ là một nhà cung cấp dịch vụ, mà còn là người đồng hành đáng tin cậy trên hành trình phát triển của doanh nghiệp.
Hãy khám phá các giải pháp của Vietnix ngay hôm nay để tìm ra lựa chọn tối ưu nhất cho bạn.
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
Docker containers ephemeral là gì?
Trong Docker, containers ephemeral có nghĩa là các container có tính ngắn hạn hoặc tạm thời. Khi một container Docker được khởi tạo thì container này sẽ chạy và tồn tại trong một thời gian nhất định. Nhưng khi container đó bị dừng hoặc bị xóa, tất cả các dữ liệu và trạng thái bên trong container (bao gồm lớp ghi writable layer) sẽ bị mất hoàn toàn.
OpenShift ephemeral containers là gì?
OpenShift ephemeral containers là loại container đặc biệt trong môi trường OpenShift dùng để chạy tạm thời bên trong một Pod đã tồn tại. Việc chạy này nhằm mục đích thực hiện các tác vụ do người dùng khởi tạo như gỡ lỗi hoặc kiểm tra trạng thái.
K9s debug container nghĩa là gì?
K9s debug container là một tính năng trong Kubernetes dùng để hỗ trợ việc gỡ lỗi các container trong Pod khi gặp tình trạng khó truy cập hoặc thiếu công cụ gỡ lỗi bên trong container chính.
Tóm lại, ephemeral containers giúp cải thiện đáng kể hiệu quả xử lý sự cố. Đồng thời, chúng cũng tăng cường tính chủ động cho việc quản trị đám mây doanh nghiệp, đặc biệt khi được kết hợp với các nền tảng cloud hiện đại. Hy vọng bài viết đã cung cấp cho bạn cái nhìn tổng quan về cách hoạt động, ứng dụng và những điểm cần lưu ý của container tạm thời khi xây dựng và vận hành hệ thống. Để tìm hiểu sâu hơn, bạn có thể tham khảo các bài viết được đề xuất dưới đây.
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

















