6.3. 연결이 끊긴 환경의 베어 메탈에 호스팅된 컨트롤 플레인 배포


베어 메탈에서 호스팅되는 컨트롤 플레인을 프로비저닝할 때 에이전트 플랫폼을 사용합니다. Kubernetes Operator의 에이전트 플랫폼과 다중 클러스터 엔진은 함께 작동하여 연결이 끊긴 배포를 활성화합니다. 에이전트 플랫폼은 중앙 인프라 관리 서비스를 사용하여 호스트된 클러스터에 작업자 노드를 추가합니다. 중앙 인프라 관리 서비스에 대한 소개는 중앙 인프라 관리 서비스 활성화를 참조하세요.

6.3.1. 베어 메탈의 연결이 끊긴 환경 아키텍처

다음 다이어그램은 연결이 끊긴 환경의 예제 아키텍처를 보여줍니다.

Disconnected architecture diagram

  1. 연결이 끊긴 배포가 작동하는지 확인하기 위해 TLS 지원, 웹 서버 및 DNS를 사용하여 레지스트리 인증서 배포를 포함한 인프라 서비스를 구성합니다.
  2. openshift-config 네임스페이스에 구성 맵을 생성합니다. 이 예에서 구성 맵의 이름은 registry-config 입니다. 구성 맵의 내용은 레지스트리 CA 인증서입니다. 구성 맵의 data 필드에는 다음 키/값이 포함되어야 합니다.

    • 키: < registry_dns_domain_name>..<port > (예: registry.hypershiftdomain.lab..5000: ). 포트를 지정할 때 레지스트리 DNS 도메인 이름 뒤에 .. 를 배치해야 합니다.
    • value: 인증서 콘텐츠

      구성 맵 생성에 대한 자세한 내용은 호스팅된 컨트롤 플레인의 연결이 끊긴 설치에 대한 TLS 인증서 구성 을 참조하십시오.

  3. images.config.openshift.io CR(사용자 정의 리소스) 사양을 수정하고 이름이 registry-configadditionalTrustedCA 라는 새 필드를 추가합니다.
  4. 두 개의 데이터 필드가 포함된 구성 맵을 생성합니다. 한 필드에는 RAW 형식의 registries.conf 파일이 포함되어 있고 다른 필드에는 레지스트리 CA가 포함되어 있으며 ca-bundle.crt 라는 이름이 있습니다. 구성 맵은 multicluster-engine 네임스페이스에 속하며 구성 맵 이름은 다른 오브젝트에서 참조됩니다. 구성 맵의 예는 다음 샘플 구성을 참조하십시오.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: custom-registries
      namespace: multicluster-engine
      labels:
        app: assisted-service
    data:
      ca-bundle.crt: |
        -----BEGIN CERTIFICATE-----
        # ...
        -----END CERTIFICATE-----
      registries.conf: |
        unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
    
        [[registry]]
        prefix = ""
        location = "registry.redhat.io/openshift4"
        mirror-by-digest-only = true
    
        [[registry.mirror]]
          location = "registry.ocp-edge-cluster-0.qe.lab.redhat.com:5000/openshift4"
    
        [[registry]]
        prefix = ""
        location = "registry.redhat.io/rhacm2"
        mirror-by-digest-only = true
    # ...
    # ...
    Copy to Clipboard Toggle word wrap
  5. 다중 클러스터 엔진 Operator 네임스페이스에서 Agent 및 hypershift-addon 애드온을 둘 다 활성화하는 multiclusterengine CR을 생성합니다. 다중 클러스터 엔진 Operator 네임스페이스에는 연결이 끊긴 배포에서 동작을 수정하려면 구성 맵이 포함되어야 합니다. 네임스페이스에는 multicluster-engine,assisted-service, hypershift-addon-manager Pod도 포함되어 있습니다.
  6. 호스팅된 클러스터를 배포하는 데 필요한 다음 객체를 만듭니다.

    • 비밀: 비밀에는 풀 비밀, SSH 키, etcd 암호화 키가 포함되어 있습니다.
    • 구성 맵: 구성 맵에는 개인 레지스트리의 CA 인증서가 포함되어 있습니다.
    • HostedCluster : HostedCluster 리소스는 사용자가 생성하려는 클러스터의 구성을 정의합니다.
    • NodePool : NodePool 리소스는 데이터 플레인에 사용할 머신을 참조하는 노드 풀을 식별합니다.
  7. 호스팅된 클러스터 객체를 생성한 후 HyperShift Operator는 제어 평면 포드를 수용하기 위해 HostedControlPlane 네임스페이스를 설정합니다. 네임스페이스는 에이전트, 베어 메탈 호스트(BMH), InfraEnv 리소스와 같은 구성 요소도 호스팅합니다. 나중에 InfraEnv 리소스를 만들고 ISO를 만든 후 베이스보드 관리 컨트롤러(BMC) 자격 증명이 포함된 BMH와 해당 비밀을 만듭니다.
  8. openshift-machine-api 네임스페이스의 Metal3 Operator는 새로운 BMH를 검사합니다. 그런 다음 Metal3 Operator는 멀티클러스터 엔진 Operator 네임스페이스의 AgentServiceConfig CR을 통해 지정된 구성된 LiveISORootFS 값을 사용하여 BMC에 연결하여 시작하려고 시도합니다.
  9. HostedCluster 리소스의 작업자 노드가 시작된 후 에이전트 컨테이너가 시작됩니다. 이 에이전트는 배포를 완료하기 위한 작업을 조율하는 지원 서비스와 연락을 취합니다. 처음에는 HostedCluster 리소스의 워커 노드 수에 맞춰 NodePool 리소스를 확장해야 합니다. 지원 서비스는 나머지 업무를 관리합니다.
  10. 이 시점에서 배포 프로세스가 완료될 때까지 기다립니다.

연결이 끊긴 환경에서 호스팅된 제어 평면을 구성하려면 다음 필수 조건을 충족해야 합니다.

  • CPU: 제공된 CPU 수는 동시에 실행할 수 있는 호스팅 클러스터의 수를 결정합니다. 일반적으로 3개의 노드의 경우 각 노드에 16개의 CPU를 사용합니다. 최소한의 개발이라면 각 노드에 12개의 CPU를 사용하여 3개의 노드를 만들 수 있습니다.
  • 메모리: RAM 용량은 호스팅할 수 있는 클러스터 수에 영향을 미칩니다. 각 노드에 48GB의 RAM을 사용하세요. 최소한의 개발이라면 18GB RAM이면 충분할 수 있습니다.
  • 저장소: 멀티클러스터 엔진 운영자의 경우 SSD 저장소를 사용합니다.

    • 관리 클러스터: 250GB.
    • 레지스트리: 필요한 저장 공간은 호스팅되는 릴리스, 연산자 및 이미지의 수에 따라 달라집니다. 허용 가능한 크기는 500GB이며, 호스팅된 클러스터를 호스팅하는 디스크와 분리하는 것이 좋습니다.
    • 웹 서버: 필요한 저장 공간은 호스팅되는 ISO와 이미지의 수에 따라 달라집니다. 허용 가능한 크기는 500GB입니다.
  • 운영: 운영 환경의 경우 관리 클러스터, 레지스트리, 웹 서버를 서로 다른 디스크에 분리합니다. 이 예는 프로덕션을 위한 가능한 구성을 보여줍니다.

    • 레지스트리: 2TB
    • 관리 클러스터: 500GB
    • 웹 서버: 2TB

6.3.3. 릴리스 이미지 다이제스트 추출

태그가 지정된 이미지를 사용하여 OpenShift 컨테이너 플랫폼 릴리스 이미지 다이제스트를 추출할 수 있습니다.

프로세스

  • 다음 명령을 실행하여 이미지 다이제스트를 얻으세요.

    $ oc adm release info <tagged_openshift_release_image> | grep "Pull From"
    Copy to Clipboard Toggle word wrap

    <tagged_openshift_release_image>를 지원되는 OpenShift Container Platform 버전의 태그가 지정된 이미지로 바꾸세요(예: quay.io/openshift-release-dev/ocp-release:4.14.0-x8_64 ).

    출력 예

    Pull From: quay.io/openshift-release-dev/ocp-release@sha256:69d1292f64a2b67227c5592c1a7d499c7d00376e498634ff8e1946bc9ccdddfe
    Copy to Clipboard Toggle word wrap

