기밀 컨테이너 문제를 해결하려면 어떻게 해야 하나요?

발생 가능한 문제를 검토하세요.

이 문제는 설정 중 잘못된 구성으로 인해 발생할 수 있습니다.

문제 해결을 시작하려면 다음 명령을 실행하여 기밀 컨테이너에 대한 데이터를 최대한 많이 수집하세요.

  1. 운영자에 대한 정보를 수집하십시오.

    oc get csv -n openshift-sandboxed-containers-operator
    
    oc describe csv -n openshift-sandboxed-containers-operator
    
    oc get all -n openshift-sandboxed-containers-operator
    
  2. DaemonSets 와 관련된 모든 파드에서 로그와 이벤트를 검색합니다.

    oc describe pod/osc-caa-ds-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/osc-caa-ds-<random string> -n openshift-sandboxed-containers-operator
    
    oc describe pod/osc-config-sync-install-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/osc-config-sync-install-<random string> -n openshift-sandboxed-containers-operator
    
    oc describe pod/osc-rpm-install-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/osc-rpm-install-<random string> -n openshift-sandboxed-containers-operator
    
  3. 포드에 대한 정보를 수집하십시오.

    a. 컨트롤러 관리자에 대한 정보를 수집합니다.

    oc describe pod/controller-manager-<random string> -n openshift-sandboxed-containers-operator
    
    oc logs pod/controller-manager-<random string> -n openshift-sandboxed-containers-operator
    

    b. 임의의 문자열에 대한 로그를 수집합니다.

    oc logs pod/<random string>
    
    oc describe pod/<random string>
    

    c. openshift-sandboxed-containers-operator-bundle 에 대한 정보를 수집합니다.

    oc logs pod/trikprot-openshift-sandboxed-containers-operator-bundle-<version>
    
    oc describe pod/trikprot-openshift-sandboxed-containers-operator-bundle-<version>
    
  4. ConfigMaps 에 대한 정보를 수집하십시오.

    a. 기능 게이트에 대한 정보를 수집합니다.

    oc get configmap/osc-feature-gates -n openshift-sandboxed-containers-operator -o yaml
    

    b. 피어 포드에 대한 정보를 수집합니다.

    oc get configmap/peer-pods-cm -n openshift-sandboxed-containers-operator -o yaml
    

    c. 비밀에 관한 정보를 수집하세요.

    oc get secret/auth-json-secret -n openshift-sandboxed-containers-operator
    
    oc get secret/peer-pods-secret -n openshift-sandboxed-containers-operator
    

    d. KataConfig 에 대한 정보를 수집하십시오.

    oc get kataconfigs.kataconfiguration.openshift.io/kata-runtime-settings -n openshift-sandboxed-containers-operator -o yaml
    

    e. 사용자 지정 리소스 정의에 대한 정보를 수집합니다.

    oc get crd/peerpods.confidentialcontainers.org
    
    oc get crd/kataconfigs.kataconfiguration.openshift.io
    
  5. 피어 포드 용량 및 제한을 확인합니다.

    a. 모든 워커 노드에서 현재 피어 파드 제한을 확인합니다.

    oc get nodes -o json | jq -r '[.items[] | select (.status.allocatable["kata.peerpods.io/vm"] != null)| .status.allocatable["kata.peerpods.io/vm"] | tonumber] | add'
    

    b. 각 워커 노드에 할당된 리소스를 확인합니다.

    for n in $(oc get nodes -o name); do
      echo "=== $n ==="
      oc describe "$n" | sed -n '/Allocated resources:/,/Events:/p'
    done
    

    c. 현재 실행 중인 피어 파드의 수를 계산합니다.

    oc get pods -A -o json | jq '.items[] | select(.spec.runtimeClassName == "kata-remote") | "\(.metadata.namespace)/\(.metadata.name)"' | wc -l
    

일반적인 문제 및 해결 방법

불충분 kata.peerpods.io/vm 오류

피어 파드를 예약할 때 다음과 같은 오류가 표시되는 경우:

Warning FailedScheduling 0/30 nodes are available: 9 Insufficient kata.peerpods.io/vm. preemption: 0/30 nodes are available: 9 No preemption victims found for incoming pod.

이 오류는 작업자 노드에서 PEERPODS_LIMIT_PER_NODE 제한에 도달했음을 나타냅니다. 기본 제한은 워커 노드당 피어 파드 10개입니다.

