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
- Mở trình chỉnh sửa Cloud Shell bằng cách truy cập URL sau
https://ide.cloud.google.com
- 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
- 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.
- Để 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
- 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
- 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
- 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
.
- 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
- 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ở.
- 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
- 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
- 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.
- 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
- 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ở.
- 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
- 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.
- Tạo thư mục shared-kustomize
mkdir shared-kustomize
- 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
- Tạo một kustomization.yaml trong thư mục dùng chung
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- 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
- 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)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>