Sử dụng Kustomize

Tram Ho

P1. Kustomize là gì?

Helm hỗ trợ chỉnh sửa nâng cao từng vị trí của yaml trên 1 môi trường nhất định. Kustomize lại có điểm mạnh là hỗ trợ nhiều môi trường (prod, stag, dev1, dev2…..) qua việc dùng overlays. (Ngoài ra, ta vẫn có thể kết hợp kustomize và helm cùng nhau)

  1. Cài đặt

  1. Cấu trúc thư mục của Kustomize

  1. Hướng dẫn tạo kustomization.yaml

YAML mẫu toàn bộ bài viết, các bạn có thể tham khảo ở đây https://github.com/worldhello12/kustomize-sample

P2: Resources

Khái niệm: Resources gồm 1 hoặc nhiều file .yaml k8s > Là đầu vào input cho kustomize xào nấu.

Ví dụ về sử dụng Resources

  1. Sửa file kustomization.yaml vừa init

  1. Chuẩn bị deployment và service mẫu: api-depl.yaml và api-service.yaml

  1. Chạy Test build Kustomize

P3: Transformer common

(tham khảo: https://github.com/kubernetes-sigs/kustomize/tree/master/examples/transformerconfigs)

Kustomize hỗ trợ transformer chuyển đổi những loại dưới đây:

Ta đi vào ví dụ về transformer:

Bước 1. Chuẩn bị deployment và service mẫu (api-depl.yaml và api-service.yaml)

Bước 2. Sửa kustomization.yaml

Kết quả:

P3: Overlays-base

Khái niệm: Để phân tách các tham số theo từng môi trường (prod/stag/dev). Ta có thể sử dụng overlays của kustomize.

Trong đó những tham số chung sẽ đặt trong thư mục “base”, những cấu hình riêng của từng môi trường (như số replicas, secret-configmap) sẽ đặt trong thư mục “overlays”

1. Tạo cây thư mục cơ bản

2. Sửa kustomization.yaml trong cả 3 thư mục con của overlays (prod/stag/dev) với nội dung như sau

3. Tạo config-map.yaml ứng với từng môi trường

4. Chạy kustomize kiểm tra khai báo BASE đã đúng chưa

Kết quả: Mỗi môi trường ta đều deploy api-depl.yaml và api-service.yaml, nhưng config-map.yaml tài khoản và mật khẩu sẽ khác nhau từng môi trường

P4: Patches

(Tham khảo:)

Jsonpath6902: https://github.com/kubernetes-sigs/kustomize/blob/master/examples/jsonpatch.md

Strategic merge: https://fabianlee.org/2022/04/18/kubernetes-kustomize-transformations-with-patchesstrategicmerge/

Patches có 3 chức năng chỉnh sửa vào yaml k8s: replace, delete, add

Ví dụ 1: Replace patch

Đề bài đặt ra:

Bài giải: Có 2 cách là dùng Json6092 hoặc Strategic Merge Patch

Cách giải 1: Json6902 patch

Kết quả:


> các kết quả ở stag, dev các bạn tự chạy (kustomize build .) nhé.

Cách giải 2: Strategic merge patch

Kết quả


Ta có thể áp dụng kustomize patches để thay thế bất kì tham số nào ta muốn: vd trong services chuyển type NodePort/ClusterIP/Balance theo từng môi trường

Ví dụ 2: Add patch

Kết quả chung cả 2 cách:

Ví dụ 3: Delete patch

P6: Component

(Tham khảo: https://github.com/kubernetes-sigs/kustomize/blob/master/examples/components.md)

Mục đích của Component sinh ra là tái sử dụng các thành phần cần dùng lại cho từng môi trường. VD ta có bảng sau

OverlaysExternal-DB historyCache
prodYesYes
stagNoYes
devOptionOption

Như bảng trên.

  • Prod cần DB phụ để lưu trữ data lịch sử người dùng, và cache để tăng load dữ liệu từ ram
  • Stag không cần DB lưu lượng lớn dữ liệu lịch sử, cần cache để test hiệu năng
  • Dev có thể add thêm DB và Cache nếu cần test, hoặc ko có cũng đc.
    Ta sẽ thiết kế component file như sau:

Sửa file kustomization.yaml theo từng môi trường. (Yaml mẫu: https://github.com/worldhello12/kustomize-sample/tree/main/05.component )

File components/external_db/kustomization.yaml. Ta chú ý kind, apiVersion sẽ là Component

Chạy kustomize build trên cả 3 môi trường , ta sẽ có kết quả như bảng.

OverlaysExternal-DB historyCache
prodYesYes
stagNoYes
devOptionOption

.

Bài viết trong phạm vi kiến thức của người soạn, nếu bạn có cách giải hay hơn xin giới thiệu, góp ý. cảm ơn.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo