Kubernetes là công cụ quản lý container phổ biến hiện nay, và một trong những khái niệm cốt lõi của nó chính là POD. Vậy, Pod trong Kubernetes là gì? Chúng ta sẽ tìm hiểu chi tiết qua bài viết này.
Xem thêm:
Containerd là gì ? So sánh Docker và Containerd
Container runtime là gì ? 2 loại phổ biến
1. POD là gì?
Pod là thành phần cơ bản nhất để deploy và chạy một ứng dụng, được tạo và quản lý bởi kubernetes. Pod được dùng để nhóm và chạy một hoặc nhiều container lại với nhau trên cùng một worker node, những container trong một pod sẽ chia sẻ chung tài nguyên với nhau và không gian địa chỉ IP.
Pod được tạo bằng cách sử dụng lệnh kubectl gọi tới API của Kubernetes hoặc được lưu lại dưới dạng file yaml và được cài đặt vào Kubernetes.
2. Các thành phần của POD
Thành phần chính của Pod ở root level bao gồm:
- Kind: Nơi phân loại tài nguyên
- Metadata: Nơi chứa thông tin metadata của Pod (tên, nhãn,…)
- Spec: Nơi chứa thông tin khai báo của Pod và container của Pod
Một số tham số trong spec của Pod:
- HostAliases: Phần khai báo cho Pod
- InitContainers: Phần khai báo thông tin của initContainer
- Container: Thông tin chi tiết về Container trong Pod
- Volumes: Phần khai báo volume của Pod
- RestartPolicy: Có 3 giá trị là Always, OnFailure, và Never
- Affinity: Phần khai báo các thuộc tính liên quan tới schedule Pod
Ví dụ:
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
3. Đặc điểm của Kubernetes Pod
Kubernetes Pod có 3 đặc điểm chính:
- Chứa một hoặc nhiều container: Một Pod có thể chứa một hoặc nhiều hơn một container đã được lên lịch và triển khai cùng trên một node.
- Dùng chung tài nguyên: Các container trong Pod hoạt động trên cùng một không gian mạng và có thể giao tiếp với như bằng localhost.
- Chia sẻ lưu trữ và khối lượng: Pod có thể chia sẻ khối lượng lưu trữ, cho phép chia sẻ dữ liệu và duy trì tính nhất quán giữa các container trong cùng một Pod.
4. Tầm quan trọng của Pod
POD là nơi chứa các container, đồng thời quản lý và phân phối chúng trên nhiều node trong một Cluster.
Pods đóng vai trò quan trọng trong việc mở rộng quy mô, sao chép và phân bổ tài nguyên trong Kubernetes. Chúng cho phép chúng ta mở rộng quy mô theo chiều ngang bằng cách tạo nhiều bản sao của nhóm, giúp xử lý công việc tăng lên một cách hiệu quả.
5. Trạng thái của một pod trong Kubernetes
Trạng thái của một pod trong Kubernetes có thể là một trong các trạng thái sau:
- Đang chờ xử lý (Pending): Tạo thành công Pod trong Cluster, nhưng một hoặc nhiều container không chạy.
- Đang chạy (Running): Pod đã được nhúng vào một node với tất cả các container của nó được tạo, chạy hoặc khởi động lại.
- Thành công (Succeeded): Các container của pod đã kết thúc thành công và pod sẽ không khởi động lại.
- Không thành công (Failed): Một container trong các pod không thể kết thúc hoặc xóa. Tất cả các pod đã kết thúc sẽ có trạng thái bằng không. Bất kỳ trạng thái khác được coi là thất bại.
- Không xác định (Unknown): Bộ điều khiển không thể xác định trạng thái của pod.
6. Pod Networking
Trong Kubernetes, mỗi pod có một địa chỉ IP riêng sử dụng để giao tiếp. Các container trong pod có thể giao tiếp với nhau thông qua localhost vì chúng chia sẻ cùng một không gian mạng, địa chỉ IP và cổng mạng. Tuy nhiên, chúng cũng có thể sử dụng bộ nhớ chung và các semaphores SystemV để tương tác giữa các tiến trình.
Ngoài ra, các container cũng có thể giao tiếp với các container khác đang hoạt động trong các pod Kubernetes khác nhau. Vì mỗi pod có một địa chỉ IP riêng biệt và ngăn chặn giao tiếp cấp hệ điều hành nên nếu muốn giao tiếp chúng phải sử dụng mạng IP.
POD network là mạng nội bộ ảo trải dài qua tất cả các node trong cluster mà tất cả các pod kết nối với nhau thông qua mạng này
7. Các thao tác với POD
– Liệt kê các Pod trong hệ thống:
controlplane ~ ✖ kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 36s newpods-tmst8 1/1 Running 0 10s newpods-szxrd 1/1 Running 0 10s newpods-ljt98 1/1 Running 0 10s
– Tạo một pod với image=nginx:
controlplane ~ ✖ kubectl run nginx --image=nginx pod/nginx created controlplane ~ ➜ kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 9s
– Xem thông tin của pod:
controlplane ~ ➜ kubectl describe pod newpods-tmst8 Name: newpods-tmst8 Namespace: default Priority: 0 Service Account: default Node: controlplane/192.168.87.206 Start Time: Sun, 02 Jun 2024 08:11:50 +0000 Labels: tier=busybox Annotations: <none> Status: Running IP: 10.42.0.11 IPs: IP: 10.42.0.11 Controlled By: ReplicaSet/newpods Containers: busybox: Container ID: containerd://30a8dd3d4b2757feb474290f5bd861aa8be5c671b699090c1c1c99b260ccf933 Image: busybox Image ID: docker.io/library/busybox@sha256:5eef5ed34e1e1ff0a4ae850395cbf665c4de6b4b83a32a0bc7bcb998e24e7bbb Port: <none> Host Port: <none> Command: sleep 1000 State: Running Started: Sun, 02 Jun 2024 08:11:52 +0000 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-r2fcc (ro) Conditions: Type Status PodReadyToStartContainers True Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-r2fcc: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 96s default-scheduler Successfully assigned default/newpods-tmst8 to controlplane Normal Pulling 96s kubelet Pulling image "busybox" Normal Pulled 95s kubelet Successfully pulled image "busybox" in 678ms (678ms including waiting) Normal Created 95s kubelet Created container busybox Normal Started 95s kubelet Started container busybox
– Xóa một pod:
controlplane ~ ➜ kubectl delete pod nginx pod "nginx" deleted
– Chỉnh sửa một pod:
kubectl edit pod redis kubectl apply -f redis-definition.yaml
Hy vọng rằng bài viết này đã giúp bạn nắm vững những kiến thức cơ bản của POD trong Kubernetes. Cảm ơn bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.
Bài viết liên quan: