这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

2. 快速开始

Koupleless 快速开始

1 - 2.1 模块开发

Koupleless 快速开始

本上手指南主要介绍动态合并部署模式,用于省资源与提高研发效率。如果你只是想节省资源,可以使用静态合并部署。本上手指南使用官网的 tomacat sample 进行演示: 1.

预先准备

研发工具

  • jdk 8
  • maven v3.9.0+
  • git
  • arkctl v0.2.1+, 安装方式请查看这里

代码下载

git clone git@github.com:koupleless/samples.git

这个仓库包含了多个框架的 samples,基座和模块都在同一个代码仓库里,如图所示

导入 springboot-samples 工程到编译器

  1. 导入 springboot-samples,有两种方式导入工程到编译器
  • 方式一:导入 samples 到编译器,然后选择 springboot-samples 子目录的 pom 为 maven 工程
  • 方式二:直接导入 springboot-samples 到编译器,此时自动将 springboot-samples 导入为 maven 工程
  1. 执行如下命令构建 springboot-samples/web/tomcat 基座与两个模块
mvn -pl web/tomcat/biz1-web-single-host,web/tomcat/biz2-web-single-host -am clean package -DskipTests

如果构建失败,请检查 maven 版本是否 >= 3.9.x(可将公共 bundle 自动 install),构建完之后可以看到模块打出的模块 jar 包

本地环境启动验证

  1. 启动基座,按照普通应用启动即可
  2. 安装模块1
arkctl deploy /xxx/path/to/biz1-web-single-host/target/biz1-web-single-host-0.0.1-SNAPSHOT-ark-biz.jar
  1. 安装模块2
arkctl deploy /xxx/path/to/biz2-web-single-host/target/biz2-web-single-host-0.0.1-SNAPSHOT-ark-biz.jar
  1. 测试验证
curl http://localhost:8080/biz1/

执行 curl 命令返回 hello to /biz1 deploy

curl http://localhost:8080/biz2/

执行 curl 命令返回 hello to /biz2 deploy

更多实验请查看 samples 用例

点击此处

2 - 2.2 模块运维

Koupleless 快速开始

本上手指南主要介绍基于 Module Controller V2 的模块运维。本上手指南包含:

  1. 环境准备
  2. Module Controller V2 部署
  3. 测试基座准备
  4. 模块发布与状态查看

环境准备

K8S 环境部署

Module Controller V2 基于 K8S 构建模块运维能力,因此,首先需要准备一个基础 K8S 环境。

注意: 目前 Module Controller 只支持 arm64 / amd64 的运行环境。

如果已经有可用的 K8S 集群,请跳过本节。

本地测试推荐使用 Minikube 快速在本地搭建 K8S。Minikube 是一个开源的本地 Kubernetes 搭建工具,能够帮助我们快速完成 K8S 各依赖组件的部署。

为了安装 Minikube,首先需要安装 Docker 运行环境:Docker官方网站

完成 Docker 安装并完成 Docker daemon 启动之后,我们就完成了所有 Minikube 的安装准备工作。

Minikube 的安装可以参考官方文档

Module Controller V2 部署

Module Controller V2 有两种部署方式:

  1. 本地运行(需要配置 go 语言环境,不建议)
  2. 镜像部署(建议)

接下来我们以镜像部署为例。

首先我们需要为 Module Controller V2 准备必要的 RBAC 配置。

  1. 下载 Service Account YAML
  2. 下载 Cluster Role YAML
  3. 下载 Cluster Role Binding YAML

接下来,依次 apply 上面的三个 yaml 文件,完成 service account 的权限设置与绑定。

接下来我们需要准备 Module Controller 部署的 Pod Yaml

apiVersion: v1
kind: Pod
metadata:
  name: module-controller
  labels:
    app: module-controller
spec:
  serviceAccountName: virtual-kubelet # 上一步中配置好的 Service Account
  containers:
    - name: module-controller
      image: serverless-registry.cn-shanghai.cr.aliyuncs.com/opensource/release/module_controller:2.1.0 # 已经打包好的镜像
      imagePullPolicy: Always
      resources:
        limits:
          cpu: "1000m"
          memory: "400Mi"
      ports:
        - name: httpTunnel
          containerPort: 7777
      env:
        - name: ENABLE_HTTP_TUNNEL
          value: "true"

apply 上述 Module Controller 的 yaml 到 K8S 集群,等待 Module Controller Pod 变成 Running 状态。

接下来,模块运维能力已经搭建完成了,接下来将准备测试基座和测试模块。

测试基座部署

为了方便上手,我们这里也准备好了测试基座的 Docker 镜像,首先下载基座 Yaml

apiVersion: v1
kind: Pod
metadata:
  name: base
  labels:
    app: base
