1. Tổng quan
Phòng thí nghiệm này trình bày các tính năng và chức năng được thiết kế để đơn giản hoá quy trình phát triển dành cho các kỹ sư phần mềm được giao nhiệm vụ phát triển các ứng dụng Python trong môi trường vùng chứa. Thông thường, quá trình phát triển vùng chứa yêu cầu người dùng hiểu thông tin chi tiết về vùng chứa và quy trình xây dựng vùng chứa. Ngoài ra, các nhà phát triển thường phải ngắt luồng của mình, rời khỏi IDE để kiểm thử và gỡ lỗi ứng dụng trong môi trường từ xa. Với các công cụ và công nghệ được đề cập trong hướng dẫn này, nhà phát triển có thể làm việc hiệu quả với các ứng dụng trong vùng chứa mà không cần rời khỏi IDE của họ.
Cloud Workstation là gì?
Cloud Workstations cung cấp môi trường phát triển được quản lý trên Google Cloud với cơ chế bảo mật tích hợp sẵn và các môi trường phát triển được định cấu hình sẵn nhưng có thể tuỳ chỉnh. Truy cập vào các máy trạm trên đám mây thông qua một IDE dựa trên trình duyệt, qua nhiều trình chỉnh sửa mã cục bộ (chẳng hạn như VSCode hoặc IDE JetBrains, chẳng hạn như IntelliJ IDEA Ultimate và PyCharm Professional) hoặc thông qua SSH.
Cloud Workstations sử dụng những tài nguyên sau:
- Quản trị viên tạo các cụm máy trạm
- Trong mỗi cụm máy trạm, quản trị viên tạo một hoặc nhiều cấu hình máy trạm đóng vai trò là mẫu cho các máy trạm.
- Nhà phát triển có thể tạo máy trạm xác định các môi trường phát triển để cung cấp IDE trên đám mây, công cụ ngôn ngữ, thư viện, v.v.
Cloud Workstations giúp các quản trị viên CNTT và bảo mật dễ dàng cung cấp, mở rộng quy mô, quản lý và bảo mật môi trường phát triển, đồng thời cho phép các nhà phát triển truy cập vào các môi trường phát triển thông qua các cấu hình nhất quán và bộ công cụ có thể tuỳ chỉnh.
Cloud Workstations hỗ trợ chuyển đổi khả năng bảo mật còn lại bằng cách cải thiện khả năng bảo mật của môi trường phát triển ứng dụng. Phiên bản này có các tính năng bảo mật như VPC Service Controls, lưu lượng vào/ra riêng tư, cập nhật hình ảnh bắt buộc cũng như chính sách truy cập Quản lý danh tính và quyền truy cập.
Cloud Code là gì?
Cloud Code hỗ trợ IDE cho toàn bộ chu trình phát triển của các ứng dụng Kubernetes và Cloud Run, từ việc tạo và tuỳ chỉnh một ứng dụng mới từ mẫu mẫu cho đến chạy ứng dụng đã hoàn thiện. Cloud Code hỗ trợ bạn trong suốt quá trình phát triển bằng các mẫu sẵn sàng chạy, đoạn mã cấu hình có sẵn và trải nghiệm gỡ lỗi phù hợp. Điều này giúp việc phát triển bằng Kubernetes và Cloud Run trở nên dễ dàng hơn rất nhiều!
Dưới đây là một số tính năng của Cloud Code:
- Liên tục tạo và chạy ứng dụng
- Hỗ trợ gỡ lỗi cho ứng dụng Kubernetes đang trong quá trình phát triển
- Ghi nhật ký phát trực tuyến và xem
Tìm hiểu thêm về các tính năng khác của Cloud Code.
Kiến thức bạn sẽ học được
Trong phòng thí nghiệm này, bạn sẽ tìm hiểu các phương pháp phát triển bằng vùng chứa trong GCP, bao gồm:
- Xem các máy trạm trên đám mây
- Khởi chạy máy trạm
- Xem xét mã đám mây
- Gỡ lỗi trên Kubernetes
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (mã này thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án. - Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Thiết lập môi trường
Trong Cloud Shell, hãy đặt mã dự án và số dự án cho dự án của bạn. Lưu chúng dưới dạng biến PROJECT_ID
và PROJECT_ID
.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
Trong phòng thí nghiệm này, bạn sẽ triển khai mã cho GKE. Bạn cũng sẽ dùng các máy trạm trên đám mây làm IDE.
Tập lệnh thiết lập dưới đây chuẩn bị cơ sở hạ tầng này cho bạn.
- Tải tập lệnh thiết lập xuống và làm cho tập lệnh đó có thể thực thi.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
- Mở tệp
setup_with_cw.sh
và chỉnh sửa giá trị của mật khẩu hiện được đặt thành CHANGEME - Chạy tập lệnh thiết lập để tạo cụm GKE mà bạn sẽ sử dụng trong phòng thí nghiệm này. Quá trình thiết lập này sẽ mất khoảng 20 phút.
./setup_with_cw.sh &
- Mở Cloud Workstations trong Cloud Console. Hãy chờ cho cụm ở trạng thái
READY
trước khi chuyển sang các bước tiếp theo. - Nếu phiên Cloud Shell của bạn bị ngắt kết nối, hãy nhấp vào "Kết nối lại" rồi chạy lệnh gcloud cli để đặt mã dự án. Thay thế mã dự án mẫu bên dưới bằng mã dự án qwiklabs của bạn trước khi chạy lệnh.
gcloud config set project qwiklabs-gcp-project-id
- Tải xuống và chạy tập lệnh bên dưới trong cửa sổ dòng lệnh để tạo cấu hình Cloud Workstation.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
Cụm và cấu hình máy trạm trên đám mây
Mở Cloud Workstations trong Cloud Console. Xác minh rằng cụm đang ở trạng thái READY
.
Xác minh trạng thái của các cấu hình hiện có.
Tạo một máy trạm mới.
Đổi tên thành my-workstation
và chọn cấu hình hiện có: codeoss-python
.
Khởi chạy máy trạm
- Khởi động và khởi chạy máy trạm. Máy trạm sẽ mất vài phút để khởi động.
- Cho phép cookie của bên thứ ba bằng cách nhấp vào biểu tượng trên thanh địa chỉ.
- Nhấp vào "Trang web không hoạt động?".
- Nhấp vào "Allow cookies".
- Sau khi máy trạm chạy, bạn sẽ thấy IDE Mã OSS xuất hiện.
Nhấp vào "Đánh dấu là đã xong" trên trang Bắt đầu một, IDE máy trạm
3. Tổng quan về mã đám mây
Xem xét các phần khác nhau có trong Cloud Code.
- Quá trình phát triển Kerberos. Sử dụng môi trường gỡ lỗi và phát triển Kubernetes được tích hợp đầy đủ trong IDE của bạn. Tạo và quản lý các cụm trực tiếp từ bên trong IDE.
- Gỡ lỗi đang chạy ứng dụng. Gỡ lỗi mã trong các IDE bằng Cloud Code cho VS và Cloud Code cho IntelliJ bằng cách tận dụng các tính năng gỡ lỗi IDE tích hợp sẵn.
- Khám phá các phiên bản triển khai. Xem các tài nguyên và siêu dữ liệu cơ bản của các cụm Kubernetes và dịch vụ Cloud Run. Bạn có thể tìm nạp nội dung mô tả, xem nhật ký, quản lý các khoá bí mật hoặc đưa trực tiếp thiết bị đầu cuối vào nhóm.
- Đơn giản hoá quá trình phát triển cục bộ của Kubernetes. Trong các tài liệu này, Cloud Code dành cho IDE sử dụng các công cụ phổ biến như Skaffold, Jib và kubectl để cung cấp phản hồi liên tục về mã của bạn theo thời gian thực.
Đăng nhập vào Google Cloud
- Nhấp vào biểu tượng Mã đám mây rồi chọn "Đăng nhập vào Google Cloud":
- Nhấp vào "Tiếp tục để đăng nhập".
- Kiểm tra kết quả trong dòng lệnh và mở đường liên kết:
- Đăng nhập bằng thông tin đăng nhập của sinh viên trên Qwiklabs.
- Chọn "Cho phép":
- Sao chép mã xác minh rồi quay lại thẻ Máy trạm.
- Dán mã xác minh rồi nhấn Enter.
Nhấp vào nút "Cho phép" nếu bạn thấy thông báo này để có thể sao chép, dán vào máy trạm.
4. Tạo ứng dụng khởi đầu Python mới
Trong phần này, bạn sẽ tạo một ứng dụng Python mới.
- Mở một cửa sổ dòng lệnh mới.
- Tạo thư mục mới và mở thư mục đó dưới dạng không gian làm việc
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
- Tạo một tệp có tên là
requirements.txt
rồi sao chép nội dung sau đây vào tệp đó
Flask
gunicorn
ptvsd==4.3.2
- Tạo tệp có tên
app.py
rồi dán mã sau vào tệp đó
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
message="Hello, World!"
return message
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
- Tạo tệp có tên
Dockerfile
rồi dán nội dung sau đây vào tệp đó
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]
Lưu ý: FLASK_DEBUG=1 cho phép bạn tự động tải lại các thay đổi về mã đối với ứng dụng Python. Dockerfile này cho phép bạn truyền giá trị này dưới dạng một đối số bản dựng.
Tạo tệp kê khai
Trong dòng lệnh, hãy thực thi lệnh sau để tạo skaffold.yaml
và deployment.yaml
mặc định
- Khởi chạy Skaffold bằng lệnh sau
skaffold init --generate-manifests
Khi được nhắc, hãy sử dụng các mũi tên để di chuyển con trỏ và phím cách để chọn các tuỳ chọn.
Chọn:
8080
cho cổngy
để lưu cấu hình
Cập nhật cấu hình Skaffold
- Thay đổi tên mặc định của ứng dụng
- Mở
skaffold.yaml
- Chọn tên hình ảnh hiện được đặt là
dockerfile-image
- Nhấp chuột phải rồi chọn Thay đổi tất cả lần xuất hiện
- Nhập tên mới là
python-app
- Chỉnh sửa thêm phần bản dựng để
- thêm
docker.buildArgs
để vượt quaFLASK_DEBUG=1
- Đồng bộ hoá các chế độ cài đặt để tải mọi thay đổi đối với tệp
*.py
từ IDE sang vùng chứa đang chạy
Sau khi chỉnh sửa, phần bản dựng trong tệp skaffold.yaml
sẽ có dạng như sau:
build:
artifacts:
- image: python-app
docker:
buildArgs:
FLASK_DEBUG: "1"
dockerfile: Dockerfile
sync:
infer:
- '**/*.py'
Sửa đổi tệp cấu hình Kubernetes
- Thay đổi tên mặc định
- Mở tệp
deployment.yaml
- Chọn tên hình ảnh hiện được đặt là
dockerfile-image
- Nhấp chuột phải rồi chọn Thay đổi tất cả lần xuất hiện
- Nhập tên mới là
python-app
5. Tìm hiểu về quá trình phát triển
Khi thêm logic nghiệp vụ, giờ đây bạn có thể triển khai và thử nghiệm ứng dụng của mình. Phần sau đây sẽ trình bày cách sử dụng trình bổ trợ Cloud Code. Ngoài ra, trình bổ trợ này còn tích hợp với skaffold để đơn giản hoá quy trình phát triển của bạn. Khi bạn triển khai GKE ở các bước sau, Cloud Code và Skaffold sẽ tự động tạo hình ảnh vùng chứa của bạn, đẩy hình ảnh vùng chứa đó vào Container Registry, sau đó triển khai ứng dụng your
lên GKE. Quá trình này xảy ra trong nền, trừu tượng chi tiết khỏi quy trình của nhà phát triển.
Thêm cụm Kubernetes
- Thêm một cụm
- Chọn Google Kubernetes Engine:
- Chọn dự án.
- Chọn "python-cluster" được tạo ở bước thiết lập ban đầu.
- Giờ đây, cụm đó sẽ xuất hiện trong danh sách cụm Kubernetes trong Cloud Code. Điều hướng và khám phá cụm từ đây.
Triển khai cho Kubernetes
- Trong ngăn ở cuối Cloud Shell Editor, hãy chọn Cloud Code ‡
- Trong bảng điều khiển xuất hiện ở trên cùng, hãy chọn Run on Kubernetes (Chạy trên Kubernetes).
Nếu được nhắc, hãy chọn Có để sử dụng ngữ cảnh Kubernetes hiện tại.
Lệnh này sẽ khởi động một bản dựng của mã nguồn rồi chạy các hoạt động kiểm thử. Quá trình tạo bản dựng và kiểm thử sẽ mất vài phút để chạy. Các kiểm thử này bao gồm kiểm thử đơn vị và một bước xác thực để kiểm tra các quy tắc được thiết lập cho môi trường triển khai. Bước xác thực này đã được định cấu hình, đồng thời đảm bảo rằng bạn sẽ nhận được cảnh báo về các vấn đề của việc triển khai ngay cả khi bạn vẫn đang làm việc trong môi trường phát triển.
- Trong lần đầu tiên bạn chạy lệnh, một lời nhắc sẽ xuất hiện ở đầu màn hình và hỏi xem bạn có muốn sử dụng bối cảnh kubernetes hiện tại hay không. Hãy chọn "Yes" (Có) để chấp nhận và sử dụng ngữ cảnh hiện tại.
- Tiếp theo, một lời nhắc sẽ xuất hiện hỏi xem bạn nên dùng sổ đăng ký vùng chứa nào. Nhấn phím Enter để chấp nhận giá trị mặc định được cung cấp
- Chọn "Output" (Đầu ra) trong ngăn dưới để xem tiến trình và thông báo. Sử dụng trình đơn thả xuống, chọn "Kubernetes: Chạy/Gỡ lỗi"
- Chọn "Kubernetes: Chạy/Gỡ lỗi – Chi tiết" trong trình đơn thả xuống ở bên phải của kênh để xem thêm thông tin chi tiết và nhật ký phát trực tiếp từ các vùng chứa
Khi quá trình tạo và kiểm thử hoàn tất, nhật ký thẻ Đầu ra sẽ có URL http://localhost:8080 được liệt kê trong "Kubernetes: Run/Debug" chế độ xem.
- Trong cửa sổ dòng lệnh Mã đám mây, hãy di chuột qua URL đầu tiên trong dữ liệu đầu ra (http://localhost:8080), sau đó trong phần mẹo công cụ xuất hiện, hãy chọn Open Web Preview (Xem trước trên web).
- Một thẻ trình duyệt mới sẽ mở ra và hiển thị thông báo:
Hello, World!
Tải lại nhanh
- Mở tệp
app.py
- Thay đổi tin nhắn lời chào thành
Hello from Python
Lưu ý ngay rằng trong cửa sổ Output
, khung hiển thị Kubernetes: Run/Debug
, trình theo dõi sẽ đồng bộ hoá các tệp đã cập nhật với vùng chứa trong Kubernetes
Update initiated Build started for artifact python-app Build completed for artifact python-app Deploy started Deploy completed Status check started Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress Resource deployment/python-app status updated to In Progress Resource deployment/python-app status completed successfully Status check succeeded ...
- Nếu chuyển sang khung hiển thị
Kubernetes: Run/Debug - Detailed
, bạn sẽ thấy khung hiển thị này nhận ra các thay đổi về tệp, sau đó tạo và triển khai lại ứng dụng
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
- Hãy làm mới thẻ trình duyệt nơi bạn từng xem kết quả trước để xem kết quả mới.
Gỡ lỗi
- Chuyển đến chế độ xem Debug (Gỡ lỗi) và dừng luồng hiện tại
. Nếu ứng dụng yêu cầu, bạn có thể chọn dọn dẹp sau mỗi lần chạy.
- Nhấp vào
Cloud Code
ở trình đơn dưới cùng rồi chọnDebug on Kubernetes
để chạy ứng dụng ở chế độdebug
.
- Trong khung hiển thị
Kubernetes Run/Debug - Detailed
của cửa sổOutput
, hãy lưu ý rằng skaffold sẽ triển khai ứng dụng này ở chế độ gỡ lỗi.
- Trong lần đầu tiên chạy lệnh này, một lời nhắc sẽ hỏi xem nguồn nằm ở đâu trong vùng chứa. Giá trị này liên quan đến các thư mục trong Dockerfile.
Nhấn Enter để chấp nhận chế độ mặc định
Sẽ mất vài phút để xây dựng và triển khai ứng dụng. Nếu phiên gỡ lỗi bị ngắt kết nối, hãy chạy lại các bước trong phần "Gỡ lỗi trên Kubernetes" từ "Phiên phát triển" .
- Khi quá trình này hoàn tất. Bạn sẽ thấy một trình gỡ lỗi được đính kèm, thẻ Đầu ra có nội dung:
Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully.
, đồng thời URL http://localhost:8080 được liệt kê.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
- Thanh trạng thái ở dưới cùng thay đổi màu từ màu xanh dương sang màu cam cho biết đang ở chế độ Gỡ lỗi.
- Trong khung hiển thị
Kubernetes Run/Debug
, lưu ý rằng vùng chứa có thể Gỡ lỗi đã được bắt đầu
**************URLs***************** Forwarded URL from service python-app: http://localhost:8080 Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default) Update succeeded ***********************************
Khai thác các điểm ngắt
- Mở tệp
app.py
- Tìm câu lệnh có nội dung
return message
- Thêm điểm ngắt vào dòng đó bằng cách nhấp vào khoảng trống ở bên trái số dòng. Một chỉ báo màu đỏ sẽ xuất hiện để ghi chú điểm ngắt đã được đặt
- Tải lại trình duyệt và lưu ý rằng trình gỡ lỗi sẽ dừng quá trình này tại điểm ngắt và cho phép bạn điều tra các biến cũng như trạng thái của ứng dụng đang chạy từ xa trong GKE
- Nhấp vào mục "VARIABLES" (Biến)
- Nhấp vào Locals (Nhóm địa phương), bạn sẽ thấy biến
"message"
. - Nhấp đúp vào tên biến "tin nhắn" và trong cửa sổ bật lên, hãy thay đổi giá trị thành giá trị khác như
"Greetings from Python"
- Nhấp vào nút Tiếp tục trong bảng điều khiển gỡ lỗi
- Xem lại phản hồi trong trình duyệt để hiện giá trị được cập nhật mà bạn vừa nhập.
- Dừng "Gỡ lỗi" bằng cách nhấn nút dừng
và xoá điểm ngắt bằng cách nhấp lại vào điểm ngắt đó.
6. Dọn dẹp
Xin chúc mừng! Trong phòng thí nghiệm này, bạn đã tạo một ứng dụng Python mới từ đầu và định cấu hình để ứng dụng hoạt động hiệu quả với vùng chứa. Sau đó, bạn đã triển khai và gỡ lỗi ứng dụng cho một cụm GKE từ xa theo cùng một quy trình dành cho nhà phát triển trong các ngăn xếp ứng dụng truyền thống.
Cách làm sạch sau khi hoàn thành phòng thí nghiệm:
- Xoá các tệp được sử dụng trong phòng thí nghiệm
cd ~ && rm -rf ~/music-service
- Xoá dự án để xoá tất cả cơ sở hạ tầng và tài nguyên có liên quan
—
Lần cập nhật gần đây nhất: 22/3/2023