6.2. IBM Z 및 IBM LinuxONE에 OpenShift 샌드박스 컨테이너 배포


CLI(명령줄 인터페이스)를 사용하여 다음 작업을 수행하여 IBM Z® 및 IBM® LinuxONE에 OpenShift 샌드박스 컨테이너를 배포할 수 있습니다.

  1. OpenShift 샌드박스 컨테이너 Operator를 설치합니다.
  2. 선택 사항: 각 작업자 노드에서 실행되는 가상 머신 수를 변경합니다.
  3. 선택 사항: libvirt 볼륨을 구성합니다.
  4. 선택 사항: 사용자 정의 피어 Pod VM 이미지를 생성합니다.
  5. 피어 Pod 시크릿을 생성합니다.
  6. 피어 Pod 구성 맵을 생성합니다.
  7. Pod VM 이미지 구성 맵을 생성합니다.
  8. KVM 호스트 시크릿을 생성합니다.
  9. 선택 사항: 사용자 정의 피어 Pod VM 이미지를 선택합니다.
  10. 선택 사항: Kata 에이전트 정책을 사용자 지정합니다.
  11. KataConfig 사용자 지정 리소스를 생성합니다.
  12. OpenShift 샌드박스 컨테이너 워크로드 오브젝트를 구성합니다.

6.2.1. OpenShift 샌드박스 컨테이너 Operator 설치

CLI를 사용하여 OpenShift 샌드박스 컨테이너 Operator를 설치할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. osc-namespace.yaml 매니페스트 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-sandboxed-containers-operator
  2. 다음 명령을 실행하여 네임스페이스를 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc apply -f osc-namespace.yaml
  3. osc-operatorgroup.yaml 매니페스트 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: sandboxed-containers-operator-group
      namespace: openshift-sandboxed-containers-operator
    spec:
      targetNamespaces:
      - openshift-sandboxed-containers-operator
  4. 다음 명령을 실행하여 operator 그룹을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc apply -f osc-operatorgroup.yaml
  5. osc-subscription.yaml 매니페스트 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: sandboxed-containers-operator
      namespace: openshift-sandboxed-containers-operator
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: sandboxed-containers-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      startingCSV: sandboxed-containers-operator.v1.9.0
  6. 다음 명령을 실행하여 서브스크립션을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc apply -f osc-subscription.yaml
  7. 다음 명령을 실행하여 Operator가 올바르게 설치되었는지 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get csv -n openshift-sandboxed-containers-operator

    이 명령을 완료하는 데 몇 분이 걸릴 수 있습니다.

  8. 다음 명령을 실행하여 프로세스를 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ watch oc get csv -n openshift-sandboxed-containers-operator

    출력 예

    Copy to Clipboard Toggle word wrap
    NAME                             DISPLAY                                  VERSION             REPLACES                   PHASE
    openshift-sandboxed-containers   openshift-sandboxed-containers-operator  1.9.0    1.8.1        Succeeded

6.2.2. libvirt 볼륨 구성

OpenShift 샌드박스 컨테이너 Operator는 설치 중에 KVM 호스트에서 libvirt 볼륨 및 풀을 자동으로 구성합니다. 필요한 경우 libvirt 볼륨 및 풀을 수동으로 구성하거나 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔 또는 명령줄을 사용하여 OpenShift Container Platform 클러스터에 OpenShift 샌드박스 컨테이너 Operator를 설치했습니다.
  • KVM 호스트에 대한 관리자 권한이 있습니다.
  • KVM 호스트에 podman 을 설치했습니다.
  • KVM 호스트에 virt-customize 를 설치했습니다.
  • 이미지에 대한 /var/lib/libvirt/images/ 디렉터리가 있습니다.