spec:
  containers:
    - name: base
      image: serverless-registry.cn-shanghai.cr.aliyuncs.com/opensource/test/base-web:1.1.1 # 已经打包好的镜像
      imagePullPolicy: Always
      ports:
        - name: base
          containerPort: 8080
        - name: arklet
          containerPort: 1238
      env:
        - name: MODULE_CONTROLLER_ADDRESS
          value: {YOUR_MODULE_CONTROLLER_IP}

同上一步,将yaml中的 {YOUR_MODULE_CONTROLLER_IP} 替换为实际 Module Controller 的Pod IP。

apply 更改后的 yaml 到 K8S 集群,等待 Base Pod 变成 Running 状态。

基座启动完成之后,我们可以通过以下方式验证基座已经成功映射成为 VNode:

kubectl get nodes

看到存在名为 vnode.test-base.dev 的 node,并且状态为 Ready,则说明基座已经成功启动并完成映射。

上述 uuid 是在基座启动时生成的,每一次重新启动都会不同

接下来为了方便验证访问,我们使用 port-forward 将基座容器的服务暴露出来,使用如下命令:

kubectl port-forward base 8080:8080

接下来访问链接 如果能够正常访问,说明已完成映射。

测试模块发布与状态查看

模块发布

为了对比,我们首先看一下模块还没有安装的时候的情况,访问基座服务:模块测试

此时应当返回错误页,表明模块还未安装。

接下来我们将使用 Deployment 对模块进行发布,将下面的模块 yaml apply 到 K8S ,即可进行模块发布。这里以单个模块发布为例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: biz1
  labels:
    virtual-kubelet.koupleless.io/component: module-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      module: biz1
  template:
    metadata:
      labels:
        module: biz1
        virtual-kubelet.koupleless.io/component: module
    spec:
      containers:
        - name: biz1
          image: https://serverless-opensource.oss-cn-shanghai.aliyuncs.com/module-packages/stable/biz1-web-single-host-0.0.1-SNAPSHOT-ark-biz.jar
          env:
            - name: BIZ_VERSION
              value: 0.0.1-SNAPSHOT
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: base.koupleless.io/stack
                    operator: In
                    values:
                      - java
                  - key: vnode.koupleless.io/version
                    operator: In
                    values:
                      - 1.0.0
                  - key: vnode.koupleless.io/name
                    operator: In
                    values:
                      - koupleless-sample
      tolerations:
        - key: "schedule.koupleless.io/virtual-node"
          operator: "Equal"
          value: "True"
          effect: "NoExecute"
        - key: "schedule.koupleless.io/node-env"
          operator: "Equal"
          value: "dev"
          effect: "NoExecute"

发布完成之后,可以通过 kubectl get pods 来查看所有模块 pod 的状态。

当 deployment 创建出的 pod 状态变为 Running 之后,表示当前模块已经安装完成了,接下来我们再次访问基座服务: 模块测试 来验证模块安装情况。

可以看到,页面内容已经发生了变化,展示:hello to /biz1 deploy ,表明模块已经安装完成。

模块删除

模块删除可以直接通过删除模块的 Deployment 来实现,使用命令:

kubectl delete deployment biz1

可以通过 kubectl get pods 来查看 pod 是否已经删除成功。

删除成功之后,再次访问基座服务 模块测试 来验证模块卸载情况。

可以看到,页面内容又恢复回了模块未安装的状态,表明模块卸载完成。

3 - 2.3 模块完整生命周期过程

Koupleless 快速开始

本上手指南主要介绍动态合并部署模式,用于省资源与提高研发效率。如果你只是想节省资源,可以使用静态合并部署。本上手指南包含:

  1. 基座接入
  2. 模块接入
  3. 模块开发验证
  4. 模块部署上线(暂不可用,待更新)

这里也提供了视频教程,可点击此处查看

预先准备

研发工具

  • jdk 8, jdk 17, jdk21+
  • maven v3.9.0+
  • arkctl v0.2.1+, 安装方式请查看这里

运维工具 (静态合并部署可不需要)

  • docker
  • kubectl
  • k8s 集群如 minikube v1.10+

基座接入

可参考此处

模块接入

可参考此处

本地环境开发验证

可查看这里

模块部署上线, 以 minikube 集群为例 (暂不可使用,待更新)

第一步:部署运维组件 ModuleController

kubectl apply -f xxx/xxx.yaml

第二步:使用样例基座发布

  1. 基座部署到 k8s 集群中,创建基座的 service,暴露端口, 可参考这里
  2. 执行 minikube service base-web-single-host-service, 访问基座的服务
微服务演进成本

第三步:发布模块

有两种方式发布模块,

  1. 直接部署本地模块 jar 包到 k8s 集群中
arkctl deploy ${模块构建出的 jar 包路径} --pod ${namespace}/${podname}
  1. 通过 k8s 模块 deployment 部署上线 创建模块 deployment,直接使用 kubectl apply 进行发布
kubectl apply -f xxx/xxxxx/xx.yaml

第四步:测试验证

更多实验请查看 samples 用例

点击此处