k8s云原生-Fluid-Fluid开发文档

作者: K8S实践指南

环境需求

  • Git
  • Golang (version >= 1.13)
  • Docker (version >= 19.03)
  • Kubernetes (version >= 1.14)
  • GNU Make

对于Golang的安装与配置,请参考此处

对于Docker的安装与配置,请参考此处
Fluid需要使用make命令进行项目构建,使用以下命令安装make

  • Linux
    • sudo apt-get install build-essential

编译、运行和调试

安装controller-gen

$ go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.3.0
$ cp $GOPATH/bin/controller-gen /usr/local/bin/

通过以上方式安装controller-gen时,如果出现如下错误:

go: cannot use path@version syntax in GOPATH mode

你需要在执行安装之前,首先设置GO111MODULE=on:

export GO111MODULE=on

安装完成后,删除环境变量GO111MODULE:

unset GO111MODULE

获取Fluid源码

$ mkdir -p $GOPATH/src/github.com/fluid-cloudnative/
$ cd $GOPATH/src/github.com/fluid-cloudnative
$ git clone https://github.com/fluid-cloudnative/fluid.git

注意:本文在非Go Module模式下完成Fluid的编译、运行和调试。

有关Go module可以参阅 Golang 官方文档 获取更多信息。

编译

Fluid项目根目录下的Makefile文件已经包含了项目开发中的编译、构建、部署等基本逻辑


## 构建dataset-controller, alluxioruntime-controller和csi Binary
$ make build

构建得到的Binary程序位于./bin目录下。

镜像构建

  1. 设置镜像名称

## 为dataset-controller镜像命名

## 为alluxioruntime-controller镜像命名

## 为CSI插件镜像命名
   $ export CSI_IMG=<your-registry>/<your-namespace>/<csi-img-name>

## 为init-user镜像命名
   $ export INIT_USERS_IMG=<your-registry>/<your-namespace>/<csi-img-name>

在运行Fluid之前,需要构建镜像并推送到可以访问的镜像仓库中

  1. 登录镜像仓库:
   $ sudo docker login <docker-registry>
  1. 构建镜像然后推送到仓库:
   $ make docker-push-all

运行

接下来的内容将假设在本地环境中已经通过KUBECONFIG环境变量或是在~/.kube/config文件中配置好了可以访问的Kubernetes集群,您可以通过kubectl cluster-info对该配置进行快速检查。更多有关kubeconfig的信息可以参考 Kubernetes官方文档

以下内容将使用kustomizekubectl 1.14+已经内置了kustomize工具,正在使用kubectl 1.14版本以下的开发者请参考 此处 获取有关kustomize的更多信息

  1. 将构建的镜像上传到Kubernetes集群可以访问的镜像仓库

如果构建并上传的镜像在私有仓库中,请确保在kubernetes集群的各个结点上已经成功执行了sudo docker login <docker-registry>操作

  1. 修改config/fluid/patches中各文件的镜像名

## config/fluid/patches/controller/injections_in_alluxioruntime_controller.yaml
   ...
   ...
   containers:
     - name: manager
       env:
         - name: DEFAULT_INIT_IMAGE_ENV
   ...
   ...

## config/fluid/patches/controller/injections_in_data_controller.yaml
   ...
   ...
   containers:
     - name: manager
   ...
   ...

## config/fluid/patches/csi/injections_in_csi_plugin.yaml
   ...
   ...
   containers:

## change the following two images if necessary
     - name: node-driver-registrar
       image: registry.cn-hangzhou.aliyuncs.com/acs/csi-node-driver-registrar:v1.2.0
     - name: plugins
   ...
   ...
  1. 创建CRD
   $ kubectl apply -k config/crd

检查CRD:

   $ kubectl get crd | grep fluid
   alluxioruntimes.data.fluid.io       2020-11-28T06:20:36Z
   dataloads.data.fluid.io             2020-11-28T06:20:36Z
   datasets.data.fluid.io              2020-11-28T06:20:36Z
  1. 创建Fluid各组件
   $ kubectl apply -k config/fluid

检查Fluid组件:

   $ kubectl get pod -n fluid-system
   NAME                                         READY   STATUS    RESTARTS   AGE
   alluxioruntime-controller-5f9d4b899f-6h8xp   1/1     Running   0          8s
   csi-nodeplugin-fluid-hngkl                   2/2     Running   0          8s
   dataset-controller-6bcf4fc7b9-9rm84          1/1     Running   0          8s
  1. 编写样例或使用提供的样例
   $ kubectl apply -k config/samples

检查样例pod:

   $ kubectl get pod
   NAME                   READY   STATUS    RESTARTS   AGE
   dataset-fuse-5sz2c             1/1     Running   0          61s
   dataset-master-0               2/2     Running   0          93s
   dataset-worker-nbvrm           2/2     Running   0          61s
   et-operator-769b7864d4-glk7v   1/1     Running   0          11d
   nginx-0                        1/1     Running   0          2m3s

注意: 上述命令可能随您组件的不同实现或是不同的样例产生不同的结果。

  1. 通过日志等方法查看您的组件是否运作正常
   $ kubectl logs -n fluid-system <controller_manager_name>
  1. 环境清理
   $ kubectl delete -k config/samples
   $ kubectl delete -k config/fluid
   $ kubectl delete -k config/crd

单元测试

基本测试

在项目根目录下执行如下命令运行基本单元测试(工具类测试和engine测试):

$ make unit-test

如果您需要增加接口中的方法

下载go-mock, 大于Go 1.16

go install github.com/golang/mock/mockgen@v1.6.0

生产mock代码

cd fluid
mockgen --source=pkg/ddc/base/engine.go --destination pkg/ddc/base/mock/mock_engine.go --package base

修改pkg/ddc/base/template_engine_test.go

集成测试

kubebuilder基于envtest提供了controller测试的基本框架,如果您想运行controller测试,您需要执行如下命令安装kubebuilder

$ os=$(go env GOOS)
$ arch=$(go env GOARCH)
$ curl -L https://go.kubebuilder.io/dl/2.3.1/$/${arch} | tar -xz -C /tmp/
$ sudo mv /tmp/kubebuilder_2.3.1_$_${arch} /usr/local/kubebuilder
$ export PATH=$PATH:/usr/local/kubebuilder/bin

接下来,您可以在项目根目录下运行所有的单元测试:

$ make test

如果您在macOS等非linux系统开发,运行测试时若提示exec format error,则需要检查运行测试命令时是否设置了与开发环境不一致的GOOS

调试

前提条件

确保环境中已经安装了go-delve,具体安装过程可以参考go-delve安装手册
本地调试

$ dlv debug cmd/alluxio/main.go

远程调试 在开发Fluid时,通常情况下更为常用的方式是远程调试,确保本机和远程主机均已正确安装了go-delve

在远程主机上:

$ dlv debug --headless --listen ":12345" --log --api-version=2 cmd/alluxio/main.go

这将使得远程主机的调试程序监听指定的端口(e.g. 12345)

在本机上:

$ dlv connect "<remote-addr>:12345" --api-version=2

注意:要进行远程调试,请确保远程主机指定的端口未被占用并且已经对远程主机的防火墙进行了适当的配置。

文章列表

更多推荐

更多
  • Kubenetes扩展教程-三、API 流扩展 忽必烈 API Flow,身份验证网页挂钩,授权网页挂钩,动态准入控制器,关键要点,证明,服务器 API 配置库,服务器 API 配置库,Webhook 配置资源,> —埃隆·马斯克 >> 商业巨头、工业设计师、工程师Kuber
    Apache CN

  • Kubenetes扩展教程-四、扩展 Kubernetes API kuble API 概述,自定义资源定义和控制器,聚合的 API 和扩展服务器,关键要点,API 版本控制,API 组,库 API 中的扩展点,Kubernetes 客户库,Kubernetes 中的运算符模式,kubebuilder
    Apache CN

  • Kubenetes扩展教程-七、即将到来的扩展点 服务目录,集群 API,关键要点,结论,> —西奥多·罗斯福 >> 美国第 26 任总统Kubernetes 凭借其在云原生世界中的强大基础获得了成功。它提供了一组丰富的特性来管理容器化的应用,并提供了各种扩展点来添加新的功能。
    Apache CN

  • Kubenetes扩展教程-六、基础设施扩展 云原生基础架构,存储插件,网络插件,设备插件,关键要点,容器存储接口,kubernetes 中的 CSI 插件,库柏网络模型,容器网络接口(CNI),设备插件 API,设备插件的开发和部署,> —马克·扎克伯格 >> 美国企业家、脸
    Apache CN

  • Kubenetes扩展教程-五、调度扩展 库调度程序概述,配置和管理多个调度程序,调度程序扩展器,关键要点,调度框架,配置详细信息,> —圣雄甘地 >> 印度律师、政治家、社会活动家、作家 调度器是 Kubernetes 的核心部分,用于将工作负载分配给集群中的节点。分
    Apache CN

  • Kubenetes扩展教程-二、`kubectl`插件 二、kubectl插件kubectl 安装和使用,立方插件设计,创建您的第一个 kubectl 插件,插件库:krew,关键要点,> —马歇尔·麦克卢汉 >> 媒体学者和评论家 命令行工具是开发人员的瑞士军刀。您可以连接到后端系
    Apache CN

  • Kubenetes扩展教程-一、简介 忽必烈再世,Kubernetes 扩展模式,关键要点,控制平面组件,节点组件,配置 Kubernetes 集群,控制器,web 手册,二进制插件,立方扩展点,> 卡尔沙堡 >> 美国诗人、传记作家、记者和编辑,三次获得普利策奖K
    Apache CN

  • IOS开发者的AWS和DevOps指南-十、iOS 应用开发的持续交付渠道 Jenkins 管道公司,AWS 代码管道,摘要,Fastlane 测试阶段,AWS 设备场测试阶段,Fastlane 构建阶段,Fastlane 交付阶段,为 AWS 代码管道设置 Jenkins 环境,在 AWS 控制台上设置代码管
    Apache CN

  • IOS开发者的AWS和DevOps指南-九、将 AWS 设备群用于测试 AWS 设备群简介,为应用测试生成 ipa 包,设置设备场项目并安排测试运行,AWS 设备场 Jenkins 插件,使用 Jenkins 自动化 AWS 设备群测试,摘要,使用 AWS 控制台安排测试运行,使用 AWS CLI 计划测试
    Apache CN

  • IOS开发者的AWS和DevOps指南-八、使用 Fastlane 自动构建、测试和发布 使用 Fastlane 匹配和亚马逊 S3 设置代码签名,设置 Jenkins 环境,用 Fastlane 自动化测试和构建,自动发布到 App Store Connect,摘要,正在初始化 Fastlane 匹配,在亚马逊 S3 存储
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多