프로세스

  1. KVM 호스트에 로그인합니다.
  2. 다음 명령을 실행하여 libvirt 풀의 이름을 설정합니다.

    Copy to Clipboard Toggle word wrap
    $ export LIBVIRT_POOL=<libvirt_pool>

    libvirt 공급자의 시크릿을 생성하려면 LIBVIRT_POOL 값이 필요합니다.

  3. 다음 명령을 실행하여 libvirt 볼륨의 이름을 설정합니다.

    Copy to Clipboard Toggle word wrap
    $ export LIBVIRT_VOL_NAME=<libvirt_volume>

    libvirt 공급자의 시크릿을 생성하려면 LIBVIRT_VOL_NAME 값이 필요합니다.

  4. 다음 명령을 실행하여 기본 스토리지 풀 위치의 경로를 설정합니다.

    Copy to Clipboard Toggle word wrap
    $ export LIBVIRT_POOL_DIRECTORY="/var/lib/libvirt/images/"
  5. 다음 명령을 실행하여 libvirt 풀을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
  6. 다음 명령을 실행하여 libvirt 풀을 시작합니다.

    Copy to Clipboard Toggle word wrap
    $ virsh pool-start $LIBVIRT_POOL
  7. 다음 명령을 실행하여 풀에 대한 libvirt 볼륨을 만듭니다.

    Copy to Clipboard Toggle word wrap
    $ virsh -c qemu:///system \
      vol-create-as --pool $LIBVIRT_POOL \
      --name $LIBVIRT_VOL_NAME \
      --capacity 20G \
      --allocation 2G \
      --prealloc-metadata \
      --format qcow2

6.2.3. 사용자 정의 피어 Pod VM 이미지 생성

기본 Operator 빌드 이미지를 사용하는 대신 VM(사용자 정의 피어 Pod 가상 머신) 이미지를 생성할 수 있습니다.

피어 Pod QCOW2 이미지를 사용하여 OCI(Open Container Initiative) 컨테이너를 빌드합니다. 나중에 컨테이너 레지스트리 URL과 피어 Pod VM 이미지 구성 맵에 이미지 경로를 추가합니다.

프로세스

  1. Dockerfile.podvm-oci 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    FROM scratch
    
    ARG PODVM_IMAGE_SRC
    ENV PODVM_IMAGE_PATH="/image/podvm.qcow2"
    
    COPY $PODVM_IMAGE_SRC $PODVM_IMAGE_PATH
  2. 다음 명령을 실행하여 Pod VM QCOW2 이미지를 사용하여 컨테이너를 빌드합니다.

    Copy to Clipboard Toggle word wrap
    $ docker build -t podvm-libvirt \
      --build-arg PODVM_IMAGE_SRC=<podvm_image_source> \ 
    1
    
      --build-arg PODVM_IMAGE_PATH=<podvm_image_path> \ 
    2
    
      -f Dockerfile.podvm-oci .
    1
    호스트의 QCOW2 이미지 소스를 지정합니다.
    2
    선택 사항: 기본 /image/podvm.qcow2 를 사용하지 않는 경우 QCOW2 이미지의 경로를 지정합니다.

6.2.4. 피어 Pod 보안 생성

피어 Pod 보안이 비어 있고 CCO(Cloud Credential Operator)가 설치되면 OpenShift 샌드박스 컨테이너 Operator는 CCO를 사용하여 시크릿을 검색합니다. CCO를 설치 제거한 경우 OpenShift 샌드박스 컨테이너의 피어 Pod 시크릿을 수동으로 생성해야 합니다. 그렇지 않으면 피어 Pod가 작동하지 않습니다.

시크릿은 Pod VM(가상 머신) 이미지 및 피어 Pod 인스턴스를 생성하기 위한 인증 정보를 저장합니다.

기본적으로 OpenShift 샌드박스 컨테이너 Operator는 클러스터를 생성하는 데 사용되는 인증 정보를 기반으로 보안을 생성합니다. 그러나 다른 인증 정보를 사용하는 보안을 수동으로 생성할 수 있습니다.

