1. Giới thiệu chung
Trong chuỗi bài này, chúng ta cùng nhau tìm hiểu cách phát triển và triển khai một ứng dụng quản lý học sinh sử dụng Spring boot trên Kubernetes (k8s). Qua việc triển khai ứng dụng, chúng ta sẽ tìm hiểu những thành phần cơ bản và cách cấu hình ứng dụng với k8s. Bài viết đầu tiên sẽ trình bày về việc chuẩn bị môi trường phát triển, tạo mới project và giới thiệu qua về ứng dụng chúng ta sẽ phát triển/triển khai.
2. Cài đặt môi trường
Sử dụng MicroK8s
khi chạy lệnh kubectl ...
thì cần kèm theo microk8s
đằng trước như: microk8s kubectl ...
, để ngắn gọn hơn thì bạn có thể làm như sau:
cd $HOME
mkdir .kube
cd .kube
microk8s config > config
kubectl config use-context microk8s
3. Setup Spring boot application
Ứng dụng quản lý học sinh viết bằng Spring Boot đơn giản gồm 2 API: Tạo mới học sinh, lấy danh sách học sinh. Bạn có thể tham khảo source code ở đây.
Truy cập Spring Initializr để tạo mới một Spring Boot project và thêm một số thông tin của project như:
Thông tin project và các dependencies:
Project | Value |
---|---|
Tên | k8s-springboot-series |
Build tool | Maven |
Spring Boot version | 2.7.6 |
Java version | 11 |
Dependencies | Spring Web Spring Boot DevTools Lombok Spring Configuration Processor |
Class Student
dưới đây định nghĩa các trường thông tin về Student:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private UUID id;
private String fullName;
private String dateOfBirth;
private String hometown;
private Gender gender;
public static Student createFrom(CreateStudentRequest request) {
Student student = new Student();
student.setId(UUID.randomUUID());
student.setFullName(request.getFullName());
student.setDateOfBirth(request.getDateOfBirth());
student.setHometown(request.getHometown());
student.setGender(request.getGender());
return student;
}
}
Class StudentControllers
dưới đây định nghĩa các API như:
- POST
/api/students
: tạo mới Student. - GET
/api/students
: lấy danh sách Student.
@RestController
@RequestMapping(value = "/api/students")
public class StudentControllers {
private final IStudentService iStudentService;
public StudentControllers(IStudentService iStudentService) {
this.iStudentService = iStudentService;
}
@PostMapping
public ResponseEntity<StudentResp> createStudent(@RequestBody CreateStudentRequest request) {
return new ResponseEntity<>(iStudentService.createStudent(request), HttpStatus.CREATED);
}
@GetMapping
public ResponseEntity<List<StudentResp>> getAllStudents() {
return new ResponseEntity<>(iStudentService.getAll(), HttpStatus.OK);
}
}
Class StudentServiceImpl
dưới đây định nghĩa các logic tạo mới Student
và lấy danh sách Student
:
@Service
public class StudentServiceImpl implements IStudentService {
private static final ObjectMapper objectMapper = new ObjectMapper();
private static final List<Student> STUDENTS = new ArrayList<>();
@Override
public StudentResp createStudent(CreateStudentRequest request) {
Student student = Student.createFrom(request);
STUDENTS.add(student);
return objectMapper.convertValue(student, StudentResp.class);
}
@Override
public List<StudentResp> getAll() {
List<StudentResp> studentRespList = new ArrayList<>();
for (Student student : STUDENTS) {
StudentResp studentResp = objectMapper.convertValue(student, StudentResp.class);
studentRespList.add(studentResp);
}
return studentRespList;
}
}
4. Tổng kết
Trong bài mở đầu series về triển khai ứng dụng spring boot với kubernetes này đã giới thiệu về mục tiêu của series, các bước chuẩn bị về môi trường cũng như giới thiệu qua về spring boot application mà sẽ sử dụng. Ở bài tiếp theo thì chúng ta sẽ đi tìm hiểu về cách đóng gói spring boot container với Pod
trong Kubernetes.