Bỏ qua

21.kubectlAppy

1. Bí mật nằm ở "Cuộc so sánh Ba bên" 🕵️‍♂️

Sự "thông minh" của kubectl apply không phải là ma thuật, mà là một quy trình so sánh rất logic dựa trên 3 nguồn thông tin:

  1. File Cấu hình Cục bộ (Local File):

  2. Đây là file YAML trên máy của bạn, định nghĩa trạng thái bạn mong muốn.

  3. Cấu hình "Sống" (Live Configuration):

  4. Đây là trạng thái hiện tại của object đang chạy trên cụm Kubernetes (được lưu trong etcd).

  5. Cấu hình đã áp dụng lần cuối (Last Applied Configuration):

  6. Đây là một "ảnh chụp" của file YAML từ lần cuối cùng bạn chạy kubectl apply. Nó được lưu lại để tham chiếu.

kubectl apply sẽ nhìn vào cả ba nguồn này để quyết định phải làm gì.


2. Luồng hoạt động của apply

a. Khi chạy apply lần đầu (Tạo mới)

  1. Bạn chạy kubectl apply -f my-pod.yaml.
  2. apply thấy object này chưa tồn tại, nó sẽ tạo mới object đó trên cụm.
  3. Bước đặc biệt: Sau khi tạo, apply sẽ lấy nội dung file my-pod.yaml của bạn, chuyển nó sang định dạng JSON và lưu nó như một annotation ngay trên object vừa tạo. Cái annotation này chính là "Last Applied Configuration".

b. Khi chạy apply để cập nhật hoặc xóa một trường

  1. Bạn chỉnh sửa file YAML cục bộ của mình (ví dụ: đổi image hoặc xóa một label).
  2. Bạn chạy lại kubectl apply -f my-pod.yaml.
  3. apply bắt đầu so sánh:
  4. Để cập nhật một trường: Nó so sánh file local của bạn với cấu hình "sống". Thấy có sự khác biệt, nó sẽ cập nhật cấu hình "sống".
  5. Để XÓA một trường (Đây là lúc "Last Applied Configuration" tỏa sáng ✨):
    • apply thấy trường đó đã biến mất khỏi file local của bạn.
    • Nó sẽ nhìn vào "Last Applied Configuration" và thấy: "Ồ, lần trước cái trường này có tồn tại".
    • Từ đó, nó suy ra rằng bạn đã cố ý xóa trường này, và nó sẽ tiến hành xóa trường đó khỏi cấu hình "sống".
  6. Sau khi mọi thay đổi hoàn tất, apply sẽ lại cập nhật annotation "Last Applied Configuration" với nội dung mới nhất từ file local của bạn.

3. "Last Applied Configuration" được lưu ở đâu? 🤫

  • Nó được lưu trữ dưới dạng một annotation trên chính object đang chạy trên cụm.
  • Tên của annotation đó là: kubectl.kubernetes.io/last-applied-configuration.

4. Lời cảnh báo quan trọng: Đừng "Lai căng"! ⚠️

  • Chỉ có lệnh kubectl apply mới tạo ra và sử dụng annotation "Last Applied Configuration".
  • Các lệnh mệnh lệnh như kubectl create hay kubectl replace hoàn toàn không quan tâm đến annotation này.
  • Do đó, bạn không nên trộn lẫn hai phương pháp này trên cùng một object. Nếu bạn đã bắt đầu quản lý một object bằng apply, hãy luôn dùng apply cho nó về sau. Nếu bạn dùng replace xen vào, apply sẽ bị "bối rối" ở lần chạy tiếp theo và có thể gây ra kết quả không mong muốn.

5. "Chốt hạ" cho Kỳ thi CKA 📝

  • kubectl apply "thông minh" vì nó thực hiện phép so sánh ba bên (local, live, last-applied).
  • Hiểu rõ vai trò của last-applied-configuration annotation, đặc biệt là trong việc phát hiện các trường bị xóa.
  • Không được trộn lẫn việc sử dụng apply với create/replace trên cùng một object. Hãy chọn một trường phái và theo nó đến cùng!

Bình luận