워크로드 클러스터 문제 해결

이 섹션에는 워크로드 클러스터 문제를 해결하는 데 도움이 되는 팁이 포함되어 있습니다.

독립형 관리 클러스터 배포 문제 해결에 대한 자세한 내용은 관리 클러스터 문제 해결을 참조하십시오. Release Notes 또는 VMware 기술 자료 문서에서 이 릴리스의 알려진 문제에 대한 추가 해결 방법을 찾을 수 있습니다

일반 작업

kubectl로 사용자, 컨텍스트, 클러스터 삭제

사용자, 컨텍스트, 클러스터의 일부 또는 전체를 삭제하여 kubectl 상태를 정리하려면 다음을 수행합니다.

  1. ~/.kube/config 파일을 엽니다.

  2. 삭제할 user 개체에 대해 다음을 실행합니다.

    kubectl config unset users.USER-NAME
    

    여기서 USER-NAMEconfig 파일에 있는 대로 각 최상위 user 개체의 name 속성입니다.

  3. 삭제할 context 개체에 대해 다음을 실행합니다.

    kubectl config unset contexts.CONTEXT-NAME
    

    여기서 CONTEXT-NAMEname 파일에 있는 대로 각 최상위 context 개체의 config 속성입니다(일반적으로 contexts.mycontext-admin@mycontext 형식).

  4. 삭제할 cluster 개체에 대해 다음을 실행합니다.

    kubectl config unset clusters.CLUSTER-NAME
    

    여기서 CLUSTER-NAMEconfig 파일에 있는 대로 각 최상위 cluster 개체의 name 속성입니다.

  5. config 파일에 현재 컨텍스트가 삭제한 클러스터로 나열되면 컨텍스트를 설정 해제합니다.

    kubectl config unset current-context
    

패키지

기본 YAML 파일에서 Grafana를 설치할 때 암호가 생성되지 않음

문제

기본 Grafana 구성 파일을 생성하여 Grafana 설치를 시도하면 error: Secret in version "v1" cannot be handled as a Secret: illegal base64 data at input byte 4 (reason: BadRequest)와 함께 설치가 실패합니다.

솔루션

암호를 수동으로 생성하고 암호 태그 없이 동일한 YAML 파일을 사용하여 Grafana를 설치합니다.

  1. 워크로드 클러스터에 Grafana 배포 단계를 수행하여 Grafana 구성을 위한 구성 파일을 생성합니다.
  2. 생성된 구성 파일에서 grafana.secret.* 항목을 제거합니다.
  3. 암호를 수동으로 생성합니다.

    kubectl create secret generic grafana -n tanzu-system-dashboards  --from-literal=admin=admin
    
  4. 패키지를 배포합니다.

    tanzu package install grafana \
    --package grafana.tanzu.vmware.com \
    --version AVAILABLE-PACKAGE-VERSION \
    --values-file grafana-data-values.yaml \
    --namespace TARGET-NAMESPACE
    
  5. 워크로드 클러스터에 Grafana 배포의 나머지 단계를 수행합니다.

tanzu package repository를 실행할 때 오류

문제

tanzu package repository 명령이 오류와 함께 실패합니다.

솔루션

kubectl get pkgr REPOSITORY-NAME -n NAMESPACE -o yaml​을 실행하여 오류 세부 정보를 확인합니다.

형식 설명:

  • REPOSITORY-NAME은 패키지 저장소의 이름입니다.
  • NAMESPACE는 패키지 저장소의 대상 네임스페이스입니다.

tanzu package repository 명령이 다음과 유사한 오류와 함께 실패할 수 있습니다.

Error 설명 솔루션
NOT_FOUND 저장소 URL 경로가 잘못되었습니다. 클러스터에서 패키지 저장소의 URL에 연결할 수 있는지 확인합니다.
UNKNOWN 또는 UNAUTHORIZED 이 오류는 저장소에 연결하려고 할 때 발생할 수 있습니다.
Ownership 동일한 패키지 저장소 URL을 가진 저장소가 클러스터에 이미 설치되어 있습니다. 다음 중 하나를 수행합니다.
  • tanzu package available list -n NAMESPACE를 실행하여 설치하려는 패키지를 이미 설치할 수 있는지 확인합니다. 저장소를 추가하려는 현재 실패한 시도를 되돌리려면 tanzu package repository delete REPOSITORY-NAME -n NAMESPACE를 실행합니다.
  • tanzu package repository list -A를 실행하여 동일한 URL로 기존 패키지 저장소를 검색합니다. 패키지 저장소를 검색하는 경우 패키지 저장소 삭제를 계속 진행할 수 있습니다.

