1. Mục tiêu
Skaffold là một công cụ xử lý quy trình làm việc để tạo, đẩy và triển khai ứng dụng của bạn. Bạn có thể sử dụng Skaffold để dễ dàng thiết lập một không gian làm việc phát triển cục bộ, đơn giản hoá vòng lặp phát triển nội bộ và tích hợp với các công cụ khác như Kustomize và Helm để giúp quản lý các tệp kê khai Kubernetes.
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 Skaffold, sử dụng Skaffold để tự động hoá vòng lặp phát triển nội bộ, sau đó triển khai một ứng dụng.
Bạn sẽ:
- Định cấu hình và bật Skaffold để phát triển cục bộ
- Tạo và chạy một ứng dụng golang đơn giản
- Quản lý việc triển khai ứng dụng cục bộ bằng Skaffold
- Kết xuất tệp kê khai và triển khai ứng dụng
2. Trước khi bắt đầu
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://shell.cloud.google.com
Cho phép cookie của bên thứ ba. Nhấp vào "Trang web không hoạt động" rồi nhấp vào "Cho phép cookie".


- Nếu bạn chưa thực hiện việc này, hãy sao chép nguồn ứng dụng trong cửa sổ dòng lệnh bằng lệnh sau:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- Thay đổi thành thư mục kho lưu trữ được sao chép:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- Đặt không gian làm việc Cloud Shell thành thư mục hiện tại bằng cách chạy lệnh sau:
cloudshell workspace .
Chuẩn bị dự án
- Đảm bảo dự án Google Cloud của bạn được thiết lập đúng cách bằng cách chạy lệnh sau:
gcloud config set project {{project-id}}
3. Làm quen với Skaffold
- Chạy lệnh sau để tạo tệp cấu hình Skaffold cấp cao nhất,
skaffold.yaml:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- Mở tệp
skaffold.yamltrong ngăn IDE. Đây là tệp cấu hình cấp cao nhất xác định quy trình Skaffold.
Hãy lưu ý định dạng YAML tương tự như Kubernetes và các phần sau trong YAML:
builddeployprofiles
Các phần này xác định cách xây dựng và triển khai ứng dụng, cũng như hồ sơ cho từng mục tiêu triển khai.
Bạn có thể đọc thêm về danh sách đầy đủ các giai đoạn của Skaffold trong tài liệu về Giai đoạn của quy trình Skaffold.
4. Tạo
Phần build chứa cấu hình xác định cách ứng dụng sẽ được tạo. Trong trường hợp này, bạn có thể thấy cấu hình về cách xử lý các thẻ git, cũng như một phần artifacts xác định các hình ảnh vùng chứa tạo nên ứng dụng.
Ngoài ra, trong phần này, bạn có thể xem thông tin tham chiếu đến Dockerfile sẽ được dùng để tạo hình ảnh. Ngoài ra, Skaffold còn hỗ trợ các công cụ tạo khác như Jib, Maven, Gradle, Buildpacks gốc trên đám mây, Bazel và các tập lệnh tuỳ chỉnh. Bạn có thể đọc thêm về cấu hình này trong tài liệu về Bản dựng Skaffold.
5. Triển khai
Phần deploy chứa cấu hình xác định cách triển khai ứng dụng. Trong trường hợp này, bạn có thể xem ví dụ về một quy trình triển khai mặc định định cấu hình Skaffold để sử dụng công cụ Kustomize.
Công cụ Kustomize cung cấp chức năng tạo tệp kê khai Kubernetes bằng cách kết hợp một nhóm tệp YAML thành phần chung (trong thư mục base) với một hoặc nhiều "lớp phủ" thường tương ứng với một hoặc nhiều mục tiêu triển khai – thường là dev, test, staging và production hoặc tương tự.
Trong ví dụ này, bạn có thể thấy 2 lớp phủ cho 3 mục tiêu: dev, staging và prod. Lớp phủ dev sẽ được dùng trong quá trình phát triển cục bộ, còn lớp phủ staging và prod sẽ được dùng khi triển khai bằng Skaffold.
6. Hồ sơ
Phần profiles chứa cấu hình xác định cấu hình bản dựng, kiểm thử và triển khai cho các bối cảnh khác nhau. Các bối cảnh khác nhau thường là các môi trường khác nhau trong quy trình triển khai ứng dụng của bạn, chẳng hạn như staging hoặc prod trong ví dụ này. Điều này có nghĩa là bạn có thể dễ dàng quản lý các tệp kê khai có nội dung cần khác nhau đối với các môi trường đích khác nhau mà không cần lặp lại cấu hình mặc định.
Cấu hình trong phần profiles có thể thay thế hoặc vá mọi mục trong cấu hình chính (ví dụ: các phần build, test hoặc deploy).
Ví dụ: mở tệp overlays > prod > deployment.yaml. Lưu ý rằng số lượng bản sao cho ứng dụng được định cấu hình ở đây là 3, ghi đè cấu hình cơ sở.
Thao tác trong mã nguồn ứng dụng.
- Mở tệp
app > main.gosau đây trong ngăn IDE. Đây là một ứng dụng golang đơn giản, ghi một chuỗi vàostdoutmỗi giây. - Xin lưu ý rằng ứng dụng cũng xuất tên của pod Kubernetes mà ứng dụng đang chạy.
Xem tệp Docker
- Mở tệp
app > Dockerfiletrong ngăn IDE. Tệp này chứa một chuỗi các chỉ thị để tạo hình ảnh vùng chứa ứng dụng cho tệpmain.govà được tham chiếu trong tệpskaffold.yamlcấp cao nhất.
7. Phát triển bằng Skaffold
Định cấu hình môi trường Kubernetes
- Chạy lệnh sau để đảm bảo cụm Kubernetes cục bộ của bạn đang chạy và được định cấu hình:
minikube start
Quá trình này có thể mất vài phút. Bạn sẽ thấy kết quả sau đây nếu cụm đã khởi động thành công:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- Chạy lệnh sau để tạo không gian tên Kubernetes cho
dev,stagingvàprod:
kubectl apply -f namespaces.yaml
Bạn sẽ thấy kết quả sau đây:
namespace/dev created namespace/staging created namespace/prod created
Sử dụng Skaffold để phát triển cục bộ
- Chạy lệnh sau để tạo ứng dụng và triển khai ứng dụng đó vào một cụm Kubernetes cục bộ đang chạy trong Cloud Shell:
skaffold dev
Bạn sẽ thấy quy trình xây dựng vùng chứa ứng dụng chạy (có thể mất một phút), sau đó đầu ra của ứng dụng sẽ lặp lại mỗi giây:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
Xin lưu ý rằng tên nhóm chính xác sẽ khác với đầu ra chung được đưa ra ở trên.
Thay đổi ứng dụng
Giờ đây, khi ứng dụng đang chạy trong cụm Kubernetes cục bộ, bạn có thể thay đổi mã và Skaffold sẽ tự động tạo lại và triển khai lại ứng dụng vào cụm.
- Mở tệp
app > main.gotrong ngăn IDE và thay đổi chuỗi đầu ra:
"Hello world from pod %s!\n"
tới:
"Hello Skaffold world from pod %s!\n"
Sau khi thực hiện thay đổi, bạn sẽ thấy Skaffold tạo lại hình ảnh và triển khai lại hình ảnh đó vào cụm, với thay đổi trong đầu ra xuất hiện trong cửa sổ thiết bị đầu cuối.
- Bây giờ, trong tệp "app > main.go" trong ngăn IDE, hãy thay đổi dòng:
time.Sleep(time.Second * 1)
tới
time.Sleep(time.Second * 10)
Một lần nữa, bạn sẽ thấy ứng dụng được tạo lại và triển khai lại, với dòng đầu ra xuất hiện 10 giây một lần.
Thay đổi cấu hình Kubernetes
Tiếp theo, bạn sẽ thay đổi cấu hình Kubernetes và Skaffold sẽ tự động triển khai lại một lần nữa.
- Mở tệp
base > deployment.yamltrong IDE và thay đổi dòng:
replicas: 1
tới
replicas: 2
Sau khi triển khai lại ứng dụng, bạn sẽ thấy 2 nhóm đang chạy – mỗi nhóm sẽ có một tên khác nhau.
- Bây giờ, hãy thay đổi dòng tương tự trong tệp
base > deployment.yamlthành:
replicas: 1
Bạn sẽ thấy một trong các nhóm bị xoá khỏi dịch vụ để chỉ còn lại một nhóm.
- Cuối cùng, hãy nhấn
Ctrl-Ctrong cửa sổ dòng lệnh để dừng quá trình phát triển cục bộ Skaffold.
Cắt bản phát hành
Tiếp theo, bạn sẽ tạo một bản phát hành bằng cách tạo một hình ảnh phát hành và triển khai hình ảnh đó vào một cụm.
- Chạy lệnh sau để tạo bản phát hành:
skaffold build --file-output artifacts.json
Lệnh này sẽ tạo hình ảnh cuối cùng (nếu cần) và xuất thông tin chi tiết về bản phát hành vào tệp artifacts.json.
Nếu bạn muốn sử dụng một công cụ như Cloud Deploy để triển khai đến các cụm, thì tệp này sẽ chứa thông tin phát hành. Điều này có nghĩa là(các) cấu phần phần mềm không thể thay đổi trên đường phát hành công khai.
- Chạy lệnh sau để xem nội dung của tệp
artifacts.json:
cat artifacts.json | jq
Xin lưu ý rằng tệp này chứa thông tin tham chiếu đến hình ảnh sẽ được dùng trong quá trình triển khai cuối cùng.
Triển khai lên bản thử nghiệm
- Chạy lệnh sau để triển khai bản phát hành bằng hồ sơ
staging:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
Sau khi triển khai xong, bạn sẽ thấy kết quả từ 2 nhóm tương tự như sau:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- Nhấn tổ hợp phím Ctrl-C trong cửa sổ dòng lệnh để dừng đầu ra của Skaffold.
- Chạy lệnh sau để quan sát ứng dụng của bạn đang hoạt động trong cụm:
kubectl get all --namespace staging
Bạn sẽ thấy 2 tên nhóm riêng biệt, vì hồ sơ staging cho ứng dụng chỉ định rằng phải có 2 bản sao trong quá trình triển khai.
Triển khai lên kênh phát hành công khai
- Bây giờ, hãy chạy lệnh sau để triển khai bản phát hành bằng hồ sơ
prod:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
Sau khi triển khai xong, bạn sẽ thấy kết quả từ 3 nhóm tương tự như sau:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- Nhấn tổ hợp phím Ctrl-C trong cửa sổ dòng lệnh để dừng đầu ra của Skaffold.
Bạn sẽ thấy 3 tên nhóm riêng biệt, vì hồ sơ prod cho ứng dụng chỉ định rằng phải có 3 bản sao trong quá trình triển khai.
- Chạy lệnh sau để quan sát ứng dụng của bạn đang hoạt động trong cụm:
kubectl get all --namespace prod
Bạn sẽ thấy kết quả chứa các dòng tương tự như sau cho thấy việc triển khai prod:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
Bạn cũng sẽ thấy 3 nhóm ứng dụng đang chạy.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. Xin chúc mừng!
Xin chúc mừng! Bạn đã hoàn thành lớp học Understanding Skaffold và học được cách định cấu hình cũng như sử dụng Skaffold để phát triển cục bộ và triển khai ứng dụng.
Bước tiếp theo:
Tiếp tục tìm hiểu thêm về Skaffold:
Dọn dẹp
- Chạy lệnh sau để tắt cụm cục bộ:
minikube delete