Sa Pham

Interested in Cloud Computing, Programming and Security.

Pod và vòng đời của Pod trong Hypercontainer

14 Jun 2016 »

####Pod là gì

“Pod” là một khái niệm ban đầu từ Google.

In Kubernetes, rather than individual application containers, Pods are the smallest deployable units that can be created, scheduled, and managed.

A Pod (as in a pod of whales or pea pod) corresponds to a colocated group of applications running with a shared context. Within that context, the applications may also have individual cgroup isolations applied. A Pod models an application-specific "logical host" in a containerized environment. It may contain one or more applications which are relatively tightly coupled -- in a pre-container world, they would have executed on the same physical or virtual host.

Ý tưởng chính đứng sau Pod là trong một kiến trúc microservice luôn luôn liên quan tới một vài chương trình “helper” như log, monitoring, cron, … . Những chương trình giúp đỡ này được xây dựng để làm việc hợp tác với app. Vì vậy, thay vì chạy nhiều container độc lập , những tiến trình nên được chia sẻ chung namespace, mặc dù chúng được đóng gói trong các image khác nhau.

######Pod is the first class in Hyper

Trong hyper, một pod bao gồm một nhóm các docker image, được triển khai trong một HyperVM. Bên trong của instance, nhiều ứng dụng từ các image khác nhau chia sẻ các namespace: PID, network, IPC, UTS, User. Pod cung cấp một cái nhìn quen thuộc của một OS tới các ứng dụng, chứ không còn là triết lý “một process trên một container”

  • Các process có thể thấy nhau

  • Các process có thể sử dụng tất cả các phương tiện IPC để giao tiếp

  • Các tiến trình chia sẻ cùng hostname

  • Các tiến trình có truy cập tới tất cả các NIC gắn vào instance.

  • Các tiến trình có truy cập vào tất cả các disk đã gắn vào instance

Ngoại trừ Mount. Bởi vì Pod có thể có nhiều app image, Hyper áp dụng việc cô lập Mount namespace

####Vòng đời của Pod

Trong Hyper, một Pod có hai trạng thái:

  • Created: Một Pod được định nghĩa, storage của nó được cấp phát, và các image Docker được download

  • Running: Một Pod (với các container của nó) được khởi tạo trong một VM

Một pod có thể được khởi tạo một cách rõ ràng

hyper run -d podfile.json

Hoặc một cách khác

hyper run -t ubuntu

Trong cả hai cách, các Pods và VM không thể tách rời, Hyper sẽ tự động cung cấp một VM mới để làm chủ Pod, và Pod sẽ ở trạng thái Running

Tuy nhiên, cũng có thể tạo một Pod mà không tạo VM. Trong trường hợp này pod ở trạng thái Created

hyper create -p podfile.json

Có hai lựa chọn để start pod

hyper start pod_id

Lệnh start sẽ có một trigger để cung cấp một VM. Ngoài ra có thể chọn replace để chạy một pod mới

hyper replace -o old_pod_id -n new_pod_id

Trong trường hợp này, VM sẽ bị ngắt liên kết với old_pod_id và liên kết với new_pod_id. VM khi ấy đã running, replace là một lựa chọn nhanh hơn để khởi tạo một pod so với runstart

Lưu ý: old_pod_id phải đang chạy

Khi stop một Pod, VM bên dưới cũng sẽ bị chấm dứt

hyper stop pod_id

Khi đã stop, Pod sẽ trở về trạng thái Created

Để thực hiện destroy một Pod

hyper rm pod_id

Hyper sẽ (stop nếu cần thiết) xóa Pod và storage của nó.