NanoCluster-Basic-Package 应用开发

K3s部署

一、简介

K3s 是轻量级的 Kubernetes。它易于安装,仅需要 Kubernetes 内存的一半,适用于资源有限的环境,特别是边缘计算、物联网等应用场景。

二、部署教程

2.1. 准备环境

首先,确保集群的网络正常,并且能够访问互联网。你可以使用 SSH 远程登录到集群中的每台机器,执行后续安装命令。确保主节点和工作节点的 IP 地址固定,并且网络间能够互相访问。

2.2. 安装 K3s(主节点)

K3s 的安装非常简单。你只需在主节点上运行以下命令:

curl -sfL https://get.k3s.io | sh -

如果下载很慢可以使用以下命令加速安装

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

该命令会自动下载并安装 K3s。安装过程完成后,通过以下命令检查 K3s 服务是否启动:

sudo systemctl status k3s

如果显示 active (running),表示 K3s 已成功启动。

sudo systemctl status k3s
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-02-17 12:07:15 CST; 3h 38min ago
       Docs: https://k3s.io
    Process: 8803 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service 2>/dev/null (code=exited, status=0/SUCCESS)
    Process: 8805 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
    Process: 8808 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 8810 (k3s-server)
      Tasks: 32
     Memory: 583.2M
        CPU: 29min 49.755s
     CGroup: /system.slice/k3s.service
             ├─8810 "/usr/local/bin/k3s server"
             └─8895 "containerd "

2.3. 安装 K3s(工作节点)

在工作节点上安装 K3s 时,需要将工作节点与主节点连接。使用以下命令在工作节点上安装 K3s:

curl -sfL https://get.k3s.io | K3S_URL=https://<主节点IP>:6443 K3S_TOKEN=<主节点Token> sh -

上述命令中,主节点IP 需要替换为主节点的 IP 地址,主节点Token 是从主节点获取的令牌。你可以通过以下命令在主节点上查看令牌:

sudo cat /var/lib/rancher/k3s/server/node-token

安装完成后,使用以下命令验证工作节点是否成功加入集群:

sudo kubectl get nodes

如果工作节点显示在列表中,且状态为 Ready,则表示工作节点成功加入集群。

sipeed@lpi3h-a2d1:~$ sudo kubectl get nodes
NAME         STATUS   ROLES                  AGE     VERSION
lpi3h-1967   Ready    <none>                 20h   v1.31.5+k3s1
lpi3h-231e   Ready    <none>                 20h   v1.31.5+k3s1
lpi3h-4782   Ready    <none>                 56m   v1.31.5+k3s1
lpi3h-a2d1   Ready    control-plane,master   23h   v1.31.5+k3s1
lpi3h-ba13   Ready    <none>                 19h   v1.31.5+k3s1
lpi3h-c06b   Ready    <none>                 21h   v1.31.5+k3s1

2.4. 部署应用

我们新建一个配置文件,用于运行 k3s 容器

nano hello-kubernetes.yaml

文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.10.1
        env:
        - name: MESSAGE
          value: "Hello Kubernetes"

然后使用这个配置文件启动一个容器

sudo kubectl apply -f hello-kubernetes.yaml

查看 pods 状态

sudo kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP            NODE   NOMINATED NODE   READINESS GATES
hello-kubernetes-7fbb7f4899-zqs5x   1/1     Running   0          2m39s   10.42.0.114   arch   <none>           <none>

通过浏览器访问 10.42.0.114:8080

distcc 部署

一、简介

distcc 是一个分布式 C/C++ 编译系统,它通过将编译任务分发到多台机器上来加速编译过程。它允许你利用多台计算机的计算能力,更快速地编译代码,特别适用于大型代码库或资源受限的设备环境。

二、部署教程

2.1. 服务端

对于 Debian 系统,可以直接使用包管理器安装 distcc

sudo apt install distcc

开启 distcc 服务

distccd --daemon --allow 192.168.0.0/24  # 允许特定 IP 范围的机器访问

2.2. 客户端

sudo apt install distcc distcc-pump

配置 DISTCC_HOSTS 环境变量,指定可用的工作节点。可以在 .bashrc 中添加以下内容:

export DISTCC_POTENTIAL_HOSTS='localhost 192.168.0.240 192.168.0.243 192.168.0.245 192.168.0.246'

然后,可以尝试编译一个简单的程序,检查 distcc 是否正常分发编译任务:

distcc-pump distcc -o test test.c
sipeed@lpi3h-a2d1:~/distcc$ distcc-pump distcc -o test test.c
__________Using distcc-pump from /usr/bin
__________Found 4 available distcc servers
__________Shutting down distcc-pump include server

三、编译测试

为了测试 distcc 是否能够有效地加速编译过程,我们使用 OpenSSL 来进行编译测试。OpenSSL 是一个广泛使用的 C 库,包含大量源代码,适合用来测试分布式编译的效果。

git clone https://github.com/openssl/openssl.git
cd openssl
./config
distcc-pump make -j20 CC=distcc

可以使用 distccmon-text 查看当前编译任务的分发情况

sipeed@lpi3h-2193:~$ distccmon-text 
 67535  Compile     cmp_ctx.c                                 192.168.0.240[0]
 67528  Compile     cmp_asn.c                                 192.168.0.240[1]
 67635  Compile     cms_dh.c                                  192.168.0.240[2]
 67569  Compile     cmp_http.c                                192.168.0.243[0]
 67696  Compile     cms_io.c                                  192.168.0.245[0]
 67583  Compile     cmp_server.c                              192.168.0.245[1]
 67561  Compile     cmp_hdr.c                                 192.168.0.245[2]
 67606  Compile     cmp_vfy.c                                 192.168.0.245[3]
 67657  Compile     cms_enc.c                                 192.168.0.246[1]
 67672  Compile     cms_env.c                                 192.168.0.246[2]

3.1. 编译性能对比

在测试过程中,我们对 OpenSSL 项目分别使用了单机编译和分布式编译(5台机器),下面是两种方式的编译结果:

单机编译(不使用 distcc)
real    18m11.760s
user    64m37.024s
sys     5m56.326s
分布式编译(使用 distcc)
real    6m32.262s
user    18m39.468s
sys     4m30.008s

可以看到,使用 distcc 进行分布式编译后,编译时间显著缩短,从 18 分钟降至约 6 分钟。可见分布式编译的加速效果明显,同时也可以有效地减轻单个机器的负载。

Nomad 自动化部署

一、简介

nomad-playbook 是一个使用 Ansible 编写的自动化部署脚本,旨在快速搭建基于 HashiCorp Nomad 和 Consul 的集群环境。该项目支持一键部署单服务器 Nomad/Consul 集群,结合 Podman(或可选的 Docker)作为容器运行时,非常适合便携式 HomeLab 或小型边缘计算集群的快速部署与测试。

二、链接