当前位置:   article > 正文

7-4 k8s 示例-部署 Dubbo 简单应用_dubbo使用kubsphere部署

dubbo使用kubsphere部署

更新时间:2023年4月

简介

本文使用 apache-dubbo 官方提供的代码,简单完成一个在 k8s 上,以 zookeeper 为注册中心的微服务部署示例

参考

dubbo 官方网站:Apache Dubbo

dubbo 示例的 github 地址:apache/dubbo-samples: samples for Apache Dubbo (github.com)

dubbo 文档(本文主要参考部分):3 - Dubbo x Spring Boot 开发微服务应用 | Apache Dubbo

创建镜像

构建 dubbo 简单应用的镜像

创建 Dockerfile

采用多阶段镜像构建,并使用 target 区分二阶段的不同镜像

# 一阶段镜像 builder,下载 dubbo 的官方示例,并使用 maven 构建

FROM maven:3.9.1 as builder


WORKDIR /

RUN git clone https://github.com/apache/dubbo-samples.git

RUN cd dubbo-samples/1-basic/dubbo-samples-spring-boot && \
    mvn clean install




# 使用 image target 区分不同的二阶段镜像
# dubbo-consumer 镜像,拷贝一阶段 maven 构建生成的 dubbo-samples-spring-boot-consumer-1.0-SNAPSHOT.jar 
FROM registry.cn-hangzhou.aliyuncs.com/kmust/openjdk:17.0.2-jre-slim-buster as consumer

MAINTAINER nemo "sky.nemo@outlook.com"

ENV TZ=Asia/Shanghai

WORKDIR /dubbo/consumer

COPY --from=builder /dubbo-samples/1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-consumer/target/dubbo-samples-spring-boot-consumer-1.0-SNAPSHOT.jar /dubbo/consumer

ENTRYPOINT ["java","-jar","/dubbo/consumer/dubbo-samples-spring-boot-consumer-1.0-SNAPSHOT.jar"]




# dubbo-interface 镜像,未使用,可以忽略
FROM registry.cn-hangzhou.aliyuncs.com/kmust/openjdk:17.0.2-jre-slim-buster as interface

MAINTAINER nemo "sky.nemo@outlook.com"

ENV TZ=Asia/Shanghai

WORKDIR /dubbo/interface

COPY --from=builder /dubbo-samples/1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-interface/target/dubbo-samples-spring-boot-interface-1.0-SNAPSHOT.jar /dubbo/interface

ENTRYPOINT ["java","-jar","/dubbo/interface/dubbo-samples-spring-boot-interface-1.0-SNAPSHOT.jar"]




# dubbo-provider 镜像,拷贝一阶段 maven 构建生成的 dubbo-samples-spring-boot-provider-1.0-SNAPSHOT.jar
FROM registry.cn-hangzhou.aliyuncs.com/kmust/openjdk:17.0.2-jre-slim-buster as provider 

MAINTAINER nemo "sky.nemo@outlook.com"

ENV TZ=Asia/Shanghai

WORKDIR /dubbo/provider

COPY --from=builder /dubbo-samples/1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider/target/dubbo-samples-spring-boot-provider-1.0-SNAPSHOT.jar /dubbo/provider

ENTRYPOINT ["java","-jar","/dubbo/provider/dubbo-samples-spring-boot-provider-1.0-SNAPSHOT.jar"]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

构建镜像

$ docker build --target provider -t registry.cn-hangzhou.aliyuncs.com/kmust/dubbo-provider:1.0 .

$ docker build --target consumer -t registry.cn-hangzhou.aliyuncs.com/kmust/dubbo-consumer:1.0 .

$ docker build --target interface -t registry.cn-hangzhou.aliyuncs.com/kmust/dubbo-interface:1.0 .

# 上传镜像,略
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

部署

Namespace

$ vim ns-dubbo.yaml
---
apiVersion: v1
kind: Namespace
metadata:
  name: dubbo
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

应用声明

$ kubectl apply -f ns-dubbo.yaml
  • 1

Configmap

创建应用配置

provider 配置

主要配置了 zookeeper 的地址

$ vim application-config/provider-application.yaml
---
zookeeper:
  address: zk-cs.zk

dubbo:
  application:
    name: dubbo-springboot-demo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://${zookeeper.address:127.0.0.1}:2181
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

consumer 配置

$ vim application-config/consumer-application.yaml
---
zookeeper:
  address: zk-cs.zk