tanzu package installed를 실행할 때 오류

문제

tanzu package installed 명령이 오류와 함께 실패합니다.

솔루션

kubectl get pkgi INSTALLED-PACKAGE-NAME -n NAMESPACE -o yaml​을 실행하여 오류 세부 정보를 확인합니다.

형식 설명:

  • INSTALLED-PACKAGE-NAME은 설치된 패키지의 이름입니다.
  • NAMESPACE는 설치된 패키지의 네임스페이스입니다.

tanzu package installed 명령이 다음과 유사한 오류와 함께 실패할 수 있습니다.

Error 설명 솔루션
Ownership 이름이 같은 패키지가 클러스터에 이미 설치되어 있습니다. tanzu package installed list -A를 실행하여 설치하려는 패키지가 이미 설치되어 있는지 확인합니다. 설치를 계속하려면 이미 설치된 패키지를 사용하거나, 해당 버전을 업데이트하거나, 패키지를 삭제해야 할 수 있습니다.
Evaluating starlark template 이 오류는 나열된 구성 값이 누락된 경우 발생할 수 있습니다. 사용 가능한 모든 구성 값을 보려면 tanzu package available get AVAILABLE-PACKAGE-NAME/VERSION -n NAMESPACE --values-schema를 실행하고 필요한 구성 값을 tanzu package install 명령에 삽입합니다.
Failed to find a package with name PACKAGE-NAME in namespace NAMESPACE 지정된 패키지 및 패키지 메타데이터를 대상 네임스페이스에서 사용할 수 없습니다. 지정된 패키지가 tanzu package available list AVAILABLE-PACKAGE-NAME -n NAMESPACE​ 출력에 나와 있는지 확인합니다. 그렇지 않은 경우 패키지가 포함된 패키지 저장소를 대상 네임스페이스에 추가합니다.
Namespace NAMESPACE not found 패키지를 설치하려는 네임스페이스가 없습니다. TKG v2.1 이상에서 tanzu package 명령은 kctrl에 기반하며, 더 이상 —create-namespace 플래그를 지원하지 않습니다. 패키지 또는 패키지 저장소를 설치하기 전에 대상 네임스페이스가 이미 있어야 합니다.
Provided service account SERVICE-ACCOUNT-NAME is already used by another package in namespace NAMESPACE​ service-account-name 플래그와 함께 제공된 서비스 계정이 설치된 다른 패키지에서 이미 사용되고 있습니다. 패키지 플러그인이 서비스 계정을 생성하도록 허용하거나 다른 서비스 계정 이름을 선택하십시오.

포드

vCenter 연결로 인해 포드가 클러스터에서 보류 중 상태로 중단됨

문제

생성된 클러스터에서 kubectl get pods -A를 실행하면 일부 포드가 보류 중 상태로 유지됩니다.

영향을 받는 포드에서 kubectl describe pod -n pod-namespace pod-name을 실행하고 다음 이벤트를 확인합니다.

n node(s) had taint {node.cloudprovider.kubernetes.io/uninitialized: true}, that the pod didn't tolerate

솔루션

클러스터와 vCenter 간의 통신을 보장하기 위해 연결 및 방화벽 규칙이 있는지 확인합니다. 방화벽 포트 및 프로토콜 요구 사항은 VMware Ports and Protocols vSphere 8 목록을 참조하십시오.

스토리지

기본 StorageClass 개체를 변경하면 워크로드 클러스터에서 조정 이 실패함

문제

TKG에 포함된 기본 StorageClass 개체의 속성을 수정하면 스토리지 클래스를 사용하는 워크로드 클러스터에서 패키지 조정이 실패합니다.

솔루션:

스토리지 클래스를 사용자 지정하려면 기본 개체 정의를 수정하는 대신 다른 name을 사용하여 새 StorageClass 정의를 생성하고 새 스토리지 클래스를 사용하도록 클러스터를 재구성합니다.

워크로드 클러스터

클러스터 배포 시간이 초과되었지만 클러스터가 생성됨

문제

tanzu cluster create 실행이 실패하고 다음과 유사한 시간 초과 오류가 표시됩니다.

