7.3. 클러스터상의 계층화를 사용하여 사용자 정의 계층 이미지 적용
on-cluster 빌드 프로세스를 사용하여 클러스터에 사용자 정의 계층 이미지를 적용하려면 사전 요구 사항에 설명된 대로 Containerfile, 머신 구성 풀 참조, 리포지토리 내보내기 및 가져오기 보안을 포함하는 MachineOSConfig
사용자 정의 리소스를 만듭니다.
오브젝트를 생성할 때 MCO(Machine Config Operator)는 MachineOSBuild
오브젝트 및 machine-os-builder
Pod를 생성합니다. 빌드 프로세스는 빌드가 완료된 후 정리되는 구성 맵과 같은 일시적인 오브젝트도 생성합니다.
빌드가 완료되면 MCO는 새 노드를 배포할 때 사용할 수 있도록 새 사용자 지정 계층 이미지를 리포지토리로 푸시합니다. MachineOSBuild
오브젝트 및 machine-os-builder
Pod에서 새 사용자 정의 계층 이미지에 대한 다이제스트된 이미지 가져오기 사양을 확인할 수 있습니다.
이러한 새 오브젝트 또는 machine-os-builder
Pod와 상호 작용할 필요가 없습니다. 그러나 필요한 경우 이러한 리소스를 모두 사용하여 문제를 해결할 수 있습니다.
사용자 정의 계층 이미지를 사용하려는 각 머신 구성 풀에 대해 별도의 MachineOSConfig
CR이 필요합니다.
클러스터상의 이미지 계층 지정은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
사전 요구 사항
-
기능 게이트를 사용하여 설정된
TechPreviewNoUpgrade
기능을 활성화했습니다. 자세한 내용은 "기능 게이트를 사용하여 기능 활성화"를 참조하십시오. -
MCO가 기본 운영 체제 이미지를 가져오는 데 필요한
openshift-machine-config-operator
네임스페이스에 풀 시크릿이 있습니다. - MCO가 새 사용자 지정 계층 이미지를 레지스트리로 내보내는 데 필요한 푸시 시크릿이 있습니다.
- 노드에서 새 사용자 지정 계층화된 이미지를 레지스트리에서 가져와야 하는 풀 시크릿이 있습니다. 이미지를 리포지토리로 내보내는 데 사용한 것과 다른 시크릿이어야 합니다.
- 컨테이너 파일을 구성하는 방법에 대해 잘 알고 있습니다. Containerfile을 생성하는 방법에 대한 지침은 이 문서의 범위를 벗어납니다.
- 선택 사항: 사용자 정의 계층 이미지를 적용하려는 노드에 대해 별도의 머신 구성 풀이 있습니다.
프로세스
machineOSconfig
오브젝트를 생성합니다.다음과 유사한 YAML 파일을 생성합니다.
apiVersion: machineconfiguration.openshift.io/v1alpha1 kind: MachineOSConfig metadata: name: layered spec: machineConfigPool: name: <mcp_name> 1 buildInputs: containerFile: 2 - containerfileArch: noarch content: |- FROM configs AS final RUN rpm-ostree install cowsay && \ ostree container commit imageBuilder: 3 imageBuilderType: PodImageBuilder baseImagePullSecret: 4 name: global-pull-secret-copy renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift/os-image:latest 5 renderedImagePushSecret: 6 name: builder-dockercfg-7lzwl buildOutputs: 7 currentImagePullSecret: name: builder-dockercfg-7lzwl
- 1
- 사용자 정의 계층 이미지를 배포하려는 노드와 연결된 머신 구성 풀의 이름을 지정합니다.
- 2
- 사용자 지정 계층 이미지를 구성할 Containerfile을 지정합니다.
- 3
- 사용할 이미지 빌더의 이름을 지정합니다.
PodImageBuilder
여야 합니다. - 4
- MCO가 레지스트리에서 기본 운영 체제 이미지를 가져오는 데 필요한 풀 시크릿의 이름을 지정합니다.
- 5
- 새로 빌드된 사용자 정의 계층 이미지를 내보낼 이미지 레지스트리를 지정합니다. 이는 클러스터가 액세스할 수 있는 모든 레지스트리일 수 있습니다. 이 예에서는 내부 OpenShift Container Platform 레지스트리를 사용합니다.
- 6
- MCO에서 새로 빌드된 사용자 지정 계층 이미지를 해당 레지스트리로 푸시해야 하는 내보내기 보안의 이름을 지정합니다.
- 7
- 노드에서 새로 빌드된 사용자 정의 계층 이미지를 가져와야 하는 이미지 레지스트리에 필요한 보안을 지정합니다. 이미지를 리포지토리에 내보내는 데 사용한 것과 다른 시크릿이어야 합니다.
MachineOSConfig
오브젝트를 생성합니다.$ oc create -f <file_name>.yaml
필요한 경우
MachineOSBuild
오브젝트가 생성되어READY
상태에 있는 경우 새 사용자 지정 계층 이미지를 사용하려는 노드의 노드 사양을 수정합니다.MachineOSBuild
오브젝트가READY
인지 확인합니다.SUCCEEDED
값이True
이면 빌드가 완료됩니다.$ oc get machineosbuild
MachineOSBuild
오브젝트가 준비되었음을 보여주는 출력 예NAME PREPARED BUILDING SUCCEEDED INTERRUPTED FAILED layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder False False True False False
MachineOSConfig
오브젝트에 지정한 머신 구성 풀의 레이블을 추가하여 사용자 정의 계층 이미지를 배포하려는 노드를 편집합니다.$ oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='
다음과 같습니다.
- node-role.kubernetes.io/<mcp_name>=
- 사용자 정의 계층 이미지를 배포할 노드를 식별하는 노드 선택기를 지정합니다.
변경 사항을 저장하면 MCO가 노드를 드레이닝, 차단 및 재부팅합니다. 재부팅 후 노드는 새 사용자 정의 계층 이미지를 사용합니다.
검증
다음 명령을 사용하여 새 포드가 실행 중인지 확인합니다.
$ oc get pods -n <machineosbuilds_namespace>
NAME READY STATUS RESTARTS AGE build-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0 2/2 Running 0 2m40s 1 # ... machine-os-builder-6fb66cfb99-zcpvq 1/1 Running 0 2m42s 2
MachineOSConfig
오브젝트에 새 사용자 정의 계층 이미지에 대한 참조가 포함되어 있는지 확인합니다.$ oc describe MachineOSConfig <object_name>
apiVersion: machineconfiguration.openshift.io/v1alpha1 kind: MachineOSConfig metadata: name: layered spec: buildInputs: baseImagePullSecret: name: global-pull-secret-copy containerFile: - containerfileArch: noarch content: "" imageBuilder: imageBuilderType: PodImageBuilder renderedImagePushSecret: name: builder-dockercfg-ng82t-canonical renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image:latest buildOutputs: currentImagePullSecret: name: global-pull-secret-copy machineConfigPool: name: layered status: currentImagePullspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd 1
- 1
- 새 사용자 지정 계층 이미지에 대한 다이제스트된 이미지 가져오기 사양입니다.
MachineOSBuild
오브젝트에 새 사용자 지정 계층 이미지에 대한 참조가 포함되어 있는지 확인합니다.$ oc describe machineosbuild <object_name>
apiVersion: machineconfiguration.openshift.io/v1alpha1 kind: MachineOSBuild metadata: name: layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder spec: desiredConfig: name: rendered-layered-ad5a3cad36303c363cf458ab0524e7c0 machineOSConfig: name: layered renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image:latest # ... status: conditions: - lastTransitionTime: "2024-05-21T20:25:06Z" message: Build Ready reason: Ready status: "True" type: Succeeded finalImagePullspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd 1
- 1
- 새 사용자 지정 계층 이미지에 대한 다이제스트된 이미지 가져오기 사양입니다.
적절한 노드에서 새 사용자 지정 계층 이미지를 사용하고 있는지 확인합니다.
컨트롤 플레인 노드의 root로 디버그 세션을 시작합니다.
$ oc debug node/<node_name>
디버그 쉘 내에서
/host
를 root 디렉터리로 설정합니다.sh-4.4# chroot /host
rpm-ostree status
명령을 실행하여 사용자 정의 계층화된 이미지가 사용 중인지 확인합니다.sh-5.1# rpm-ostree status
출력 예
# ... Deployments: * ostree-unverified-registry:quay.io/openshift-release-dev/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd 1 Digest: sha256:bcea2546295b2a55e0a9bf6dd4789433a9867e378661093b6fdee0031ed1e8a4 Version: 416.94.202405141654-0 (2024-05-14T16:58:43Z)
- 1
- 새 사용자 지정 계층 이미지에 대한 다이제스트된 이미지 가져오기 사양입니다.
추가 리소스