6.3.4. 베어 메탈의 DNS 구성

호스팅된 클러스터의 API 서버는 NodePort 서비스로 노출됩니다. API 서버에 도달할 수 있는 대상을 가리키는 api.<hosted_cluster_name>.<base_domain> 에 대한 DNS 항목이 있어야 합니다.

DNS 항목은 호스팅된 제어 평면을 실행하는 관리 클러스터의 노드 중 하나를 가리키는 레코드만큼 간단할 수 있습니다. 또한, 진입점은 유입 트래픽을 인그레스 포드로 리디렉션하기 위해 배포된 로드 밸런서를 가리킬 수도 있습니다.

DNS 구성 예

api.example.krnl.es.    IN A 192.168.122.20
api.example.krnl.es.    IN A 192.168.122.21
api.example.krnl.es.    IN A 192.168.122.22
api-int.example.krnl.es.    IN A 192.168.122.20
api-int.example.krnl.es.    IN A 192.168.122.21
api-int.example.krnl.es.    IN A 192.168.122.22
`*`.apps.example.krnl.es. IN A 192.168.122.23
Copy to Clipboard Toggle word wrap

참고

이전 예에서, *.apps.example.krnl.es. 192.168.122.23에서 호스팅된 클러스터의 노드이거나 로드 밸런서가 구성된 경우 로드 밸런서입니다.

IPv6 네트워크에서 연결이 끊긴 환경에 대한 DNS를 구성하는 경우 구성은 다음 예와 같습니다.

IPv6 네트워크에 대한 DNS 구성 예

api.example.krnl.es.    IN A 2620:52:0:1306::5
api.example.krnl.es.    IN A 2620:52:0:1306::6
api.example.krnl.es.    IN A 2620:52:0:1306::7
api-int.example.krnl.es.    IN A 2620:52:0:1306::5
api-int.example.krnl.es.    IN A 2620:52:0:1306::6
api-int.example.krnl.es.    IN A 2620:52:0:1306::7
`*`.apps.example.krnl.es. IN A 2620:52:0:1306::10
Copy to Clipboard Toggle word wrap

듀얼 스택 네트워크에서 연결이 끊긴 환경에 대한 DNS를 구성하는 경우 IPv4와 IPv6에 대한 DNS 항목을 모두 포함해야 합니다.

듀얼 스택 네트워크를 위한 DNS 구성 예

host-record=api-int.hub-dual.dns.base.domain.name,192.168.126.10
host-record=api.hub-dual.dns.base.domain.name,192.168.126.10
address=/apps.hub-dual.dns.base.domain.name/192.168.126.11
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,192.168.126.20
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,192.168.126.21
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,192.168.126.22
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,192.168.126.25
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,192.168.126.26

host-record=api-int.hub-dual.dns.base.domain.name,2620:52:0:1306::2
host-record=api.hub-dual.dns.base.domain.name,2620:52:0:1306::2
address=/apps.hub-dual.dns.base.domain.name/2620:52:0:1306::3
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,[2620:52:0:1306::5]
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,[2620:52:0:1306::6]
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,[2620:52:0:1306::7]
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,[2620:52:0:1306::8]
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,[2620:52:0:1306::9]
Copy to Clipboard Toggle word wrap

개발 환경의 경우 Podman 컨테이너를 사용하여 소규모의 자체 호스팅 레지스트리를 배포합니다. 프로덕션 환경의 경우 Red Hat Quay, Nexus 또는 Artifactory와 같은 엔터프라이즈 호스팅 레지스트리를 배포합니다.

프로세스

Podman을 사용하여 소규모 레지스트리를 배포하려면 다음 단계를 완료하세요.

  1. 권한이 있는 사용자로서 ${HOME} 디렉토리에 액세스하여 다음 스크립트를 만듭니다.

    #!/usr/bin/env bash
    
    set -euo pipefail
    
    PRIMARY_NIC=$(ls -1 /sys/class/net | grep -v podman | head -1)
    export PATH=/root/bin:$PATH
    export PULL_SECRET="/root/baremetal/hub/openshift_pull.json" 
    1
    
    
    if [[ ! -f $PULL_SECRET ]];then
      echo "Pull Secret not found, exiting..."
      exit 1
    fi
    
    dnf -y install podman httpd httpd-tools jq skopeo libseccomp-devel
    export IP=$(ip -o addr show $PRIMARY_NIC | head -1 | awk '{print $4}' | cut -d'/' -f1)
    REGISTRY_NAME=registry.$(hostname --long)
    REGISTRY_USER=dummy
    REGISTRY_PASSWORD=dummy
    KEY=$(echo -n $REGISTRY_USER:$REGISTRY_PASSWORD | base64)
    echo "{\"auths\": {\"$REGISTRY_NAME:5000\": {\"auth\": \"$KEY\", \"email\": \"sample-email@domain.ltd\"}}}" > /root/disconnected_pull.json
    mv ${PULL_SECRET} /root/openshift_pull.json.old
    jq ".auths += {\"$REGISTRY_NAME:5000\": {\"auth\": \"$KEY\",\"email\": \"sample-email@domain.ltd\"}}" < /root/openshift_pull.json.old > $PULL_SECRET
    mkdir -p /opt/registry/{auth,certs,data,conf}
    cat <<EOF > /opt/registry/conf/config.yml
    version: 0.1
    log:
      fields:
        service: registry
    storage:
      cache:
        blobdescriptor: inmemory
      filesystem:
        rootdirectory: /var/lib/registry
      delete:
        enabled: true
    http:
      addr: :5000
      headers:
        X-Content-Type-Options: [nosniff]
    health:
      storagedriver:
        enabled: true
        interval: 10s
        threshold: 3
    compatibility:
      schema1:
        enabled: true
    EOF
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/registry/certs/domain.key -x509 -days 3650 -out /opt/registry/certs/domain.crt -subj "/C=US/ST=Madrid/L=San Bernardo/O=Karmalabs/OU=Guitar/CN=$REGISTRY_NAME" -addext "subjectAltName=DNS:$REGISTRY_NAME"
    cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/
    update-ca-trust extract
    htpasswd -bBc /opt/registry/auth/htpasswd $REGISTRY_USER $REGISTRY_PASSWORD
    podman create --name registry --net host --security-opt label=disable --replace -v /opt/registry/data:/var/lib/registry:z -v /opt/registry/auth:/auth:z -v /opt/registry/conf/config.yml:/etc/docker/registry/config.yml -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry" -e "REGISTRY_HTTP_SECRET=ALongRandomSecretForRegistry" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /opt/registry/certs:/certs:z -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key docker.io/library/registry:latest
    [ "$?" == "0" ] || !!
    systemctl enable --now registry
    Copy to Clipboard Toggle word wrap
    1
    PULL_SECRET 의 위치를 설정에 적합한 위치로 바꾸세요.
  2. 스크립트 파일 이름을 registry.sh로 지정하고 저장합니다. 스크립트를 실행하면 다음 정보가 가져옵니다.

    • 하이퍼바이저 호스트 이름을 기반으로 하는 레지스트리 이름
    • 필요한 자격 증명 및 사용자 액세스 세부 정보
  3. 다음과 같이 실행 플래그를 추가하여 권한을 조정합니다.

    $ chmod u+x ${HOME}/registry.sh
    Copy to Clipboard Toggle word wrap
  4. 매개변수 없이 스크립트를 실행하려면 다음 명령을 입력하세요.

    $ ${HOME}/registry.sh
    Copy to Clipboard Toggle word wrap

    스크립트가 서버를 시작합니다. 스크립트는 관리 목적으로 systemd 서비스를 사용합니다.

  5. 스크립트를 관리해야 하는 경우 다음 명령을 사용할 수 있습니다.

    $ systemctl status
    Copy to Clipboard Toggle word wrap
    $ systemctl start
    Copy to Clipboard Toggle word wrap
    $ systemctl stop
    Copy to Clipboard Toggle word wrap

