Email Doanh NghiệpSSLFirewall Anti DDoS

NỘI DUNG

Banner blog lễ 30.4 và 1.5

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

Hưng Nguyễn

Đã kiểm duyệt nội dung

Ngày đăng:25/02/2026
Lượt xem

Quy trình sản xuất nội dung

Đánh giá

[esi kkstarratings cache="private" ttl="3"]

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
những điểm chính

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ụ.

Container tạm thời (ephemeral container) là loại container không được đảm bảo về tài nguyên
Ephemeral container là loại container không được đảm bảo về tài nguyên

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ố.
Container tạm thời hữu ích trong việc xử lý sự cố khi câu lệnh kubectl exec không đáp ứng (Nguồn: Internet)
Container tạm thời hữu ích trong việc xử lý sự cố khi câu lệnh kubectl exec không đáp ứng (Nguồn: Internet)

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=Never

Lú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 -- sh

Bạ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
Lỗi này có nghĩa là: "Tôi không thể chạy lệnh sh vì không tìm thấy nó bên trong container."
Lỗi này có nghĩa là: “Tôi không thể chạy lệnh sh vì không tìm thấy nó bên trong container.”

Đâ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
Lệnh kubectl debug cho phép bạn "gắn" một container mới
Lệnh kubectl debug cho phép bạn “gắn” một container mới

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 đó.
Lệnh kiểm tra kubectl run
Lệnh kiểm tra kubectl run

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.

iconLư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 -- false

Sau 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
Bảng phân tích
Bảng phân tích

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 -- sh
If you don't see a command prompt, try pressing enter.
/ #
Câu lệnh để debug lỗi
Câu lệnh để debug lỗi

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âu lệnh kubectl run
Câu lệnh kubectl run

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
Câu lệnh kubectl debug pod-crashed-two
Câu lệnh kubectl debug pod-crashed-two

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
Câu lệnh $ kubectl debug -it pod-crashed
Câu lệnh $ kubectl debug -it pod-crashed

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 aux

Khi 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
Bảng thông báo
Bảng thông báo

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/etc

Tạ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
Bạn sẽ quan sát được các file hệ thống của container mục tiêu
Bạn sẽ quan sát được các file hệ thống của container mục tiêu

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

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

kien-thuc-dich-vu

kien-thuc-kubernetes

text
icon popup single post

CẢM ƠN BẠN ĐÃ ĐÁNH GIÁ BÀI VIẾT

Vietnix sẽ luôn cố gắng cải thiện chất lượng dịch vụ mỗi ngày

ĐÓNG

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG