跳到主要内容

如何构建

Kmesh 需要在具有 Kmesh 内核增强功能的 Linux 环境中编译和构建。目前,Kmesh 可以在多个 OS 版本中编译和运行,具体 OS 版本请参见 Kmesh 支持系统

构建

先决条件

  • 安装 Docker 引擎

    sudo apt-get update
    (可选)sudo apt-get remove docker docker-engine docker.io
    sudo apt install docker.io

    您可以检查 Docker 版本以确保 Docker 已安装。

    docker version
    Client: Docker Engine - Community
    Version: 26.0.1
    API version: 1.45
    Go version: go1.21.9
    Git commit: d260a54
    Built: Thu Apr 11 10:53:21 2024
    OS/Arch: linux/amd64
    Context: default

    Server: Docker Engine - Community
    Engine:
    Version: 26.0.1
    API version: 1.45 (minimum version 1.24)
    Go version: go1.21.9
    Git commit: 60b9add
    Built: Thu Apr 11 10:53:21 2024
    OS/Arch: linux/amd64
    Experimental: false
    containerd:
    Version: 1.6.31
    GitCommit: e377cd56a71523140ca6ae87e30244719194a521
    runc:
    Version: 1.1.12
    GitCommit: v1.1.12-0-g51d5e94
    docker-init:
    Version: 0.19.0
    GitCommit: de40ad0
  • 下载 Kmesh-build 镜像

    要编译 Kmesh 镜像,您需要准备 Kmesh 源代码和 Kmesh-build 镜像。可以使用以下命令获取镜像:

    docker pull ghcr.io/kmesh-net/kmesh-build-x86:latest

    注意:Kmesh-build 镜像需要与源代码版本匹配。

从源代码构建 Kmesh

从 GitHub 克隆源代码。

git clone https://github.com/kmesh-net/kmesh.git

代码编译

  • 通过 build-image 编译 Kmesh

    cd kmesh/
    make build
  • 通过脚本编译 Kmesh

    Kmesh 也提供通过脚本编译的方式

    [root@dev] ./kmesh_compile.sh

    注意,如果您使用脚本编译,需要确保您的 OS 系统版本是 Kmesh 支持系统 中的一个!

Kmesh 编译完成后,构建产物将输出到 out 目录。

ls out/amd64/
kmesh-daemon libbpf.so libbpf.so.0.8.1 libkmesh_deserial.so libprotobuf-c.so.1 mdacore
kmesh-cni libboundscheck.so libbpf.so.0 libkmesh_api_v2_c.so libprotobuf-c.so libprotobuf-c.so.1.0.0

构建 Docker 镜像

在 Kmesh 源代码目录中执行 make docker

用户可以指定构建参数,如下例所示:

用户自定义 HUB、TARGET、TAG 值。如果未指定,将使用默认值。
HUB=ghcr.io/kmesh-net
TARGET=kmesh
TAG= #git sha

[root@dev docker] make docker
...
Successfully tagged ghcr.io/kmesh-net/kmesh:b68790eb07830e757f4ce6d1c478d0046ee79730

[root@dev docker] make docker HUB=ghcr.io/kmesh-net TARGET=kmesh TAG=latest
...
Successfully tagged ghcr.io/kmesh-net/kmesh:latest

检查本地镜像仓库中现有的 Kmesh 镜像:

[root@dev docker]# docker images ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.io/kmesh-net/kmesh latest 71aec5898c44 About an hour ago 506MB

编译清理

您可以使用以下命令清理二进制文件。

[root@dev] make clean