레지스트리의 루트 폴더는 /opt/registry 디렉토리에 있으며 다음과 같은 하위 디렉토리를 포함합니다.

  • certs 에는 TLS 인증서가 포함되어 있습니다.
  • auth 에는 자격 증명이 포함되어 있습니다.
  • 데이터 에는 레지스트리 이미지가 포함되어 있습니다.
  • conf 에는 레지스트리 구성이 포함되어 있습니다.

OpenShift Container Platform 관리 클러스터를 설정하려면 Kubernetes Operator용 멀티클러스터 엔진이 설치되어 있는지 확인해야 합니다. 멀티클러스터 엔진 운영자는 공급업체 전반에 클러스터를 배포하는 데 중요한 역할을 합니다.

사전 요구 사항

  • 관리 클러스터와 대상 베어 메탈 호스트(BMH)의 베이스보드 관리 컨트롤러(BMC) 사이에는 양방향 연결이 있어야 합니다. 또는 에이전트 제공자를 통해 Boot It Yourself 방식을 따를 수도 있습니다.
  • 호스팅된 클러스터는 관리 클러스터 호스트 이름과 *.apps 호스트 이름의 API 호스트 이름을 확인하고 연결할 수 있어야 합니다. 다음은 관리 클러스터의 API 호스트 이름과 *.apps 호스트 이름의 예입니다.

    • api.management-cluster.internal.domain.com
    • console-openshift-console.apps.management-cluster.internal.domain.com
  • 관리 클러스터는 호스팅된 클러스터의 API 및 *.apps 호스트 이름을 확인하고 연결할 수 있어야 합니다. 다음은 호스팅된 클러스터의 API 호스트 이름과 *.apps 호스트 이름의 예입니다.

    • api.sno-hosted-cluster-1.internal.domain.com
    • console-openshift-console.apps.sno-hosted-cluster-1.internal.domain.com

프로세스

  1. OpenShift Container Platform 클러스터에 멀티클러스터 엔진 Operator 2.4 이상을 설치합니다. OpenShift Container Platform OperatorHub에서 Operator로 멀티클러스터 엔진 Operator를 설치할 수 있습니다. HyperShift Operator는 멀티클러스터 엔진 Operator에 포함되어 있습니다. 멀티클러스터 엔진 오퍼레이터 설치에 대한 자세한 내용은 Red Hat Advanced Cluster Management 문서의 "멀티클러스터 엔진 오퍼레이터 설치 및 업그레이드"를 참조하세요.
  2. HyperShift Operator가 설치되어 있는지 확인하세요. HyperShift Operator는 멀티클러스터 엔진 Operator에 자동으로 포함되지만, 수동으로 설치해야 하는 경우 "로컬 클러스터에 대한 HyperShift-addon 관리형 클러스터 애드온을 수동으로 활성화"의 단계를 따르세요.

다음 단계

다음으로, 웹 서버를 구성합니다.

6.3.7. 연결이 끊긴 환경에서 호스팅된 제어 평면에 대한 웹 서버 구성

호스팅 클러스터로 배포하는 OpenShift Container Platform 릴리스와 연관된 Red Hat Enterprise Linux CoreOS(RHCOS) 이미지를 호스팅하려면 추가 웹 서버를 구성해야 합니다.

프로세스

