快速部署Dubbo应用
快速部署Dubbo应用
在上一篇文章中,我们学习了如何开发基于 Spring Boot 的 Dubbo 应用。接下来,我们将学习部署这个 Dubbo 应用。
本文将以 Kubernetes 集群作为基础环境来讲解 Dubbo 应用的部署,部署架构如下图所示:

注意
在实际使用中可能会选择不同的部署环境与架构,如使用服务网格(Service Mesh)、虚拟机等多种部署模式,请参考 部署文档 了解更多详细内容。
部署应用
我们为您提前准备好了示例项目的镜像与部署文件,您可以使用如下命令将示例快速部署到 Kubernetes 集群(请确保在示例源码根目录执行如下命令):
1. kubectl apply -f ./Kubernetes-manifests.yaml
以上命令将自动部署如下资源:
- dubbo-system 命名空间
- Nacos Deployment
- Nacos Service
- dubbo-quickstart 命名空间
- Quickstart Deployment
- Quickstart Service
运行以下命令,确认资源已经部署成功:
1. kubectl get services -n dubbo-system
1. kubectl get services -n dubbo-quickstart
访问应用
部署成功后,可以通过以下方式检查应用状态。
- 请根据情况选择:
- 本地 Kubernetes 集群
- 阿里云 ACK 集群
执行以下命令进行本地端口映射:
1. kubectl port-forward <pod-name> 50051:50051 -n dubbo-quickstart
通过 curl 访问服务:
1. curl \
2. --header "Content-Type: application/json" \
3. --data '["Dubbo"]' \
4. http://localhost:50051/org.apache.dubbo.samples.quickstart.dubbo.api.DemoService/sayHello/
对于云上托管的 Kubernetes 集群,您同样可以使用 port-forward 的方式进行本地访问。除此之外,您也可以通过配置负载均衡(Load Balancer)开放公网访问方式,如下图所示:

附录
如果你有修改示例源码并需要重新打包 docker 镜像,请在示例根目录运行如下命令,随后将镜像推送到远端镜像仓库并修改 kubernetes-manifests.yaml 中的镜像地址后重新部署。
1. docker build -f ./Dockerfile --build-arg APP_FILE=quickstart-service-0.0.1-SNAPSHOT.jar -t demo:latest .
本示例 Kubernetes 部署资源文件也可在 Github 访问:<https://raw.githubusercontent.com/apache/dubbo-samples/master/11-quickstart/Kubernetes-manifests.yaml>。
1. # Namespace
2. apiVersion: v1
3. kind: Namespace
4. metadata:
5. name: dubbo-quickstart
6. ---
7. apiVersion: v1
8. kind: Namespace
9. metadata:
10. name: dubbo-system
11. ---
13. # Nacos
14. apiVersion: apps/v1
15. kind: Deployment
16. metadata:
17. name: nacos
18. namespace: dubbo-system
19. spec:
20. replicas: 1
21. selector:
22. matchLabels:
23. app: nacos
24. template:
25. metadata:
26. labels:
27. app: nacos
28. spec:
29. containers:
30. - name: consumer
31. image: nacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v2.1.2
32. imagePullPolicy: Always
33. resources:
34. requests:
35. memory: "2Gi"
36. cpu: "500m"
37. ports:
38. - containerPort: 8848
39. name: client
40. - containerPort: 9848
41. name: client-rpc
42. env:
43. - name: NACOS_SERVER_PORT
44. value: "8848"
45. - name: NACOS_APPLICATION_PORT
46. value: "8848"
47. - name: PREFER_HOST_MODE
48. value: "hostname"
49. - name: MODE
50. value: "standalone"
51. - name: NACOS_AUTH_ENABLE
52. value: "true"
53. ---
54. apiVersion: v1
55. kind: Service
56. metadata:
57. name: nacos
58. namespace: dubbo-system
59. spec:
60. type: ClusterIP
61. sessionAffinity: None
62. selector:
63. app: nacos
64. ports:
65. - port: 8848
66. name: server
67. targetPort: 8848
68. - port: 9848
69. name: client-rpc
70. targetPort: 9848
71. ---
73. apiVersion: apps/v1
74. kind: Deployment
75. metadata:
76. name: quickstart
77. namespace: dubbo-quickstart
78. spec:
79. replicas: 1
80. selector:
81. matchLabels:
82. app: quickstart
83. template:
84. metadata:
85. labels:
86. app: quickstart
87. spec:
88. containers:
89. - name: quickstart
90. image: sca-registry.cn-hangzhou.cr.aliyuncs.com/dubbo/dubbo-quickstart:1.0
91. imagePullPolicy: Always
92. ports:
93. - name: dubbo
94. containerPort: 50051
95. protocol: TCP
96. - name: dubbo-qos
97. containerPort: 22222
98. protocol: TCP
99. env:
100. - name: JAVA_TOOL_OPTIONS
101. value: "-Dnacos.address=nacos.dubbo-system.svc"
102. ---
104. apiVersion: v1
105. kind: Service
106. metadata:
107. name: quickstart
108. namespace: dubbo-quickstart
109. spec:
110. selector:
111. app: quickstart
112. ports:
113. - name: tcp
114. port: 50051
115. targetPort: 50051
116. - name: http
117. port: 22222
118. targetPort: 22222
119. ---
最后修改 September 17, 2024: fix doc (8b1dd8c278b)