I0317 11:11:16.658433 clusterclient.go:341] Waiting for resource my-cluster of type *v1beta1.Cluster to be up and running
E0317 11:26:16.932833 common.go:29]
Error: unable to wait for cluster and get the cluster kubeconfig: error waiting for cluster to be created (this may take a few minutes): cluster control plane is still being initialized
E0317 11:26:16.933251 common.go:33]

솔루션

--timeout 플래그를 사용하여 클러스터 생성이 완료될 때까지 기다리는 시간을 지정합니다. 기본 대기 시간은 30분입니다.

tanzu cluster create --timeout TIME

여기서 TIME은 클러스터 생성이 완료될 때까지 기다리는 시간(분)입니다. 예: 60m.

워크로드 클러스터가 삭제 중 중단됨

문제

tanzu cluster delete가 워크로드 클러스터를 삭제하지 못합니다.

클러스터를 수동으로 삭제하려면 아래의 두 가지 솔루션을 참조하십시오.

솔루션 1

  1. 대상 클러스터에서 avi-system 네임스페이스에서 실행되는 AKO의 StatefulSet 개체를 삭제합니다.

    kubectl delete sts ako -n avi-system
    

솔루션 2

  1. 클러스터에 로그인하고 Worker 시스템을 삭제합니다.

    kubectl delete machine worker1 worker2
    
  2. vCenter Worker 노드 VM의 전원을 끄고 삭제합니다.

  3. 제어부 시스템을 편집하고 종료자 링크를 제거합니다.

    finalizers:
     - machine.cluster.x-k8s.io
    
  4. 제어부 시스템을 삭제합니다.

    kubectl delete machine controlplane1 controlplane2
    
  5. vCenter 제어부 VM의 전원을 끄고 삭제합니다.

일치하지 않는 MTU로 인해 NotReady 상태의 클러스터 Worker 노드

문제

클러스터의 Worker 노드의 MTU(최대 전송 단위) 설정이 다르면 TLS 핸드셰이크 시간 초과가 발생합니다.

노드의 journalctl -u kubelet 로그가 API 서버와의 통신 실패를 표시합니다. kubectl get nodes를 실행하면 Worker 노드가 NotReady 상태로 변경되었다고 표시됩니다.

다음을 수행하여 문제를 다시 확인할 수 있습니다.

  1. 제어부 노드 및 Worker 노드 시스템에서 ip link를 실행하고 eth0 인터페이스의 MTU 값을 비교합니다. 일치하지 않으면 이 문제가 발생했다는 의미입니다.
  2. 충돌 진단(Crashd)을 실행하고 kubelet 로그를 검토하여 연결 시간이 초과되었거나 Worker 노드가 NotReady 상태인지 확인합니다. Crashd 실행에 대한 자세한 내용은 충돌 진단을 사용하여 워크로드 클러스터 문제 해결을 참조하십시오.
  3. NotReady 노드 상태인 시스템에서 실행할 때 다음 명령이 실패하는지 확인합니다.

    • openssl s_client -connect IP:PORT

    • curl IP:PORT -k /healthz

    여기서 IPPORT는 Kubernetes API 서버 제어부 끝점의 IP 주소와 포트 번호입니다. 기본적으로 PORT6443로 설정됩니다.

솔루션

  1. 클러스터에 배포된 권한 있는 데몬셋을 검토하고 호스트 운영 체제의 네트워크 구성을 수정할 수 있는 타사 벤더의 데몬셋을 검토합니다. 이를 확인하려면 소프트웨어 벤더에 문의해야 할 수 있습니다. 호스트 운영 체제를 수정할 수 있는 데몬셋에는 .spec.template.spec.hostNetwork: true 또는 컨테이너 보안 컨텍스트의 기능 필드에 privileged: true 또는 NET_ADMIN이 있습니다.

  2. 대형 MTU 설정을 구성하려면 MTU 값이 더 높은 제어부를 사용하여 클러스터를 프로비저닝합니다.

  3. 클러스터 네트워크가 경로 MTU 검색을 허용하거나 TCP MSS 클램핑이 있는지 확인하여 vCenter 또는 컨테이너 레지스트리와 같은 외부 서비스에 올바른 MTU 크기 조정을 허용하는지 확인합니다.

  4. 클러스터의 모든 노드에 대해 동일한 MTU 설정을 구성해야 합니다.

  5. 네트워크 방화벽 설정은 구성된 MTU 크기의 패킷을 허용해야 합니다.

NSX ALB를 사용하면 이름이 동일한 클러스터를 생성할 수 없음