웹 서버를 구성하려면 다음 단계를 완료하세요.

  1. 다음 명령을 입력하여 사용하려는 OpenShift Container Platform 릴리스에서 openshift-install 바이너리를 추출합니다.

    $ oc adm -a ${LOCAL_SECRET_JSON} release extract --command=openshift-install \
      "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}"
    Copy to Clipboard Toggle word wrap
  2. 다음 스크립트를 실행합니다. 스크립트는 /opt/srv 디렉토리에 폴더를 생성합니다. 이 폴더에는 작업자 노드를 프로비저닝하는 RHCOS 이미지가 들어 있습니다.

    #!/bin/bash
    
    WEBSRV_FOLDER=/opt/srv
    ROOTFS_IMG_URL="$(./openshift-install coreos print-stream-json | jq -r '.architectures.x86_64.artifacts.metal.formats.pxe.rootfs.location')" 
    1
    
    LIVE_ISO_URL="$(./openshift-install coreos print-stream-json | jq -r '.architectures.x86_64.artifacts.metal.formats.iso.disk.location')" 
    2
    
    
    mkdir -p ${WEBSRV_FOLDER}/images
    curl -Lk ${ROOTFS_IMG_URL} -o ${WEBSRV_FOLDER}/images/${ROOTFS_IMG_URL##*/}
    curl -Lk ${LIVE_ISO_URL} -o ${WEBSRV_FOLDER}/images/${LIVE_ISO_URL##*/}
    chmod -R 755 ${WEBSRV_FOLDER}/*
    
    ## Run Webserver
    podman ps --noheading | grep -q websrv-ai
    if [[ $? == 0 ]];then
        echo "Launching Registry pod..."
        /usr/bin/podman run --name websrv-ai --net host -v /opt/srv:/usr/local/apache2/htdocs:z quay.io/alosadag/httpd:p8080
    fi
    Copy to Clipboard Toggle word wrap
    1
    ROOTFS_IMG_URL 값은 OpenShift CI 릴리스 페이지에서 찾을 수 있습니다.
    2
    LIVE_ISO_URL 값은 OpenShift CI 릴리스 페이지에서 찾을 수 있습니다.

다운로드가 완료되면 컨테이너가 실행되어 웹 서버에서 이미지를 호스팅합니다. 컨테이너는 공식 HTTPd 이미지의 변형을 사용하는데, 이를 통해 IPv6 네트워크에서도 작동할 수 있습니다.

이미지 미러링은 registry.redhat.com 이나 quay.io 와 같은 외부 레지스트리에서 이미지를 가져와서 개인 레지스트리에 저장하는 프로세스입니다.

다음 절차에서는 ImageSetConfiguration 객체를 사용하는 바이너리인 oc-mirror 도구를 사용합니다. 파일에서 다음 정보를 지정할 수 있습니다.

  • 미러링할 OpenShift 컨테이너 플랫폼 버전입니다. 해당 버전은 quay.io 에 있습니다.
  • 미러링할 추가 연산자입니다. 패키지를 개별적으로 선택하세요.
  • 저장소에 추가하려는 추가 이미지입니다.

사전 요구 사항

  • 미러링 프로세스를 시작하기 전에 레지스트리 서버가 실행 중인지 확인하세요.

프로세스

이미지 미러링을 구성하려면 다음 단계를 완료하세요.

  1. 미러링할 레지스트리와 이미지를 푸시할 개인 레지스트리로 ${HOME}/.docker/config.json 파일이 업데이트되었는지 확인하세요.
  2. 다음 예제를 사용하여 미러링에 사용할 ImageSetConfiguration 객체를 만듭니다. 필요에 따라 값을 환경과 일치하도록 바꾸세요.

    apiVersion: mirror.openshift.io/v2alpha1
    kind: ImageSetConfiguration
    mirror:
      platform:
        channels:
        - name: candidate-4.19
          minVersion: <4.x.y-build>  
    1
    
          maxVersion: <4.x.y-build> 
    2
    
          type: ocp
        kubeVirtContainer: true 
    3
    
        graph: true
      operators:
      - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.19
        packages:
        - name: lvms-operator
        - name: local-storage-operator
        - name: odf-csi-addons-operator
        - name: odf-operator
        - name: mcg-operator
        - name: ocs-operator
        - name: metallb-operator
        - name: kubevirt-hyperconverged 
    4
    Copy to Clipboard Toggle word wrap
    1 2
    <4.xy-build>를 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.
    3
    KubeVirt 공급자의 Red Hat Enterprise Linux CoreOS(RHCOS) 부팅 이미지에 대한 컨테이너 디스크 이미지도 미러링하려면 이 선택적 플래그를 true 로 설정합니다. 이 플래그는 oc-mirror v2에서만 사용할 수 있습니다.
    4
    KubeVirt 공급자를 사용하는 배포의 경우 이 줄을 포함합니다.
  3. 다음 명령을 입력하여 미러링 프로세스를 시작합니다.

    $ oc-mirror --v2 --config imagesetconfig.yaml \
      --workspace file://mirror-file docker://<registry>
    Copy to Clipboard Toggle word wrap

    미러링 프로세스가 완료되면 mirror-file 이라는 새 폴더가 생성되는데, 여기에는 ImageDigestMirrorSet (IDMS), ImageTagMirrorSet (ITMS) 및 호스팅된 클러스터에 적용할 카탈로그 소스가 포함됩니다.

  4. 다음과 같이 imagesetconfig.yaml 파일을 구성하여 OpenShift Container Platform의 야간 버전이나 CI 버전을 미러링합니다.

    apiVersion: mirror.openshift.io/v2alpha1
    kind: ImageSetConfiguration
    mirror:
      platform:
        graph: true
        release: registry.ci.openshift.org/ocp/release:<4.x.y-build> 
    1
    
        kubeVirtContainer: true 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    <4.xy-build>를 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.
    2
    KubeVirt 공급자의 Red Hat Enterprise Linux CoreOS(RHCOS) 부팅 이미지에 대한 컨테이너 디스크 이미지도 미러링하려면 이 선택적 플래그를 true 로 설정합니다. 이 플래그는 oc-mirror v2에서만 사용할 수 있습니다.
  5. 부분적으로 연결이 끊긴 환경이 있는 경우 다음 명령을 입력하여 이미지 세트 구성의 이미지를 레지스트리로 미러링합니다.

    $ oc mirror -c imagesetconfig.yaml \
      --workspace file://<file_path> docker://<mirror_registry_url> --v2
    Copy to Clipboard Toggle word wrap

    자세한 내용은 "부분적으로 연결이 끊긴 환경에서 이미지 세트 미러링"을 참조하세요.

  6. 완전히 연결이 끊긴 환경인 경우 다음 단계를 수행하세요.

    1. 다음 명령을 입력하여 지정된 이미지 세트 구성의 이미지를 디스크로 미러링합니다.

      $ oc mirror -c imagesetconfig.yaml file://<file_path> --v2
      Copy to Clipboard Toggle word wrap

      자세한 내용은 "완전히 연결되지 않은 환경에서 이미지 세트 미러링"을 참조하세요.

    2. 다음 명령을 입력하여 디스크에 있는 이미지 세트 파일을 처리하고 내용을 대상 미러 레지스트리로 미러링합니다.

      $ oc mirror -c imagesetconfig.yaml \
        --from file://<file_path> docker://<mirror_registry_url> --v2
      Copy to Clipboard Toggle word wrap
  7. 연결이 끊긴 네트워크에 설치 단계에 따라 최신 멀티클러스터 엔진 Operator 이미지를 미러링합니다.

6.3.9. 관리 클러스터에 객체 적용

미러링 프로세스가 완료되면 관리 클러스터에 두 개의 객체를 적용해야 합니다.

  • ImageContentSourcePolicy (ICSP) 또는 ImageDigestMirrorSet (IDMS)
  • 카탈로그 소스

oc-mirror 도구를 사용하면 출력 아티팩트는 oc-mirror-workspace/results-XXXXXX/ 라는 폴더에 저장됩니다.

ICSP 또는 IDMS는 노드를 다시 시작하지 않고 각 노드에서 kubelet을 다시 시작하는 MachineConfig 변경을 시작합니다. 노드가 READY 로 표시된 후 새로 생성된 카탈로그 소스를 적용해야 합니다.

카탈로그 소스는 openshift-marketplace Operator에서 카탈로그 이미지를 다운로드하고 해당 이미지에 포함된 모든 PackageManifest를 검색하기 위해 처리하는 등의 작업을 시작합니다.

프로세스

  1. 새로운 소스를 확인하려면 새 CatalogSource를 소스로 사용하여 다음 명령을 실행하세요.

    $ oc get packagemanifest
    Copy to Clipboard Toggle word wrap
  2. 아티팩트를 적용하려면 다음 단계를 완료하세요.

    1. 다음 명령을 입력하여 ICSP 또는 IDMS 아티팩트를 만듭니다.

      $ oc apply -f oc-mirror-workspace/results-XXXXXX/imageContentSourcePolicy.yaml
      Copy to Clipboard Toggle word wrap
    2. 노드가 준비될 때까지 기다린 후 다음 명령을 입력하세요.

      $ oc apply -f catalogSource-XXXXXXXX-index.yaml
      Copy to Clipboard Toggle word wrap
  3. OLM 카탈로그를 미러링하고 호스팅된 클러스터가 미러를 가리키도록 구성합니다.

    관리 (기본값) OLMCatalogPlacement 모드를 사용하면 OLM 카탈로그에 사용되는 이미지 스트림이 관리 클러스터의 ICSP에서 제공하는 재정의 정보로 자동으로 수정되지 않습니다.

    1. OLM 카탈로그가 원래 이름과 태그를 사용하여 내부 레지스트리에 올바르게 미러링된 경우, Hypershift.openshift.io/olm-catalogs-is-registry-overrides 주석을 HostedCluster 리소스에 추가합니다. 형식은 "sr1=dr1,sr2=dr2" 이며, 여기서 소스 레지스트리 문자열은 키이고 대상 레지스트리는 값입니다.
    2. OLM 카탈로그 이미지 스트림 메커니즘을 우회하려면 HostedCluster 리소스에서 다음 네 가지 주석을 사용하여 OLM 운영자 카탈로그에 사용할 네 가지 이미지의 주소를 직접 지정합니다.

      • hypershift.openshift.io/certified-operators-catalog-image
      • hypershift.openshift.io/community-operators-catalog-image
      • hypershift.openshift.io/redhat-marketplace-catalog-image
      • hypershift.openshift.io/redhat-operators-catalog-image

이 경우 이미지 스트림이 생성되지 않으며, 내부 미러가 새로 고쳐질 때 주석 값을 업데이트하여 Operator 업데이트를 가져와야 합니다.

다음 단계

연결이 끊긴 호스팅 제어 평면 설치에 대한 멀티클러스터 엔진 연산자 배포의 단계를 완료하여 멀티클러스터 엔진 연산자 를 배포합니다.

6.3.10. AgentServiceConfig 리소스 배포

AgentServiceConfig 사용자 정의 리소스는 멀티클러스터 엔진 Operator의 일부인 Assisted Service 추가 기능의 필수 구성 요소입니다. 베어 메탈 클러스터 배포를 담당합니다. 추가 기능이 활성화되면 AgentServiceConfig 리소스를 배포하여 추가 기능을 구성합니다.

AgentServiceConfig 리소스를 구성하는 것 외에도, 멀티클러스터 엔진 Operator가 연결이 끊긴 환경에서도 제대로 작동하도록 하려면 추가 구성 맵을 포함해야 합니다.

프로세스

  1. 다음 구성 맵을 추가하여 사용자 정의 레지스트리를 구성합니다. 이 맵에는 배포를 사용자 정의하기 위한 연결 해제된 세부 정보가 포함되어 있습니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: custom-registries
      namespace: multicluster-engine
      labels:
        app: assisted-service
    data:
      ca-bundle.crt: |
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
      registries.conf: |
        unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
    
        [[registry]]
        prefix = ""
        location = "registry.redhat.io/openshift4"
        mirror-by-digest-only = true
    
        [[registry.mirror]]
          location = "registry.dns.base.domain.name:5000/openshift4" 
    1
    
    
        [[registry]]
        prefix = ""
        location = "registry.redhat.io/rhacm2"
        mirror-by-digest-only = true
        # ...
        # ...
    Copy to Clipboard Toggle word wrap
    1
    dns.base.domain.name을 DNS 기반 도메인 이름으로 바꾸세요.

    객체에는 두 개의 필드가 포함되어 있습니다.

    • 사용자 지정 CA: 이 필드에는 배포의 다양한 프로세스에 로드되는 인증 기관(CA)이 포함되어 있습니다.
    • 레지스트리: Registries.conf 필드에는 원본 소스 레지스트리가 아닌 미러 레지스트리에서 사용해야 하는 이미지와 네임스페이스에 대한 정보가 들어 있습니다.
  2. 다음 예와 같이 AssistedServiceConfig 객체를 추가하여 지원 서비스를 구성합니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
      annotations:
        unsupported.agent-install.openshift.io/assisted-service-configmap: assisted-service-config 
    1
    
      name: agent
      namespace: multicluster-engine
    spec:
      mirrorRegistryRef:
        name: custom-registries 
    2
    
      databaseStorage:
        storageClassName: lvms-vg1
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi
      filesystemStorage:
        storageClassName: lvms-vg1
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 20Gi
      osImages: 
    3
    
      - cpuArchitecture: x86_64 
    4
    
        openshiftVersion: "4.14"
        rootFSUrl: http://registry.dns.base.domain.name:8080/images/rhcos-414.92.202308281054-0-live-rootfs.x86_64.img 
    5
    
        url: http://registry.dns.base.domain.name:8080/images/rhcos-414.92.202308281054-0-live.x86_64.iso
        version: 414.92.202308281054-0
      - cpuArchitecture: x86_64
       openshiftVersion: "4.15"
       rootFSUrl: http://registry.dns.base.domain.name:8080/images/rhcos-415.92.202403270524-0-live-rootfs.x86_64.img
       url: http://registry.dns.base.domain.name:8080/images/rhcos-415.92.202403270524-0-live.x86_64.iso
       version: 415.92.202403270524-0
    Copy to Clipboard Toggle word wrap
    1
    metadata.annotations["unsupported.agent-install.openshift.io/assisted-service-configmap"] 주석은 운영자가 동작을 사용자 정의하는 데 사용하는 구성 맵 이름을 참조합니다.
    2
    spec.mirrorRegistryRef.name 주석은 지원 서비스 운영자가 사용하는 연결이 끊긴 레지스트리 정보를 포함하는 구성 맵을 가리킵니다. 이 구성 맵은 배포 프로세스 중에 해당 리소스를 추가합니다.
    3
    spec.osImages 필드에는 이 운영자가 배포할 수 있는 다양한 버전이 포함되어 있습니다. 이 필드는 필수입니다. 이 예에서는 RootFSLiveISO 파일을 이미 다운로드했다고 가정합니다.
    4
    배포하려는 모든 OpenShift Container Platform 릴리스에 대해 cpuArchitecture 하위 섹션을 추가합니다. 이 예에서는 4.14와 4.15에 대한 cpuArchitecture 하위 섹션이 포함되었습니다.
    5
    rootFSUrlurl 필드에서 dns.base.domain.name을 DNS 기본 도메인 이름으로 바꿉니다.
  3. 모든 객체를 하나의 파일에 연결하여 배포하고 관리 클러스터에 적용합니다. 그렇게 하려면 다음 명령을 입력하세요.

    $ oc apply -f agentServiceConfig.yaml
    Copy to Clipboard Toggle word wrap

    이 명령은 두 개의 포드를 작동시킵니다.

    출력 예

    assisted-image-service-0                               1/1     Running   2             11d 
    1
    
    assisted-service-668b49548-9m7xw                       2/2     Running   5             11d 
    2
    Copy to Clipboard Toggle word wrap

    1
    지원 이미지 서비스 포드는 배포하는 각 클러스터에 맞게 사용자 정의된 Red Hat Enterprise Linux CoreOS(RHCOS) 부팅 이미지 템플릿을 생성하는 역할을 합니다.
    2
    지원 서비스는 운영자를 말합니다.

다음 단계

TLS 인증서를 구성합니다.

연결이 끊긴 배포에서 적절한 기능을 보장하려면 관리 클러스터와 호스팅된 클러스터의 작업자 노드에서 레지스트리 CA 인증서를 구성해야 합니다.

6.3.11.1. 관리 클러스터에 레지스트리 CA 추가

관리 클러스터에 레지스트리 CA를 추가하려면 다음 단계를 완료하세요.

프로세스

  1. 다음 예와 유사한 구성 맵을 만듭니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: <config_map_name> 
    1
    
      namespace: <config_map_namespace> 
    2
    
    data: 
    3
    
      <registry_name>..<port>: | 
    4
    
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
      <registry_name>..<port>: |
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
      <registry_name>..<port>: |
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
    Copy to Clipboard Toggle word wrap
    1
    구성 맵 이름을 지정합니다.
    2
    구성 맵에 대한 네임스페이스를 지정합니다.
    3
    데이터 필드에 레지스트리 이름과 레지스트리 인증서 내용을 지정합니다. <포트>를 레지스트리 서버가 실행 중인 포트로 바꾸세요. 예: 5000 .
    4
    다른 방법(예: | - ) 대신 | 만 사용하여 구성 맵의 데이터가 정의되어 있는지 확인하세요. 다른 방법을 사용하면 포드가 인증서를 읽을 때 문제가 발생할 수 있습니다.
  2. 클러스터 전체 개체인 image.config.openshift.io 에 패치를 적용하여 다음 사양을 포함합니다.

    spec:
      additionalTrustedCA:
        - name: registry-config
    Copy to Clipboard Toggle word wrap

    이 패치의 결과로 제어 평면 노드는 개인 레지스트리에서 이미지를 검색할 수 있으며 HyperShift Operator는 호스팅된 클러스터 배포를 위해 OpenShift Container Platform 페이로드를 추출할 수 있습니다.

    객체에 패치를 적용하는 과정은 완료되기까지 몇 분 정도 걸릴 수 있습니다.

6.3.11.2. 호스팅된 클러스터의 작업자 노드에 레지스트리 CA 추가

호스팅된 클러스터의 데이터 플레인 작업자가 개인 레지스트리에서 이미지를 검색할 수 있도록 하려면 작업자 노드에 레지스트리 CA를 추가해야 합니다.

프로세스

  1. hc.spec.additionalTrustBundle 파일에 다음 사양을 추가합니다.

    spec:
      additionalTrustBundle:
        - name: user-ca-bundle 
    1
    Copy to Clipboard Toggle word wrap
    1
    user-ca-bundle 항목은 다음 단계에서 생성하는 구성 맵입니다.
  2. HostedCluster 개체가 생성된 동일한 네임스페이스에서 user-ca-bundle 구성 맵을 생성합니다. 구성 맵은 다음 예와 유사합니다.

    apiVersion: v1
    data:
      ca-bundle.crt: |
        // Registry1 CA
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
    
        // Registry2 CA
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
    
        // Registry3 CA
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
    
    kind: ConfigMap
    metadata:
      name: user-ca-bundle
      namespace: <hosted_cluster_namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    HostedCluster 객체가 생성되는 네임스페이스를 지정합니다.

6.3.12. 베어 메탈에 호스팅된 클러스터 생성

호스팅 클러스터는 제어 평면과 API 엔드포인트가 관리 클러스터에 호스팅된 OpenShift Container Platform 클러스터입니다. 호스트된 클러스터에는 컨트롤 플레인과 해당 데이터 플레인이 포함됩니다.

6.3.12.1. 호스팅된 클러스터 객체 배포

일반적으로 HyperShift Operator는 HostedControlPlane 네임스페이스를 생성합니다. 하지만 이 경우에는 HyperShift Operator가 HostedCluster 개체를 조정하기 전에 모든 개체를 포함해야 합니다. 그런 다음 운영자가 조정 프로세스를 시작하면 모든 개체가 제자리에 있는 것을 찾을 수 있습니다.

프로세스

  1. 네임스페이스에 대한 다음 정보를 포함하는 YAML 파일을 만듭니다.

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      creationTimestamp: null
      name: <hosted_cluster_namespace>-<hosted_cluster_name> 
    1
    
    spec: {}
    status: {}
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      creationTimestamp: null
      name: <hosted_cluster_namespace> 
    2
    
    spec: {}
    status: {}
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요.
    2
    <hosted_cluster_namespace>를 호스팅된 클러스터 네임스페이스의 이름으로 바꾸세요.
  2. HostedCluster 배포에 포함할 구성 맵과 비밀에 대한 다음 정보를 포함하는 YAML 파일을 만듭니다.

    ---
    apiVersion: v1
    data:
      ca-bundle.crt: |
        -----BEGIN CERTIFICATE-----
        -----END CERTIFICATE-----
    kind: ConfigMap
    metadata:
      name: user-ca-bundle
      namespace: <hosted_cluster_namespace> 
    1
    
    ---
    apiVersion: v1
    data:
      .dockerconfigjson: xxxxxxxxx
    kind: Secret
    metadata:
      creationTimestamp: null
      name: <hosted_cluster_name>-pull-secret 
    2
    
      namespace: <hosted_cluster_namespace> 
    3
    
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: sshkey-cluster-<hosted_cluster_name> 
    4
    
      namespace: <hosted_cluster_namespace> 
    5
    
    stringData:
      id_rsa.pub: ssh-rsa xxxxxxxxx
    ---
    apiVersion: v1
    data:
      key: nTPtVBEt03owkrKhIdmSW8jrWRxU57KO/fnZa8oaG0Y=
    kind: Secret
    metadata:
      creationTimestamp: null
      name: <hosted_cluster_name>-etcd-encryption-key 
    6
    
      namespace: <hosted_cluster_namespace> 
    7
    
    type: Opaque
    Copy to Clipboard Toggle word wrap
    1 3 5 7
    <hosted_cluster_namespace>를 호스팅된 클러스터 네임스페이스의 이름으로 바꾸세요.
    2 4 6
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요.
  3. RBAC 역할이 포함된 YAML 파일을 생성하여 지원 서비스 에이전트가 호스팅 제어 평면과 동일한 HostedControlPlane 네임스페이스에 있고 클러스터 API에서 계속 관리될 수 있도록 합니다.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      creationTimestamp: null
      name: capi-provider-role
      namespace: <hosted_cluster_namespace>-<hosted_cluster_name> 
    1
     
    2
    
    rules:
    - apiGroups:
      - agent-install.openshift.io
      resources:
      - agents
      verbs:
      - '*'
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_namespace>를 호스팅된 클러스터 네임스페이스의 이름으로 바꾸세요.
    2
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요.
  4. HostedCluster 개체에 대한 정보가 포함된 YAML 파일을 만들고 필요에 따라 값을 바꿉니다.

    apiVersion: hypershift.openshift.io/v1beta1
    kind: HostedCluster
    metadata:
      name: <hosted_cluster_name> 
    1
    
      namespace: <hosted_cluster_namespace> 
    2
    
    spec:
      additionalTrustBundle:
        name: "user-ca-bundle"
      olmCatalogPlacement: guest
      imageContentSources: 
    3
    
      - source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
        mirrors:
        - registry.<dns.base.domain.name>:5000/openshift/release 
    4
    
      - source: quay.io/openshift-release-dev/ocp-release
        mirrors:
        - registry.<dns.base.domain.name>:5000/openshift/release-images 
    5
    
      - mirrors:
      ...
      ...
      autoscaling: {}
      controllerAvailabilityPolicy: SingleReplica
      dns:
        baseDomain: <dns.base.domain.name> 
    6
    
      etcd:
        managed:
          storage:
            persistentVolume:
              size: 8Gi
            restoreSnapshotURL: null
            type: PersistentVolume
        managementType: Managed
      fips: false
      networking:
        clusterNetwork:
        - cidr: 10.132.0.0/14
        - cidr: fd01::/48
        networkType: OVNKubernetes
        serviceNetwork:
        - cidr: 172.31.0.0/16
        - cidr: fd02::/112
      platform:
        agent:
          agentNamespace: <hosted_cluster_namespace>-<hosted_cluster_name> 
    7
     
    8
    
        type: Agent
      pullSecret:
        name: <hosted_cluster_name>-pull-secret 
    9
    
      release:
        image: registry.<dns.base.domain.name>:5000/openshift/release-images:<4.x.y>-x86_64 
    10
     
    11
    
      secretEncryption:
        aescbc:
          activeKey:
            name: <hosted_cluster_name>-etcd-encryption-key 
    12
    
        type: aescbc
      services:
      - service: APIServer
        servicePublishingStrategy:
          type: LoadBalancer
      - service: OAuthServer
        servicePublishingStrategy:
          type: Route
      - service: OIDC
        servicePublishingStrategy:
          type: Route
      - service: Konnectivity
        servicePublishingStrategy:
          type: Route
      - service: Ignition
        servicePublishingStrategy:
          type: Route
      sshKey:
        name: sshkey-cluster-<hosted_cluster_name> 
    13
    
    status:
      controlPlaneEndpoint:
        host: ""
        port: 0
    Copy to Clipboard Toggle word wrap
    1 7 9 12 13
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요.
    2 8
    <hosted_cluster_namespace>를 호스팅된 클러스터 네임스페이스의 이름으로 바꾸세요.
    3
    imageContentSources 섹션에는 호스팅된 클러스터 내의 사용자 워크로드에 대한 미러 참조가 포함되어 있습니다.
    4 5 6 10
    <dns.base.domain.name>을 DNS 기반 도메인 이름으로 바꾸세요.
    11
    <4.xy>를 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.
  5. OpenShift Container Platform 릴리스의 HyperShift Operator 릴리스를 가리키는 HostedCluster 개체에 주석을 추가합니다.

    1. 다음 명령을 입력하여 이미지 페이로드를 얻습니다.

      $ oc adm release info \
        registry.<dns.base.domain.name>:5000/openshift-release-dev/ocp-release:<4.x.y>-x86_64 \
        | grep hypershift
      Copy to Clipboard Toggle word wrap

      여기서 <dns.base.domain.name> 은 DNS 기반 도메인 이름이고 <4.xy>는 사용하려는 지원되는 OpenShift Container Platform 버전입니다.

      출력 예

      hypershift        sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8
      Copy to Clipboard Toggle word wrap

    2. OpenShift Container Platform Images 네임스페이스를 사용하여 다음 명령을 입력하여 다이제스트를 확인하세요.

      podman pull registry.<dns.base.domain.name>:5000/openshift-release-dev/ocp-v4.0-art-dev@sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8
      Copy to Clipboard Toggle word wrap

      여기서 <dns.base.domain.name> 은 DNS 기본 도메인 이름입니다.

      출력 예

      podman pull registry.dns.base.domain.name:5000/openshift/release@sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8
      Trying to pull registry.dns.base.domain.name:5000/openshift/release@sha256:31149e3e5f8c5e5b5b100ff2d89975cf5f7a73801b2c06c639bf6648766117f8...
      Getting image source signatures
      Copying blob d8190195889e skipped: already exists
      Copying blob c71d2589fba7 skipped: already exists
      Copying blob d4dc6e74b6ce skipped: already exists
      Copying blob 97da74cc6d8f skipped: already exists
      Copying blob b70007a560c9 done
      Copying config 3a62961e6e done
      Writing manifest to image destination
      Storing signatures
      3a62961e6ed6edab46d5ec8429ff1f41d6bb68de51271f037c6cb8941a007fde
      Copy to Clipboard Toggle word wrap

      HostedCluster 개체에 설정된 릴리스 이미지는 태그가 아닌 다이제스트를 사용해야 합니다. 예: quay.io/openshift-release-dev/ocp-release@sha256:e3ba11bd1e5e8ea5a0b36a75791c90f29afb0fdbe4125be4e48f69c76a5c47a0 .

  6. YAML 파일에서 정의한 모든 객체를 연결하여 파일로 만들고 관리 클러스터에 적용합니다. 그렇게 하려면 다음 명령을 입력하세요.

    $ oc apply -f 01-4.14-hosted_cluster-nodeport.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                  READY   STATUS    RESTARTS   AGE
    capi-provider-5b57dbd6d5-pxlqc                        1/1     Running   0          3m57s
    catalog-operator-9694884dd-m7zzv                      2/2     Running   0          93s
    cluster-api-f98b9467c-9hfrq                           1/1     Running   0          3m57s
    cluster-autoscaler-d7f95dd5-d8m5d                     1/1     Running   0          93s
    cluster-image-registry-operator-5ff5944b4b-648ht      1/2     Running   0          93s
    cluster-network-operator-77b896ddc-wpkq8              1/1     Running   0          94s
    cluster-node-tuning-operator-84956cd484-4hfgf         1/1     Running   0          94s
    cluster-policy-controller-5fd8595d97-rhbwf            1/1     Running   0          95s
    cluster-storage-operator-54dcf584b5-xrnts             1/1     Running   0          93s
    cluster-version-operator-9c554b999-l22s7              1/1     Running   0          95s
    control-plane-operator-6fdc9c569-t7hr4                1/1     Running   0          3m57s
    csi-snapshot-controller-785c6dc77c-8ljmr              1/1     Running   0          77s
    csi-snapshot-controller-operator-7c6674bc5b-d9dtp     1/1     Running   0          93s
    csi-snapshot-webhook-5b8584875f-2492j                 1/1     Running   0          77s
    dns-operator-6874b577f-9tc6b                          1/1     Running   0          94s
    etcd-0                                                3/3     Running   0          3m39s
    hosted-cluster-config-operator-f5cf5c464-4nmbh        1/1     Running   0          93s
    ignition-server-6b689748fc-zdqzk                      1/1     Running   0          95s
    ignition-server-proxy-54d4bb9b9b-6zkg7                1/1     Running   0          95s
    ingress-operator-6548dc758b-f9gtg                     1/2     Running   0          94s
    konnectivity-agent-7767cdc6f5-tw782                   1/1     Running   0          95s
    kube-apiserver-7b5799b6c8-9f5bp                       4/4     Running   0          3m7s
    kube-controller-manager-5465bc4dd6-zpdlk              1/1     Running   0          44s
    kube-scheduler-5dd5f78b94-bbbck                       1/1     Running   0          2m36s
    machine-approver-846c69f56-jxvfr                      1/1     Running   0          92s
    oauth-openshift-79c7bf44bf-j975g                      2/2     Running   0          62s
    olm-operator-767f9584c-4lcl2                          2/2     Running   0          93s
    openshift-apiserver-5d469778c6-pl8tj                  3/3     Running   0          2m36s
    openshift-controller-manager-6475fdff58-hl4f7         1/1     Running   0          95s
    openshift-oauth-apiserver-dbbc5cc5f-98574             2/2     Running   0          95s
    openshift-route-controller-manager-5f6997b48f-s9vdc   1/1     Running   0          95s
    packageserver-67c87d4d4f-kl7qh                        2/2     Running   0          93s
    Copy to Clipboard Toggle word wrap

    호스팅된 클러스터를 사용할 수 있는 경우 출력은 다음 예와 같습니다.

    출력 예

    NAMESPACE   NAME         VERSION   KUBECONFIG                PROGRESS   AVAILABLE   PROGRESSING   MESSAGE
    clusters    hosted-dual            hosted-admin-kubeconfig   Partial    True          False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

6.3.12.2. 호스팅된 클러스터에 대한 NodePool 객체 생성

NodePool 은 호스팅된 클러스터와 연관된 확장 가능한 작업자 노드 집합입니다. NodePool 머신 아키텍처는 특정 풀 내에서 일관성을 유지하며 제어 평면의 머신 아키텍처와 독립적입니다.

프로세스

  1. NodePool 객체에 대한 다음 정보를 포함하는 YAML 파일을 만들고 필요에 따라 값을 바꿉니다.

    apiVersion: hypershift.openshift.io/v1beta1
    kind: NodePool
    metadata:
      creationTimestamp: null
      name: <hosted_cluster_name> \
    1
    
      namespace: <hosted_cluster_namespace> \
    2
    
    spec:
      arch: amd64
      clusterName: <hosted_cluster_name>
      management:
        autoRepair: false \
    3
    
        upgradeType: InPlace \
    4
    
      nodeDrainTimeout: 0s
      platform:
        type: Agent
      release:
        image: registry.<dns.base.domain.name>:5000/openshift/release-images:4.x.y-x86_64 \
    5
    
      replicas: 2 
    6
    
    status:
      replicas: 2
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요.
    2
    <hosted_cluster_namespace>를 호스팅된 클러스터 네임스페이스의 이름으로 바꾸세요.
    3
    노드가 제거되면 다시 생성되지 않으므로 autoRepair 필드는 false 로 설정됩니다.
    4
    upgradeTypeInPlace 로 설정되는데, 이는 업그레이드 중에 동일한 베어 메탈 노드가 재사용됨을 나타냅니다.
    5
    NodePool 에 포함된 모든 노드는 다음 OpenShift Container Platform 버전을 기반으로 합니다: 4.xy-x86_64 . <dns.base.domain.name> 값을 DNS 기반 도메인 이름으로 바꾸고 4.xy 값을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.
    6
    호스팅된 클러스터에 두 개의 노드 풀 복제본을 생성하려면 복제본 값을 2 로 설정할 수 있습니다.
  2. 다음 명령을 입력하여 NodePool 객체를 만듭니다.

    $ oc apply -f 02-nodepool.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME          CLUSTER   DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION                              UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    clusters    hosted-dual   hosted    0                               False         False        4.x.y-x86_64
    Copy to Clipboard Toggle word wrap

6.3.12.3. 호스팅된 클러스터에 대한 InfraEnv 리소스 생성

InfraEnv 리소스는 pullSecretRefsshAuthorizedKey 와 같은 필수 세부 정보를 포함하는 지원 서비스 개체입니다. 이러한 세부 정보는 호스팅된 클러스터에 맞게 사용자 정의된 Red Hat Enterprise Linux CoreOS(RHCOS) 부팅 이미지를 만드는 데 사용됩니다.

두 개 이상의 InfraEnv 리소스를 호스팅할 수 있으며, 각 리소스는 특정 유형의 호스트를 채택할 수 있습니다. 예를 들어, RAM 용량이 더 큰 호스트에 서버 팜을 나눌 수 있습니다.

프로세스

  1. InfraEnv 리소스에 대한 다음 정보를 포함하는 YAML 파일을 만들고 필요에 따라 값을 바꿉니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <hosted_cluster_name>
      namespace: <hosted-cluster-namespace>-<hosted_cluster_name> 
    1
     
    2
    
    spec:
      pullSecretRef: 
    3
    
        name: pull-secret
      sshAuthorizedKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDk7ICaUE+/k4zTpxLk4+xFdHi4ZuDi5qjeF52afsNkw0w/glILHhwpL5gnp5WkRuL8GwJuZ1VqLC9EKrdmegn4MrmUlq7WTsP0VFOZFBfq2XRUxo1wrRdor2z0Bbh93ytR+ZsDbbLlGngXaMa0Vbt+z74FqlcajbHTZ6zBmTpBVq5RHtDPgKITdpE1fongp7+ZXQNBlkaavaqv8bnyrP4BWahLP4iO9/xJF9lQYboYwEEDzmnKLMW1VtCE6nJzEgWCufACTbxpNS7GvKtoHT/OVzw8ArEXhZXQUS1UY8zKsX2iXwmyhw5Sj6YboA8WICs4z+TrFP89LmxXY0j6536TQFyRz1iB4WWvCbH5n6W+ABV2e8ssJB1AmEy8QYNwpJQJNpSxzoKBjI73XxvPYYC/IjPFMySwZqrSZCkJYqQ023ySkaQxWZT7in4KeMu7eS2tC+Kn4deJ7KwwUycx8n6RHMeD8Qg9flTHCv3gmab8JKZJqN3hW1D378JuvmIX4V0= 
    4
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요.
    2
    <hosted_cluster_namespace>를 호스팅된 클러스터 네임스페이스의 이름으로 바꾸세요.
    3
    pullSecretRef는 InfraEnv 와 동일한 네임스페이스에 있는 구성 맵 참조를 참조하며, 여기서 풀 시크릿이 사용됩니다.
    4
    sshAuthorizedKey 는 부트 이미지에 저장된 SSH 공개 키를 나타냅니다. SSH 키를 사용하면 핵심 사용자로 워커 노드에 액세스할 수 있습니다.
  2. 다음 명령을 입력하여 InfraEnv 리소스를 만듭니다.

    $ oc apply -f 03-infraenv.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE              NAME     ISO CREATED AT
    clusters-hosted-dual   hosted   2023-09-11T15:14:10Z
    Copy to Clipboard Toggle word wrap

6.3.12.4. 호스팅된 클러스터에 대한 베어 메탈 호스트 생성

베어 메탈 호스트는 Metal3 운영자가 식별할 수 있도록 물리적, 논리적 세부 정보를 포함하는 오픈시프트 머신 API 객체입니다. 이러한 세부 정보는 에이전트 라고 하는 다른 지원 서비스 개체와 연결됩니다.

사전 요구 사항

  • 베어 메탈 호스트와 대상 노드를 만들기 전에 대상 머신을 준비해야 합니다.
  • 클러스터에서 사용하기 위해 베어 메탈 인프라에 Red Hat Enterprise Linux CoreOS(RHCOS) 컴퓨팅 머신을 설치했습니다.

프로세스

베어 메탈 호스트를 생성하려면 다음 단계를 완료하세요.

  1. 다음 정보를 사용하여 YAML 파일을 만듭니다. 베어 메탈 호스트에 입력해야 할 세부 정보에 대한 자세한 내용은 "BMO를 사용하여 사용자 프로비저닝 클러스터에 새 호스트 프로비저닝"을 참조하세요.

    베어 메탈 호스트 자격 증명을 보관하는 비밀이 하나 이상 있으므로 각 작업자 노드에 대해 최소 두 개의 객체를 만들어야 합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: <hosted_cluster_name>-worker0-bmc-secret 
    1
    
      namespace: <hosted_cluster_namespace>-<hosted_cluster_name> 
    2
    
    data:
      password: YWRtaW4= 
    3
    
      username: YWRtaW4= 
    4
    
    type: Opaque
    # ...
    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: <hosted_cluster_name>-worker0
      namespace: <hosted_cluster_namespace>-<hosted_cluster_name> 
    5
    
      labels:
        infraenvs.agent-install.openshift.io: <hosted_cluster_name> 
    6
    
      annotations:
        inspect.metal3.io: disabled
        bmac.agent-install.openshift.io/hostname: <hosted_cluster_name>-worker0 
    7
    
    spec:
      automatedCleaningMode: disabled 
    8
    
      bmc:
        disableCertificateVerification: true 
    9
    
        address: redfish-virtualmedia://[192.168.126.1]:9000/redfish/v1/Systems/local/<hosted_cluster_name>-worker0 
    10
    
        credentialsName: <hosted_cluster_name>-worker0-bmc-secret 
    11
    
      bootMACAddress: aa:aa:aa:aa:02:11 
    12
    
      online: true 
    13
    Copy to Clipboard Toggle word wrap
    1
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요.
    2 5
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요. <hosted_cluster_namespace>를 호스팅된 클러스터 네임스페이스의 이름으로 바꾸세요.
    3
    베이스보드 관리 컨트롤러(BMC)의 비밀번호를 Base64 형식으로 지정합니다.
    4
    BMC의 사용자 이름을 Base64 형식으로 지정합니다.
    6
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요. infraenvs.agent-install.openshift.io 필드는 Assisted Installer와 BareMetalHost 개체 간의 링크 역할을 합니다.
    7
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요. bmac.agent-install.openshift.io/hostname 필드는 배포 중에 채택되는 노드 이름을 나타냅니다.
    8
    automatedCleaningMode 필드는 Metal3 Operator가 노드를 지우는 것을 방지합니다.
    9
    disableCertificateVerification 필드는 클라이언트의 인증서 유효성 검사를 우회하기 위해 true 로 설정됩니다.
    10
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요. 주소 필드는 작업자 노드의 BMC 주소를 나타냅니다.
    11
    <hosted_cluster_name>을 호스팅 클러스터로 바꾸세요. credentialsName 필드는 사용자 및 비밀번호 자격 증명이 저장된 비밀을 가리킵니다.
    12
    bootMACAddress 필드는 노드가 시작되는 인터페이스 MAC 주소를 나타냅니다.
    13
    온라인 필드는 BareMetalHost 개체가 생성된 후 노드의 상태를 정의합니다.
  2. 다음 명령을 입력하여 BareMetalHost 객체를 배포합니다.

    $ oc apply -f 04-bmh.yaml
    Copy to Clipboard Toggle word wrap

    이 과정에서 다음과 같은 출력을 볼 수 있습니다.

    • 이 출력은 프로세스가 노드에 도달하려고 시도하고 있음을 나타냅니다.

      출력 예

      NAMESPACE         NAME             STATE         CONSUMER   ONLINE   ERROR   AGE
      clusters-hosted   hosted-worker0   registering              true             2s
      clusters-hosted   hosted-worker1   registering              true             2s
      clusters-hosted   hosted-worker2   registering              true             2s
      Copy to Clipboard Toggle word wrap

    • 이 출력은 노드가 시작되고 있음을 나타냅니다.

      출력 예

      NAMESPACE         NAME             STATE          CONSUMER   ONLINE   ERROR   AGE
      clusters-hosted   hosted-worker0   provisioning              true             16s
      clusters-hosted   hosted-worker1   provisioning              true             16s
      clusters-hosted   hosted-worker2   provisioning              true             16s
      Copy to Clipboard Toggle word wrap

    • 이 출력은 노드가 성공적으로 시작되었음을 나타냅니다.

      출력 예

      NAMESPACE         NAME             STATE         CONSUMER   ONLINE   ERROR   AGE
      clusters-hosted   hosted-worker0   provisioned              true             67s
      clusters-hosted   hosted-worker1   provisioned              true             67s
      clusters-hosted   hosted-worker2   provisioned              true             67s
      Copy to Clipboard Toggle word wrap

  3. 노드가 시작된 후, 이 예에서 볼 수 있듯이 네임스페이스의 에이전트를 확인하세요.

    출력 예

    NAMESPACE         NAME                                   CLUSTER   APPROVED   ROLE          STAGE
    clusters-hosted   aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0411             true       auto-assign
    clusters-hosted   aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0412             true       auto-assign
    clusters-hosted   aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0413             true       auto-assign
    Copy to Clipboard Toggle word wrap

    에이전트는 설치 가능한 노드를 나타냅니다. 호스팅된 클러스터에 노드를 할당하려면 노드 풀을 확장합니다.

6.3.12.5. 노드 풀 확장

베어 메탈 호스트를 생성한 후에는 상태가 등록 에서 프로비저닝 , 프로비저닝 됨으로 변경됩니다. 노드는 에이전트의 LiveISOagent 라는 이름의 기본 포드로 시작합니다. 해당 에이전트는 지원 서비스 운영자로부터 OpenShift 컨테이너 플랫폼 페이로드를 설치하라는 지시를 받는 역할을 합니다.

프로세스

  1. 노드 풀을 확장하려면 다음 명령을 입력하세요.

    $ oc -n <hosted_cluster_namespace> scale nodepool <hosted_cluster_name> \
      --replicas 3
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    • <hosted_cluster_namespace> 는 호스팅된 클러스터 네임스페이스의 이름입니다.
    • <hosted_cluster_name> 은 호스팅된 클러스터의 이름입니다.
  2. 확장 프로세스가 완료되면 에이전트가 호스팅된 클러스터에 할당된 것을 확인할 수 있습니다.

    출력 예

    NAMESPACE         NAME                                   CLUSTER   APPROVED   ROLE          STAGE
    clusters-hosted   aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0411   hosted    true       auto-assign
    clusters-hosted   aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0412   hosted    true       auto-assign
    clusters-hosted   aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0413   hosted    true       auto-assign
    Copy to Clipboard Toggle word wrap

  3. 또한 노드 풀 복제본이 설정되어 있는지 확인하세요.

    출력 예

    NAMESPACE   NAME     CLUSTER   DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION       UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    clusters    hosted   hosted    3                               False         False        <4.x.y>-x86_64                                     Minimum availability requires 3 replicas, current 0 available
    Copy to Clipboard Toggle word wrap

    <4.xy>를 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.

  4. 노드가 클러스터에 가입할 때까지 기다립니다. 이 과정에서 에이전트는 자신의 단계와 상태에 대한 업데이트를 제공합니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat