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
- 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
- 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
- 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.
- Để 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
deployment.yamlkubernetes đơ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
- Tạo
kustomization.yamlcơ 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
- 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.
- 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
- 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ở.
- 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
- 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á 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.
- 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
- 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ở.
- 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 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.
- 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 đế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
- 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>