快速部署Dubbo应用

快速部署Dubbo应用

在上一篇文章中,我们学习了如何开发基于 Spring Boot 的 Dubbo 应用。接下来,我们将学习部署这个 Dubbo 应用。

本文将以 Kubernetes 集群作为基础环境来讲解 Dubbo 应用的部署,部署架构如下图所示:

Dubbo+Kubernetes+Nacos 部署架构图

注意

在实际使用中可能会选择不同的部署环境与架构,如使用服务网格(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. ---
  12. # Nacos
  13. apiVersion: apps/v1
  14. kind: Deployment
  15. metadata:
  16. name: nacos
  17. namespace: dubbo-system
  18. spec:
  19. replicas: 1
  20. selector:
  21. matchLabels:
  22. app: nacos
  23. template:
  24. metadata:
  25. labels:
  26. app: nacos
  27. spec:
  28. containers:
  29. - name: consumer
  30. image: nacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v2.1.2
  31. imagePullPolicy: Always
  32. resources:
  33. requests:
  34. memory: "2Gi"
  35. cpu: "500m"
  36. ports:
  37. - containerPort: 8848
  38. name: client
  39. - containerPort: 9848
  40. name: client-rpc
  41. env:
  42. - name: NACOS_SERVER_PORT
  43. value: "8848"
  44. - name: NACOS_APPLICATION_PORT
  45. value: "8848"
  46. - name: PREFER_HOST_MODE
  47. value: "hostname"
  48. - name: MODE
  49. value: "standalone"
  50. - name: NACOS_AUTH_ENABLE
  51. value: "true"
  52. ---
  53. apiVersion: v1
  54. kind: Service
  55. metadata:
  56. name: nacos
  57. namespace: dubbo-system
  58. spec:
  59. type: ClusterIP
  60. sessionAffinity: None
  61. selector:
  62. app: nacos
  63. ports:
  64. - port: 8848
  65. name: server
  66. targetPort: 8848
  67. - port: 9848
  68. name: client-rpc
  69. targetPort: 9848
  70. ---
  71. apiVersion: apps/v1
  72. kind: Deployment
  73. metadata:
  74. name: quickstart
  75. namespace: dubbo-quickstart
  76. spec:
  77. replicas: 1
  78. selector:
  79. matchLabels:
  80. app: quickstart
  81. template:
  82. metadata:
  83. labels:
  84. app: quickstart
  85. spec:
  86. containers:
  87. - name: quickstart
  88. image: sca-registry.cn-hangzhou.cr.aliyuncs.com/dubbo/dubbo-quickstart:1.0
  89. imagePullPolicy: Always
  90. ports:
  91. - name: dubbo
  92. containerPort: 50051
  93. protocol: TCP
  94. - name: dubbo-qos
  95. containerPort: 22222
  96. protocol: TCP
  97. env:
  98. - name: JAVA_TOOL_OPTIONS
  99. value: "-Dnacos.address=nacos.dubbo-system.svc"
  100. ---
  101. apiVersion: v1
  102. kind: Service
  103. metadata:
  104. name: quickstart
  105. namespace: dubbo-quickstart
  106. spec:
  107. selector:
  108. app: quickstart
  109. ports:
  110. - name: tcp
  111. port: 50051
  112. targetPort: 50051
  113. - name: http
  114. port: 22222
  115. targetPort: 22222
  116. ---

最后修改 September 17, 2024: fix doc (8b1dd8c278b)