문제

워크로드(AVI_ENABLE) 또는 제어부(AVI_CONTROL_PLANE_HA_PROVIDER)에 NSX Advanced Load Balancer 사용하는 경우 Avi 컨트롤러가 이름이 동일한 클러스터를 구분하지 못할 수 있습니다.

솔루션:

각 클러스터에 고유한 CLUSTER_NAME 값을 설정합니다. 동일한 CLUSTER_NAME이 있고 동일한 관리 클러스터 네임스페이스에 있는 워크로드 클러스터를 NAMESPACE 값으로 설정하여 생성하지 마십시오.

VSPHERE CSI 볼륨 삭제가 AVS에서 실패할 수 있음

문제

AVS(Azure vSphere Solution)에서 vSphere CSI PV(영구 볼륨) 삭제가 실패할 수 있습니다. PV를 삭제하려면 cns.searchable 권한이 필요합니다. AVS의 기본 관리자 계정인 <[email protected]>이 사용 권한으로 생성되지 않습니다. 자세한 내용은 vSphere 역할 및 권한을 참조하십시오.

솔루션

AVS에서 vSphere CSI PV를 삭제하려면 Azure 지원에 문의하십시오.

클러스터가 Tanzu Kubernetes Grid 함께 배포되지 않은 네트워킹 리소스를 사용하는 경우 AWS에서 클러스터 삭제가 실패합니다.

문제

tanzu cluster deletetanzu management-cluster delete 명령은 Tanzu Kubernetes Grid 배포 프로세스와 독립적으로 AWS Cloud Controller Manager에서 생성된 네트워킹 리소스를 사용하는 클러스터에 중단되었을 수 있습니다. 이러한 리소스에는 Kubernetes AWS 클라우드 공급자 설명서의 서비스 컨트롤러에 나열된 로드 밸런서 및 기타 네트워킹 서비스가 포함될 수 있습니다.

자세한 내용은 클러스터 API 문제 해체 시 service Type=Loadbalancer의 워크로드 클러스터 드레인을 참조하십시오.

솔루션

kubectl delete를 사용하여 클러스터에서 LoadBalancer 유형의 서비스를 삭제합니다. 그렇지 않으면 AWS 콘솔을 사용하여 Cloud Controller 관리자가 이 서비스에 생성한 LoadBalancerSecurityGroup 개체를 수동으로 삭제합니다.

주의

key: sigs.k8s.io/cluster-api-proider-aws/cluster/CLUSTER-NAME, value: owned 태그가 있는 Tanzu 의해 관리되는 로드 밸런서 또는 보안 그룹을 삭제하지 마십시오.

스토리지 볼륨이 전용 끝점이 있는 계정을 사용하는 경우 클러스터 삭제가 실패함

문제

관리되지 않는 리소스 그룹의 Azure 워크로드 클러스터를 사용하면 Azure CSI 드라이버가 개인 끝점이 있는 스토리지 계정을 사용하는 PV(영구 볼륨)를 생성하면 PV가 삭제되면 삭제되지 않는 privateEndpointvNet 리소스를 생성합니다. 그 결과 클러스터 삭제가 subnets failed to delete. err: failed to delete resource ... Subnet management-cluster-node-subnet is in use와 같은 오류와 함께 실패합니다.

솔루션:

Azure 클러스터를 삭제하기 전에 스토리지 계정 개인 끝점에 대한 네트워크 인터페이스를 수동으로 삭제합니다.

  1. 브라우저의 경우 Azure Resource Explorer에 로그인합니다.
  2. 왼쪽에서 구독(subscriptions)을 클릭하고 구독을 확장합니다.
  3. 구독에서 왼쪽의 resourceGroups을 확장하고 TKG 배포의 리소스 그룹을 확장합니다.
  4. 리소스 그룹에서 제공자(providers) > Microsoft.Network > networkinterfaces를 확장합니다.
  5. networkinterfaces에서 삭제하지 못하는 NIC 리소스를 선택합니다.
  6. 맨 위에 있는 읽기/쓰기(Read/Write) 버튼을 클릭한 다음 바로 아래에 있는 작업(게시, 삭제)(Actions)(POST, DELETE) 탭을 클릭합니다.
  7. 삭제(Delete)를 클릭합니다.
  8. NIC가 삭제되면 Azure 클러스터를 삭제합니다.
check-circle-line exclamation-circle-line close-line
Scroll to top icon