5.16. 다중 플랫폼 지원을 위한 Operator 프로젝트 구성
단일 플랫폼만 지원하는 Operator 프로젝트보다 여러 아키텍처 및 운영 체제 또는 플랫폼을 지원하는 Operator 프로젝트는 Kubernetes 및 OpenShift Container Platform 클러스터에서 더 많은 Kubernetes 및 OpenShift Container Platform 클러스터에서 실행할 수 있습니다. 아키텍처의 예는 amd64,arm64,ppc64le, s390x 입니다. 운영 체제의 예로는 Linux 및 Windows가 있습니다.
Operator 프로젝트를 여러 OpenShift Container Platform 플랫폼에서 실행할 수 있도록 다음 작업을 수행합니다.
- Operator에서 지원하는 플랫폼을 지정하는 매니페스트 목록을 빌드합니다.
- 다중 아키텍처 컴퓨팅 머신을 지원하도록 Operator의 노드 유사성을 설정합니다.
5.16.1. Operator에서 지원하는 플랫폼의 매니페스트 목록 빌드 링크 복사링크가 클립보드에 복사되었습니다!
make docker-buildx 명령을 사용하여 Operator 및 피연산자에서 지원하는 플랫폼의 매니페스트 목록을 빌드할 수 있습니다. 매니페스트 목록은 하나 이상의 아키텍처에 대한 특정 이미지 매니페스트를 참조합니다. 이미지 매니페스트는 이미지가 지원하는 플랫폼을 지정합니다.
자세한 내용은 OpenContainers Image Index Spec 또는 Image Manifest v2, Schema 2 를 참조하십시오.
Operator 프로젝트에서 애플리케이션 또는 기타 워크로드 리소스를 배포하는 경우 다음 절차에서는 애플리케이션 릴리스 프로세스 중에 애플리케이션의 멀티 플랫폼 이미지가 빌드되었다고 가정합니다.
사전 요구 사항
- Operator SDK 버전 1.31.0 이상을 사용하여 빌드된 Operator 프로젝트
- Docker가 설치됨
프로세스
Operator 및 피연산자의 이미지 매니페스트를 검사하여 Operator 프로젝트에서 지원할 수 있는 플랫폼을 찾습니다. 다음 명령을 실행하여 이미지 매니페스트를 검사합니다.
$ docker manifest inspect <image_manifest>1 - 1
redhat/ubi9:latest와 같은 이미지 매니페스트를 지정합니다.
Operator와 피연산자가 함께 지원하는 플랫폼은 Operator 프로젝트의 플랫폼 호환성을 결정합니다.
출력 예
{ "manifests": [ { "digest": "sha256:c0669ef34cdc14332c0f1ab0c2c01acb91d96014b172f1a76f3a39e63d1f0bda", "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "platform": { "architecture": "amd64", "os": "linux" }, "size": 528 }, ... { "digest": "sha256:30e6d35703c578ee703230b9dc87ada2ba958c1928615ac8a674fcbbcbb0f281", "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" }, "size": 528 }, ...이전 명령에서 플랫폼 정보를 출력하지 않으면 지정된 기본 이미지가 이미지 매니페스트 대신 단일 이미지일 수 있습니다. 다음 명령을 실행하여 이미지에서 지원하는 아키텍처를 찾을 수 있습니다.
$ docker inspect <image>Go 기반 Operator 프로젝트의 경우 Operator SDK는 프로젝트의 Dockerfile의
amd64아키텍처를 명시적으로 참조합니다. Dockerfile을 다음과 같이 변경하여 플랫폼 플래그에서 지정한 값으로 환경 변수를 설정합니다.Dockerfile 예
FROM golang:1.19 as builder ARG TARGETOS ARG TARGETARCH ... RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -o manager main.go1 - 1
GOARCH필드를amd64에서$TARGETARCH로 변경합니다.
Operator 프로젝트의 makefile은
PLATFORMS환경 변수를 정의합니다. Operator의 이미지가 기본적으로 설정된 모든 플랫폼을 지원하지 않는 경우 변수를 편집하여 지원되는 플랫폼을 지정합니다. 다음 예제에서는 지원되는 플랫폼을linux/arm64및linux/amd64로 정의합니다.makefile의 예
# ... PLATFORMS ?= linux/arm64,linux/amd641 .PHONY: docker-buildx # ...- 1
- 다음
PLATFORMS값은 기본적으로 설정됩니다.linux/arm64,linux/amd64,linux/s390x,linux/ppc64le.
make docker buildx명령을 실행하여 매니페스트 목록을 생성할 때 Operator SDK는PLATFORMS변수에서 지정한 각 플랫폼에 대한 이미지 매니페스트를 생성합니다.Operator 프로젝트 디렉터리에서 다음 명령을 실행하여 관리자 이미지를 빌드합니다. 명령을 실행하면 멀티 플랫폼 지원이 포함된 관리자 이미지가 빌드되고 매니페스트 목록을 레지스트리로 푸시합니다.
$ make docker-buildx \ IMG=<image_registry>/<organization_name>/<repository_name>:<version_or_sha>