目录
目录README.md

PCG-第三次作业

软件92 易俊泉 2194411245

作业要求

请将第一次作业的程序通过Deployment或StatefuleSet的方式部署在Kubernetes上,作业环境可选择minikube(https://minikube.sigs.k8s.io)或kind(https://kind.sigs.k8s.io/) 请提交对应的Deployment/StatefulSet定义文件(yaml格式),以及相应的Service定义文件(yaml格式)

文件目录

file:.
│  client_deployment.yaml
│  README.md
│  server_deployment.yaml
├─client_deployment
├─client_java
└─server_go
  • client_deployment.yaml:gRPC客户端部署文件
  • server_deployment.yaml:gRPC服务端部署文件
  • client_deployment:目录,包含客户端的jar包与Dockerfile文件
  • client_java:目录,包含用java springboot框架实现的gRPC客户端
  • server_go:目录,包含用go实现的gRPC服务端
  • README.md:说明文档

操作指南

快速开始

基于k8s部署方式

Windows系统

  1. 启动docker

  2. 启动minikube

  3. 进入项目目录

  4. 部署服务端

    $ kubectl apply -f server_deployment.yaml    
    # deployment.apps/grpc-server-deployment created                                                                          
    # service/my-grpc-server-service created    
  5. 部署客户端

    $ kubectl apply -f client_deployment.yaml
    # deployment.apps/grpc-client-deployment created
    # service/my-grpc-client-service created
  6. 查看部署的资源

    $ kubectl get all
    # NAME                                          READY   STATUS    RESTARTS   AGE
    # pod/grpc-client-deployment-7664467b85-tpgls   1/1     Running   0          7m35s
    # pod/grpc-server-deployment-6fc8c9b96d-r59kh   1/1     Running   0          7m45s
    # 
    # NAME                             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    # service/kubernetes               ClusterIP   10.96.0.1       <none>        443/TCP          24d
    # service/my-grpc-client-service   NodePort    10.109.112.41   <none>        8081:30081/TCP   7m35s
    # service/my-grpc-server-service   ClusterIP   10.100.58.119   <none>        9090/TCP         7m45s
    # 
    # NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    # deployment.apps/grpc-client-deployment   1/1     1            1           7m35s
    # deployment.apps/grpc-server-deployment   1/1     1            1           7m45s
    # 
    # NAME                                                DESIRED   CURRENT   READY   AGE
    # replicaset.apps/grpc-client-deployment-7664467b85   1         1         1       7m35s
    # replicaset.apps/grpc-server-deployment-6fc8c9b96d   1         1         1       7m45s

    client外部访问端口为30081。

  7. 启动my-grpc-client-service(以下部分Windows系统与Linux系统的操作步骤不同)

     $ minikube service my-grpc-client-service    
    # |-----------|------------------------|-------------|---------------------------|
    # | NAMESPACE |          NAME          | TARGET PORT |            URL            |
    # |-----------|------------------------|-------------|---------------------------|
    # | default   | my-grpc-client-service | http/8081   | http://192.168.49.2:30081 |
    # |-----------|------------------------|-------------|---------------------------|
    # * Starting tunnel for service my-grpc-client-service.
    # |-----------|------------------------|-------------|------------------------|
    # | NAMESPACE |          NAME          | TARGET PORT |          URL           |
    # |-----------|------------------------|-------------|------------------------|
    # | default   | my-grpc-client-service |             | http://127.0.0.1:53872 |
    # |-----------|------------------------|-------------|------------------------|
    # * 正通过默认浏览器打开服务 default/my-grpc-client-service...
    # ! Because you are using a Docker driver on windows, the terminal needs to be open to run it.
  8. 自动打开浏览器,会随机分配一个端口进行访问,接下来的测试根据自己的端口号进行修改即可

    image-20221115153817751
  9. 测试put方法

    访问格式:http://127.0.0.1:53872/put?type={pet_type}&&name={pet_name}

    pet_type:宠物类型cat、dog、snake、hamster,其他输入会默认设置为UNRECOGNIZED,从而报错:Can't get the number of an unknown enum value.

    pet_name:宠物名,无特殊要求

    测试样例:http://127.0.0.1:53872/put?type=cat&&name=tom,结果如下

    image-20221115154306344
  10. 测试get方法

    访问格式:http://127.0.0.1:53872/get?id={pet_id}

    这里的id由put方法获得:1999e21f-64b9-11ed-a02c-0242ac110004,若输入非法id会显示相关错误。

    测试样例1:http://127.0.0.1:53872/get?id=1999e21f-64b9-11ed-a02c-0242ac110004,结果如下

    image-20221115154613289

    测试样例2:http://127.0.0.1:53872/get?id=123,结果如下

    image-20221115154711964

  11. 测试delete方法

    访问格式:http://127.0.0.1:53872/delete?id={pet_id}

    这里的id由put方法获得:1999e21f-64b9-11ed-a02c-0242ac110004,若输入非法id会显示相关错误。

    测试样例1:http://127.0.0.1:53872/delete?id=1999e21f-64b9-11ed-a02c-0242ac110004,结果如下

    image-20221115154830068 image-20221115154842734

Linux系统

第七步开始与Windows方式不同

  1. 查看minikube集群所在IP,每台机器不同,我的机器如下,请自行调整

    $ minikube ip
    # 192.168.58.2
  2. 打开浏览器

  3. 接下来的测试与Windows系统别无二致,只需要将地址和端口号改为192.168.58.2:30081

    image-20221115172505910

基于源码方式

启动服务端

进入server_go目录,运行go run server.go

$ go run server.go  
2022/11/15 15:52:57 gRPC服务端启动成功:9090!
2022/11/15 15:52:57 
 ██████╗ ██████╗ ██████╗  ██████╗
██╔════╝ ██╔══██╗██╔══██╗██╔════╝
██║  ███╗██████╔╝██████╔╝██║     
██║   ██║██╔══██╗██╔═══╝ ██║     
╚██████╔╝██║  ██║██║     ╚██████╗
 ╚═════╝ ╚═╝  ╚═╝╚═╝      ╚═════╝

启动客户端

进入client_go目录,使用IDEA或者vscode(注意不能有中文路径)启动ThirdApplication.java

本地版本和部署版本不同在于grpc-server的地址设置

srping:
  application:
    name: client_java
server:
  port: 8081
grpc:
  client:
    grpc-server:
      # address: 'dns:///my-grpc-server-service:9090'
      address: 'static://localhost:9090'
      negotiationType: plaintext

剩余测试步骤参考上述步骤,只需将访问地址与端口改为localhost:8081

关于

第三个作业

93.0 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号