Bài viết thuộc series Kubernetes cơ bản
Giới thiệu
Ở bài trước ta đã tìm hiểu Kubernetes là gì. Trong bài này ta cùng nói về thành phần cơ bản nhất để triển khai ứng dụng lên trên K8S là Pod.
Pod là gì?
Pod là thành phần cơ bản nhất để triển khai và chạy một ứng dụng lên 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 Server. Những container trong một pod chia sẻ chung tài nguyên với nhau.
Vậy tại sao là lại dùng Pod để chạy Container mà không chạy Container trực tiếp?
Kubernetes dùng Pod như một phiên bản nâng cao của Container. Pod cung cấp thêm nhiều chức năng để quản lý và chạy một Container, hỗ trợ Container hoạt động tốt hơn là chạy container trực tiếp bằng Docker. Một vài tính năng nổi bật:
- Tính năng nhóm tài nguyên của Container
- Kiểm tra Container có đang hoạt động hay không, nếu không thì restart
- Tính năng kiểm tra và chắc chắn ứng dụng trong Container đã chạy thì mới gửi yêu cầu xử lý tới Container
- Cung cấp một số Lifecycle để có thể thêm hành động vào Pod khi Pod khởi động
Chạy ứng dụng đầu tiên bằng Pod
Ta bắt tay vào thực hành triển khai ứng dụng đầu tiên bằng Pod. Tạo một tệp tin tên là index.js
với nội dung sau:
const http = require("http");
const server = http.createServer((req, res) => {
res.end("Hello kube\n")
});
server.listen(3000, () => {
console.log("Server listen on port 3000")
})
Tạo file Dockerfile
với nội dung:
FROM node:14-alpine
WORKDIR /app
COPY index.js .
ENTRYPOINT [ "node", "index" ]
Chạy câu lệnh xây Container Image:
docker build . -t 080196/hello-kube
Kiểm tra Container ta vừa xây bằng câu lệnh:
docker run -d --name hello-kube -p 3000:3000 080196/hello-kube
Gửi request tới Container:
curl localhost:3000
Hello kube
Nếu in ra được chữ hello kube
thì ứng dụng trong Container đã chạy được. Nhớ xóa container đi:
docker rm -f hello-kube
Tiếp theo ta dùng Pod để chạy Container. Các bạn có thể sử dụng Image 080196/hello-kube
của mình hoặc tạo Image của riêng các bạn theo hướng dẫn ở đây.
Tạo một tệp tin tên là hello-kube.yaml
:
apiVersion: v1 # Descriptor conforms to version v1 of Kubernetes API
kind: Pod # Select Pod resource
metadata:
name: hello-kube # The name of the pod
spec:
containers:
- image: 080196/hello-kube # Image to create the container
name: hello-kube # The name of the container
ports:
- containerPort: 3000 # The port the app is listening on
protocol: TCP
Thường thì ta không chạy Pod trực tiếp mà sử dụng các resource khác của K8S để chạy Pod. Ta tìm hiểu ở các bài sau
Dùng kubectl
CLI để tạo Pod:
kubectl apply -f hello-kube.yaml
Để kiểm tra Pod đã chạy hay chưa ta dùng câu lệnh get pod
:
kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-kube 1/1 Running 0 21s
Nếu cột status
hiện Running thì Pod đã chạy thành công, status
ContainerCreating là Pod đang được tạo.
Tiếp theo chúng ta kiểm tra ứng dụng trong Pod đã chạy chưa. Để kiểm tra ta cần phải mở port của Pod cho nó có thể nhận request từ bên ngoài. Vì mặc định khi Pod được tạo nó sẽ không mở port để nhận bất kì traffic nào.
Có 2 cách để mở port của Pod ra ngoài, dùng Service Resource (ta tìm hiểu ở các bài tiếp theo) hoặc dùng kubectl port-forward
. Ở bài này ta dùng port-forward
:
kubectl port-forward pod/hello-kube 3000:3000
Forwarding from 127.0.0.1:3000 -> 3000
Forwarding from [::1]:3000 -> 3000
Gửi request tới Pod:
curl localhost:3000
Hello kube
Nếu in ra được chữ Hello kube
thì Pod đã chạy đúng. Để xóa Pod ta chạy câu lệnh delete
:
kubectl delete pod hello-kube
pod "hello-kube" deleted
Kết luận
Vậy là ta đã triển khai chạy ứng dụng đâu tiên bằng Pod thành công. Pod là thành phần đơn giản nhất và là thành phần chính của Kubernetes để chạy Container.
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?