사전 요구 사항

  • LIBVIRT_URI. 이 값은 libvirt 네트워크의 기본 게이트웨이 IP 주소입니다. libvirt 네트워크 설정을 확인하여 이 값을 가져옵니다.

    참고

    libvirt에서 기본 브리지 가상 네트워크를 사용하는 경우 다음 명령을 실행하여 LIBVIRT_URI 를 가져올 수 있습니다.

    Copy to Clipboard Toggle word wrap
    $ virtint=$(bridge_line=$(virsh net-info default | grep Bridge);  echo "${bridge_line//Bridge:/}" | tr -d [:blank:])
    
    $ LIBVIRT_URI=$( ip -4 addr show $virtint | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
    
    $ LIBVIRT_GATEWAY_URI="qemu+ssh://root@${LIBVIRT_URI}/system?no_verify=1"
  • REDHAT_OFFLINE_TOKEN. Red Hat API 토큰에서 RHEL 이미지를 다운로드하기 위해 이 토큰 을 생성했습니다.

프로세스

  1. 다음 예에 따라 peer-pods-secret.yaml 매니페스트 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Secret
    metadata:
      name: peer-pods-secret
      namespace: openshift-sandboxed-containers-operator
    type: Opaque
    stringData:
      CLOUD_PROVIDER: "libvirt"
      LIBVIRT_URI: "<libvirt_gateway_uri>" 
    1
    
      REDHAT_OFFLINE_TOKEN: "<rh_offline_token>" 
    2
    1
    libvirt URI를 지정합니다.
    2
    Operator 빌드 이미지에 필요한 Red Hat 오프라인 토큰을 지정합니다.
  2. 다음 명령을 실행하여 시크릿을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc apply -f peer-pods-secret.yaml

6.2.5. 피어 Pod 구성 맵 생성

OpenShift 샌드박스 컨테이너에 대한 피어 Pod 구성 맵을 생성해야 합니다.

프로세스

  1. 다음 예에 따라 peer-pods-cm.yaml 매니페스트 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: peer-pods-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      CLOUD_PROVIDER: "libvirt"
      PEERPODS_LIMIT_PER_NODE: "10" 
    1
    
      LIBVIRT_POOL: "<libvirt_pool>" 
    2
    
      LIBVIRT_VOL_NAME: "<libvirt_volume>" 
    3
    
      LIBVIRT_DIR_NAME: "/var/lib/libvirt/images/<directory_name>" 
    4
    
      LIBVIRT_NET: "default" 
    5
    
      DISABLECVM: "true"
    1
    노드당 생성할 수 있는 최대 피어 Pod 수를 지정합니다. 기본값은 10 입니다.
    2
    libvirt 풀을 지정합니다. libvirt 풀을 수동으로 구성한 경우 KVM 호스트 구성과 동일한 이름을 사용합니다.
    3
    libvirt 볼륨 이름을 지정합니다. libvirt 볼륨을 수동으로 구성한 경우 KVM 호스트 구성과 동일한 이름을 사용합니다.
    4
    가상 머신 디스크 이미지(예: .qcow2 또는 .raw 파일)를 저장할 libvirt 디렉터리를 지정합니다. libvirt에 읽기 및 쓰기 액세스 권한이 있는지 확인하려면 libvirt 스토리지 디렉터리의 하위 디렉터리를 사용합니다. 기본값은 /var/lib/libvirt/images/ 입니다.
    5
    선택 사항: 기본 네트워크를 사용하지 않으려면 libvirt 네트워크를 지정합니다.
  2. 다음 명령을 실행하여 구성 맵을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc apply -f peer-pods-cm.yaml

6.2.6. 피어 Pod VM 이미지 구성 맵 생성

피어 Pod VM(가상 머신) 이미지에 대한 구성 맵을 생성해야 합니다.

사전 요구 사항

  • Red Hat Hybrid Cloud Console 을 사용하여 활성화 키를 생성해야 합니다.
  • 선택 사항: Cloud API Adaptor 사용자 정의 이미지를 사용하려면 이미지의 이름, URL, 분기 또는 태그가 있어야 합니다.

프로세스

  1. 다음 예에 따라 libvirt-podvm-image-cm.yaml 매니페스트를 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: libvirt-podvm-image-cm
      namespace: openshift-sandboxed-containers-operator
    data:
      PODVM_DISTRO: "rhel"
      DOWNLOAD_SOURCES: "no" 
    1
    
      CAA_SRC: "https://github.com/confidential-containers/cloud-api-adaptor" 
    2
    
      CAA_REF: "main" 
    3
    
      CONFIDENTIAL_COMPUTE_ENABLED: "yes"
      UPDATE_PEERPODS_CM: "yes"
      ORG_ID: "<rhel_organization_id>"
      ACTIVATION_KEY: "<rhel_activation_key>" 
    4
    
      IMAGE_NAME: "<podvm_libvirt_image>" 
    5
    
      PODVM_IMAGE_URI: "oci::<image_repo_url>:<image_tag>::<image_path>" 
    6
    
      SE_BOOT: "true" 
    7
    
      BASE_OS_VERSION: "<rhel_image_os_version>" 
    8
    1
    사용자 정의 Cloud API Adaptor 소스를 사용하여 Pod VM 이미지를 빌드하려면 yes 를 지정합니다.
    2
    선택 사항: Cloud API Adaptor 사용자 정의 이미지의 URL을 지정합니다.
    3
    선택 사항: Cloud API Adaptor 사용자 정의 이미지의 분기 또는 태그를 지정합니다.
    4
    RHEL 활성화 키를 지정합니다.
    5
    사용자 정의 피어 Pod VM 이미지 이름을 지정합니다.
    6
    선택 사항: 사용자 정의 피어 Pod VM 이미지를 생성한 경우 컨테이너 레지스트리 URL, 이미지 태그 및 이미지 경로(기본값: /image/podvm.qcow2)를 지정합니다. 그렇지 않으면 값을 "" 로 설정합니다.
    7
    기본값 true 에서는 기본 Operator 빌드 이미지에 대해 IBM Secure Execution를 활성화합니다. 사용자 정의 피어 Pod VM 이미지를 사용하는 경우 false 로 설정합니다.
    8
    RHEL 이미지 운영 체제 버전을 지정합니다. IBM Z® Secure Execution는 RHEL 9.5 이상 버전을 지원합니다.
  2. 다음 명령을 실행하여 구성 맵을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc apply -f libvirt-podvm-image-cm.yaml

    libvirt 공급자에 대해 libvirt Pod VM 이미지 구성 맵이 생성됩니다.

6.2.7. KVM 호스트 시크릿 생성

KVM 호스트에 대한 시크릿을 생성해야 합니다.

프로세스

  1. 다음 명령을 실행하여 SSH 키 쌍을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ ssh-keygen -f ./id_rsa -N ""
  2. 공개 SSH 키를 KVM 호스트에 복사합니다.

    Copy to Clipboard Toggle word wrap
    $ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP> 
    1
    1
    KVM 호스트의 IP 주소 또는 피어 Pod VM이 실행 중인 LPAR을 지정합니다. 예를 들면 192.168.122.1 입니다.
  3. 다음 명령을 실행하여 Secret 오브젝트를 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc create secret generic ssh-key-secret \
      -n openshift-sandboxed-containers-operator \
      --from-file=id_rsa.pub=./id_rsa.pub \
      --from-file=id_rsa=./id_rsa
  4. 생성한 SSH 키를 삭제합니다.

    Copy to Clipboard Toggle word wrap
    $ shred --remove id_rsa.pub id_rsa

6.2.8. 사용자 정의 피어 Pod VM 이미지 선택

Pod 매니페스트에 주석을 추가하여 워크로드 요구 사항에 맞게 사용자 정의 피어 Pod 가상 머신(VM) 이미지를 선택할 수 있습니다. 사용자 정의 이미지는 피어 Pod 구성 맵에 지정된 기본 이미지를 덮어씁니다. libvirt 풀에 새 libvirt 볼륨을 생성하고 사용자 지정 피어 포드 VM 이미지를 새 볼륨에 업로드합니다. 그런 다음 사용자 정의 피어 Pod VM 이미지를 사용하도록 Pod 매니페스트를 업데이트합니다.

사전 요구 사항

  • 클라우드 공급자 또는 하이퍼바이저와 호환되는 사용자 정의 Pod VM 이미지의 ID를 사용할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 libvirt 풀의 이름을 설정합니다.

    Copy to Clipboard Toggle word wrap
    $ export LIBVIRT_POOL=<libvirt_pool> 
    1
    1
    기존 libvirt 풀 이름을 지정합니다.
  2. 다음 명령을 실행하여 새 libvirt 볼륨의 이름을 설정합니다.

    Copy to Clipboard Toggle word wrap
    $ export LIBVIRT_VOL_NAME=<new_libvirt_volume>
  3. 다음 명령을 실행하여 풀에 대한 libvirt 볼륨을 만듭니다.

    Copy to Clipboard Toggle word wrap
    $ virsh -c qemu:///system \
      vol-create-as --pool $LIBVIRT_POOL \
      --name $LIBVIRT_VOL_NAME \
      --capacity 20G \
      --allocation 2G \
      --prealloc-metadata \
      --format qcow2
  4. 사용자 정의 피어 Pod VM 이미지를 libvirt 볼륨에 업로드합니다.

    Copy to Clipboard Toggle word wrap
    $ virsh -c qemu:///system vol-upload \
      --vol $LIBVIRT_VOL_NAME <custom_podvm_image.qcow2> \ 
    1
    
      --pool $LIBVIRT_POOL --sparse
    1
    사용자 정의 피어 Pod VM 이미지 이름을 지정합니다.
  5. 다음 예에 따라 pod-manifest.yaml 매니페스트 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-manifest
      annotations:
        io.katacontainers.config.hypervisor.image: "<new_libvirt_volume>" 
    1
    
    spec:
      runtimeClassName: kata-remote 
    2
    
      containers:
      - name: <example_container> 
    3
    
        image: registry.access.redhat.com/ubi9/ubi:9.3
        command: ["sleep", "36000"]
    1
    사용자 지정 피어 Pod VM 이미지를 업로드한 libvirt 볼륨 이름을 지정합니다.
    2
    runtimeClassName 필드가 kata-remote 로 설정되어 피어 Pod를 생성해야 합니다.
    3
    컨테이너 이름을 지정합니다.
  6. 다음 명령을 실행하여 Pod를 생성합니다.

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

6.2.9. Kata 에이전트 정책 사용자 정의

Kata 에이전트 정책은 Kata 런타임으로 실행되는 Pod에 대한 에이전트 API 요청을 제어하는 보안 메커니즘입니다. Pod VM(가상 시스템) 내에서 Kata 에이전트가 Rego로 작성하고 강제 적용하는 이 정책은 허용 또는 거부되는 작업을 결정합니다.

보안이 중요하지 않은 개발 및 테스트와 같은 특정 사용 사례에 대해 사용자 지정 정책을 사용하여 기본 정책을 덮어쓸 수 있습니다. 예를 들어 컨트롤 플레인을 신뢰할 수 있는 환경에서 실행할 수 있습니다. 다음과 같은 다양한 방법으로 사용자 지정 정책을 적용할 수 있습니다.

  • Pod VM 이미지에 포함
  • 피어 Pod 구성 맵의 패치 적용.
  • 워크로드 Pod YAML에 주석을 추가합니다.

프로덕션 시스템의 경우 기본 방법은 initdata를 사용하여 Kata 에이전트 정책을 재정의하는 것입니다. 다음 절차에서는 io.katacontainers.config.agent.policy 주석을 사용하는 개별 Pod에 사용자 지정 정책을 적용합니다. 정책은 Base64로 인코딩된 Rego 형식으로 제공됩니다. 이 방법은 Pod VM 이미지를 수정하지 않고 Pod 생성 시 기본 정책을 재정의합니다.

참고

사용자 지정 정책은 기본 정책을 완전히 대체합니다. 특정 API만 수정하려면 전체 정책을 포함하고 관련 규칙을 조정합니다.

프로세스

  1. 사용자 지정 정책으로 policy.rego 파일을 생성합니다. 다음 예제는 데모에 execlog 가 활성화된 모든 구성 가능한 API를 보여줍니다.

    Copy to Clipboard Toggle word wrap
    package agent_policy
    
    import future.keywords.in
    import input
    
    default CopyFileRequest := false
    default CreateContainerRequest := false
    default CreateSandboxRequest := true
    default DestroySandboxRequest := true
    default ExecProcessRequest := true  # Enabled to allow exec API
    default GetOOMEventRequest := true
    default GuestDetailsRequest := true
    default OnlineCPUMemRequest := true
    default PullImageRequest := true
    default ReadStreamRequest := true   # Enabled to allow log API
    default RemoveContainerRequest := true
    default RemoveStaleVirtiofsShareMountsRequest := true
    default SignalProcessRequest := true
    default StartContainerRequest := true
    default StatsContainerRequest := true
    default TtyWinResizeRequest := true
    default UpdateEphemeralMountsRequest := true
    default UpdateInterfaceRequest := true
    default UpdateRoutesRequest := true
    default WaitProcessRequest := true
    default WriteStreamRequest := false

    이 정책은 exec (ExecProcessRequest) 및 로그 (ReadStreamRequest) API를 활성화합니다. 필요에 따라 정책을 추가로 사용자 지정하도록 true 또는 false 값을 조정합니다.

  2. 다음 명령을 실행하여 policy.rego 파일을 Base64 인코딩 문자열로 변환합니다.

    Copy to Clipboard Toggle word wrap
    $ base64 -w0 policy.rego

    yaml 파일에 사용할 출력을 저장합니다.

  3. my-pod.yaml Pod 사양 파일에 Base64로 인코딩된 정책을 추가합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Pod
    metadata:
      name: <pod_name>
      annotations:
        io.katacontainers.config.agent.policy: <base64_encoded_policy>
    spec:
      runtimeClassName: kata-remote
      containers:
      - name: <container_name>
        image: registry.access.redhat.com/ubi9/ubi:latest
        command:
        - sleep
        - "36000"
        securityContext:
          privileged: false
          seccompProfile:
            type: RuntimeDefault
  4. 다음 명령을 실행하여 Pod 매니페스트를 적용합니다.

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

6.2.10. KataConfig 사용자 지정 리소스 생성

KataConfig CR(사용자 정의 리소스)을 생성하여 작업자 노드에 kata-remote 를 런타임 클래스로 설치해야 합니다.

KataConfig CR을 생성하면 OpenShift 샌드박스 컨테이너 Operator가 다음을 수행합니다.

  • 기본 구성을 사용하여 kata-remote 라는 RuntimeClass CR을 생성합니다. 이를 통해 사용자는 RuntimeClassName 필드에서 CR을 참조하여 kata-remote 를 런타임으로 사용하도록 워크로드를 구성할 수 있습니다. 이 CR은 런타임의 리소스 오버헤드도 지정합니다.

OpenShift 샌드박스 컨테이너는 kata-remote 를 기본 런타임이 아닌 클러스터의 선택적 런타임으로 설치합니다.

중요

KataConfig CR을 생성하면 작업자 노드가 자동으로 재부팅됩니다. 재부팅에는 10분에서 60분 이상 걸릴 수 있습니다. 재부팅 시간을 방해하는 요소는 다음과 같습니다.

  • 더 많은 작업자 노드가 있는 대규모 OpenShift Container Platform 배포
  • BIOS 및 Cryostat 유틸리티 활성화.
  • SSD가 아닌 하드 디스크 드라이브에 배포합니다.
  • 가상 노드가 아닌 베어 메탈과 같은 물리적 노드에 배포됩니다.
  • 느린 CPU 및 네트워크입니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.

프로세스

  1. 다음 예에 따라 example-kataconfig.yaml 매니페스트 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: kataconfiguration.openshift.io/v1
    kind: KataConfig
    metadata:
      name: example-kataconfig
    spec:
      enablePeerPods: true
      logLevel: info
    #  kataConfigPoolSelector:
    #    matchLabels:
    #      <label_key>: '<label_value>' 
    1
    1
    선택 사항: 노드 레이블을 적용하여 특정 노드에 kata-remote 를 설치한 경우 키와 값(예: osc: 'true' )을 지정합니다.
  2. 다음 명령을 실행하여 KataConfig CR을 생성합니다.

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

    새로운 KataConfig CR이 생성되고 작업자 노드에 kata-remote 가 런타임 클래스로 설치됩니다.

    설치를 확인하기 전에 kata-remote 설치가 완료되고 작업자 노드가 재부팅될 때까지 기다립니다.

  3. 다음 명령을 실행하여 설치 진행 상황을 모니터링합니다.

    Copy to Clipboard Toggle word wrap
    $ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"

    kataNodes 아래의 모든 작업자의 상태가 설치되고 이유를 지정하지 않고 InProgress 조건이 False 이면 클러스터에 kata-remote 가 설치됩니다.

  4. 다음 명령을 실행하여 피어 Pod 이미지를 빌드하고 libvirt 볼륨에 업로드했는지 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator

    출력 예

    Copy to Clipboard Toggle word wrap
    Name: peer-pods-cm
    Namespace: openshift-sandboxed-containers-operator
    Labels: <none>
    Annotations: <none>
    
    Data
    ====
    CLOUD_PROVIDER: libvirt
    
    BinaryData
    ====
    Events: <none>

  5. 다음 명령을 실행하여 UPDATEDMACHINECOUNTMACHINECOUNT 와 같은 경우 UPDATED MACHINECOUNT가 UPDATED 상태에 있는지 확인하려면 kata-oc 머신 구성 풀 진행 상황을 모니터링합니다.

    Copy to Clipboard Toggle word wrap
    $ watch oc get mcp/kata-oc
  6. 다음 명령을 실행하여 데몬 세트를 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
  7. 다음 명령을 실행하여 런타임 클래스를 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc get runtimeclass

    출력 예

    Copy to Clipboard Toggle word wrap
    NAME             HANDLER          AGE
    kata             kata             152m
    kata-remote      kata-remote      152m

6.2.11. 워크로드 오브젝트 구성

kata-remote 를 다음 pod 템플릿 오브젝트의 런타임 클래스로 설정하여 OpenShift 샌드박스 컨테이너 워크로드 오브젝트를 구성해야 합니다.

  • Pod 오브젝트
  • ReplicaSet 오브젝트
  • ReplicationController 오브젝트
  • StatefulSet 오브젝트
  • Deployment 오브젝트
  • DeploymentConfig 오브젝트
중요

Operator 네임스페이스에 워크로드를 배포하지 마십시오. 이러한 리소스에 대한 전용 네임스페이스를 생성합니다.

사전 요구 사항

  • KataConfig CR(사용자 정의 리소스)을 생성했습니다.

프로세스

  1. 다음 예와 같이 spec.runtimeClassName: kata-remote 를 각 pod 템플릿 워크로드 오브젝트의 매니페스트에 추가합니다.

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: <object>
    # ...
    spec:
      runtimeClassName: kata-remote
    # ...

    OpenShift Container Platform은 워크로드 오브젝트를 생성하고 스케줄링을 시작합니다.

검증

  • pod-templated 오브젝트의 spec.runtimeClassName 필드를 검사합니다. 값이 kata-remote 이면 피어 Pod를 사용하여 OpenShift 샌드박스 컨테이너에서 워크로드가 실행됩니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat, Inc.