本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

使用 nm-configurator 配置的静态网络

warning

声明式网络处于 技术预览 状态,支持有限。因此,不建议在生产环境中使用。

可以使用 nm-configurator 每节点配置,根据 NIC 的 MAC 地址静态为各个机器分配 IP 地址。

此解决方案不需要远程 IPAM 提供商,但需要用户维护已知 MAC 地址与 IP 地址之间的映射。

在此示例中,我们将自定义一个 Elemental 镜像,并包含一个 yip 配置,该配置会在启动初期应用静态网络配置。

以下配置涵盖了 2 个节点,具有非常基本的网络配置。

99_static_network_config.yaml
Unresolved include directive in modules/zh/pages/operator-operational-tasks/declarative-networking/networking-static.adoc - include::example$network/yip-nmc-static-config.yaml[]

在自定义操作系统镜像中包含静态网络配置

我们可以扩展一个 Elemental 镜像,以在 /system/oem 中包含静态网络配置。任何基于 Elemental 的操作系统,只要运行 Elemental 工具包,在执行任一阶段时,都将评估该目录中的配置。 此外,我们将自定义镜像以安装所需的 nmc 二进制文件。

# The version of Elemental to modify
FROM registry.suse.com/suse/sl-micro/6.0/baremetal-os-container:latest

# Install the static network config
COPY 99_static_network_config.yaml /system/oem/99_static_network_config.yaml

# Install nmc
RUN curl -LO https://github.com/suse-edge/nm-configurator/releases/download/v0.3.1/nmc-linux-x86_64 && \
    install -o root -g root -m 0755 nmc-linux-x86_64 /usr/sbin/nmc

# IMPORTANT: /etc/os-release is used for versioning/upgrade.
ARG IMAGE_REPO=norepo
ARG IMAGE_TAG=latest
RUN \
    sed -i -e "s|^IMAGE_REPO=.*|IMAGE_REPO=\"${IMAGE_REPO}\"|g" /etc/os-release && \
    sed -i -e "s|^IMAGE_TAG=.*|IMAGE_TAG=\"${IMAGE_TAG}\"|g" /etc/os-release && \
    sed -i -e "s|^IMAGE=.*|IMAGE=\"${IMAGE_REPO}:${IMAGE_TAG}\"|g" /etc/os-release

# IMPORTANT: it is good practice to recreate the initrd and re-apply `elemental-init`
RUN elemental init --force elemental-rootfs,grub-config,dracut-config,cloud-config-essentials,elemental-setup

操作系统容器现在可以构建并推送到您的注册表:

docker build --build-arg IMAGE_REPO=myrepo/static-network-os \
             --build-arg IMAGE_TAG=v1.1.1 \
             -t myrepo/static-network-os:v1.1.1 .
docker push myrepo/static-network-os:v1.1.1

请注意,由于静态网络配置包含在镜像中,您需要为不同配置构建和维护不同的镜像,例如每个节点池或每个集群一个。自定义操作系统镜像需要维护,不仅用于创建初始 ISO 可引导镜像(通过 SeedImage),而且在 升级机器时也需要更新。所需的静态网络配置 必须存在于与 ManagedOSImage 一起使用的操作系统镜像中,否则在从升级后的系统启动时,该配置将缺失。

自定义操作系统镜像也可以直接用于构建可引导的原始磁盘镜像:

apiVersion: elemental.cattle.io/v1beta1
kind: SeedImage
metadata:
  name: my-raw-image
  namespace: fleet-default
spec:
  type: raw
  baseImage: myrepo/static-network-os:v1.1.1
  registrationRef:
    apiVersion: elemental.cattle.io/v1beta1
    kind: MachineRegistration
    name: my-registration
    namespace: fleet-default

创建可引导的 ISO

您现在可以从此操作系统容器镜像 构建 ISO 容器。有关如何自定义 Elemental 镜像的更多信息,请参阅 文档

FROM myrepo/static-network-os:v1.1.1 AS os
FROM myrepo/static-network-os:v1.1.1 AS builder

WORKDIR /iso
COPY --from=os / rootfs

# work around buildah issue: https://github.com/containers/buildah/issues/4242
RUN rm -f rootfs/etc/resolv.conf

RUN elemental build-iso \
        dir:rootfs \
        --bootloader-in-rootfs \
        --squash-no-compression \
        -o /output -n "elemental"

FROM busybox
COPY --from=builder /output /elemental-iso

ENTRYPOINT ["busybox", "sh", "-c"]
docker build -t myrepo/static-network-iso:v1.1.1 .
docker push myrepo/static-network-iso:v1.1.1

一旦 ISO 容器在您的注册表中发布,您可以像其他 Elemental 分发的 ISO 镜像一样在 SeedImage 中引用它。

apiVersion: elemental.cattle.io/v1beta1
kind: SeedImage
metadata:
  name: my-iso
  namespace: fleet-default
spec:
  type: iso
  baseImage: myrepo/static-network-iso:v1.1.1
  registrationRef:
    apiVersion: elemental.cattle.io/v1beta1
    kind: MachineRegistration
    name: my-registration
    namespace: fleet-default

请注意,静态网络配置将在安装媒体启动时进行评估,然后作为基础镜像的一部分安装到系统中。