4.2. 명령줄을 사용하여 워크로드 배포
명령줄을 사용하여 OpenShift 샌드박스 컨테이너 워크로드를 배포할 수 있습니다.
4.2.1. libvirt 볼륨 구성 링크 복사링크가 클립보드에 복사되었습니다!
KVM 호스트에 libvirt 볼륨을 구성해야 합니다. 피어 Pod는 Cloud API Adaptor의 libvirt 공급자를 사용하여 가상 머신을 생성하고 관리합니다.
사전 요구 사항
- OpenShift Container Platform 웹 콘솔 또는 명령줄을 사용하여 OpenShift Container Platform 클러스터에 OpenShift 샌드박스 컨테이너 Operator를 설치했습니다.
- KVM 호스트에 대한 관리자 권한이 있습니다.
-
KVM 호스트에
podman을 설치했습니다. -
KVM 호스트에
virt-customize를 설치했습니다.
프로세스
- KVM 호스트에 로그인합니다.
다음 명령을 실행하여 libvirt 풀의 이름을 설정합니다.
export LIBVIRT_POOL=<libvirt_pool>
$ export LIBVIRT_POOL=<libvirt_pool>Copy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt 공급자의 시크릿을 생성하려면
LIBVIRT_POOL값이 필요합니다.다음 명령을 실행하여 libvirt 풀의 이름을 설정합니다.
export LIBVIRT_VOL_NAME=<libvirt_volume>
$ export LIBVIRT_VOL_NAME=<libvirt_volume>Copy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt 공급자의 시크릿을 생성하려면
LIBVIRT_VOL_NAME값이 필요합니다.다음 명령을 실행하여 기본 스토리지 풀 위치의 경로를 설정합니다.
export LIBVIRT_POOL_DIRECTORY=<target_directory>
$ export LIBVIRT_POOL_DIRECTORY=<target_directory>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- libvirt에 읽기 및 쓰기 액세스 권한이 있는지 확인하려면 libvirt 스토리지 디렉터리의 하위 디렉터리를 사용합니다. 기본값은
/var/lib/libvirt/images/입니다.
다음 명령을 실행하여 libvirt 풀을 생성합니다.
virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
$ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 libvirt 풀을 시작합니다.
virsh pool-start $LIBVIRT_POOL
$ virsh pool-start $LIBVIRT_POOLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 풀에 대한 libvirt 볼륨을 만듭니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2. KVM 게스트 이미지 생성 링크 복사링크가 클립보드에 복사되었습니다!
KVM 게스트 이미지를 생성하여 libvirt 볼륨에 업로드해야 합니다.
사전 요구 사항
- IBM z15 이상 또는 IBM® LinuxONE III 이상
- KVM을 사용하여 RHEL 9 이상에서 실행 중인 하나 이상의 LPAR.
프로세스
- OpenShift Container Platform 클러스터에 로그인합니다.
RHEL 서브스크립션이 있는 경우 Red Hat 서브스크립션 관리에 대한 서브스크립션 환경 변수를 설정합니다.
다음 명령을 실행하여 조직 ID를 설정합니다.
export ORG_ID=$(cat ~/.rh_subscription/orgid)
$ export ORG_ID=$(cat ~/.rh_subscription/orgid)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 활성화 키를 설정합니다.
export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)
$ export ACTIVATION_KEY=$(cat ~/.rh_subscription/activation_key)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RHEL 서브스크립션이 없는 경우 RHEL의 서브스크립션 값을 설정합니다.
다음 명령을 실행하여 조직 ID를 설정합니다.
export ORG_ID=<RHEL_ORGID_VALUE>
$ export ORG_ID=<RHEL_ORGID_VALUE>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- RHEL 조직 ID를 지정합니다.
다음 명령을 실행하여 활성화 키를 설정합니다.
export ACTIVATION_KEY=<RHEL_ACTIVATION_KEY>
$ export ACTIVATION_KEY=<RHEL_ACTIVATION_KEY>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- RHEL 활성화 키를 지정합니다.
- IBM Z® 시스템에 로그인합니다.
Red Hat Customer Portal 에서 libvirt 올바른 액세스 권한을 부여하려면
s390xRHEL KVM 게스트 이미지를 libvirt 스토리지 디렉터리로 다운로드합니다.기본 디렉터리는
/var/lib/libvirt/images입니다. 이 이미지는 관련 바이너리를 포함하는 피어 Pod VM 이미지를 생성하는 데 사용됩니다.다음 명령을 실행하여 다운로드한 이미지의
IMAGE_URL을 설정합니다.export IMAGE_URL=<path/to/image>
$ export IMAGE_URL=<path/to/image>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- KVM 게스트 이미지의 경로를 지정합니다.
다음 명령을 실행하여 게스트 KVM 이미지를 등록합니다.
export REGISTER_CMD="subscription-manager register --org=${ORG_ID} \ --activationkey=${ACTIVATION_KEY}"$ export REGISTER_CMD="subscription-manager register --org=${ORG_ID} \ --activationkey=${ACTIVATION_KEY}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 게스트 KVM 이미지를 사용자 지정합니다.
virt-customize -v -x -a ${IMAGE_URL} --run-command "${REGISTER_CMD}"$ virt-customize -v -x -a ${IMAGE_URL} --run-command "${REGISTER_CMD}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 이미지의 체크섬을 설정합니다.
export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')$ export IMAGE_CHECKSUM=$(sha256sum ${IMAGE_URL} | awk '{ print $1 }')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3. 피어 Pod VM 이미지 빌드 링크 복사링크가 클립보드에 복사되었습니다!
피어 Pod 가상 머신(VM) 이미지를 빌드하고 libvirt 볼륨에 업로드해야 합니다.
프로세스
- OpenShift Container Platform 클러스터에 로그인합니다.
다음 명령을 실행하여 cloud-api-adaptor 리포지토리를 복제합니다.
git clone --single-branch https://github.com/confidential-containers/cloud-api-adaptor.git
$ git clone --single-branch https://github.com/confidential-containers/cloud-api-adaptor.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
podvm디렉터리로 변경합니다.cd cloud-api-adaptor && git checkout 8577093
$ cd cloud-api-adaptor && git checkout 8577093Copy to Clipboard Copied! Toggle word wrap Toggle overflow 최종 QCOW2 이미지가 생성되는 빌더 이미지를 생성합니다.
RHEL 시스템이 서브스크립션된 경우 다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 시스템이 서브스크립션이 없는 경우 다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 명령을 실행하여 피어 Pod를 실행하는 데 필요한 바이너리를 사용하여 중간 이미지 패키지를 생성합니다.
podman build -t podvm_binaries_rhel_s390x \ --build-arg BUILDER_IMG="podvm_builder_rhel_s390x:latest" \ --build-arg ARCH=s390x \ -f podvm/Dockerfile.podvm_binaries.rhel .
$ podman build -t podvm_binaries_rhel_s390x \ --build-arg BUILDER_IMG="podvm_builder_rhel_s390x:latest" \ --build-arg ARCH=s390x \ -f podvm/Dockerfile.podvm_binaries.rhel .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 프로세스는 상당한 시간이 걸립니다.
다음 명령을 실행하여 바이너리를 추출하고 피어 Pod QCOW2 이미지를 빌드합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 이미지 디렉터리 환경 변수를 생성합니다.
export IMAGE_OUTPUT_DIR=<image_output_directory>
$ export IMAGE_OUTPUT_DIR=<image_output_directory>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 이미지의 디렉터리를 지정합니다.
다음 명령을 실행하여 이미지 디렉터리를 생성합니다.
mkdir -p $IMAGE_OUTPUT_DIR
$ mkdir -p $IMAGE_OUTPUT_DIRCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 추출된 피어 Pod QCOW2 이미지를 저장합니다.
podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${IMAGE_OUTPUT_DIR}$ podman save podvm_rhel_s390x | tar -xO --no-wildcards-match-slash '*.tar' | tar -x -C ${IMAGE_OUTPUT_DIR}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 피어 Pod QCOW2 이미지를 libvirt 볼륨에 업로드합니다.
virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME \ $IMAGE_OUTPUT_DIR/podvm-*.qcow2 \ --pool $LIBVIRT_POOL --sparse
$ virsh -c qemu:///system vol-upload \ --vol $LIBVIRT_VOL_NAME \ $IMAGE_OUTPUT_DIR/podvm-*.qcow2 \ --pool $LIBVIRT_POOL --sparseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4. 시크릿 생성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에 Secret 오브젝트를 생성해야 합니다.
사전 요구 사항
-
LIBVIRT_POOL. KVM 호스트에서 libvirt를 구성할 때 설정한 값을 사용합니다. -
LIBVIRT_VOL_NAME. KVM 호스트에서 libvirt를 구성할 때 설정한 값을 사용합니다. LIBVIRT_URI. 이 값은 libvirt 네트워크의 기본 게이트웨이 IP 주소입니다. libvirt 네트워크 설정을 확인하여 이 값을 가져옵니다.참고libvirt에서 기본 브리지 가상 네트워크를 사용하는 경우 다음 명령을 실행하여
LIBVIRT_URI를 가져올 수 있습니다.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}')$ 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}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
다음 예에 따라
peer-pods-secret.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 매니페스트를
적용하여 보안오브젝트를 생성합니다.oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
피어 Pod 시크릿을 업데이트하는 경우 peerpodconfig-ctrl-caa-daemon DaemonSet을 다시 시작하여 변경 사항을 적용해야 합니다.
시크릿을 업데이트한 후 매니페스트를 적용합니다. 그런 다음 다음 명령을 실행하여 cloud-api-adaptor Pod를 다시 시작합니다.
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
데몬 세트를 다시 시작하면 피어 Pod가 다시 생성됩니다. 기존 Pod는 업데이트하지 않습니다.
4.2.5. 구성 맵 생성 링크 복사링크가 클립보드에 복사되었습니다!
libvirt 공급자의 OpenShift Container Platform 클러스터에 구성 맵을 생성해야 합니다.
프로세스
다음 예에 따라
peer-pods-cm.yaml매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 매니페스트를 적용하여 구성 맵을 생성합니다.
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow libvirt 공급자에 대한 구성 맵이 생성됩니다.
피어 Pod 구성 맵을 업데이트하는 경우 변경 사항을 적용하려면 peerpodconfig-ctrl-caa-daemon 데몬 세트를 다시 시작해야 합니다.
구성 맵을 업데이트한 후 매니페스트를 적용합니다. 그런 다음 다음 명령을 실행하여 cloud-api-adaptor Pod를 다시 시작합니다.
oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
$ oc set env ds/peerpodconfig-ctrl-caa-daemon -n openshift-sandboxed-containers-operator REBOOT="$(date)"
daemonset을 다시 시작하면 피어 Pod가 다시 생성됩니다. 기존 Pod를 업데이트하지 않습니다.
4.2.6. SSH 키 보안 생성 링크 복사링크가 클립보드에 복사되었습니다!
KVM 호스트에 대한 SSH 키 시크릿 오브젝트를 생성해야 합니다.
프로세스
- OpenShift Container Platform 클러스터에 로그인합니다.
다음 명령을 실행하여 SSH 키 쌍을 생성합니다.
ssh-keygen -f ./id_rsa -N ""
$ ssh-keygen -f ./id_rsa -N ""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 공개 SSH 키를 KVM 호스트에 복사합니다.
ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
Secret오브젝트를 생성합니다.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$ 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_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 키 시크릿이 생성됩니다.
생성한 SSH 키를 삭제합니다.
shred -remove id_rsa.pub id_rsa
$ shred -remove id_rsa.pub id_rsaCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.7. KataConfig 사용자 지정 리소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
작업자 노드에 kata-remote 를 런타임 클래스로 설치하려면 KataConfig CR(사용자 정의 리소스)을 생성해야 합니다.
KataConfig CR을 생성하면 OpenShift 샌드박스 컨테이너 Operator가 다음을 수행합니다.
-
기본 구성을 사용하여
kata-remote라는RuntimeClassCR을 생성합니다. 이를 통해 사용자는RuntimeClassName필드에서 CR을 참조하여kata-remote를 런타임으로 사용하도록 워크로드를 구성할 수 있습니다. 이 CR은 런타임의 리소스 오버헤드도 지정합니다.
OpenShift 샌드박스 컨테이너는 kata-remote 를 기본 런타임이 아닌 클러스터의 선택적 런타임으로 설치합니다.
KataConfig CR을 생성하면 작업자 노드가 자동으로 재부팅됩니다. 재부팅에는 10분에서 60분 이상 걸릴 수 있습니다. 재부팅 시간을 방해하는 요소는 다음과 같습니다.
- 더 많은 작업자 노드가 있는 대규모 OpenShift Container Platform 배포
- BIOS 및 Cryostat 유틸리티 활성화.
- SSD가 아닌 하드 디스크 드라이브에 배포합니다.
- 가상 노드가 아닌 베어 메탈과 같은 물리적 노드에 배포됩니다.
- 느린 CPU 및 네트워크입니다.
사전 요구 사항
-
cluster-admin역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 예에 따라
cluster-kataconfig.yaml매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 선택한 노드에
kata-remote를 설치하려면 다음 예에 따라 노드 라벨을 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 선택한 노드의 라벨을 지정합니다.
KataConfigCR을 생성합니다.oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새로운
KataConfigCR이 생성되고 작업자 노드에kata-remote가 런타임 클래스로 설치됩니다.설치를 확인하기 전에
kata-remote설치가 완료되고 작업자 노드가 재부팅될 때까지 기다립니다.
검증
다음 명령을 실행하여 설치 진행 상황을 모니터링합니다.
watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"Copy to Clipboard Copied! Toggle word wrap Toggle overflow kataNodes아래의 모든 작업자의 상태가설치되고이유를 지정하지 않고InProgress조건이False이면 클러스터에kata-remote가 설치됩니다.
자세한 내용은 KataConfig 상태 메시지를 참조하십시오.
4.2.8. 선택 사항: 노드당 피어 Pod VM 수 수정 링크 복사링크가 클립보드에 복사되었습니다!
peerpodConfig CR(사용자 정의 리소스)을 편집하여 노드당 피어 Pod 가상 머신(VM) 제한을 변경할 수 있습니다.
프로세스
다음 명령을 실행하여 현재 제한을 확인합니다.
oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
peerpodConfigCR의limit속성을 수정합니다.oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <value>를 정의할 제한으로 바꿉니다.
4.2.9. 워크로드 오브젝트 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 pod 템플릿 오브젝트의 런타임 클래스로 kata-remote 를 구성하여 OpenShift 샌드박스 컨테이너 워크로드를 배포합니다.
-
Pod오브젝트 -
ReplicaSet오브젝트 -
ReplicationController오브젝트 -
StatefulSet오브젝트 -
Deployment오브젝트 -
DeploymentConfig오브젝트
openshift-sandboxed-containers-operator 네임스페이스에 워크로드를 배포하지 마십시오. 이러한 리소스에 대한 전용 네임스페이스를 생성합니다.
사전 요구 사항
- 공급자에 대한 보안 오브젝트를 생성했습니다.
- 공급자에 대한 구성 맵을 생성했습니다.
-
KataConfigCR(사용자 정의 리소스)을 생성했습니다.
프로세스
다음 예와 같이
spec.runtimeClassName: kata-remote를 각 pod 템플릿 워크로드 오브젝트의 매니페스트에 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform은 워크로드 오브젝트를 생성하고 스케줄링을 시작합니다.
검증
-
pod-templated 오브젝트의
spec.runtimeClassName필드를 검사합니다. 값이kata-remote이면 피어 Pod를 사용하여 OpenShift 샌드박스 컨테이너에서 워크로드가 실행됩니다.