3장. 퍼블릭 클라우드에 워크로드 배포
AWS 클라우드 컴퓨팅 서비스 및 Microsoft Azure 클라우드 컴퓨팅 서비스에 OpenShift 샌드박스 컨테이너 워크로드를 배포할 수 있습니다.
클러스터 요구 사항
- Red Hat OpenShift Container Platform 4.13 이상을 설치했습니다.
- 클러스터에 작업자 노드가 하나 이상 있습니다.
3.1. AWS에 워크로드 배포 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 웹 콘솔 또는 CLI(명령줄 인터페이스)를 사용하여 AWS 클라우드 컴퓨팅 서비스에 OpenShift 샌드박스 컨테이너 워크로드를 배포할 수 있습니다.
배포 워크플로
- 포트를 활성화합니다.
- AWS의 시크릿을 생성합니다.
- AWS의 구성 맵을 생성합니다.
-
KataConfig
사용자 지정 리소스를 생성합니다. - 선택 사항: 노드당 피어 Pod VM 제한을 수정합니다.
-
kata-remote
런타임 클래스를 사용하도록 워크로드 오브젝트를 구성합니다.
3.1.1. 환경 준비 링크 복사링크가 클립보드에 복사되었습니다!
환경을 준비하려면 다음 단계를 수행합니다.
- 클러스터에 충분한 리소스가 있는지 확인합니다.
- OpenShift 샌드박스 컨테이너 Operator를 설치합니다.
- 포트 15150 및 9000을 활성화하여 피어 Pod와의 내부 통신을 허용합니다.
3.1.1.1. 리소스 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
피어 Pod 가상 머신(VM)에는 다음 두 위치에 있는 리소스가 필요합니다.
-
작업자 노드입니다. 작업자 노드는 메타데이터, Kata shim 리소스(
containerd-shim-kata-v2
), remote-hypervisor 리소스(cloud-api-adaptor
) 및 작업자 노드와 피어 Pod VM 간의 터널 설정을 저장합니다. - 클라우드 인스턴스입니다. 클라우드에서 실행되는 실제 피어 Pod VM입니다.
Kubernetes 작업자 노드에 사용되는 CPU 및 메모리 리소스는 피어 Pod를 생성하는 데 사용되는 RuntimeClass(kata-remote
) 정의에 포함된 Pod 오버헤드 에 의해 처리됩니다.
클라우드에서 실행되는 총 피어 Pod VM 수는 Kubernetes 노드 확장 리소스로 정의됩니다. 이 제한은 노드당이며 peerpodConfig
CR(사용자 정의 리소스)의 limit
속성으로 설정됩니다.
peerpodconfig-openshift
라는 peerpodConfig
CR은 kataConfig
CR을 생성하고 피어 Pod를 활성화할 때 생성되며 openshift-sandboxed-containers-operator
네임스페이스에 있습니다.
다음 peerpodConfig
CR 예제에서는 기본 사양
값을 표시합니다.
- 1
- 기본 제한은 노드당 VM 10개입니다.
확장된 리소스의 이름은 kata.peerpods.io/vm
이며 Kubernetes 스케줄러에서 용량 추적 및 계정을 처리할 수 있습니다.
환경의 요구 사항에 따라 노드당 제한을 편집할 수 있습니다. 자세한 내용은 "Peer pods에서 노드당 VM 제한 수정"을 참조하십시오.
변경 웹 후크 는 확장된 리소스 kata.peerpods.io/vm
을 Pod 사양에 추가합니다. 또한 Pod 사양에서 리소스별 항목도 제거합니다(있는 경우). 이를 통해 Kubernetes 스케줄러에서 이러한 확장 리소스를 고려하여 리소스를 사용할 수 있는 경우에만 피어 Pod를 예약할 수 있습니다.
변경 웹 후크는 다음과 같이 Kubernetes Pod를 수정합니다.
-
변경 웹 후크는
TARGET_RUNTIME_CLASS
환경 변수에 지정된 예상RuntimeClassName
값을 Pod에 확인합니다. Pod 사양의 값이TARGET_RUNTIME_CLASS
의 값과 일치하지 않으면 Pod를 수정하지 않고 웹 후크가 종료됩니다. RuntimeClassName
값이 일치하는 경우 Webhook에서 Pod 사양을 다음과 같이 변경합니다.-
Webhook는 Pod에 있는 모든 컨테이너 및 init 컨테이너의
resources
필드에서 모든 리소스 사양을 제거합니다. -
Webhook는 Pod의 첫 번째 컨테이너의 resources 필드를 수정하여 확장 리소스(
kata.peerpods.io/vm
)를 사양에 추가합니다. 확장된 리소스kata.peerpods.io/vm
은 회계 목적으로 Kubernetes 스케줄러에서 사용합니다.
-
Webhook는 Pod에 있는 모든 컨테이너 및 init 컨테이너의
변경 웹 후크는 OpenShift Container Platform의 특정 시스템 네임스페이스가 변경되지 않습니다. 해당 시스템 네임스페이스에 피어 Pod가 생성되면 Pod 사양에 확장 리소스가 포함되지 않는 한 Kubernetes 확장 리소스를 사용하는 리소스 계정이 작동하지 않습니다.
특정 네임스페이스에서 피어 Pod 생성만 허용하도록 클러스터 전체 정책을 정의하는 것이 좋습니다.
3.1.1.2. AWS의 포트 활성화 링크 복사링크가 클립보드에 복사되었습니다!
AWS에서 실행되는 피어 Pod와의 내부 통신을 허용하려면 포트 15150 및 9000을 활성화해야 합니다.
사전 요구 사항
- OpenShift 샌드박스 컨테이너 Operator가 설치되어 있습니다.
- AWS 명령줄 툴을 설치했습니다.
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
OpenShift Container Platform 클러스터에 로그인하고 인스턴스 ID를 검색합니다.
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS 리전을 검색합니다.
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}')
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 보안 그룹 ID를 검색하여 배열에 저장합니다.
AWS_SG_IDS=($(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text --region $AWS_REGION))
$ AWS_SG_IDS=($(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text --region $AWS_REGION))
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 각 보안 그룹 ID에 대해 피어 pod shim에 kata-agent 통신에 액세스하고 피어 Pod 터널을 설정하도록 권한을 부여합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
이제 포트가 활성화됩니다.
3.1.1.3. OpenShift 샌드박스 컨테이너 Operator 설치 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 웹 콘솔 또는 CLI(명령줄 인터페이스)를 사용하여 OpenShift 샌드박스 컨테이너 Operator를 설치할 수 있습니다.
3.1.1.3.1. 웹 콘솔을 사용하여 Operator 설치 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenShift Container Platform 웹 콘솔을 사용하여 OpenShift 샌드박스 컨테이너 Operator를 설치할 수 있습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
OperatorHub로 이동합니다. -
키워드로 필터링 필드에
OpenShift sandboxed containers
를 입력합니다. - OpenShift 샌드박스 컨테이너 Operator 타일을 선택하고 설치를 클릭합니다.
- Operator 설치 페이지의 사용 가능한 업데이트 채널 옵션 목록에서 stable 을 선택합니다.
설치된 네임스페이스 용으로 Operator 권장 네임스페이스 가 선택되어 있는지 확인합니다. 이렇게 하면 필수
openshift-sandboxed-containers-operator
네임스페이스에 Operator가 설치됩니다. 이 네임스페이스가 아직 존재하지 않으면 자동으로 생성됩니다.참고openshift-sandboxed-containers-operator
이외의 네임스페이스에 OpenShift 샌드박스 컨테이너 Operator를 설치하려고 하면 설치가 실패합니다.- 승인 전략에 대해 자동 이 선택되어 있는지 확인합니다. Automatic 은 기본값이며 새 z-stream 릴리스를 사용할 수 있을 때 OpenShift 샌드박스 컨테이너에 대한 자동 업데이트를 활성화합니다.
- 설치를 클릭합니다.
OpenShift 샌드박스 컨테이너 Operator가 클러스터에 설치되었습니다.
검증
-
Operators
설치된 Operator로 이동합니다. - OpenShift 샌드박스 컨테이너 Operator가 표시되는지 확인합니다.
3.1.1.3.2. CLI를 사용하여 Operator 설치 링크 복사링크가 클립보드에 복사되었습니다!
CLI를 사용하여 OpenShift 샌드박스 컨테이너 Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
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! Toggle word wrap Toggle overflow 다음 명령을 실행하여 네임스페이스를 생성합니다.
oc create -f Namespace.yaml
$ oc create -f Namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OperatorGroup.yaml
매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 operator 그룹을 생성합니다.
oc create -f OperatorGroup.yaml
$ oc create -f OperatorGroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Subscription.yaml
매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 서브스크립션을 생성합니다.
oc create -f Subscription.yaml
$ oc create -f Subscription.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift 샌드박스 컨테이너 Operator가 클러스터에 설치되었습니다.
검증
다음 명령을 실행하여 Operator가 올바르게 설치되었는지 확인합니다.
oc get csv -n openshift-sandboxed-containers-operator
$ oc get csv -n openshift-sandboxed-containers-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
NAME DISPLAY VERSION REPLACES PHASE openshift-sandboxed-containers openshift-sandboxed-containers-operator 1.6.0 1.5.3 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2. 웹 콘솔을 사용하여 워크로드 배포 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔을 사용하여 OpenShift 샌드박스 컨테이너 워크로드를 배포할 수 있습니다.
3.1.2.1. 시크릿 생성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에 Secret
오브젝트를 생성해야 합니다. 시크릿은 Pod VM(가상 머신) 이미지 및 피어 Pod 인스턴스를 생성하기 위한 클라우드 공급자 자격 증명을 저장합니다. 기본적으로 OpenShift 샌드박스 컨테이너 Operator는 클러스터를 생성하는 데 사용되는 인증 정보를 기반으로 보안을 생성합니다. 그러나 다른 인증 정보를 사용하는 보안을 수동으로 생성할 수 있습니다.
사전 요구 사항
-
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
이러한 값은 AWS 콘솔에서 생성할 수 있습니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
설치된 Operator로 이동합니다. - OpenShift 샌드박스 컨테이너 Operator 타일을 클릭합니다.
- 오른쪽 상단에 있는 가져오기 아이콘(+)을 클릭합니다.
YAML 가져오기 창에서 다음 YAML 매니페스트를 붙여넣습니다.
Copy 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는 업데이트하지 않습니다.
검증
-
워크로드
시크릿 으로 이동하여 시크릿을 확인합니다.
3.1.2.2. 구성 맵 생성 링크 복사링크가 클립보드에 복사되었습니다!
클라우드 공급자의 OpenShift Container Platform 클러스터에 구성 맵을 생성해야 합니다.
AMI(Amazon Machine Image) ID를 설정해야 합니다. 구성 맵을 생성하기 전에 이 값을 검색할 수 있습니다.
프로세스
AWS 인스턴스에서 다음 값을 가져옵니다.
인스턴스 ID를 검색하고 기록합니다.
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이는 secret 오브젝트의 다른 값을 검색하는 데 사용됩니다.
AWS 리전을 검색하고 기록합니다.
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS 서브넷 ID를 검색하고 기록합니다.
AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
$ AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS VPC ID를 검색하고 기록합니다.
AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
$ AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS 보안 그룹 ID를 검색하고 기록합니다.
AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region ${AWS_REGION} --output text)
$ AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region ${AWS_REGION} --output text) && echo "AWS_SG_IDS: \"$AWS_SG_IDS\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
OpenShift Container Platform 웹 콘솔에서 Operator
설치된 Operator로 이동합니다. - Operator 목록에서 OpenShift 샌드박스 컨테이너 Operator를 선택합니다.
- 오른쪽 상단에 있는 가져오기 아이콘(+)을 클릭합니다.
YAML 가져오기 창에서 다음 YAML 매니페스트를 붙여넣습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 유형이 워크로드에 정의되지 않은 경우 사용되는 기본 인스턴스 유형을 정의합니다.
- 2
- Pod를 생성할 때 지정할 수 있는 모든 인스턴스 유형을 나열합니다. 이를 통해 더 적은 메모리와 더 적은 CPU 또는 대규모 워크로드에 대해 더 큰 인스턴스 유형이 필요한 워크로드에 대해 더 작은 인스턴스 유형을 정의할 수 있습니다.
- 3
- 선택 사항: 기본적으로 클러스터 인증 정보를 기반으로 AMI ID를 사용하여
KataConfig
CR을 실행할 때 이 값이 채워집니다. 고유한 AMI를 생성하는 경우 올바른 AMI ID를 지정합니다. - 4
- 검색한
AWS_REGION
값을 지정합니다. - 5
- 검색한
AWS_SUBNET_ID
값을 지정합니다. - 6
- 검색한
AWS_VPC_ID
값을 지정합니다. - 7
- 검색한
AWS_SG_IDS
값을 지정합니다.
저장을 클릭하여 변경 사항을 적용합니다.
클라우드 공급자에 대한 구성 맵이 생성됩니다.
피어 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를 업데이트하지 않습니다.
검증
-
워크로드
ConfigMap 으로 이동하여 새 구성 맵을 확인합니다.
3.1.2.3. KataConfig 사용자 지정 리소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
작업자 노드에 kata-remote
를 RuntimeClass
로 설치하려면 KataConfig
CR(사용자 정의 리소스)을 생성해야 합니다.
kata-remote
런타임 클래스는 기본적으로 모든 작업자 노드에 설치됩니다. 특정 노드에만 kata-remote
를 설치하려면 해당 노드에 레이블을 추가한 다음 KataConfig
CR에 레이블을 정의할 수 있습니다.
OpenShift 샌드박스 컨테이너는 kata-remote
를 기본 런타임이 아닌 클러스터의 선택적 런타임으로 설치합니다.
KataConfig
CR을 생성하면 작업자 노드가 자동으로 재부팅됩니다. 재부팅에는 10분에서 60분 이상 걸릴 수 있습니다. 다음 요인은 재부팅 시간을 늘릴 수 있습니다.
- 더 많은 작업자 노드가 있는 대규모 OpenShift Container Platform 배포
- BIOS 및 Cryostat 유틸리티 활성화.
- SSD가 아닌 하드 디스크 드라이브에 배포합니다.
- 가상 노드가 아닌 베어 메탈과 같은 물리적 노드에 배포됩니다.
- 느린 CPU 및 네트워크입니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
설치된 Operator로 이동합니다. - OpenShift 샌드박스 컨테이너 Operator를 선택합니다.
- KataConfig 탭에서 KataConfig 만들기 를 클릭합니다.
다음 세부 정보를 입력합니다.
-
이름: 선택 사항: 기본 이름은
example-kataconfig
입니다. -
labels: 선택 사항:
KataConfig
리소스에 대한 특성을 식별하는 모든 관련 정보를 입력합니다. 각 레이블은 키-값 쌍을 나타냅니다. - enablePeerPods: 퍼블릭 클라우드, IBM Z® 및 IBM® LinuxONE 배포에는 선택합니다.
kataConfigPoolSelector. 선택 사항: 선택한 노드에
kata-remote
를 설치하려면 선택한 노드의 라벨에 일치하는 표현식을 추가합니다.- kataConfigPoolSelector 영역을 확장합니다.
- kataConfigPoolSelector 영역에서 matchExpressions 를 확장합니다. 이는 라벨 선택기 요구 사항 목록입니다.
- matchExpressions 추가를 클릭합니다.
- 키 필드에 선택기가 적용되는 라벨 키를 입력합니다.
-
Operator 필드에 레이블 값과의 키 관계를 입력합니다. 유효한 연산자는
In
,NotIn
,Exists
및DoesNotExist
입니다. - 값 영역을 확장한 다음 값 추가 를 클릭합니다.
-
값 필드에 키 레이블 값에
true
또는false
를 입력합니다.
-
loglevel:
kata-remote
런타임 클래스를 사용하여 노드에 대해 검색된 로그 데이터의 수준을 정의합니다.
-
이름: 선택 사항: 기본 이름은
생성을 클릭합니다.
KataConfig
CR이 생성되고 작업자 노드에kata-remote
런타임 클래스를 설치합니다.설치를 확인하기 전에
kata-remote
설치가 완료되고 작업자 노드가 재부팅될 때까지 기다립니다.
검증
-
KataConfig 탭에서
KataConfig
CR을 클릭하여 세부 정보를 확인합니다. YAML 탭을 클릭하여
상태 스탠자를 확인합니다
.상태
스탠자에는조건
및kataNodes
키가 포함되어 있습니다.status.kataNodes
의 값은 노드 배열이며 각 노드는 특정kata-remote
설치의 노드를 나열합니다. 업데이트가 있을 때마다 메시지가 표시됩니다.Reload (다시 로드)를 클릭하여 YAML을 새로 고칩니다.
status.kataNodes
어레이의 모든 작업자가설치
및조건.InProgress: False
를 지정하는 이유 없이 False를 표시하면 클러스터에kata-remote
가 설치됩니다.
자세한 내용은 KataConfig 상태 메시지를 참조하십시오.
3.1.2.3.1. 선택 사항: Pod VM 이미지 확인 링크 복사링크가 클립보드에 복사되었습니다!
클러스터에 kata-remote
가 설치되면 OpenShift 샌드박스 컨테이너 Operator에서 피어 Pod를 생성하는 데 사용되는 Pod VM 이미지를 생성합니다. 이 프로세스는 클라우드 인스턴스에서 이미지가 생성되므로 시간이 오래 걸릴 수 있습니다. 클라우드 공급자에 대해 생성한 구성 맵을 확인하여 Pod VM 이미지가 성공적으로 생성되었는지 확인할 수 있습니다.
프로세스
-
워크로드
ConfigMap 으로 이동합니다. - 공급자 구성 맵을 클릭하여 세부 정보를 확인합니다.
- YAML 탭을 클릭합니다.
YAML 파일의
상태
스탠자를 확인합니다.PODVM_AMI_ID
매개변수가 채워지면 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! Toggle word wrap Toggle overflow 다음 명령을 실행하여 작업 로그를 검색합니다.
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! Toggle word wrap Toggle overflow
문제를 해결할 수 없는 경우 Red Hat 지원 케이스를 제출하고 두 로그의 출력을 첨부합니다.
3.1.2.4. 선택 사항: 노드당 피어 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 다음 명령을 실행하여
peerpodConfig
CR의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>를 정의할 제한으로 바꿉니다.
3.1.2.5. 워크로드 오브젝트 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 pod 템플릿 오브젝트의 런타임 클래스로 kata-remote
를 구성하여 OpenShift 샌드박스 컨테이너 워크로드를 배포합니다.
-
Pod
오브젝트 -
ReplicaSet
오브젝트 -
ReplicationController
오브젝트 -
StatefulSet
오브젝트 -
Deployment
오브젝트 -
DeploymentConfig
오브젝트
openshift-sandboxed-containers-operator
네임스페이스에 워크로드를 배포하지 마십시오. 이러한 리소스에 대한 전용 네임스페이스를 생성합니다.
YAML 파일에 주석을 추가하여 구성 맵에 정의한 기본 인스턴스 유형을 사용하여 워크로드를 배포해야 하는지 여부를 정의할 수 있습니다.
인스턴스 유형을 수동으로 정의하지 않으려면 사용 가능한 메모리에 따라 자동 인스턴스 유형을 사용하도록 주석을 추가할 수 있습니다.
사전 요구 사항
- 공급자에 대한 보안 오브젝트를 생성했습니다.
- 공급자에 대한 구성 맵을 생성했습니다.
-
KataConfig
CR(사용자 정의 리소스)을 생성했습니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 워크로드
워크로드 유형(예: Pod )으로 이동합니다. - 워크로드 유형 페이지에서 오브젝트를 클릭하여 세부 정보를 확인합니다.
- YAML 탭을 클릭합니다.
다음 예와 같이
spec.runtimeClassName: kata-remote
를 각 pod 템플릿 워크로드 오브젝트의 매니페스트에 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow pod-templated 오브젝트에 주석을 추가하여 수동으로 정의된 인스턴스 유형 또는 자동 인스턴스 유형을 사용합니다.
수동으로 정의한 인스턴스 유형을 사용하려면 다음 주석을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 구성 맵에서 정의한 인스턴스 유형을 지정합니다.
자동 인스턴스 유형을 사용하려면 다음 주석을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 워크로드에서 사용할 수 있는 메모리 양을 정의합니다. 워크로드는 사용 가능한 메모리 양에 따라 자동 인스턴스 유형에서 실행됩니다.
저장을 클릭하여 변경 사항을 적용합니다.
OpenShift Container Platform은 워크로드 오브젝트를 생성하고 스케줄링을 시작합니다.
검증
-
pod-templated 오브젝트의
spec.runtimeClassName
필드를 검사합니다. 값이kata-remote
이면 피어 Pod를 사용하여 OpenShift 샌드박스 컨테이너에서 워크로드가 실행됩니다.
3.1.3. 명령줄을 사용하여 워크로드 배포 링크 복사링크가 클립보드에 복사되었습니다!
명령줄을 사용하여 OpenShift 샌드박스 컨테이너 워크로드를 배포할 수 있습니다.
3.1.3.1. 시크릿 생성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 클러스터에 Secret
오브젝트를 생성해야 합니다. 시크릿은 Pod VM(가상 머신) 이미지 및 피어 Pod 인스턴스를 생성하기 위한 클라우드 공급자 자격 증명을 저장합니다. 기본적으로 OpenShift 샌드박스 컨테이너 Operator는 클러스터를 생성하는 데 사용되는 인증 정보를 기반으로 보안을 생성합니다. 그러나 다른 인증 정보를 사용하는 보안을 수동으로 생성할 수 있습니다.
사전 요구 사항
-
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
이러한 값은 AWS 콘솔에서 생성할 수 있습니다.
프로세스
다음 예에 따라
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.yaml
Copy 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는 업데이트하지 않습니다.
3.1.3.2. 구성 맵 생성 링크 복사링크가 클립보드에 복사되었습니다!
클라우드 공급자의 OpenShift Container Platform 클러스터에 구성 맵을 생성해야 합니다.
AMI(Amazon Machine Image) ID를 설정해야 합니다. 구성 맵을 생성하기 전에 이 값을 검색할 수 있습니다.
프로세스
AWS 인스턴스에서 다음 값을 가져옵니다.
인스턴스 ID를 검색하고 기록합니다.
INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
$ INSTANCE_ID=$(oc get nodes -l 'node-role.kubernetes.io/worker' -o jsonpath='{.items[0].spec.providerID}' | sed 's#[^ ]*/##g')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이는 secret 오브젝트의 다른 값을 검색하는 데 사용됩니다.
AWS 리전을 검색하고 기록합니다.
AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
$ AWS_REGION=$(oc get infrastructure/cluster -o jsonpath='{.status.platformStatus.aws.region}') && echo "AWS_REGION: \"$AWS_REGION\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS 서브넷 ID를 검색하고 기록합니다.
AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
$ AWS_SUBNET_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SubnetId' --region ${AWS_REGION} --output text) && echo "AWS_SUBNET_ID: \"$AWS_SUBNET_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS VPC ID를 검색하고 기록합니다.
AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
$ AWS_VPC_ID=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].VpcId' --region ${AWS_REGION} --output text) && echo "AWS_VPC_ID: \"$AWS_VPC_ID\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AWS 보안 그룹 ID를 검색하고 기록합니다.
AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region ${AWS_REGION} --output text)
$ AWS_SG_IDS=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --region ${AWS_REGION} --output text) && echo "AWS_SG_IDS: \"$AWS_SG_IDS\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 예에 따라
peer-pods-cm.yaml
매니페스트를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 유형이 워크로드에 정의되지 않은 경우 사용되는 기본 인스턴스 유형을 정의합니다.
- 2
- Pod를 생성할 때 지정할 수 있는 모든 인스턴스 유형을 나열합니다. 이를 통해 더 적은 메모리와 더 적은 CPU 또는 대규모 워크로드에 대해 더 큰 인스턴스 유형이 필요한 워크로드에 대해 더 작은 인스턴스 유형을 정의할 수 있습니다.
- 3
- 선택 사항: 기본적으로 클러스터 인증 정보를 기반으로 AMI ID를 사용하여
KataConfig
CR을 실행할 때 이 값이 채워집니다. 고유한 AMI를 생성하는 경우 올바른 AMI ID를 지정합니다. - 4
- 검색한
AWS_REGION
값을 지정합니다. - 5
- 검색한
AWS_SUBNET_ID
값을 지정합니다. - 6
- 검색한
AWS_VPC_ID
값을 지정합니다. - 7
- 검색한
AWS_SG_IDS
값을 지정합니다.
매니페스트를 적용하여 구성 맵을 생성합니다.
oc apply -f peer-pods-cm.yaml
$ oc apply -f peer-pods-cm.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클라우드 공급자에 대한 구성 맵이 생성됩니다.
피어 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를 업데이트하지 않습니다.
3.1.3.3. KataConfig 사용자 지정 리소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
작업자 노드에 kata-remote
를 런타임 클래스로 설치하려면 KataConfig
CR(사용자 정의 리소스)을 생성해야 합니다.
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
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
다음 예에 따라
cluster-kataconfig.yaml
매니페스트 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 선택한 노드에
kata-remote
를 설치하려면 다음 예에 따라 노드 라벨을 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 선택한 노드의 라벨을 지정합니다.
KataConfig
CR을 생성합니다.oc create -f cluster-kataconfig.yaml
$ oc create -f cluster-kataconfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 새로운
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! Toggle word wrap Toggle overflow kataNodes
아래의 모든 작업자의 상태가설치되고
이유를 지정하지 않고InProgress
조건이False
이면 클러스터에kata-remote
가 설치됩니다.
자세한 내용은 KataConfig 상태 메시지를 참조하십시오.
3.1.3.3.1. 선택 사항: 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! Toggle word wrap Toggle overflow YAML 파일의
상태
스탠자를 확인합니다.PODVM_AMI_ID
매개변수가 채워지면 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! Toggle word wrap Toggle overflow 다음 명령을 실행하여 작업 로그를 검색합니다.
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! Toggle word wrap Toggle overflow
문제를 해결할 수 없는 경우 Red Hat 지원 케이스를 제출하고 두 로그의 출력을 첨부합니다.
3.1.3.4. 선택 사항: 노드당 피어 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 다음 명령을 실행하여
peerpodConfig
CR의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>를 정의할 제한으로 바꿉니다.
3.1.3.5. 워크로드 오브젝트 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 pod 템플릿 오브젝트의 런타임 클래스로 kata-remote
를 구성하여 OpenShift 샌드박스 컨테이너 워크로드를 배포합니다.
-
Pod
오브젝트 -
ReplicaSet
오브젝트 -
ReplicationController
오브젝트 -
StatefulSet
오브젝트 -
Deployment
오브젝트 -
DeploymentConfig
오브젝트
openshift-sandboxed-containers-operator
네임스페이스에 워크로드를 배포하지 마십시오. 이러한 리소스에 대한 전용 네임스페이스를 생성합니다.
YAML 파일에 주석을 추가하여 구성 맵에 정의한 기본 인스턴스 유형을 사용하여 워크로드를 배포해야 하는지 여부를 정의할 수 있습니다.
인스턴스 유형을 수동으로 정의하지 않으려면 사용 가능한 메모리에 따라 자동 인스턴스 유형을 사용하도록 주석을 추가할 수 있습니다.
사전 요구 사항
- 공급자에 대한 보안 오브젝트를 생성했습니다.
- 공급자에 대한 구성 맵을 생성했습니다.
-
KataConfig
CR(사용자 정의 리소스)을 생성했습니다.
프로세스
다음 예와 같이
spec.runtimeClassName: kata-remote
를 각 pod 템플릿 워크로드 오브젝트의 매니페스트에 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow pod-templated 오브젝트에 주석을 추가하여 수동으로 정의된 인스턴스 유형 또는 자동 인스턴스 유형을 사용합니다.
수동으로 정의한 인스턴스 유형을 사용하려면 다음 주석을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 구성 맵에서 정의한 인스턴스 유형을 지정합니다.
자동 인스턴스 유형을 사용하려면 다음 주석을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 워크로드에서 사용할 수 있는 메모리 양을 정의합니다. 워크로드는 사용 가능한 메모리 양에 따라 자동 인스턴스 유형에서 실행됩니다.
다음 명령을 실행하여 워크로드 오브젝트에 변경 사항을 적용합니다.
oc apply -f <object.yaml>
$ oc apply -f <object.yaml>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform은 워크로드 오브젝트를 생성하고 스케줄링을 시작합니다.
검증
-
pod-templated 오브젝트의
spec.runtimeClassName
필드를 검사합니다. 값이kata-remote
이면 피어 Pod를 사용하여 OpenShift 샌드박스 컨테이너에서 워크로드가 실행됩니다.