Thông tin về lớp học lập trình này
1. Trước khi bắt đầu
Kubernetes là một dự án nguồn mở có thể chạy trong nhiều môi trường, từ máy tính xách tay cho đến các cụm nhiều nút có khả năng sử dụng cao, từ các đám mây công cộng cho đến hoạt động triển khai tại chỗ và từ các phiên bản máy ảo (VM) cho đến hoạt động trần.
Trong lớp học lập trình này, bạn sẽ triển khai một ứng dụng web Mùa xuân Java đơn giản cho Kubernetes trên GKE. Mục tiêu của bạn là chạy ứng dụng web dưới dạng một ứng dụng sao chép trên Kubernetes. Bạn sẽ lấy mã mà bạn phát triển trên máy, biến mã đó thành hình ảnh vùng chứa Docker và chạy hình ảnh trên GKE.
Bạn sẽ sử dụng GKE, một dịch vụ Kubernetes được quản lý hoàn toàn trên Google Cloud để có thể tập trung nhiều hơn vào việc trải nghiệm Kubernetes, thay vì thiết lập cơ sở hạ tầng cơ bản.
Nếu bạn quan tâm đến việc chạy Kubernetes trên máy tính cục bộ, chẳng hạn như máy tính xách tay phát triển, hãy xem xét minikube. Đây là thiết lập đơn giản của cụm Kubernetes có một nút đơn cho mục đích phát triển và thử nghiệm. Bạn có thể sử dụng Minikube để tham gia lớp học lập trình nếu muốn.
Lớp học lập trình sẽ sử dụng mã mẫu từ hướng dẫn về cách Xây dựng ứng dụng bằng khởi động vào mùa xuân.
Điều kiện tiên quyết
- Làm quen với công cụ và ngôn ngữ lập trình Java
- Kiến thức về các trình chỉnh sửa văn bản Linux tiêu chuẩn, chẳng hạn như Vim, Emacs và nano
Bạn sẽ thực hiện
- Đóng gói một ứng dụng Java đơn giản làm vùng chứa Docker.
- Tạo cụm Kubernetes của bạn trên GKE.
- Triển khai ứng dụng Java của bạn cho Kubernetes trên GKE.
- Mở rộng quy mô dịch vụ và ra mắt bản nâng cấp.
- Truy cập vào Trang tổng quan, giao diện người dùng Kubernetes dựa trên web.
Bạn cần có
- Một dự án Google Cloud
- Một trình duyệt, chẳng hạn như Google Chrome
2. Thiết lập và các yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. (Nếu chưa có tài khoản Gmail hoặc G Suite, thì bạn phải tạo một tài khoản.)
Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID
.
- Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.
Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó chạy.
Người dùng mới của Google Cloud đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.
Kích hoạt Cloud Shell
- Từ Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell
.
Nếu bạn chưa từng khởi động Cloud Shell trước đây, thì bạn sẽ được trình bày với một màn hình trung gian (dưới màn hình đầu tiên) mô tả đó là gì. Nếu trường hợp đó xảy ra, hãy nhấp vào Tiếp tục (và bạn sẽ không bao giờ nhìn thấy lại). Đây là giao diện của màn hình một lần:
Chỉ mất vài phút để cấp phép và kết nối với Cloud Shell.
Máy ảo này được tải bằng tất cả các công cụ phát triển mà bạn cần. cung cấp một thư mục gốc 5GB cố định và chạy trong Google Cloud, qua đó nâng cao đáng kể hiệu suất và khả năng xác thực mạng. Phần lớn, nếu không phải là tất cả công việc của bạn trong lớp học lập trình này, thì bạn chỉ cần thực hiện một trình duyệt hoặc Chromebook của mình.
Sau khi kết nối với Cloud Shell, bạn sẽ thấy rằng bạn đã được xác thực và dự án đã được đặt thành mã dự án của bạn.
- Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
Đầu ra lệnh
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Đầu ra lệnh
[core] project = <PROJECT_ID>
Nếu chưa, bạn có thể đặt lệnh đó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra lệnh
Updated property [core/project].
3. Lấy mã nguồn
Sau khi Cloud Shell khởi chạy, bạn có thể sử dụng dòng lệnh để sao chép mã nguồn mẫu trong thư mục gốc.
$ git clone https://github.com/spring-guides/gs-spring-boot.git $ cd gs-spring-boot/complete
4. Chạy ứng dụng trên máy
- Bạn có thể khởi động ứng dụng Hỗ trợ khởi động mùa xuân bằng trình bổ trợ khởi động mùa xuân.
$ ./mvnw -DskipTests spring-boot:run
- Sau khi ứng dụng khởi động, hãy nhấp vào Xem trước trên web
trong thanh công cụ Cloud Shell rồi chọn Xem trước trên cổng 8080.
Một thẻ trong trình duyệt sẽ mở ra và kết nối với máy chủ bạn vừa khởi động.
5. Đóng gói ứng dụng Java dưới dạng vùng chứa Docker
Tiếp theo, bạn cần chuẩn bị ứng dụng của mình để chạy trên Kubernetes. Bước đầu tiên là xác định vùng chứa và nội dung của vùng chứa.
- Tạo JAR có thể triển khai cho ứng dụng.
$ ./mvnw -DskipTests package
- Bật Đăng ký vùng chứa để lưu trữ hình ảnh vùng chứa mà bạn sẽ tạo.
$ gcloud services enable containerregistry.googleapis.com
- Sử dụng Jib để tạo hình ảnh vùng chứa và đẩy hình ảnh đó vào Đăng ký vùng chứa.
$ ./mvnw -DskipTests com.google.cloud.tools:jib-maven-plugin:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v1
- Nếu không có vấn đề gì xảy ra, bạn có thể xem hình ảnh vùng chứa trong bảng điều khiển bằng cách chuyển đến Vùng đăng ký và gt; Hình ảnh. Giờ đây, bạn có thể sử dụng hình ảnh Docker trên toàn dự án mà Kubernetes có thể truy cập và sắp đặt như bạn sẽ thấy sau vài phút.
- Sau khi hoàn thành đó (mất một khoảng thời gian để tải xuống và trích xuất mọi thứ), bạn có thể kiểm tra cục bộ hình ảnh bằng lệnh sau, lệnh này sẽ chạy vùng chứa Docker dưới dạng trình bổ trợ trên cổng 8080 từ hình ảnh vùng chứa mới được tạo của bạn:
$ docker run -ti --rm -p 8080:8080 \ gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v1
- Tận dụng một lần nữa tính năng xem trước trên web của Cloud Shell.
- Bạn sẽ thấy trang mặc định trong một thẻ mới. Sau khi xác minh rằng ứng dụng đang chạy cục bộ trong một vùng chứa Docker, bạn có thể dừng vùng chứa đang chạy bằng cách nhấn
Control+C
.
6. Tạo nhóm của bạn
Bạn đã sẵn sàng tạo cụm GKE. Một cụm bao gồm máy chủ API Kubernetes do Google quản lý và một nhóm nút của nhân viên. Các nút Worker là máy ảo Compute Engine.
- Trước tiên, hãy đảm bảo bạn đã bật các tính năng API có liên quan.
$ gcloud services enable compute.googleapis.com container.googleapis.com Operation "operations/..." finished successfully
- Tạo một cụm có hai nút
n1-standard-1
(sẽ mất vài phút để hoàn tất).
$ gcloud container clusters create hello-java-cluster \ --num-nodes 2 \ --machine-type n1-standard-1 \ --zone us-central1-c
Cuối cùng, bạn sẽ thấy cụm được tạo.
Creating cluster hello-java-cluster...done. Created [https://container.googleapis.com/v1/projects/...]. kubeconfig entry generated for hello-dotnet-cluster. NAME ZONE MASTER_VERSION hello-java-cluster us-central1-c ...
Bây giờ, bạn sẽ có một cụm Kubernetes hoạt động hoàn toàn do GKE cung cấp.
Đã đến lúc triển khai ứng dụng vùng chứa của bạn cho cụm Kubernetes! Kể từ bây giờ, bạn sẽ sử dụng dòng lệnh kubectl
(đã thiết lập trong môi trường Cloud Shell của bạn). Phần còn lại của lớp học lập trình yêu cầu ứng dụng và phiên bản máy chủ Kubernetes phải từ 1.2 trở lên. kubectl version
sẽ hiện phiên bản hiện tại của lệnh.
7. Triển khai ứng dụng của bạn cho Kubernetes
- Việc triển khai Kubernetes có thể tạo, quản lý và mở rộng nhiều phiên bản của ứng dụng bằng hình ảnh vùng chứa mà bạn đã tạo. Triển khai bản sao của ứng dụng cho Kubernetes bằng lệnh
kubectl run
.
$ kubectl create deployment hello-java \ --image=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v1
- Để xem quá trình triển khai bạn đã tạo, bạn chỉ cần chạy lệnh sau:
$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-java 1 1 1 1 37s
- Để xem các phiên bản ứng dụng do quá trình triển khai tạo, hãy chạy lệnh sau:
$ kubectl get pods NAME READY STATUS RESTARTS AGE hello-java-714049816-ztzrb 1/1 Running 0 57s
Tại thời điểm này, bạn nên để vùng chứa của mình chạy dưới sự kiểm soát của Kubernetes, nhưng bạn vẫn phải cho phép thế giới bên ngoài truy cập được vùng chứa đó.
8. Cho phép lưu lượng truy cập bên ngoài
Theo mặc định, chỉ có thể truy cập vào Pod bằng IP nội bộ trong cụm đó. Để có thể truy cập vào vùng chứa hello-java
từ bên ngoài mạng ảo Kubernetes, bạn phải hiển thị Pod dưới dạng một dịch vụ Kubernetes.
- Trong Cloud Shell, bạn có thể hiển thị Nhóm với Internet công cộng bằng lệnh
kubectl expose
kết hợp với cờ--type=LoadBalancer
. Bạn phải gắn cờ để tạo IP có thể truy cập từ bên ngoài.
$ kubectl create service loadbalancer hello-java --tcp=8080:8080
Cờ sử dụng trong lệnh này chỉ định rằng bạn sẽ sử dụng trình cân bằng tải do cơ sở hạ tầng cơ bản cung cấp. Xin lưu ý rằng bạn trực tiếp hiển thị việc triển khai chứ không phải Nhóm Điều này sẽ khiến dịch vụ kết quả tải lưu lượng truy cập số dư trên tất cả các Nhóm do việc triển khai quản lý (trong trường hợp này chỉ có một Nhóm, nhưng bạn sẽ thêm nhiều bản sao sau đó).
Kubernetes Master tạo trình cân bằng tải và các quy tắc chuyển tiếp Compute Engine có liên quan, nhóm mục tiêu và quy tắc tường lửa để giúp dịch vụ có thể truy cập đầy đủ từ bên ngoài Google Cloud.
- Để tìm địa chỉ IP có thể truy cập công khai của dịch vụ, chỉ cần yêu cầu
kubectl
liệt kê tất cả dịch vụ cụm.
$ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE Hello-java 10.3.253.62 aaa.bbb.ccc.ddd 8080/TCP 1m kubernetes 10.3.240.1 <none> 443/TCP 5m
- Lưu ý rằng có hai địa chỉ IP được liệt kê cho dịch vụ của bạn, cả hai đều phân phối cổng 8080. Một là địa chỉ IP nội bộ chỉ hiển thị trong Cloud Private Virtual của bạn. Địa chỉ còn lại là địa chỉ IP cân bằng tải bên ngoài. Trong ví dụ này, địa chỉ IP bên ngoài là
aaa.bbb.ccc.ddd
. Bây giờ, bạn có thể truy cập dịch vụ bằng cách trỏ trình duyệt của bạn đến http://<EXTERNAL_IP>:8080.
9. Mở rộng dịch vụ
Một trong những tính năng mạnh mẽ do Kubernetes cung cấp là việc mở rộng ứng dụng dễ dàng như thế nào. Giả sử bạn đột nhiên cần thêm dung lượng cho ứng dụng của mình. Bạn chỉ cần yêu cầu bộ điều khiển sao chép để quản lý số lượng bản sao mới cho phiên bản ứng dụng của bạn.
$ kubectl scale deployment hello-java --replicas=3 deployment "hello-java" scaled $ kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-java 3 3 3 3 22m
Hãy chú ý đến phương pháp khai báo. Thay vì bắt đầu hoặc dừng các phiên bản mới, bạn cần khai báo số lượng phiên bản nên luôn chạy. Vòng lặp đối chiếu Kubernetes chỉ đảm bảo rằng thực tế khớp với thông tin bạn đã yêu cầu và thực hiện hành động nếu cần.
10. Triển khai bản nâng cấp cho dịch vụ của bạn
Tại một số thời điểm, ứng dụng mà bạn đã triển khai phiên bản chính thức sẽ cần phải sửa lỗi hoặc thêm một số tính năng. Kubernetes có thể giúp bạn triển khai phiên bản chính thức mới mà không ảnh hưởng đến người dùng.
- Mở trình soạn thảo mã bằng cách nhấp vào Khởi chạy trình chỉnh sửa
trong trình đơn Cloud Shell.
- Chuyển đến
src/main/java/hello/HelloController.java
và cập nhật giá trị của câu trả lời.
package hello;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class HelloController {
@RequestMapping("/")
public String index() {
return "Greetings from Google Kubernetes Engine!";
}
}
- Sử dụng Jib để tạo và đẩy phiên bản mới của hình ảnh vùng chứa.
$ ./mvnw -DskipTests package \ com.google.cloud.tools:jib-maven-plugin:build \ -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v2
Bạn đã sẵn sàng cho Kubernetes cập nhật dễ dàng bộ điều khiển sao chép lên phiên bản mới của ứng dụng!
- Để thay đổi nhãn hình ảnh cho vùng chứa đang chạy, bạn cần phải chỉnh sửa cách triển khai
hello-java
hiện tại và thay đổi hình ảnh từgcr.io/PROJECT_ID/hello-java:v1
thànhgcr.io/PROJECT_ID/hello-java:v2
.
- Bạn có thể sử dụng lệnh
kubectl set image
để yêu cầu Kubernetes triển khai phiên bản mới của ứng dụng trên toàn bộ từng cụm một bằng các bản cập nhật luân phiên.
$ kubectl set image deployment/hello-java \ hello-java=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v2 deployment "hello-java" image updated
- Kiểm tra lại http://EXTERNAL_IP:8080 để xem URL đó có trả về phản hồi mới hay không.
11. Hủy bỏ
Rất tiếc! Bạn có nhầm lẫn với phiên bản mới của ứng dụng không? Có thể phiên bản mới chứa lỗi và bạn cần nhanh chóng khôi phục phiên bản đó. Với Kubernetes, bạn có thể dễ dàng quay lại trạng thái trước đó. Khôi phục ứng dụng bằng cách chạy lệnh sau:
$ kubectl rollout undo deployment/hello-java
12. Xin chúc mừng
Bạn đã tìm hiểu cách tạo và triển khai ứng dụng web mới dựa trên Java cho Kubernetes trên GKE.