1. Cơ bản
1.1. Giới thiệu
Với sự phát triển của các ứng dụng phức tạp, việc quản lý cấu hình ngày càng trở nên quan trọng. Apollo Configuration Center là một giải pháp nguồn mở giúp quản lý cấu hình cho các ứng dụng một cách tập trung và hiệu quả.
1.2. Điểm mạnh
- Thiết lập dễ dàng
- Cập nhật cấu hình theo thời gian thực
- Quản lý phiên bản và phát hành
- API mở
- Giám sát cấu hình từ xa
- Hỗ trợ Java và .NET
- Quản lý cấu hình cục bộ
1.3. Cấu trúc nền tảng
Quy trình cơ bản của Apollo:
- Người dùng sửa đổi và phát hành cấu hình từ giao diện quản trị.
- Config Service thông báo cho Apollo Client về thay đổi cấu hình.
- Apollo Client kéo về cấu hình mới, cập nhật vào bộ nhớ và lưu vào hệ thống tệp cục bộ.
1.4. Bốn chiều管理
- Ứng dụng: Mỗi ứng dụng cần có một ID duy nhất để nhận cấu hình tương ứng.
- Môi trường: Các môi trường như FAT, UAT, DEV, PRO được sử dụng để tách biệt các cấu hình khác nhau.
- Clustering: Phân nhóm các实例 ứng dụng theo数据中心.
- Namespace: Tách biệt các loại cấu hình khác nhau như CSDL, RPC.
1.5. Cấu hình cục bộ
Apollo Client lưu một bản sao cấu hình vào hệ thống tệp cục bộ để đảm bảo khả dụng cao.
Đường dẫn mặc định:
- Mac/Linux: /opt/data/{appId}/config-cache
- Windows: C:\opt\data\{appId}\config-cache
2. Tạo và cấu hình Apollo Configuration Center
2.1. Đăng nhập Apollo
Truy cập Apollo Portal qua NodePort Kubernetes:
- Username: apollo
- Password: admin
2.2. Tạo dự án Apollo
Sau khi đăng nhập, tạo một dự án mới với:
- App ID: apollo-test
- App Name: apollo-demo
2.3. Thêm tham số cấu hình
Tạo một tham số cấu hình mới:
- Key: test
- Giá trị: 123456
3. Tạo Apollo Client Test Project
3.1. Thêm phụ thuộc Apollo vào Maven
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
</parent>
<groupId>club.mydlq</groupId>
<artifactId>apollo-demo</artifactId>
<version>0.0.1</version>
<name>apollo-demo</name>
<description>Apollo Demo</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
</project>
3.2. Cấu hình tham số Apollo
server:
port: 8080
spring:
application:
name: apollo-demo
apollo:
cacheDir: /opt/data/
cluster: default
meta: http://192.168.2.11:30002
autoUpdateInjectedSpringProperties: true
bootstrap:
enabled: true
namespaces: application
eagerLoad:
enabled: false
3.3. Tạo Controller để kiểm tra cấu hình
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Value("${test:Giá trị mặc định}")
private String test;
@GetMapping("/test")
public String test() {
return "Giá trị test là: " + test;
}
}
3.4. Tạo class啟動
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3.5. Thêm tham số JVM
-Dapollo.configService=http://192.168.2.11:30002 -Denv=DEV
4. Test ứng dụng
4.1. Kiểm tra nhận giá trị từ Apollo
Khởi động ứng dụng và truy cập http://localhost:8080/test để xem:
Giá trị test là: 123456
4.2. Kiểm tra cập nhật cấu hình theo thời gian thực
Thay đổi giá trị test thành 666666 và publish lại. Truy cập lại endpoint để thấy thay đổi.
4.3. Kiểm tra rollback cấu hình
Rollback cấu hình và kiểm tra endpoint thấy giá trị cũ.
4.4. Kiểm tra khi không truy cập được Apollo
Sửa đổi địa chỉ configService sai và khởi động ứng dụng. Xóa file cache và khởi động lại để thấy giá trị mặc định.
5. Sử dụng Cluster và Namespace
5.1. Tạo Namespace mới
Tạo hai Namespace: dev-1 và dev-2, mỗi Namespace có giá trị test khác nhau.
5.2. Sử dụng Namespace
Cập nhật Namespace trong application.yml:
apollo:
bootstrap:
namespaces: dev-1
6.Deploy SpringBoot lên Kubernetes
6.1. Tạo Docker image
$ mvn clean install
6.2. Tạo file Kubernetes deployment
apiVersion: v1
kind: Service
metadata:
name: springboot-apollo
spec:
type: NodePort
ports:
- name: server
nodePort: 31080
port: 8080
targetPort: 8080
selector:
app: springboot-apollo
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-apollo
spec:
replicas: 1
selector:
matchLabels:
app: springboot-apollo
template:
metadata:
labels:
app: springboot-apollo
spec:
containers:
- name: springboot-apollo
image: mydlqclub/springboot-apollo:0.0.1
ports:
- containerPort: 8080
env:
- name: JAVA_OPTS
value: "-Denv=DEV"
- name: APP_OPTS
value: "-- app.id=apollo-test -- apollo.meta=http://service-apollo-config-server-dev.mydlqcloud:8080"
6.3. Deploy lên Kubernetes
$ kubectl apply -f springboot-apollo.yaml -n mydlqcloud
6.4. Kiểm tra endpoint
Truy cập http://192.168.2.11:31080/test để thấy:
Giá trị test là: 123456