快速开发和部署一个 Dubbo 应用
接下来,我们将跟随文档完成:
- 创建一个 Dubbo 应用
- 将应用打包为 Docker 镜像
- 将镜像部署到 Kubernetes 集群
前置条件
注意
我们会将应用部署到 Kubernetes,因此请确保您有一个本地环境可访问的 Kuberentes 集群。Dubbo 提供了相应的工具和解决方案来简化整个微服务开发、打包与部署过程,所以开始前我们需要先安装 dubboctl
工具。
curl -L https://dubbo.apache.org/downloadKube.sh | sh -
cd dubbo-kube-$version
export PATH=$PWD/bin:$PATH
快速创建 Dubbo 应用
在任意目录,运行以下命令即可生成一个基本的 Dubbo 应用。
dubboctl create -l java dubbo-hello
cd dubbo-hello
dubboctl create -l go dubbo-hello
cd dubbo-hello
dubboctl create -l web dubbo-hello
cd dubbo-hello
dubboctl create -l nodejs dubbo-hello
cd dubbo-hello
dubboctl create -l rust dubbo-hello
cd dubbo-hello
以 `java` 为例,项目目录结构如下:
初始化微服务集群
dubboctl 可以帮助我们快速的初始化微服务集群中需要的注册中心、监控系统、服务治理中心等组件,只需要运行以下命令:
dubboctl manifest install --profile=demo
作为示例用途,以上命令会一键安装 Zookeeper、Console、Prometheus、Grafana、Zipkin、Ingress 等组件,关于
--profile=demo
更多解释及可选值请参见文档说明。
运行以下命令检查集群初始化准备就绪
kubectl get services -n dubbo-system
部署应用
注意
为了快速体验应用部署过程,我们将跳过本地源码构建的过程,直接是使用官方预先构建好的 Docker 镜像进行部署。如果您想了解如何从源码构建镜像,请参考下一篇 定制开发微服务应用。在刚刚创建的示例项目根目录,运行以下命令生成 Kubernetes 资源清单,其中,--image
指定了官方预先准备好的示例镜像(镜像与刚刚生成的示例应用源码完全相同)。
dubboctl deploy --image=docker.io/apache/dubbo-java-quickstart:latest
# 如果使用 go 语言项目模板,则请使用 dubbo-go-quickstart:latest,其他语言类推
命令执行成功后,可以在当前目录看到生成的 kube.yaml
文件,其中包括 deployment、service 等 kubernetes 资源定义。
接下来,将应用部署到 Kubernetes 环境。
kubectl apply -f ./kube.yaml
检查部署状态
kubectl get services
访问应用
部署成功后,可以通过以下方式检查应用状态。
如果使用的本地 Kubernetes 集群,请使用以下方式访问应用验证部署状态,执行以下命令:
dubboctl dashboard admin
以上命令会自动打开 admin 控制台,如果在您的环境下没有打开,请使用浏览器访问以下地址:
http://localhost:38080/admin
通过 triple 协议,可以继续测试 Dubbo 服务,执行以下命令进行端口映射:
kubectl port-forward <pod-name> 50051:50051
通过 curl 访问服务:
curl \ --header "Content-Type: application/json" \ --data '["Dubbo"]' \ http://localhost:50051/com.example.demo.dubbo.api.DemoService/sayHello/
对于云上托管的哦 Kubernetes 集群,可以使用以下方式验证,这里以阿里云 ACK 集群为例:
ACK ingerss-controller 的访问方式……
更多内容
部署示例应用到 Kubernetes 集群
演示如何将当前应用打包为 Docker 镜像,并部署到 Kubernetes 集群。
示例源码解读
关于示例应用的源码讲解,学习如何定制 Dubbo Spring Boot 应用。
使用 dubboctl 创建多语言应用
如何使用 dubboctl 快速创建 go、node.js、web、rust 等多语言应用。