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

1. Mục tiêu

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

Trong hướng dẫn này, bạn tìm hiểu một số khái niệm chính của Kustomize và sử dụng nó để 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 thành phần phổ biến
  • Vá các cấu trúc yaml lớn hơn
  • Sử dụng nhiều 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 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 hoạt động cho hướng dẫn này

mkdir kustomize-lab

  1. Thay đổi vào thư mục và thiết lập 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 công nghệ hoá dữ liệu đến từ khả năng phủ và sửa đổi các yaml cơ sở của Kubernetes bằng các giá trị tuỳ chỉnh. Để thực hiện việc này, bạn cần có tệp cơ sở có hướng dẫn về vị trí của tệp và nội dung cần ghi đè. Kustomize được đưa vào hệ sinh thái Kubernetes và có thể được triển khai 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 kubernetes đơn giản deployment.yaml 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 thông tin 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 ra các tệp YAML triển khai mà không có thay đổi nào. Đây là điều bình thường vì bạn chưa thêm 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 để trực tiếp áp dụng dữ liệu đầu ra như trong ví dụ sau. Thao tác này sẽ truyền trực tuyến kết quả của lệnh bản dựng trực tiếp vào lệnh áp dụng kubectl.

(Không thực thi - Chỉ đưa vào để tham khảo)

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

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

Ngoài ra, bạn có thể triển khai 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ỉ đưa vào để tham khảo)

kubectl apply -k chat-app/base

4. Ghi đè các thành phần chung

Giờ đây, 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 phương thức hoá dữ liệu đ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ì các bản vá này thường được thay đổi nên Kustomize cho phép bạn khai báo trực tiếp các bản vá này trong kustomize.yaml, giúp không cần phải tạo nhiều bản vá cho các trường hợp phổ biến này.

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

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 để thêm 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 thiết bị đầu cuối

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 bản dựng

Việc thực thi bản dựng tại thời điểm này cho thấy tệp YAML thu được 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 dữ liệu đầu ra chứa các nhãn và không gian tên không có trong tệp YAML triển khai. Ngoài ra, cũng lưu ý về cách tên đã được thay đổi từ chat-app thành my-chat-app

(Dữ liệu đầu ra không sao chép)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Vá 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 tài nguyên cơ sở. Kỹ thuật này thường được dùng để tạo ra sự thay đổi giữa ứng dụng và môi trường.

Ở 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 tài nguyên cơ sở.

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

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á cho sản phẩm 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/implementation.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 riêng biệt cho nhà phát triển và sản phẩm.

  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ở không có biến thể. Các trường đó sẽ được di chuyển sang các tệp môi trường chỉ sau giây 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 nhà phát triển và nhà sản xuất bằng cách thực thi các lệnh sau trong thiết bị đầu cuối của bạn.

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

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

Lưu ý việc thêm phần patches: của tệp. Điều này cho biết rằng quá trình kustomize phải phủ các tệp đó lên trên 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 tính năng kustomize để hợp nhất các tệp

Với các tệp cơ sở và tệp môi trường đã 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 nhà phát triển để xem kết quả hợp nhất.

kustomize build chat-app/dev

Lưu ý rằng đầu ra chứa kết quả hợp nhất, chẳng hạn như nhãn từ cấu hình cơ sở và nhà phát triển, 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 hỗ trợ các nhóm phát triển ứng dụng và quản lý nền tảng. Thông thường, những nhóm này sẽ muốn đưa thông tin cụ thể vào tất cả ứng dụng trên mọi môi trường, chẳng hạn như tác nhân ghi nhật ký.

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

  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 thư mục shared-kustomize trong ứng dụng của bạn

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

Sao chép và thực thi các lệnh sau trong thiết bị đầu cuối

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ả được hợp nhất cho nhà phát triển

kustomize build chat-app/dev

Lưu ý rằng kết quả 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à các thư mục shared-kustomize. Cụ thể, bạn có thể thấy trong mục vùng chứa các giá trị từ cả ba vị trí.

(đầu ra không sao chép)

&lt;pre&gt;

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

&lt;/pre&gt;