5.3. 명령줄을 사용하여 OpenShift 샌드박스 컨테이너 배포
CLI(명령줄 인터페이스)를 사용하여 다음 작업을 수행하여 Google Cloud에 OpenShift 샌드박스 컨테이너를 배포할 수 있습니다.
- OpenShift 샌드박스 컨테이너 Operator를 설치합니다.
- 선택 사항: 각 작업자 노드에서 실행되는 가상 머신 수를 변경합니다.
- 선택 사항: 포트 15150을 활성화하여 피어 Pod와의 내부 통신을 허용합니다.
- 선택 사항: OpenShift 샌드박스 컨테이너 Operator와 함께 설치된 Cloud Credential Operator를 설치 제거한 경우 피어 Pod 시크릿을 생성합니다.
- 피어 Pod 구성 맵을 생성합니다.
- Pod VM 이미지 구성 맵을 생성합니다.
- 선택 사항: Kata 에이전트 정책을 사용자 지정합니다.
-
KataConfig
사용자 지정 리소스를 생성합니다. - OpenShift 샌드박스 컨테이너 워크로드 오브젝트를 구성합니다.
5.3.1. OpenShift 샌드박스 컨테이너 Operator 설치
CLI를 사용하여 OpenShift 샌드박스 컨테이너 Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
osc-namespace.yaml
매니페스트 파일을 생성합니다.apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
apiVersion: v1 kind: Namespace metadata: name: openshift-sandboxed-containers-operator
Copy to Clipboard Copied! 다음 명령을 실행하여 네임스페이스를 생성합니다.
oc apply -f osc-namespace.yaml
$ oc apply -f osc-namespace.yaml
Copy to Clipboard Copied! 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
apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: sandboxed-containers-operator-group namespace: openshift-sandboxed-containers-operator spec: targetNamespaces: - openshift-sandboxed-containers-operator
Copy to Clipboard Copied! 다음 명령을 실행하여 operator 그룹을 생성합니다.
oc apply -f osc-operatorgroup.yaml
$ oc apply -f osc-operatorgroup.yaml
Copy to Clipboard Copied! 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.9.0
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
Copy to Clipboard Copied! 다음 명령을 실행하여 서브스크립션을 생성합니다.
oc apply -f osc-subscription.yaml
$ oc apply -f osc-subscription.yaml
Copy to Clipboard Copied! 다음 명령을 실행하여 Operator가 올바르게 설치되었는지 확인합니다.
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! 이 명령을 완료하는 데 몇 분이 걸릴 수 있습니다.
다음 명령을 실행하여 프로세스를 확인합니다.
watch oc get csv -n openshift-sandboxed-containers-operator
$ watch oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! 출력 예
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.9.0 1.8.1 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.9.0 1.8.1 Succeeded
Copy to Clipboard Copied!
5.3.2. Google Cloud용 포트 15150 활성화
컴퓨팅 엔진에서 실행 중인 피어 Pod와의 내부 통신을 허용하려면 OpenShift Container Platform에서 포트 15150을 활성화해야 합니다.
사전 요구 사항
- Google Cloud CLI(명령줄 인터페이스) 툴을 설치했습니다.
-
roles/container.admin
역할의 사용자로 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
프로세스
다음 명령을 실행하여 프로젝트 ID 변수를 설정합니다.
export GCP_PROJECT_ID="<project_id>"
$ export GCP_PROJECT_ID="<project_id>"
Copy to Clipboard Copied! 다음 명령을 실행하여 Google Cloud에 로그인합니다.
gcloud auth login
$ gcloud auth login
Copy to Clipboard Copied! 다음 명령을 실행하여 Google Cloud 프로젝트 ID를 설정합니다.
gcloud config set project ${GCP_PROJECT_ID}
$ gcloud config set project ${GCP_PROJECT_ID}
Copy to Clipboard Copied! 다음 명령을 실행하여 포트 15150을 엽니다.
gcloud compute firewall-rules create allow-port-15150-restricted \ --project=${GCP_PROJECT_ID} \ --network=default \ --allow=tcp:15150 \ --source-ranges=<external_ip_cidr-1>[,<external_ip_cidr-2>,...]
$ gcloud compute firewall-rules create allow-port-15150-restricted \ --project=${GCP_PROJECT_ID} \ --network=default \ --allow=tcp:15150 \ --source-ranges=<external_ip_cidr-1>[,<external_ip_cidr-2>,...]
1 Copy to Clipboard Copied! - 1
- 하나 이상의 IP 주소 또는 범위를 쉼표로 구분하여 CIDR 형식으로 지정합니다. 예:
203.0.113.5/32,198.51.100.0/24
.
검증
다음 명령을 실행하여 포트 15150이 열려 있는지 확인합니다.
gcloud compute firewall-rule list
$ gcloud compute firewall-rule list
Copy to Clipboard Copied!
5.3.3. 피어 Pod 보안 생성
피어 Pod 보안이 비어 있고 CCO(Cloud Credential Operator)가 설치되면 OpenShift 샌드박스 컨테이너 Operator는 CCO를 사용하여 시크릿을 검색합니다. CCO를 설치 제거한 경우 OpenShift 샌드박스 컨테이너의 피어 Pod 시크릿을 수동으로 생성해야 합니다. 그렇지 않으면 피어 Pod가 작동하지 않습니다.
시크릿은 Pod VM(가상 머신) 이미지 및 피어 Pod 인스턴스를 생성하기 위한 인증 정보를 저장합니다.
기본적으로 OpenShift 샌드박스 컨테이너 Operator는 클러스터를 생성하는 데 사용되는 인증 정보를 기반으로 보안을 생성합니다. 그러나 다른 인증 정보를 사용하는 보안을 수동으로 생성할 수 있습니다.
사전 요구 사항
-
Compute Engine 리소스를 관리하기 위해
roles/compute.instanceAdmin.v1
과 같은 권한이 있는 Google Cloud 서비스 계정을 생성했습니다. -
Google Cloud SDK (
gcloud
)를 설치하고 서비스 계정으로 인증했습니다.
프로세스
다음 명령을 실행하여 Google Cloud 서비스 계정 키를 생성하고 JSON 파일로 저장합니다.
gcloud iam service-accounts keys create <key_filename>.json \ --iam-account=<service_account_email_address>
$ gcloud iam service-accounts keys create <key_filename>.json \ --iam-account=<service_account_email_address>
Copy to Clipboard Copied! 다음 명령을 실행하여 JSON 파일을 한 줄 문자열로 변환합니다.
cat <key_file>.json | jq -c .
$ cat <key_file>.json | jq -c .
Copy to Clipboard Copied! 다음 예에 따라
peer-pods-secret.yaml
매니페스트 파일을 생성합니다.apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: GCP_CREDENTIALS: "<gc_service_account_key_json>"
apiVersion: v1 kind: Secret metadata: name: peer-pods-secret namespace: openshift-sandboxed-containers-operator type: Opaque stringData: GCP_CREDENTIALS: "<gc_service_account_key_json>"
1 Copy to Clipboard Copied! - 1
- 을 Google Cloud 서비스 계정 키 JSON 파일에서 생성한 단일 줄 문자열로 바꿉니다
.
다음 명령을 실행하여 시크릿을 생성합니다.
oc apply -f peer-pods-secret.yaml
$ oc apply -f peer-pods-secret.yaml
Copy to Clipboard Copied!
5.3.4. 피어 Pod 구성 맵 생성
OpenShift 샌드박스 컨테이너에 대한 피어 Pod 구성 맵을 생성해야 합니다.
프로세스
Compute Engine 인스턴스에 로그인하여 다음 환경 변수를 설정합니다.
다음 명령을 실행하여 프로젝트 ID를 가져옵니다.
GCP_PROJECT_ID=$(gcloud config get-value project)
$ GCP_PROJECT_ID=$(gcloud config get-value project)
Copy to Clipboard Copied! 다음 명령을 실행하여 영역을 가져옵니다.
GCP_ZONE=$(gcloud config get-value compute/zone)
$ GCP_ZONE=$(gcloud config get-value compute/zone)
Copy to Clipboard Copied! 다음 명령을 실행하여 네트워크 이름 목록을 검색합니다.
gcloud compute networks list --format="value(name)"
$ gcloud compute networks list --format="value(name)"
Copy to Clipboard Copied! 다음 명령을 실행하여 네트워크를 지정합니다.
GCP_NETWORK=<network_name>
$ GCP_NETWORK=<network_name>
1 Copy to Clipboard Copied! - 1
- &
lt;network_name
>을 네트워크 이름으로 바꿉니다.
다음 예에 따라
peer-pods-cm.yaml
매니페스트 파일을 생성합니다.apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "gcp" PROXY_TIMEOUT: "5m" GCP_PROJECT_ID: "<gcp_project_id>" GCP_ZONE: "<gcp_zone>" GCP_MACHINE_TYPE: "e2-medium" GCP_NETWORK: "<gcp_network>" PEERPODS_LIMIT_PER_NODE: "10" TAGS: "key1=value1,key2=value2" DISABLECVM: "true"
apiVersion: v1 kind: ConfigMap metadata: name: peer-pods-cm namespace: openshift-sandboxed-containers-operator data: CLOUD_PROVIDER: "gcp" PROXY_TIMEOUT: "5m" GCP_PROJECT_ID: "<gcp_project_id>"
1 GCP_ZONE: "<gcp_zone>"
2 GCP_MACHINE_TYPE: "e2-medium"
3 GCP_NETWORK: "<gcp_network>"
4 PEERPODS_LIMIT_PER_NODE: "10"
5 TAGS: "key1=value1,key2=value2"
6 DISABLECVM: "true"
Copy to Clipboard Copied! 다음 명령을 실행하여 구성 맵을 생성합니다.
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied!
5.3.5. 피어 Pod VM 이미지 생성
QCOW2 VM(가상 머신) 이미지를 생성해야 합니다.
사전 요구 사항
-
podman
을 설치했습니다. - 컨테이너 레지스트리에 액세스할 수 있습니다.
프로세스
다음 명령을 실행하여 OpenShift 샌드박스 컨테이너 리포지토리를 복제합니다.
git clone https://github.com/openshift/sandboxed-containers-operator.git
$ git clone https://github.com/openshift/sandboxed-containers-operator.git
Copy to Clipboard Copied! 다음 명령을 실행하여
샌드박스-containers-operator/config/peerpods/podvm/bootc
로 이동합니다.cd sandboxed-containers-operator/config/peerpods/podvm/bootc
$ cd sandboxed-containers-operator/config/peerpods/podvm/bootc
Copy to Clipboard Copied! 다음 명령을 실행하여
registry.redhat.io
에 로그인합니다.podman login registry.redhat.io
$ podman login registry.redhat.io
Copy to Clipboard Copied! podman 빌드
프로세스에서 레지스트리에서 호스팅되는Containerfile.rhel
컨테이너 이미지에 액세스해야 하므로registry.redhat.io
에 로그인해야 합니다.다음 명령을 실행하여 컨테이너 레지스트리의 이미지 경로를 설정합니다.
IMG="<container_registry_url>/<username>/podvm-bootc:latest"
$ IMG="<container_registry_url>/<username>/podvm-bootc:latest"
Copy to Clipboard Copied! 다음 명령을 실행하여 Pod VM
bootc
이미지를 빌드합니다.podman build -t ${IMG} -f Containerfile.rhel .
$ podman build -t ${IMG} -f Containerfile.rhel .
Copy to Clipboard Copied! 다음 명령을 실행하여 컨테이너 레지스트리에 로그인합니다.
podman login <container_registry_url>
$ podman login <container_registry_url>
Copy to Clipboard Copied! 다음 명령을 실행하여 컨테이너 레지스트리로 이미지를 푸시합니다.
podman push ${IMG}
$ podman push ${IMG}
Copy to Clipboard Copied! 테스트 및 개발을 위해 이미지를 공용으로 만들 수 있습니다.
다음 명령을 실행하여
podvm-bootc
이미지를 확인합니다.podman images
$ podman images
Copy to Clipboard Copied! 출력 예
REPOSITORY TAG IMAGE ID CREATED SIZE example.com/example_user/podvm-bootc latest 88ddab975a07 2 seconds ago 1.82 GB
REPOSITORY TAG IMAGE ID CREATED SIZE example.com/example_user/podvm-bootc latest 88ddab975a07 2 seconds ago 1.82 GB
Copy to Clipboard Copied!
5.3.6. 피어 Pod VM 이미지 구성 맵 생성
Pod VM(가상 머신) 이미지에 대한 구성 맵을 생성합니다.
프로세스
다음 콘텐츠를 사용하여
gc-podvm-image-cm.yaml
이라는 Pod VM 이미지에 대한 구성 맵 매니페스트를 생성합니다.apiVersion: v1 kind: ConfigMap metadata: name: gc-podvm-image-cm namespace: openshift-sandboxed-containers-operator data: IMAGE_TYPE: pre-built PODVM_IMAGE_URI: <container_registry_url>/<username>/podvm-bootc:latest IMAGE_BASE_NAME: "podvm-image" IMAGE_VERSION: "0-0-0" INSTALL_PACKAGES: "no" DISABLE_CLOUD_CONFIG: "true" UPDATE_PEERPODS_CM: "yes" BOOT_FIPS: "no" BOOTC_BUILD_CONFIG: | [[customizations.user]] name = "peerpod" password = "peerpod" groups = ["wheel", "root"] [[customizations.filesystem]] mountpoint = "/" minsize = "5 GiB" [[customizations.filesystem]] mountpoint = "/var/kata-containers" minsize = "15 GiB"
apiVersion: v1 kind: ConfigMap metadata: name: gc-podvm-image-cm namespace: openshift-sandboxed-containers-operator data: IMAGE_TYPE: pre-built PODVM_IMAGE_URI: <container_registry_url>/<username>/podvm-bootc:latest IMAGE_BASE_NAME: "podvm-image" IMAGE_VERSION: "0-0-0" INSTALL_PACKAGES: "no" DISABLE_CLOUD_CONFIG: "true" UPDATE_PEERPODS_CM: "yes" BOOT_FIPS: "no" BOOTC_BUILD_CONFIG: | [[customizations.user]] name = "peerpod" password = "peerpod" groups = ["wheel", "root"] [[customizations.filesystem]] mountpoint = "/" minsize = "5 GiB" [[customizations.filesystem]] mountpoint = "/var/kata-containers" minsize = "15 GiB"
Copy to Clipboard Copied! 다음 명령을 실행하여 구성 맵을 생성합니다.
oc apply -f gc-podvm-image-cm.yaml
$ oc apply -f gc-podvm-image-cm.yaml
Copy to Clipboard Copied!
5.3.7. 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만 수정하려면 전체 정책을 포함하고 관련 규칙을 조정합니다.
프로세스
사용자 지정 정책으로
policy.rego
파일을 생성합니다. 다음 예제는 데모에exec
및log
가 활성화된 모든 구성 가능한 API를 보여줍니다.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
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
Copy to Clipboard Copied! 이 정책은
exec
(ExecProcessRequest
) 및로그
(ReadStreamRequest
) API를 활성화합니다. 필요에 따라 정책을 추가로 사용자 지정하도록true
또는false
값을 조정합니다.다음 명령을 실행하여
policy.rego
파일을 Base64 인코딩 문자열로 변환합니다.base64 -w0 policy.rego
$ base64 -w0 policy.rego
Copy to Clipboard Copied! yaml 파일에 사용할 출력을 저장합니다.
my-pod.yaml
Pod 사양 파일에 Base64로 인코딩된 정책을 추가합니다.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
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
Copy to Clipboard Copied! 다음 명령을 실행하여 Pod 매니페스트를 적용합니다.
oc apply -f my-pod.yaml
$ oc apply -f my-pod.yaml
Copy to Clipboard Copied!
5.3.8. 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>'
apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: enablePeerPods: true logLevel: info # kataConfigPoolSelector: # matchLabels: # <label_key>: '<label_value>'
1 Copy to Clipboard Copied! - 1
- 선택 사항: 노드 레이블을 적용하여 특정 노드에
kata-remote
를 설치한 경우 키와 값(예:osc: 'true'
)을 지정합니다.
다음 명령을 실행하여
KataConfig
CR을 생성합니다.oc apply -f example-kataconfig.yaml
$ oc apply -f example-kataconfig.yaml
Copy to Clipboard Copied! 새로운
KataConfig
CR이 생성되고 작업자 노드에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! kataNodes
아래의 모든 작업자의 상태가설치되고
이유를 지정하지 않고InProgress
조건이False
이면 클러스터에kata-remote
가 설치됩니다.다음 명령을 실행하여 데몬 세트를 확인합니다.
oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
$ oc get -n openshift-sandboxed-containers-operator ds/osc-caa-ds
Copy to Clipboard Copied! 다음 명령을 실행하여 런타임 클래스를 확인합니다.
oc get runtimeclass
$ oc get runtimeclass
Copy to Clipboard Copied! 출력 예
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
NAME HANDLER AGE kata kata 152m kata-remote kata-remote 152m
Copy to Clipboard Copied!
Pod VM 이미지 확인
클러스터에 kata-remote
가 설치되면 OpenShift 샌드박스 컨테이너 Operator에서 피어 Pod를 생성하는 데 사용되는 Pod VM 이미지를 생성합니다. 이 프로세스는 클라우드 인스턴스에서 이미지가 생성되므로 시간이 오래 걸릴 수 있습니다. 클라우드 공급자에 대해 생성한 구성 맵을 확인하여 Pod VM 이미지가 성공적으로 생성되었는지 확인할 수 있습니다.
프로세스
피어 Pod에 대해 생성한 구성 맵을 가져옵니다.
oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
$ oc get configmap peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
Copy to Clipboard Copied! YAML 파일의
상태
스탠자를 확인합니다.PODVM_IMAGE_NAME
매개변수가 채워지면 Pod VM 이미지가 성공적으로 생성됩니다.
문제 해결
다음 명령을 실행하여 이벤트 로그를 검색합니다.
oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
$ oc get events -n openshift-sandboxed-containers-operator --field-selector involvedObject.name=osc-podvm-image-creation
Copy to Clipboard Copied! 다음 명령을 실행하여 작업 로그를 검색합니다.
oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
$ oc logs -n openshift-sandboxed-containers-operator jobs/osc-podvm-image-creation
Copy to Clipboard Copied!
문제를 해결할 수 없는 경우 Red Hat 지원 케이스를 제출하고 두 로그의 출력을 첨부합니다.
5.3.9. 워크로드 오브젝트 구성
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 # ...
apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata-remote # ...
Copy to Clipboard Copied! OpenShift Container Platform은 워크로드 오브젝트를 생성하고 스케줄링을 시작합니다.
검증
-
pod-templated 오브젝트의
spec.runtimeClassName
필드를 검사합니다. 값이kata-remote
이면 피어 Pod를 사용하여 OpenShift 샌드박스 컨테이너에서 워크로드가 실행됩니다.