|
Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official. |
Como construir e usar imagens de sistema operacional personalizadas
Remasterizando uma imagem de sistema operacional com um Dockerfile personalizado
Como as imagens de sistema operacional fornecidas por SUSE® Rancher Prime: OS Manager são imagens de contêiner, elas também podem ser usadas como uma imagem base em um Dockerfile para criar uma nova imagem de contêiner.
O projeto Elemental publica várias versões de imagens:
-
baremetal: Uma imagem contendo firmware e drivers adequados para implantação baremetal.
-
rt: Baseada na imagem baremetal, mas contém o kernel em tempo real.
-
kvm: Uma imagem mais leve adequada para VMs.
-
base: O sistema base necessário para o Elemental usado pelas outras versões.
Imagine que alguns pacotes adicionais de um repositório extra são necessários, o seguinte exemplo mostra como isso pode ser adicionado:
# 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
Onde latest é a versão base que queremos personalizar.
E então execute os seguintes comandos
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
O novo sistema operacional personalizado está disponível como a imagem Docker myrepo/custom-build:v1.1.1 e pode ser executado e verificado usando docker com
docker run -it myrepo/custom-build:v1.1.1 bash
Crie uma imagem ISO de instalação inicializável personalizada
SUSE® Rancher Prime: OS Manager utiliza imagens de contêiner para construir seus sistemas de arquivos raiz; portanto, é possível usá-lo em um ambiente de múltiplas etapas para criar mídias inicializáveis personalizadas que agrupam uma imagem de contêiner personalizada.
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"]
Construa com o comando regular docker build:
docker build -t myrepo/custom-build:v1.1.1 \
--build-arg IMAGE_REPO=myrepo/custom-build-iso \
--build-arg IMAGE_TAG=v1.1.1 \
.
A imagem de contêiner resultante é na verdade uma imagem de contêiner incluindo a ISO, essa imagem de contêiner também pode ser enviada para um registro OCI. A imagem ISO pode ser extraída do contêiner para a pasta atual executando o contêiner como:
docker run --rm -v $(pwd):/host mytest-image "busybox cp /elemental-iso/*.iso /host"
A nova mídia de instalação personalizada pode ser encontrada em elemental-<arch>.iso.
A execução do contêiner acima é equivalente ao que elemental-operator faz para extrair a ISO de um contêiner para construir um novo, incluindo a URL de registro, portanto, isso também é um bom ponto de verificação para verificar se o contêiner pode ser enviado para um registro e usado pelo elemental-operator como um baseImage para um recurso SeedImage.
Liste imagens personalizadas como um recurso ManagedOSVersion.
Em SUSE® Rancher Prime: OS Manager, listar imagens de contêiner de SO e imagens de contêiner ISO como recursos ManagedOSVersion não é obrigatório, mas é útil. Especialmente do ponto de vista da interface do usuário, isso torna as imagens personalizadas visíveis e fáceis de usar na extensão da interface do usuário SUSE® Rancher Prime: OS Manager.
Continuando o exemplo da seção anterior, um contêiner de SO personalizado referenciado como myrepo/custom-build:v1.1.1 foi construído e eventualmente enviado para um registro. Então, esta imagem está pronta para ser adicionada como um recurso ManagedOSVersion com:
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
Observe que type: container indica que este é um contêiner de SO. Isso torna a imagem myrepo/custom-build:v1.1.1 elegível para fazer upgrade do SO a partir da interface do usuário.
Finalmente, o contêiner personalizado para a ISO myrepo/custom-build-iso:v1.1.1 também pode ser incluído como um recurso ManagedOSVersion com:
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
Observe que type: iso indica que esta é uma ISO. Isso torna a imagem myrepo/custom-build-iso:v1.1.1 elegível para a geração de SeedImages a partir da interface do usuário.
Tamanho de partição personalizado.
Ao construir imagens personalizadas, é importante levar em conta os tamanhos das partições do disco, para garantir que a imagem e os instantâneos de upgrade possam caber corretamente ao longo do tempo.
A configuração das partições pode ser incluída em sua imagem personalizada ou, alternativamente, pode ser convenientemente aplicada ao SeedImage usado para gerar a mídia de instalação.
Observe que todos os valores de size são expressos em megabytes, e um valor de 0 ocupará o restante do disco. Este é o comportamento padrão da partição persistent se nenhuma size tiver sido definida para ela. Para mais informações, veja o exemplo de configuração completo.
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
A partição state conterá todos os instantâneos do sistema. Portanto, ao dimensionar esta partição, a seguinte fórmula pode ser considerada: $image_size * ($max_number_of_snapshots + 1 + 1). O $max_number_of_snapshots pode ser configurado de forma semelhante com um arquivo de configuração personalizado, conforme mostrado no exemplo acima.
Observe que, por padrão, é 4 para o tipo de snapshotter btrfs, e 2 para o tipo loopdevice. Você pode configurar o tipo de snapshotter em uso editando o MachineRegistration. Como a partição de estado também é usada para o diretório de trabalho SUSE® Rancher Prime: OS Manager Toolkit, é melhor deixar um adicional de $image_size de espaço livre, para que a imagem possa ser descompactada corretamente, por exemplo, ao executar upgrades.
Por fim, um espaço livre extra de $image_size pode ser usado como uma margem de segurança a ser mantida. Isso é especialmente importante ao usar o tipo de snapshotter loopdevice, caso novas imagens aumentem de tamanho em relação àquela originalmente instalada. Pelo contrário, o snapshotter btrfs pode ser usado para economizar espaço na partição state, ou para usar o mesmo espaço para manter mais instantâneos.
Encontrando SUSE® Rancher Prime: OS Manager imagens base
Usando o crane, podemos encontrar as seguintes imagens SL-Micro adequadas para extensão:
$ 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
As imagens com o sufixo -iso-image contêm uma imagem ISO pré-construída e um sistema busybox para poder copiar o conteúdo para um volume. Imagens com um sufixo -os-container contêm um sistema de arquivos raiz que pode ser usado como base para imagens personalizadas.