Mở rộng quy mô bằng Kustomize

1. Mục tiêu

Kustomize là một công cụ giới thiệu cách tuỳ chỉnh cấu hình ứng dụng mà không cần dùng mẫu, giúp đơn giản hoá việc sử dụng các ứng dụng có sẵn. Công cụ này có sẵn dưới dạng một phần mềm tiện ích độc lập và được tích hợp vào kubectl thông qua kubectl apply -k của có thể được dùng làm CLI độc lập. Để biết thêm thông tin chi tiết, hãy đọc thêm tại kustomize.io.

Trong hướng dẫn này, bạn sẽ tìm hiểu một số khái niệm cốt lõi của Kustomize và sử dụng công cụ này để quản lý các biến thể trong ứng dụng và môi trường.

Bạn sẽ:

  • Sử dụng ứng dụng dòng lệnh kustomize
  • Ghi đè các phần tử phổ biến
  • Áp dụng bản vá cho các cấu trúc yaml lớn hơn
  • Sử dụng nhiều lớp lớp phủ

2. Chuẩn bị không gian làm việc

  1. Mở trình chỉnh sửa Cloud Shell bằng cách truy cập vào URL sau

https://ide.cloud.google.com

  1. Trong cửa sổ dòng lệnh, hãy tạo một thư mục đang làm việc cho hướng dẫn này

mkdir kustomize-lab

  1. Thay đổi thành thư mục và đặt không gian làm việc IDE

cd kustomize-lab && cloudshell workspace .

3. Sử dụng ứng dụng dòng lệnh kustomize

Sức mạnh của kustomize đến từ khả năng phủ và sửa đổi các tệp yaml Kubernetes cơ sở bằng các giá trị tuỳ chỉnh. Để thực hiện việc này, kustomize yêu cầu một tệp cơ sở có hướng dẫn về vị trí của các tệp và nội dung cần ghi đè. Kustomize được đưa vào hệ sinh thái Kubernetes và có thể được thực thi thông qua nhiều phương thức.

Trong phần này, bạn sẽ tạo một cấu hình kustomize cơ sở và xử lý các tệp bằng ứng dụng dòng lệnh kustomize độc lập.

  1. Để bắt đầu, bạn sẽ tạo một thư mục để lưu giữ các tệp cấu hình cơ sở

mkdir -p chat-app/base

  1. Tạo một deployment.yaml kubernetes đơn giản trong thư mục cơ sở

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

  `name: chat-app`

`spec:`

  `containers:`

  `- name: chat-app`

    `image: chat-app-image`

EOF

  1. Tạo kustomization.yaml cơ sở

Kustomize tìm kiếm một tệp có tên là kustomization.yaml làm điểm truy cập. Tệp này chứa các tham chiếu đến nhiều tệp cơ sở và tệp ghi đè, cũng như các giá trị ghi đè cụ thể.

Tạo một tệp kustomization.yaml tham chiếu đến deployment.yaml làm tài nguyên cơ sở.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Chạy lệnh kustomize trên thư mục cơ sở. Thao tác này sẽ xuất các tệp YAML triển khai mà không có thay đổi nào, điều này là dự kiến vì bạn chưa đưa vào bất kỳ biến thể nào.

kustomize build chat-app/base

Bạn có thể kết hợp ứng dụng độc lập này với ứng dụng kubectl để áp dụng trực tiếp kết quả đầu ra như trong ví dụ sau. Thao tác này sẽ truyền trực tiếp kết quả đầu ra của lệnh xây dựng vào lệnh kubectl apply.

(Không thực thi – Chỉ dùng để tham khảo)

kustomize build chat-app/base | kubectl apply -f -

Kỹ thuật này hữu ích nếu bạn cần một phiên bản cụ thể của ứng dụng kustomize.

Ngoài ra, bạn có thể thực thi kustomize bằng công cụ được tích hợp trong chính kubectl. Như trong ví dụ sau.

(Không thực thi – Chỉ dùng để tham khảo)

kubectl apply -k chat-app/base

4. Ghi đè các phần tử phổ biến

Bây giờ, khi không gian làm việc của bạn đã được định cấu hình và bạn đã xác minh rằng kustomize đang hoạt động, đã đến lúc ghi đè một số giá trị cơ sở.

Hình ảnh, không gian tên và nhãn thường được tuỳ chỉnh cho từng ứng dụng và môi trường. Vì chúng thường được thay đổi, nên Kustomize cho phép bạn khai báo trực tiếp trong kustomize.yaml, loại bỏ nhu cầu tạo nhiều bản vá cho các tình huống phổ biến này.

Kỹ thuật này thường được dùng để tạo một thực thể cụ thể của mẫu. Giờ đây, bạn có thể sử dụng một tập hợp tài nguyên cơ sở cho nhiều cách triển khai bằng cách chỉ cần thay đổi tên và không gian tên của tập hợp đó.

