Kubenetes Deployments là gì? Lợi ích, cách hoạt động

Giả sử bây giờ mình muốn triển khai nhiều ứng dụng, hoặc là mình cần cập nhật một phiên bản mới. Tuy nhiên, khi cập nhật mình không muốn cập nhật hết cùng một lúc vì nó sẽ ảnh hưởng đến user. Và đôi khi trong quá trình cập nhật, mình gặp phải một số lỗi không mong muốn thì mình sẽ muốn khôi phục lại, hoặc là mình sẽ cập nhật nhưng mà mình lại không muốn nó khả dụng luôn, những vấn đề này nó sẽ liên quan đến Deployment K8s. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về Kubernetes Deployment là gì, cách hoạt động và triển khai.

Xem thêm:

Containerd là gì ? So sánh Docker và Containerd

Container runtime là gì ? 2 loại phổ biến

1. Kubernetes Deployment là gì?

Kubernetes Deployment là một resource trong Kubernetes đóng vai trò quan trọng trong việc quản lý và cập nhật một version mới của ứng dụng. Deployment cho phép nâng cấp các phiên bản một cách liền mạch, mang lại khả năng linh hoạt và kiểm soát tuyệt đối trong quá trình phát triển và triển khai ứng dụng.

Kubernetes Deployment là gì?

2. Lợi ích của Deployment

  • Nâng cấp liền mạch: Deployment cung cấp hai cách triển khai chính: Recreate và RollingUpdate. Cả hai đều được thực hiện tự động, giúp quá trình nâng cấp trở nên đơn giản và hiệu quả.
  • Hoàn tác thay đổi: Lịch sử các phiên bản được lưu trữ, bạn có thể dễ dàng hoàn tác các thay đổi bằng cách rollback về phiên bản trước đó.
  • Tạm dừng và tiếp tục: Bạn có thể tạm dừng quá trình triển khai và tiếp tục khi cần thiết.
  • Quản lý Pod: Deployment quản lý các Pod trong k8s. Tự động thay thế các Pod bị lỗi bằng các Pod mới, đảm bảo ứng dụng luôn sẵn sàng.

3. Cách hoạt động

Deployment hoạt động dựa trên các template ( file định nghĩa về cấu hình và thiết lập của Pod). Khi template thay đổi, Deployment sẽ tự động tạo các Pod mới với cấu hình cập nhật và thay thế các Pod cũ.

Như trong hình ở dưới, Deployment sẽ tạo ra các ReplicaSet để quản lý các Pod.

ReplicaSet sẽ tạo và quản lý các Pod dựa trên template được định nghĩa trong Deployment.

Các Pod sẽ chạy các container.

Kubernetes Deployment

deployments.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-1
spec:
  replicas: 2
  selector:
    matchLabels:
      name: busybox-pod
  template:
    metadata:
      labels:
        name: busybox-pod
    spec:
      containers:
      - name: busybox-container
        image: busybox888
        command:
        - sh
        - "-c"
        - echo Hello Kubernetes! && sleep 3600

4. Các thao tác với Kubernetes Deployments

– How many Deployments exist on the system?

controlplane ~ ➜  kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
frontend-deployment   0/4     4            0           6s

Create a new Deployment with the below attributes using your own deployment definition file.

Name: httpd-frontend;
Replicas: 3;
Image: httpd:2.4-alpine

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpd-frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      name: httpd-frontend
  template:
    metadata:
      labels:
        name: httpd-frontend
    spec:
      containers:
      - name: httpd-frontend
        image: httpd:2.4-alpine

5. Các cách deployment

Recreate: Xoá bỏ tất cả các phiên bản cũ trước, khi triển khai phiên bản mới. Gây gián đoạn dịch vụ trong quá trình chuyển đổi.

Rolling Update: Cập nhật từng phiên bản một, đảm bảo dịch vụ luôn hoạt động.

Rolling Update and Recreate

Recreate: Các sự kiện sẽ cho thấy replica set cũ bị thu nhỏ xuống 0 trước, sau đó replica set mới được mở rộng lên 5.

Rolling Update: Các sự kiện sẽ cho thấy replica set cũ và mới được thu nhỏ và mở rộng từng phần một cách đồng thời.

Rolling Update and Recreate

6. Rollout

Ngoài ra, Khi tạo Deployment, một Rollout mới được kích hoạt. Mỗi Rollout tạo ra một phiên bản mới của Deployment, được gọi là Revision.Mỗi lần cập nhật ứng dụng, một Rollout mới sẽ được tạo ra, tạo thành một Revision mới.

Lợi ích: Giúp theo dõi các thay đổi trong Deployment và cho phép Rollback về phiên bản trước.

Rollout

7. Rollback

Khái niệm: Quay lại phiên bản trước của Deployment từ đó tạo ra số lượng Pod cần thiết để đáp ứng số lượng

Kết quả: Các pod trong replica set mới sẽ bị xoá, các pod trong replica set cũ sẽ được khởi động lại.

Khi nâng cấp ứng dụng, Deployment sẽ tạo ra một replica set mới, triển khai Pod mới và đồng thời loại bỏ các pod trong replica set cũ.

Rollback

Cảm ơn các bạn đã tham khảo kubernetes cơ bản trên ttnguyen.net.

Bài viết liên quan:

Imperative và Declarative trong K8S

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em