6.2. IBM Z 및 IBM LinuxONE에 OpenShift 샌드박스 컨테이너 배포
CLI(명령줄 인터페이스)를 사용하여 다음 작업을 수행하여 IBM Z® 및 IBM® LinuxONE에 OpenShift 샌드박스 컨테이너를 배포할 수 있습니다.
- OpenShift 샌드박스 컨테이너 Operator를 설치합니다.
- 선택 사항: 각 작업자 노드에서 실행되는 가상 머신 수를 변경합니다.
- libvirt 볼륨을 구성합니다.
- 선택 사항: 사용자 정의 피어 Pod VM 이미지를 생성합니다.
- 피어 Pod 시크릿을 생성합니다.
- 피어 Pod 구성 맵을 생성합니다.
- 피어 Pod VM 이미지 구성 맵을 생성합니다.
- KVM 호스트 시크릿을 생성합니다.
-
KataConfig
사용자 지정 리소스를 생성합니다. - OpenShift 샌드박스 컨테이너 워크로드 오브젝트를 구성합니다.
6.2.1. OpenShift 샌드박스 컨테이너 Operator 설치
CLI를 사용하여 OpenShift 샌드박스 컨테이너 Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
osc-namespace.yaml
매니페스트 파일을 생성합니다.apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
다음 명령을 실행하여 네임스페이스를 생성합니다.
$ oc apply -f osc-namespace.yaml
osc-operatorgroup.yaml
매니페스트 파일을 생성합니다.apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: sandboxed-containers-operator-group namespace: openshift-sandboxed-containers-operator spec: targetNamespaces: - openshift-sandboxed-containers-operator
다음 명령을 실행하여 operator 그룹을 생성합니다.
$ oc apply -f osc-operatorgroup.yaml
osc-subscription.yaml
매니페스트 파일을 생성합니다.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.8.0
다음 명령을 실행하여 서브스크립션을 생성합니다.
$ oc apply -f osc-subscription.yaml
다음 명령을 실행하여 Operator가 올바르게 설치되었는지 확인합니다.
$ oc get csv -n openshift-sandboxed-containers-operator
이 명령을 완료하는 데 몇 분이 걸릴 수 있습니다.
다음 명령을 실행하여 프로세스를 확인합니다.
$ watch oc get csv -n openshift-sandboxed-containers-operator
출력 예
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.8.0 1.7.0 Succeeded
추가 리소스
6.2.2. 노드당 피어 Pod VM 수 수정
peerpodConfig
CR(사용자 정의 리소스)을 편집하여 노드당 피어 Pod 가상 머신(VM) 제한을 변경할 수 있습니다.
프로세스
다음 명령을 실행하여 현재 제한을 확인합니다.
$ oc get peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ -o jsonpath='{.spec.limit}{"\n"}'
다음 명령을 실행하여
peerpodConfig
CR의limit
속성을 수정합니다.$ oc patch peerpodconfig peerpodconfig-openshift -n openshift-sandboxed-containers-operator \ --type merge --patch '{"spec":{"limit":"<value>"}}' 1
- 1
- <value>를 정의할 제한으로 바꿉니다.
6.2.3. 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>
libvirt 공급자의 시크릿을 생성하려면
LIBVIRT_POOL
값이 필요합니다.다음 명령을 실행하여 libvirt 풀의 이름을 설정합니다.
$ export LIBVIRT_VOL_NAME=<libvirt_volume>
libvirt 공급자의 시크릿을 생성하려면
LIBVIRT_VOL_NAME
값이 필요합니다.다음 명령을 실행하여 기본 스토리지 풀 위치의 경로를 설정합니다.
$ export LIBVIRT_POOL_DIRECTORY=<target_directory> 1
- 1
- libvirt에 읽기 및 쓰기 액세스 권한이 있는지 확인하려면 libvirt 스토리지 디렉터리의 하위 디렉터리를 사용합니다. 기본값은
/var/lib/libvirt/images/
입니다.
다음 명령을 실행하여 libvirt 풀을 생성합니다.
$ virsh pool-define-as $LIBVIRT_POOL --type dir --target "$LIBVIRT_POOL_DIRECTORY"
다음 명령을 실행하여 libvirt 풀을 시작합니다.
$ virsh pool-start $LIBVIRT_POOL
다음 명령을 실행하여 풀에 대한 libvirt 볼륨을 만듭니다.
$ virsh -c qemu:///system \ vol-create-as --pool $LIBVIRT_POOL \ --name $LIBVIRT_VOL_NAME \ --capacity 20G \ --allocation 2G \ --prealloc-metadata \ --format qcow2
6.2.4. 사용자 정의 피어 Pod VM 이미지 생성
기본 Operator 빌드 이미지를 사용하는 대신 VM(사용자 정의 피어 Pod 가상 머신) 이미지를 생성할 수 있습니다.
피어 Pod QCOW2 이미지를 사용하여 OCI(Open Container Initiative) 컨테이너를 빌드합니다. 나중에 컨테이너 레지스트리 URL과 피어 Pod VM 이미지 구성 맵에 이미지 경로를 추가합니다.
프로세스
Dockerfile.podvm-oci
파일을 생성합니다.FROM scratch ARG PODVM_IMAGE_SRC ENV PODVM_IMAGE_PATH="/image/podvm.qcow2" COPY $PODVM_IMAGE_SRC $PODVM_IMAGE_PATH
다음 명령을 실행하여 Pod VM QCOW2 이미지를 사용하여 컨테이너를 빌드합니다.
$ 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 .
6.2.5. 피어 Pod 보안 생성
OpenShift 샌드박스 컨테이너에 대한 피어 Pod 시크릿을 생성해야 합니다.
시크릿은 Pod VM(가상 머신) 이미지 및 피어 Pod 인스턴스를 생성하기 위한 인증 정보를 저장합니다.
기본적으로 OpenShift 샌드박스 컨테이너 Operator는 클러스터를 생성하는 데 사용되는 인증 정보를 기반으로 보안을 생성합니다. 그러나 다른 인증 정보를 사용하는 보안을 수동으로 생성할 수 있습니다.
사전 요구 사항
-
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}') $ LIBVIRT_GATEWAY_URI="qemu+ssh://root@${LIBVIRT_URI}/system?no_verify=1"
-
REDHAT_OFFLINE_TOKEN
. Red Hat API 토큰에서 RHEL 이미지를 다운로드하기 위해 이 토큰 을 생성했습니다.
프로세스
다음 예에 따라
peer-pods-secret.yaml
매니페스트 파일을 생성합니다.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 LIBVIRT_POOL: "<libvirt_pool>" 2 LIBVIRT_VOL_NAME: "<libvirt_volume>" 3 REDHAT_OFFLINE_TOKEN: "<rh_offline_token>" 4
다음 명령을 실행하여 시크릿을 생성합니다.
$ oc apply -f peer-pods-secret.yaml
6.2.6. 피어 Pod 구성 맵 생성
OpenShift 샌드박스 컨테이너에 대한 피어 Pod 구성 맵을 생성해야 합니다.
프로세스
다음 예에 따라
peer-pods-cm.yaml
매니페스트 파일을 생성합니다.apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "libvirt" DISABLECVM: "true"
다음 명령을 실행하여 구성 맵을 생성합니다.
$ oc apply -f peer-pods-cm.yaml
6.2.7. 피어 Pod VM 이미지 구성 맵 생성
피어 Pod VM 이미지에 대한 구성 맵을 생성해야 합니다.
프로세스
다음 예에 따라
libvirt-podvm-image-cm.yaml
매니페스트를 생성합니다.apiVersion: v1 kind: ConfigMap metadata: name: libvirt-podvm-image-cm namespace: openshift-sandboxed-containers-operator data: PODVM_DISTRO: "rhel" CAA_SRC: "https://github.com/confidential-containers/cloud-api-adaptor" CAA_REF: "<cloud_api_adaptor_version>" 1 DOWNLOAD_SOURCES: "no" CONFIDENTIAL_COMPUTE_ENABLED: "yes" UPDATE_PEERPODS_CM: "yes" ORG_ID: "<rhel_organization_id>" ACTIVATION_KEY: "<rhel_activation_key>" 2 IMAGE_NAME: "<podvm_libvirt_image>" PODVM_IMAGE_URI: "oci::<image_repo_url>:<image_tag>::<image_path>" 3 SE_BOOT: "true" 4 BASE_OS_VERSION: "<rhel_image_os_version>" 5
- 1
- Cloud API Adaptor 소스의 최신 버전을 지정합니다.
- 2
- RHEL 활성화 키를 지정합니다.
- 3
- 선택 사항: 컨테이너 이미지를 생성한 경우 다음 값을 지정합니다.
-
image_repo_url
: 컨테이너 레지스트리 URL -
IMAGE_TAG
: 이미지 태그. -
image_path
: 이미지 경로입니다. 기본값:/image/podvm.qcow2
.
-
- 4
SE_BOOT: "true"
를 사용하면 Operator 빌드 이미지에 대해 IBM Secure Execution를 사용할 수 있습니다. 컨테이너 이미지를 생성한 경우false
로 설정합니다.- 5
- RHEL 이미지 운영 체제 버전을 지정합니다. IBM Z® Secure Execution는 RHEL 9.4 이상 버전을 지원합니다.
다음 명령을 실행하여 구성 맵을 생성합니다.
$ oc apply -f libvirt-podvm-image-cm.yaml
libvirt 공급자에 대해 libvirt Pod VM 이미지 구성 맵이 생성됩니다.
6.2.8. KVM 호스트 시크릿 생성
KVM 호스트에 대한 시크릿을 생성해야 합니다.
프로세스
다음 명령을 실행하여 SSH 키 쌍을 생성합니다.
$ ssh-keygen -f ./id_rsa -N ""
공개 SSH 키를 KVM 호스트에 복사합니다.
$ ssh-copy-id -i ./id_rsa.pub <KVM_HOST_IP>
다음 명령을 실행하여
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
생성한 SSH 키를 삭제합니다.
$ shred --remove id_rsa.pub id_rsa
6.2.9. 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
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 예에 따라
example-kataconfig.yaml
매니페스트 파일을 생성합니다.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'
)을 지정합니다.
다음 명령을 실행하여
KataConfig
CR을 생성합니다.$ oc apply -f example-kataconfig.yaml
새로운
KataConfig
CR이 생성되고 작업자 노드에kata-remote
가 런타임 클래스로 설치됩니다.설치를 확인하기 전에
kata-remote
설치가 완료되고 작업자 노드가 재부팅될 때까지 기다립니다.다음 명령을 실행하여 설치 진행 상황을 모니터링합니다.
$ watch "oc describe kataconfig | sed -n /^Status:/,/^Events/p"
kataNodes
아래의 모든 작업자의 상태가설치되고
이유를 지정하지 않고InProgress
조건이False
이면 클러스터에kata-remote
가 설치됩니다.다음 명령을 실행하여 피어 Pod 이미지를 빌드하고 libvirt 볼륨에 업로드했는지 확인합니다.
$ oc describe configmap peer-pods-cm -n openshift-sandboxed-containers-operator
출력 예
Name: peer-pods-cm Namespace: openshift-sandboxed-containers-operator Labels: <none> Annotations: <none> Data ==== CLOUD_PROVIDER: libvirt BinaryData ==== Events: <none>
다음 명령을 실행하여
UPDATEDMACHINECOUNT
가MACHINECOUNT
와 같은 경우UPDATED
MACHINECOUNT가 UPDATED 상태에 있는지 확인하려면kata-oc
머신 구성 풀 진행 상황을 모니터링합니다.$ watch oc get mcp/kata-oc
다음 명령을 실행하여 데몬 세트를 확인합니다.
$ oc get -n openshift-sandboxed-containers-operator ds/peerpodconfig-ctrl-caa-daemon
다음 명령을 실행하여 런타임 클래스를 확인합니다.
$ oc get runtimeclass
출력 예
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
6.2.10. 워크로드 오브젝트 구성
kata-remote
를 다음 pod 템플릿 오브젝트의 런타임 클래스로 설정하여 OpenShift 샌드박스 컨테이너 워크로드 오브젝트를 구성해야 합니다.
-
Pod
오브젝트 -
ReplicaSet
오브젝트 -
ReplicationController
오브젝트 -
StatefulSet
오브젝트 -
Deployment
오브젝트 -
DeploymentConfig
오브젝트
Operator 네임스페이스에 워크로드를 배포하지 마십시오. 이러한 리소스에 대한 전용 네임스페이스를 생성합니다.
사전 요구 사항
-
KataConfig
CR(사용자 정의 리소스)을 생성했습니다.
프로세스
다음 예와 같이
spec.runtimeClassName: kata-remote
를 각 pod 템플릿 워크로드 오브젝트의 매니페스트에 추가합니다.apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata-remote # ...
OpenShift Container Platform은 워크로드 오브젝트를 생성하고 스케줄링을 시작합니다.
검증
-
pod-templated 오브젝트의
spec.runtimeClassName
필드를 검사합니다. 값이kata-remote
이면 피어 Pod를 사용하여 OpenShift 샌드박스 컨테이너에서 워크로드가 실행됩니다.