跳到主要内容

使用 exec 和 scp 命令构建集群镜像

默认情况下,sealos run xx 只会在第一个主节点上运行命令和复制文件。当你希望在特定节点或所有节点上运行命令或复制文件时,你可以在构建集群镜像时使用 sealos execsealos scp 命令。

  • sealos exec: 连接到一个或多个节点并运行任何 shell 命令;
  • sealos scp: 连接到一个或多个节点并将本地文件复制到远程节点。

虽然你可以直接在宿主机上使用这些命令,但本文主要描述的是在使用 sealos build 构建集群镜像时如何使用这两个命令。

sealos exec 示例

以下是构建一个 openebs 集群镜像的示例。在安装 openebs maystor 之前,需要在节点上执行一些初始化操作,你可以使用 sealos exec 来实现这一点。

首先,创建一个用于构建工作的基础目录。

$ mkdir ~/cloud-images

创建一个 charts 目录,用来存储 kubernetes nginx helm charts 文件。

$ cd cloud-images

创建一个名为 Kubefile 的文件,用于镜像构建:

$ cat Kubefile
FROM scratch
COPY manifests manifests
COPY registry registry
COPY opt opt
COPY mayastor.sh mayastor.sh
CMD ["bash mayastor.sh"]

创建一个名为 mayastor.sh 的脚本文件,sealos exec 后面的 shell 命令将在所有节点上执行(在所有节点上创建 hugepage、加载内核模块),但其他命令只会在主节点上运行。

$ cat mayastor.sh
#!/usr/bin/env bash
set -e

sealos exec "
echo vm.nr_hugepages = 1024 | sudo tee -a /etc/sysctl.d/mayastor.conf
sysctl -p
sudo modprobe -- nbd
sudo modprobe -- nvmet
sudo modprobe -- nvmet_rdma
sudo modprobe -- nvme_fabrics
sudo modprobe -- nvme_tcp
sudo modprobe -- nvme_rdma
sudo modprobe -- nvme_loop
cat <<EOF | sudo tee /etc/modules-load.d/mayastor.conf
nbd
nvmet
nvmet_rdma
nvme_fabrics
nvme_tcp
nvme_rdma
nvme_loop
EOF"

cp opt/kubectl-mayastor /usr/local/bin
kubectl label node --overwrite --all openebs.io/engine=mayastor
kubectl apply -k ./manifests/mayastor/

现在,charts 目录如下:

.
├── Kubefile
├── manifests
├── mayastor.sh
└── opt

现在一切都准备好了,你可以开始构建集群镜像。

sealos build -t labring/openebs-mayastor:v1.0.4 .

当你运行集群镜像时,sealos 将在主节点上运行 mayastor.sh 脚本,但 sealos exec 的 shell 命令将在所有节点上运行,最后,sealos 将在主节点上安装 openebs maystor 存储。

sealos run labring/openebs-mayastor:v1.0.4

sealos scp 示例

下面的示例将 bin 文件复制到所有节点。

创建一个名为 Kubefile 的文件,用于镜像构建:

FROM scratch
COPY manifests manifests
COPY registry registry
COPY opt opt
CMD ["sealos scp opt/ /opt/cni/bin/","kubectl apply -f manifests/kube-flannel.yml"]

opt 文件如下:

$ ls opt/
bandwidth bridge dhcp firewall host-device host-local ipvlan loopback macvlan portmap ptp sbr static tuning vlan vrf

现在一切都准备好了,你可以开始构建集群镜像。

sealos build -t labring/flannel:v0.19.0 .

当你运行集群镜像时,sealos 将会将 opt bin 文件复制到所有节点,然后在主节点上安装 flannel。

sealos run labring/flannel:v0.19.0