이 문제를 해결하려면 다음과 같이 하십시오.

  1. 현재 제한과 실행 중인 피어 포드 수를 확인합니다.

    oc get nodes -o json | jq '.items[] | {name: .metadata.name, allocatable: .status.allocatable["kata.peerpods.io/vm"], capacity: .status.capacity["kata.peerpods.io/vm"]}'
    
  2. peer-pods-cm ConfigMap 에서 PEERPODS_LIMIT_PER_NODE 값을 늘립니다. 자세한 내용은 기밀 컨테이너 만들기를 참조하세요.

    oc -n openshift-sandboxed-containers-operator patch cm peer-pods-cm \
      --type merge \
      -p '{"data":{"PEERPODS_LIMIT_PER_NODE":"24"}}'
    
  3. 클라우드 API 어댑터 데몬 세트를 다시 시작합니다.

    oc -n openshift-sandboxed-containers-operator rollout restart daemonset/osc-caa-ds
    
  4. 새 한도가 적용되었는지 확인합니다.

    oc get nodes -o json | jq -r '[.items[] | select (.status.allocatable["kata.peerpods.io/vm"] != null)| .status.allocatable["kata.peerpods.io/vm"] | tonumber] | add'
    

피어 파드 제한 및 용량 계획에 대한 자세한 내용은 워커 노드당 몇 개의 피어 파드를 실행할 수 있는지 도움말을 참조하세요.

OSC Operator로 업그레이드한 후 IAM 인증 오류 발생 1.12.1

OpenShift 샌드박스 컨테이너 오퍼레이터 버전을 업그레이드한 후 Cloud API 어댑터(CAA) 로그에서 다음과 유사한 오류가 표시되는 경우 1.12.1:

cloud-api-adaptor: cluster error with:
 Unauthorized
further details:
 {
    "StatusCode": 401,
    "Result": {
        "code": "A0007",
        "description": "You do not have the correct permissions to perform this action..."
    }
}

1.12.1 버전부터는 IBM Cloud IKS 클러스터 서비스 API를 통해 클러스터의 보안 그룹을 자동으로 가져와야 하는 새로운 요구 사항이 도입되었습니다. IBMCLOUD_IAM_PROFILE_ID 를 인증 수단(컴퓨팅 리소스 ID)으로 사용할 경우, IAM 프로필에 클러스터 서비스 API를 조회하는 데 필요한 권한이 없을 수 있습니다.

다음 옵션 중 하나를 선택하십시오.

추가 IAM 권한 부여 (권장)

IAM 프로필을 업데이트하여 IKS 클러스터 서비스 API에 대한 권한, 특히 GetClusterTypeSecurityGroups() 을 호출할 수 있는 권한을 포함시키십시오. IBM Cloud 관리자에게 문의하여 필요한 권한을 추가해 주십시오.

보안 그룹 ID를 명시적으로 설정합니다

peer-pods-cm 의 ConfigMap 에서 IBMCLOUD_VPC_SG_ID 환경 변수를 설정하여 클러스터 보안 그룹의 자동 조회를 우회하십시오. 그런 다음 Cloud API 어댑터 데몬셋을 다시 시작하십시오.

  1. ConfigMap 에 보안 그룹 ID를 입력하세요.
    oc -n openshift-sandboxed-containers-operator patch cm peer-pods-cm \
      --type merge \
      -p '{"data":{"IBMCLOUD_VPC_SG_ID":"<your-security-group-id>"}}'
    ```
2. 클라우드 API 어댑터 데몬 세트를 다시 시작합니다.

```sh {: pre}
    oc -n openshift-sandboxed-containers-operator rollout restart daemonset/osc-caa-ds
    ```
API 키 인증으로 전환

IBMCLOUD_IAM_PROFILE_ID 인증에서 IBMCLOUD_API_KEY 인증으로 전환하십시오. API 키 인증은 명시적인 IAM 정책이 적용된 서비스 ID를 사용하며, 이 정책의 적용 범위를 조정하여 필요한 클러스터 서비스 권한을 포함시킬 수 있습니다. peer-pods-secret 시크릿을 IAM 프로필 ID 대신 자신의 API 키로 업데이트하십시오.

이번 변경 사항에 대한 자세한 내용은 업스트림 cloud-api-adaptor의 커밋 dde66055 을 참조하십시오.

CPU 부족 오류

피어 파드를 예약할 때 다음과 같은 오류가 표시되는 경우:

Warning FailedScheduling 0/3 nodes are available: 3 Insufficient cpu. preemption: 0/3 nodes are available: 3 No preemption victims found for incoming pod.

이 오류는 작업자 노드에 사용 가능한 CPU 리소스가 충분하지 않음을 나타냅니다. 각 피어 파드는 실제 워크로드가 별도의 VSI에서 실행되더라도 Kubernetes 포드 구성의 작업자 노드에서 약 250m CPU를 소비합니다.

이 문제를 해결하려면 다음과 같이 하십시오.

  1. 워커 노드의 CPU 할당을 확인하세요.

    for n in $(oc get nodes -o name); do
      echo "=== $n ==="
      oc describe "$n" | sed -n '/Allocated resources:/,/Events:/p'
    done
    
  2. 다음 옵션 중 하나를 선택하십시오.

    • 클러스터에 워커 노드 추가하기
    • 더 많은 워커 노드 사용 vCPUs
    • PEERPODS_LIMIT_PER_NODE 값을 워커 노드 용량에 맞게 줄이세요
    • 워커 노드에서 다른 워크로드를 제거하여 CPU 리소스를 확보하세요