|
Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi. |
Comment créer et utiliser des images du système d’exploitation personnalisées
Remasteriser une image du système d’exploitation avec un Dockerfile personnalisé
Étant donné que les images OS fournies par SUSE® Rancher Prime: OS Manager sont des images de conteneur, elles peuvent également être utilisées comme image de base dans un Dockerfile afin de créer une nouvelle image de conteneur.
Le projet Elemental publie plusieurs variantes d’images :
-
baremetal : Une image contenant le firmware et les pilotes adaptés au déploiement sur baremetal.
-
rt : Basé sur l’image baremetal, mais contenant le noyau temps réel.
-
kvm : Une image plus légère adaptée aux machines virtuelles.
-
base : Le système de base nécessaire pour Elemental utilisé par les autres variantes.
Imaginez que des paquets supplémentaires provenant d’un dépôt supplémentaire soient nécessaires, l’exemple suivant montre comment cela pourrait être ajouté :
# The version of Elemental to modify.
FROM registry.suse.com/suse/sl-micro/6.0/baremetal-os-container:latest
# Custom commands
RUN rpm --import <repo-signing-key-url> && \
zypper addrepo --refresh <repo_url> extra_repo && \
zypper install -y <extra_package>
# IMPORTANT: /etc/os-release is used for versioning/upgrade. The
# values here should reflect the tag of the image currently being built
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`
# command that was used in the base image. This ensures that any eventual change that should
# be synced in initrd included binaries is also applied there and consistent.
RUN elemental init --force elemental-rootfs,grub-config,dracut-config,cloud-config-essentials,elemental-setup
Où latest est la version de base que nous souhaitons personnaliser.
Et ensuite exécutez les commandes suivantes
docker build --build-arg IMAGE_REPO=myrepo/custom-build \
--build-arg IMAGE_TAG=v1.1.1 \
-t myrepo/custom-build:v1.1.1 .
docker push myrepo/custom-build:v1.1.1
Le nouvel OS personnalisé est disponible en tant qu’image Docker myrepo/custom-build:v1.1.1 et peut être exécuté et vérifié à l’aide de Docker avec
docker run -it myrepo/custom-build:v1.1.1 bash
Créer une image ISO d’installation bootable personnalisée
SUSE® Rancher Prime: OS Manager utilise des images de conteneur pour construire ses systèmes de fichiers racine ; par conséquent, il est possible de l’utiliser dans un environnement multi-étapes pour créer un support de démarrage personnalisé regroupant une image de conteneur personnalisée.
FROM registry.suse.com/suse/sl-micro/6.0/baremetal-os-container:latest AS os
# Check the previous section on building custom images
# The released OS already includes the toolchain for building ISOs
FROM registry.suse.com/suse/sl-micro/6.0/baremetal-os-container:latest AS builder
ARG TARGETARCH
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-${TARGETARCH}"
FROM busybox
COPY --from=builder /output /elemental-iso
ENTRYPOINT ["busybox", "sh", "-c"]
Construisez-le avec la commande docker build habituelle :
docker build -t myrepo/custom-build:v1.1.1 \
--build-arg IMAGE_REPO=myrepo/custom-build-iso \
--build-arg IMAGE_TAG=v1.1.1 \
.
L’image de conteneur résultante est en fait une image de conteneur incluant l’ISO, cette image de conteneur peut également être poussée vers un registre OCI. L’image ISO peut être extraite du conteneur vers le dossier actuel en exécutant le conteneur comme suit :
docker run --rm -v $(pwd):/host mytest-image "busybox cp /elemental-iso/*.iso /host"
Le nouveau support d’installation personnalisé peut être trouvé dans elemental-<arch>.iso.
L’exécution du conteneur ci-dessus est équivalente à ce que elemental-operator fait pour extraire l’ISO d’un conteneur afin de construire un nouveau conteneur incluant l’URL d’enregistrement, c’est donc également un bon indicateur pour vérifier que le conteneur peut être poussé vers un registre et utilisé par le elemental-operator comme un baseImage pour une ressource SeedImage.
Lister les images personnalisées en tant que ressource ManagedOSVersion
Dans SUSE® Rancher Prime: OS Manager, l’énumération des images de conteneurs OS et des images de conteneurs ISO en tant que ressources ManagedOSVersion n’est pas obligatoire mais pratique. Surtout d’un point de vue UI, cela rend les images personnalisées visibles et faciles à utiliser depuis l’extension UI SUSE® Rancher Prime: OS Manager.
En poursuivant l’exemple de la section précédente, un conteneur OS personnalisé référencé comme myrepo/custom-build:v1.1.1 a été construit et finalement poussé vers un registre. Ensuite, cette image est prête à être ajoutée en tant que ressource ManagedOSVersion avec :
apiVersion: elemental.cattle.io/v1beta1
kind: ManagedOSVersion
metadata:
name: v1.1.1-custom-build
namespace: fleet-default
spec:
metadata:
displayName: Custom build image
upgradeImage: myrepo/custom-build:v1.1.1
type: container
version: v1.1.1
Notez que le type: container indique qu’il s’agit d’un conteneur OS. Cela rend l’image myrepo/custom-build:v1.1.1 éligible pour les mises à niveau de l’OS depuis l’UI.
Enfin, le conteneur personnalisé pour l’ISO myrepo/custom-build-iso:v1.1.1 peut également être inclus en tant que ressource ManagedOSVersion avec :
apiVersion: elemental.cattle.io/v1beta1
kind: ManagedOSVersion
metadata:
name: v1.1.1-custom-build-iso
namespace: fleet-default
spec:
metadata:
displayName: Custom build ISO image
uri: myrepo/custom-build-iso:v1.1.1
type: iso
version: v1.1.1
Notez que le type: iso indique qu’il s’agit d’une image ISO. Cela rend l’image myrepo/custom-build-iso:v1.1.1 éligible pour la génération de SeedImages depuis l’UI.
Taille de partition personnalisée
Lors de la construction d’images personnalisées, il est important de prendre en compte les tailles de partition de disque, afin de garantir que l’image et les instantanés de mise à niveau peuvent s’adapter correctement au fil du temps.
Une configuration de partitions peut être incluse dans votre image personnalisée, ou alternativement, elle peut être appliquée de manière pratique au SeedImage utilisé pour générer le support d’installation.
Notez que toutes les valeurs size sont exprimées en mégaoctets, et une valeur de 0 prendra le reste du disque. C’est le comportement par défaut de la partition persistent si aucune size n’a été définie pour elle. Pour plus d’informations, consultez l’exemple complet de configuration
apiVersion: elemental.cattle.io/v1beta1
kind: SeedImage
metadata:
name: custom-partitions-iso
namespace: fleet-default
spec:
cloud-config:
write_files:
- path: /etc/elemental/config.d/partitions.yaml
content: |
install:
partitions:
recovery:
size: 8192
state:
size: 16384
- path: /etc/elemental/config.d/snapshotter.yaml
content: |
snapshotter:
max-snaps: 2
baseImage: myrepo/custom-build-iso:v1.1.1
registrationRef:
name: my-machine-registration
namespace: fleet-default
La partition state contiendra tous les instantanés système. Par conséquent, lors du dimensionnement de cette partition, la formule suivante peut être envisagée : $image_size * ($max_number_of_snapshots + 1 + 1). Le $max_number_of_snapshots peut être configuré de manière similaire avec un fichier de configuration personnalisé comme indiqué dans l’exemple ci-dessus.
Notez que par défaut, c’est 4 pour le type de snapshotter btrfs, et 2 pour le type loopdevice. Vous pouvez configurer le type de snapshotter utilisé en modifiant le MachineRegistration. Puisque la partition d’état est également utilisée pour le répertoire de travail SUSE® Rancher Prime: OS Manager Toolkit, il est préférable de laisser un espace libre supplémentaire de $image_size, afin que l’image puisse être décompressée correctement, par exemple lors de l’exécution des mises à niveau.
Enfin, un espace libre supplémentaire de $image_size peut être utilisé comme marge de sécurité à conserver. C’est particulièrement important lors de l’utilisation du type de snapshotter loopdevice, au cas où de nouvelles images augmenteraient en taille par rapport à celle initialement installée. Au contraire, le snapshotter btrfs peut être utilisé à la place pour économiser de l’espace sur la partition state, ou pour utiliser le même espace pour conserver plus d’instantanés.
Trouver des images de base SUSE® Rancher Prime: OS Manager
En utilisant crane, nous pouvons trouver les images SL-Micro suivantes adaptées à l’extension :
$ crane catalog registry.suse.com | grep -i "suse/sl-micro"
suse/sl-micro/6.0/baremetal-iso-image
suse/sl-micro/6.0/baremetal-os-container
suse/sl-micro/6.0/base-iso-image
suse/sl-micro/6.0/base-os-container
suse/sl-micro/6.0/kvm-iso-image
suse/sl-micro/6.0/kvm-os-container
suse/sl-micro/6.0/rt-iso-image
suse/sl-micro/6.0/rt-os-container
suse/sl-micro/6.1/baremetal-iso-image
suse/sl-micro/6.1/baremetal-os-container
suse/sl-micro/6.1/base-iso-image
suse/sl-micro/6.1/base-os-container
suse/sl-micro/6.1/kvm-iso-image
suse/sl-micro/6.1/kvm-os-container
suse/sl-micro/6.1/rt-iso-image
suse/sl-micro/6.1/rt-os-container
Les images avec le suffixe -iso-image contiennent une image ISO préconstruite et un système busybox pour pouvoir copier le contenu vers un volume. Les images avec un suffixe -os-container contiennent un système de fichiers racine qui peut être utilisé comme base pour des images personnalisées.