dubbo:
  application:
    name: dubbo-springboot-demo-consumer
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://${zookeeper.address:127.0.0.1}:2181
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
创建 ConfigMap
# 根据应用配置创建 configmap
$ kubectl create configmap application-config --from-file=./application-config --namespace dubbo
  • 1
  • 2

Deployment

provider 的 Deployment

$ vim deploy-dubbo-provider.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubbo-provider
  namespace: dubbo
  labels:
    app.kubernetes.io/name: dubbo-provider
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: dubbo-provider
  template:
    metadata:
      labels:
        app.kubernetes.io/name: dubbo-provider
    spec:
      # 业务容器
      restartPolicy: Always
      containers:
      - name: dubbo-provider
        image: registry.cn-hangzhou.aliyuncs.com/kmust/dubbo-provider:1.0
        imagePullPolicy: IfNotPresent        
        # 挂载卷
        volumeMounts:
        - name: provider-config
          mountPath: "/dubbo/provider/config/application.yaml"
          # 使用 subPath,防止覆盖其他的文件
          subPath: "application.yaml"
          
      # 声明卷
      volumes:
      # 声明 configmap 挂载
      - name: provider-config
        configMap:
          name: application-config
          # 重命名为 application.yaml
          items:
          - key: "provider-application.yaml"
            path: "application.yaml"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

应用声明

$ kubectl apply -f deploy-dubbo-provider.yaml 
  • 1

检查日志

$ kubectl get pods -n dubbo
NAME                              READY   STATUS    RESTARTS   AGE
dubbo-provider-7645b5fdb4-9wnwp   1/1     Running   0          8s


# 日志出现 Current Spring Boot Application is await... 即表示正常启动 provider
$ kubectl logs -f dubbo-provider-7645b5fdb4-9wnwp -n dubbo
......
2023-04-23 23:08:46.204  INFO 1 --- [           main] o.a.d.s.d.provider.ProviderApplication   : Started ProviderApplication in 5.359 seconds (JVM running for 6.301)
2023-04-23 23:08:46.212  INFO 1 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener :  [Dubbo] Current Spring Boot Application is await...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

consumer 的 Deployment

$ vim deploy-dubbo-consumer.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubbo-consumer
  namespace: dubbo
  labels:
    app.kubernetes.io/name: dubbo-consumer
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: dubbo-consumer
  template:
    metadata:
      labels:
        app.kubernetes.io/name: dubbo-consumer
    spec:
      # 业务容器
      restartPolicy: Always
      containers:
      - name: dubbo-provider
        image: registry.cn-hangzhou.aliyuncs.com/kmust/dubbo-consumer:1.0
        imagePullPolicy: IfNotPresent        
        # 挂载卷
        volumeMounts:
        - name: consumer-config
          mountPath: "/dubbo/consumer/config/application.yaml"
          # 使用 subPath,防止覆盖其他的文件
          subPath: "application.yaml"
          
      # 声明卷
      volumes:
      # 声明 configmap 挂载
      - name: consumer-config
        configMap:
          name: application-config
          # 重命名为 application.yaml
          items:
          - key: "consumer-application.yaml"
            path: "application.yaml"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

应用声明

$ kubectl apply -f deploy-dubbo-consumer.yaml 
  • 1

查看日志

$ kubectl get pods -n dubbo
NAME                              READY   STATUS    RESTARTS   AGE
dubbo-consumer-56985f8c9d-b7r5d   1/1     Running   0          13s
dubbo-provider-7645b5fdb4-9wnwp   1/1     Running   0          2m25s



# consumer 接收到 provider 的 hello world 消息,每秒一次
$ kubectl logs -f dubbo-consumer-56985f8c9d-b7r5d -n dubbo
...
2023-04-23 23:11:10.837  INFO 1 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener :  [Dubbo] Current Spring Boot Application is await...
Sun Apr 23 23:11:11 CST 2023 Receive result ======> Hello world
Sun Apr 23 23:11:12 CST 2023 Receive result ======> Hello world
Sun Apr 23 23:11:13 CST 2023 Receive result ======> Hello world
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

其他检查

zookeeper 检查 dubbo 应用的注册情况

# 进入 zookeeper
$ kubectl exec -it zk-0 -n zk -- bash


# 连接 zookeeper
root@zk-0:/apache-zookeeper-3.7.1-bin# zkCli.sh -server 127.0.0.1

# 查询 provider 信息
[zk: 127.0.0.1(CONNECTED) 9] ls /services/dubbo-springboot-demo-provider
[172.20.119.245:20880]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/169506
推荐阅读
相关标签
  

闽ICP备14008679号