Trong ví dụ này, bạn sẽ thêm một không gian tên, tiền tố tên và thêm một số nhãn vào kustomization.yaml.

  1. Cập nhật tệp kustomization.yaml để đưa vào các nhãn và không gian tên phổ biến.

Sao chép và thực thi các lệnh sau trong dòng lệnh

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. Thực thi lệnh xây dựng

Việc thực thi bản dựng tại thời điểm này cho thấy rằng tệp YAML kết quả hiện chứa không gian tên, nhãn và tên có tiền tố trong cả định nghĩa dịch vụ và định nghĩa triển khai.

kustomize build chat-app/base

Lưu ý cách kết quả đầu ra chứa các nhãn và không gian tên không có trong tệp YAML triển khai. Cũng lưu ý cách tên đã được thay đổi từ chat-app thành my-chat-app

(Không sao chép kết quả đầu ra)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Áp dụng bản vá cho các cấu trúc yaml lớn hơn

Kustomize cũng cung cấp khả năng áp dụng các bản vá phủ lên các tài nguyên cơ sở. Kỹ thuật này thường được dùng để cung cấp sự thay đổi giữa các ứng dụng và môi trường.

Trong bước này, bạn sẽ tạo các biến thể môi trường cho một ứng dụng sử dụng cùng một tài nguyên cơ sở.

  1. Bắt đầu bằng cách tạo các thư mục cho các môi trường khác nhau

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. Viết bản vá giai đoạn bằng lệnh sau

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: dev`

EOF

  1. Bây giờ, hãy viết bản vá prod bằng lệnh sau

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: prod`

EOF

Lưu ý rằng các bản vá ở trên không chứa tên hình ảnh vùng chứa. Giá trị đó được cung cấp trong base/deployment.yaml mà bạn đã tạo ở bước trước. Tuy nhiên, các bản vá này chứa các biến môi trường duy nhất cho dev và prod.

  1. Triển khai các tệp YAML kustomize cho thư mục cơ sở

Viết lại kustomization.yaml cơ sở, xoá không gian tên và tiền tố tên vì đây chỉ là cấu hình cơ sở mà không có biến thể. Các trường đó sẽ được chuyển đến các tệp môi trường trong chốc lát.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Triển khai các tệp YAML kustomize cho thư mục dev

Bây giờ, hãy triển khai các biến thể cho dev và prod bằng cách thực thi các lệnh sau trong dòng lệnh.

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

Lưu ý việc bổ sung phần patches: của tệp. Điều này cho biết rằng kustomize sẽ phủ các tệp đó lên trên các tài nguyên cơ sở.

  1. Triển khai các tệp YAML kustomize cho thư mục prod

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Chạy kustomize để hợp nhất các tệp

Khi các tệp cơ sở và tệp môi trường được tạo, bạn có thể thực thi quy trình kustomize để vá các tệp cơ sở.

Chạy lệnh sau cho dev để xem kết quả hợp nhất.

kustomize build chat-app/dev

Lưu ý rằng kết quả đầu ra chứa các kết quả hợp nhất như nhãn từ cấu hình cơ sở và cấu hình dev, cũng như tên hình ảnh vùng chứa từ cơ sở và biến môi trường từ các thư mục dev.

6. Sử dụng nhiều lớp lớp phủ

Nhiều tổ chức có một nhóm giúp hỗ trợ các nhóm ứng dụng và quản lý nền tảng. Thông thường, các nhóm này sẽ muốn đưa vào các thông tin chi tiết cụ thể sẽ được đưa vào tất cả các ứng dụng trên tất cả các môi trường, chẳng hạn như một tác nhân ghi nhật ký.

Trong ví dụ này, bạn sẽ tạo một thư mục shared-kustomize và các tài nguyên sẽ được đưa vào tất cả các ứng dụng và bất kể ứng dụng nào được triển khai trong môi trường.

  1. Tạo thư mục shared-kustomize

mkdir shared-kustomize

  1. Tạo một deployment.yaml đơn giản trong thư mục dùng chung

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: logging-agent`

    `image: logging-agent-image`

EOF

  1. Tạo một kustomization.yaml trong thư mục dùng chung

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Tham chiếu đến thư mục shared-kustomize từ ứng dụng của bạn

Vì bạn muốn thư mục shared-kustomize là cơ sở cho tất cả các ứng dụng, nên bạn cần cập nhật chat-app/base/kustomization.yaml để sử dụng shared-kustomize làm cơ sở. Sau đó, hãy vá deployment.yaml của riêng nó ở trên cùng. Sau đó, các thư mục môi trường sẽ vá lại ở trên cùng.

Sao chép và thực thi các lệnh sau trong dòng lệnh

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. Chạy kustomize và xem kết quả hợp nhất cho dev

kustomize build chat-app/dev

Lưu ý rằng kết quả đầu ra chứa các kết quả hợp nhất từ cơ sở ứng dụng, môi trường ứng dụng và thư mục shared-kustomize. Cụ thể, bạn có thể thấy trong phần vùng chứa các giá trị từ cả ba vị trí.

(Không sao chép kết quả đầu ra)

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>