2.2. 웹 콘솔을 사용하여 OpenShift 샌드박스 컨테이너 배포
OpenShift Container Platform 웹 콘솔을 사용하여 다음 작업을 수행하여 베어 메탈에 OpenShift 샌드박스 컨테이너를 배포할 수 있습니다.
- OpenShift 샌드박스 컨테이너 Operator를 설치합니다.
- 선택 사항: NFD(Node Feature Discovery) Operator를 설치하여 노드 자격 검사를 구성합니다. 자세한 내용은 노드 자격 검사 및 NFD Operator 설명서를 참조하십시오.
- 선택 사항: Kata 에이전트 정책을 사용자 지정합니다.
-
KataConfig
사용자 지정 리소스를 생성합니다. - OpenShift 샌드박스 컨테이너 워크로드 오브젝트를 구성합니다.
2.2.1. OpenShift 샌드박스 컨테이너 Operator 설치
OpenShift Container Platform 웹 콘솔을 사용하여 OpenShift 샌드박스 컨테이너 Operator를 설치할 수 있습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
-
웹 콘솔에서 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 샌드박스 컨테이너에 대한 자동 업데이트를 활성화합니다.
- 설치를 클릭합니다.
-
Operator
설치된 Operator 로 이동하여 Operator가 설치되었는지 확인합니다.
2.2.2. 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 파일에 사용할 출력을 저장합니다.
2.2.3. KataConfig 사용자 지정 리소스 생성
작업자 노드에 kata
를 설치하려면 KataConfig
CR(사용자 정의 리소스)을 생성해야 합니다.
kata
런타임 클래스는 기본적으로 모든 작업자 노드에 설치됩니다. 특정 노드에 kata
를 설치하려면 해당 노드에 라벨을 추가한 다음 KataConfig
CR에 라벨을 정의할 수 있습니다.
OpenShift 샌드박스 컨테이너는 kata
를 기본 런타임이 아닌 클러스터의 선택적 런타임으로 설치합니다.
KataConfig
CR을 생성하면 작업자 노드가 자동으로 재부팅됩니다. 재부팅에는 10분에서 60분 이상 걸릴 수 있습니다. 다음 요인은 재부팅 시간을 늘릴 수 있습니다.
- 더 많은 작업자 노드가 있는 대규모 OpenShift Container Platform 배포
- BIOS 및 Cryostat 유틸리티 활성화.
- SSD가 아닌 하드 디스크 드라이브에 배포합니다.
- 가상 노드가 아닌 베어 메탈과 같은 물리적 노드에 배포됩니다.
- 느린 CPU 및 네트워크입니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. - 선택 사항: 노드 자격 검사를 활성화하려면 Node Feature Discovery Operator를 설치했습니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
설치된 Operator로 이동합니다. - OpenShift 샌드박스 컨테이너 Operator를 선택합니다.
- KataConfig 탭에서 KataConfig 만들기 를 클릭합니다.
다음 세부 정보를 입력합니다.
-
이름: 선택 사항: 기본 이름은
example-kataconfig
입니다. -
labels: 선택 사항:
KataConfig
리소스에 대한 특성을 식별하는 모든 관련 정보를 입력합니다. 각 레이블은 키-값 쌍을 나타냅니다. - checkNodeEligibility: 선택 사항: NFD(Node Feature Discovery Operator)를 사용하여 노드 자격을 감지하도록 선택합니다.
kataConfigPoolSelector. 선택 사항: 선택한 노드에
kata
를 설치하려면 선택한 노드의 라벨에 일치하는 표현식을 추가합니다.- kataConfigPoolSelector 영역을 확장합니다.
- kataConfigPoolSelector 영역에서 matchExpressions 를 확장합니다. 이는 라벨 선택기 요구 사항 목록입니다.
- matchExpressions 추가를 클릭합니다.
- 키 필드에 선택기가 적용되는 라벨 키를 입력합니다.
-
Operator 필드에 레이블 값과의 키 관계를 입력합니다. 유효한 연산자는
In
,NotIn
,Exists
및DoesNotExist
입니다. - 값 영역을 확장한 다음 값 추가 를 클릭합니다.
-
값 필드에 키 레이블 값에
true
또는false
를 입력합니다.
-
loglevel:
kata
런타임 클래스가 있는 노드에 대해 검색된 로그 데이터의 수준을 정의합니다.
-
이름: 선택 사항: 기본 이름은
생성을 클릭합니다.
KataConfig
CR이 생성되고 작업자 노드에kata
런타임 클래스를 설치합니다.kata
설치가 완료되고 설치를 확인하기 전에 작업자 노드가 재부팅될 때까지 기다립니다.
검증
-
KataConfig 탭에서
KataConfig
CR을 클릭하여 세부 정보를 확인합니다. YAML 탭을 클릭하여
상태 스탠자를 확인합니다
.상태
스탠자에는조건
및kataNodes
키가 포함되어 있습니다.status.kataNodes
의 값은 노드 배열이며 각각 특정 상태의kata
설치 노드를 나열합니다. 업데이트가 있을 때마다 메시지가 표시됩니다.Reload (다시 로드)를 클릭하여 YAML을 새로 고칩니다.
status.kataNodes
어레이의 모든 작업자가설치
및조건.InProgress: False
를 지정하는 이유 없이 False를 표시하면 클러스터에kata
가 설치됩니다.
추가 리소스
2.2.4. 워크로드 오브젝트 구성
kata
를 다음 pod 템플릿 오브젝트의 런타임 클래스로 설정하여 OpenShift 샌드박스 컨테이너 워크로드 오브젝트를 구성해야 합니다.
-
Pod
오브젝트 -
ReplicaSet
오브젝트 -
ReplicationController
오브젝트 -
StatefulSet
오브젝트 -
Deployment
오브젝트 -
DeploymentConfig
오브젝트
Operator 네임스페이스에 워크로드를 배포하지 마십시오. 이러한 리소스에 대한 전용 네임스페이스를 생성합니다.
사전 요구 사항
-
KataConfig
CR(사용자 정의 리소스)을 생성했습니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 워크로드
워크로드 유형(예: Pod )으로 이동합니다. - 워크로드 유형 페이지에서 오브젝트를 클릭하여 세부 정보를 확인합니다.
- YAML 탭을 클릭합니다.
다음 예와 같이
spec.runtimeClassName: kata
를 각 pod 템플릿 워크로드 오브젝트의 매니페스트에 추가합니다.apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata # ...
apiVersion: v1 kind: <object> # ... spec: runtimeClassName: kata # ...
Copy to Clipboard Copied! OpenShift Container Platform은 워크로드 오브젝트를 생성하고 스케줄링을 시작합니다.
검증
-
pod-templated 오브젝트의
spec.runtimeClassName
필드를 검사합니다. 값이kata
이면 피어 Pod를 사용하여 OpenShift 샌드박스 컨테이너에서 워크로드가 실행됩니다.