0
0
Lập trình
Admin Team
Admin Teamtechmely

Triển Khai DaemonSets trong Google Kubernetes Engine (GCP)

Đăng vào 4 tháng trước

• 4 phút đọc

Hướng Dẫn Triển Khai DaemonSets trong Google Kubernetes Engine (GCP)

Giới Thiệu

Khi bạn làm việc với các Deployments trong Kubernetes, bạn sẽ nhận thấy chúng rất hiệu quả trong việc chạy các workloads trên nhiều Pods. Nhưng nếu bạn cần một Pod chạy trên mỗi Node trong cụm của mình thì sao? Đó chính là lúc DaemonSets phát huy tác dụng!

DaemonSets là một trong những thành phần quan trọng trong Kubernetes, cho phép bạn đảm bảo rằng một Pod cụ thể chạy trên mọi Node của cụm. Điều này cực kỳ hữu ích cho các tác vụ cần được thực hiện trên mỗi Node, chẳng hạn như thu thập log, giám sát và quản lý lưu trữ.

DaemonSet Là Gì?

Định Nghĩa

Một DaemonSet đảm bảo rằng:

  • Mỗi Node trong cụm của bạn chạy một bản sao của một Pod cụ thể.
  • Khi có Node mới được thêm vào, Kubernetes tự động đặt Pod trên đó.
  • Khi các Node bị xóa, các Pod tương ứng cũng sẽ bị xóa theo.
  • Xóa một DaemonSet sẽ làm sạch tất cả các Pods mà nó đã tạo ra.

Hãy nghĩ về DaemonSet như một quy tắc bất di bất dịch:

👉 “Một Pod trên mỗi Node — luôn luôn.”

Các Tình Huống Thực Tế Sử Dụng DaemonSets

DaemonSets không dành cho việc chạy ứng dụng của người dùng. Thay vào đó, chúng được sử dụng cho các tác vụ cấp cụm như:

  • 📦 Daemon Quản Lý Lưu Trữ
    Ví dụ: Chạy một agent lưu trữ như Ceph hoặc GlusterFS trên mỗi Node.

  • 📜 Daemon Thu Thập Log
    Ví dụ: Chạy Fluentd, Logstash hoặc Filebeat trên mỗi Node để thu thập và gửi log.

  • 📊 Daemon Giám Sát
    Ví dụ: Chạy Prometheus Node Exporter hoặc Datadog Agent trên mỗi Node để thu thập thông tin về CPU, bộ nhớ và đĩa.

Cách Triển Khai DaemonSets

Bước 1: Tạo Tệp daemonset.yaml

Tạo một tệp có tên là daemonset.yaml với nội dung sau:

yaml Copy
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: myapp1-daemonset
  namespace: default
  labels:
    app: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: ghcr.io/stacksimplify/kubenginx:1.0.0

Bước 2: Triển Khai và Xác Minh

Chạy các lệnh sau để triển khai và xác minh DaemonSet:

bash Copy
# Triển khai tài nguyên Kubernetes
kubectl apply -f kube-manifests/daemonset.yaml

# Xác minh DaemonSet
kubectl get daemonset
kubectl get ds

# Xác minh Pods
kubectl get pods -o wide

# Quan sát:
1. Kiểm tra xem các Pods có được lên lịch trên các Node trong NodePool: linuxapps-nodepool hay không.

Bước 3: Dọn Dẹp

Để xóa DaemonSet và Node pool, bạn có thể chạy các lệnh sau:

bash Copy
# Xóa tài nguyên Kubernetes
kubectl delete -f kube-manifests/daemonset.yaml

# Xóa Node pool
gcloud container node-pools delete "linuxapps-nodepool" \
  --cluster "standard-public-cluster-1" \
  --location "us-central1"

Tóm Tắt Nhanh

  • DaemonSets đảm bảo rằng Pods chạy trên mọi Node trong cụm của bạn.
  • Rất hữu ích cho các dịch vụ cấp hệ thống như ghi log, giám sát và lưu trữ.
  • Tự động mở rộng theo cụm của bạn (thêm/xóa Node).

✅ Đó là tất cả! Giờ đây bạn đã biết khi nào và tại sao nên sử dụng DaemonSets trong Kubernetes.

Các Thực Hành Tốt Nhất

  • Kiểm tra lại cấu hình: Trước khi triển khai, hãy đảm bảo rằng cấu hình của bạn chính xác và không có lỗi cú pháp.
  • Giám sát hiệu suất: Sử dụng các công cụ giám sát để theo dõi hiệu suất của các Pods do DaemonSet quản lý.

Những Cạm Bẫy Thường Gặp

  • Quá tải Node: Nếu bạn triển khai quá nhiều Pods từ DaemonSet, có thể dẫn đến quá tải tài nguyên trên Node.
  • Xung đột Port: Đảm bảo rằng các Pods không sử dụng cùng một port trên Node.

Mẹo Tối Ưu Hiệu Suất

  • Sử dụng hình ảnh nhẹ: Đảm bảo rằng hình ảnh Docker của bạn nhẹ để giảm thời gian khởi động và sử dụng tài nguyên.
  • Tối ưu hóa cấu hình: Tinh chỉnh các tham số cấu hình để phù hợp với nhu cầu cụ thể của bạn.

Khắc Phục Sự Cố

  • Pod không chạy: Kiểm tra logs của Pod để xác định lý do tại sao nó không khởi động.
  • Node không nhận Pod: Đảm bảo rằng Node không bị gắn nhãn hoặc bị loại trừ khỏi DaemonSet.

Câu Hỏi Thường Gặp (FAQ)

1. DaemonSet có thể chạy nhiều Pod trên một Node không?
Không, mỗi DaemonSet chỉ chạy một Pod trên mỗi Node.

2. Tôi có thể xóa một Pod trong DaemonSet không?
Có, nhưng Kubernetes sẽ tự động tạo lại Pod đó để đảm bảo rằng tổng số Pods vẫn đúng với cấu hình DaemonSet.

3. DaemonSets có ảnh hưởng đến các Pods khác không?
DaemonSets có thể ảnh hưởng đến tài nguyên sẵn có của Node, hãy theo dõi hiệu suất sau khi triển khai.

Kết Luận

DaemonSets là một công cụ mạnh mẽ trong Kubernetes, giúp bạn quản lý các tác vụ cần thiết trên từng Node trong cụm. Bằng cách áp dụng những kiến thức và thực hành này, bạn có thể tối ưu hóa hệ thống của mình và đảm bảo rằng mọi thứ hoạt động trơn tru.

🌟 Cảm ơn bạn đã đọc! Nếu bài viết này hữu ích, hãy để lại một like ❤️, theo dõi hoặc chia sẻ để tôi có động lực tạo ra nhiều nội dung hơn nữa.

— Latchu | Kỹ Sư DevOps & Điện Toán Đám Mây
☁️ AWS | GCP | ☸️ Kubernetes | 🔐 Bảo Mật | ⚡ Tự Động Hóa
📌 Chia sẻ hướng dẫn thực tế, thực hành tốt nhất & giải pháp đám mây thực tế.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào