Skip to main content

Kubernetes Pod

Pod là thành phần đặc trưng nhất của Kubernetes, Pod là container cho docker bao gồm cả tài nguyên lưu trữ, địa chỉ IP và các quy tắc (rule) về cách (các) container sẽ thực thi và hoạt động.

kubernetes pod.jpg

Thông thường, mỗi Pod sẽ triển khai 1 ứng dụng đơn lẻ (container docker), tuy nhiên, Pod hoàn toàn có thể triển khai nhiều container tùy theo mục đích triển khai.

Vì Pod được hiểu là một đơn vị nguyên tử (atomic unit) trong Kubernetes, nên mỗi Pod thực sự phải chạy một phiên bản duy nhất của một ứng dụng nhất định. Vì vậy, nếu bạn cần chạy nhiều bản sao của một container, thì mỗi container phải chạy trong Pod duy nhất của riêng nó thay vì để tất cả các container đó nằm trong một Pod duy nhất. Tuy nhiên, đôi khi một Pod có thể triển khai nhiều container nếu chúng có liên quan chặt chẽ với nhau (ví dụ phổ biến là một số thành phần ghi log). Một điều quan trọng cần lưu ý là tất cả các container trong Pod sẽ chia sẻ cùng một môi trường: bộ nhớ, ổ đĩa, ngăn xếp mạng và quan trọng nhất là địa chỉ IP.

Trong quá trình triển khai thông thường, Pod không được lập trình viên trực tiếp tạo ra. Thay vào đó, các bộ điều khiển (controller) sẽ lên lịch cho Pod chạy trên Node. Một số điều quan trọng cần biết về Pod:

  • Một Pod chỉ có thể tồn tại trên một Node duy nhất
  • Một Pod không bao giờ có thể ở trạng thái được triển khai một phần. Nếu một phần của Pod không được triển khai thành công, nó được coi là unhealthy và bị lỗi.
  • Một Pod vì lý do nào đó không được triển khai thành công hoặc gặp lỗi dẫn đến bị lỗi, nó được coi là một thành phần dùng một lần. Nói cách khác, nếu một Pod trở nên unhealthy, các phần tử Controller sẽ giết Pod đó và khởi động một Pod khác, thay thế thay vì chữa lành nó.
1. Tạo Pod từ command

Để tạo 1 từ container image quay.io/openshiftlabs/simpleservice:0.5.0 và publish 1 HTTP API trên port 9876, thực hiện:

kubectl run sise --image=quay.io/openshiftlabs/simpleservice:0.5.0 --port=9876

Kiểm tra pod đang chạy:

kubectl get pods -A

Kêt quả:

NAME READY STATUS RESTARTS AGE
sise 1/1 Running 0 1m

Xóa Pod vừa tạo:

kubectl delete pod sise
2. Tạo Pod từ file kịch bản (Manifest file)

Chúng ta có thể tạo Pod từ các file kịch bản, sử dụng lệnh kubectl apply:

kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/main/specs/pods/pod.yaml

hoặc, có thể tạo file trên local với nội dung sau và thực thi lệnh kubectl apply:

apiVersion: v1
kind: Pod
metadata:
  name: twocontainers
spec:
  containers:
  - name: sise
    image: quay.io/openshiftlabs/simpleservice:0.5.0
    ports:
    - containerPort: 9876
  - name: shell
    image: centos:7
    command:
      - "bin/bash"
      - "-c"
      - "sleep 10000"

Kiểm tra Pod vừa tạo:

kubectl get pods

Kết quả:

NAME                        READY   STATUS    RESTARTS   AGE
twocontainers               2/2     Running   0          36s

Xóa Pod vừa tạo:

kubectl delete pod twocontainers