클러스터 문제 진단

이 페이지는 플랫폼 관리자 또는 인프라 운영자용으로 작성되었습니다.

이 페이지에서는 연결 해제 모드에서 실행되는 Anthos의 actl 명령줄 도구를 사용하여 클러스터 문제를 진단하는 방법을 설명합니다. diagnose 명령어는 클러스터 상태를 캡처하는 로그 컬렉션이 포함된 보관 파일을 생성합니다.

소개

actl diagnose 명령어로 관리자 또는 사용자 클러스터의 상태를 캡처할 수 있습니다. 진단 정보는 문제를 발견하고 더 효과적으로 배포를 디버깅하는 데 도움이 될 수 있습니다. 이 명령어는 정의된 범위에 해당하는 모든 관련 클러스터 및 노드 구성 파일을 캡처한 후 단일 tar 보관 파일에 해당 정보를 패키징합니다. 명령어 플래그를 사용하면 명령어의 진단 범위를 선택할 수 있습니다.

actl diagnose

actl diagnose 명령어를 사용하여 클러스터 문제를 해결합니다. 이 명령어는 클러스터의 상태, 구성, 로그를 tar 파일 하나로 압축합니다. 스냅샷을 작성 중인 클러스터의 유형(관리자 또는 사용자 클러스터)에 따라 다른 정보가 수집됩니다. 명령어 기본 구성에는 클러스터에 대한 다음 정보가 포함됩니다.

  • Kubernetes 버전
  • kube-system 및 APM 컨트롤러 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, 포드, 이러한 포드 소유자, 배포, DaemonSet, StatefulSet
  • 대상 클러스터가 사용자 클러스터인 경우 사용자 제어 영역 상태(사용자 클러스터 제어 영역은 관리자 클러스터에서 실행)
  • IP 주소, iptable 규칙, 마운트 지점, 파일 시스템, 네트워크 연결, 실행 중인 프로세스를 포함한 각 노드 구성에 대한 세부정보
  • Kubernetes API 서버를 사용할 수 없는 경우 관리자 클러스터 제어 영역 노드의 컨테이너 로그
  • 포드, 서비스, 배포, 엔드포인트, 보안 비밀, ConfigMap, 모든 Istio 구성요소 및 사이드카의 현재 및 이전 로그, 모든 Istio 구성 아티팩트를 포함한 Istio 시스템 정보
  • config-management-system 관련 네임스페이스의 구성을 포함한 구성 동기화의 정보
  • actl diagnose 명령어의 로그

시나리오에서 스냅샷 만들기

actl diagnose 명령어는 6가지 시나리오를 지원합니다. 시나리오를 지정하려면 --scenario 플래그를 사용하여 구성이 다음과 같은 스냅샷을 수집합니다.

  • all: (기본값) auth, config-management, kubernetes, management-center, observability, service-mesh를 포함하여 사전 정의된 모든 시나리오가 포함됩니다.
  • auth
  • config-management
  • Kubernetes
  • management-center
  • observability
  • service-mesh

6가지 시나리오 각각을 관리자 클러스터 또는 사용자 클러스터에서 사용할 수 있습니다. 모든 시나리오를 사용하여 클러스터의 스냅샷을 만들려면 다음 안내를 따르세요.

관리자 클러스터

관리자 클러스터에 대해 kubeconfig 사용자 인증 정보가 있고 Cluster 정보 읽기 권한이 있으면 다음 명령어를 실행하여 모든 시나리오에서 스냅샷을 작성할 수 있습니다.

 actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG\
    --cluster=CLUSTER_NAME\
    --scenario=all

다음을 바꿉니다.

  • ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터의 kubeconfig 파일입니다.
  • CLUSTER_NAME: 클러스터의 이름입니다. 클러스터 이름을 모르는 경우 이 플래그를 생략하면 스냅샷을 만들 클러스터를 선택하라는 메시지가 표시됩니다.

사용자 클러스터

사용자 클러스터에 대해 kubeconfig 사용자 인증 정보만 있으면 다음 명령어를 사용하여 특정 사용자 클러스터의 스냅샷을 작성할 수 있습니다.

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG\
    --scenario=all

USER_CLUSTER_KUBECONFIG를 사용자 클러스터의 kubeconfig 파일로 바꿉니다.

출력에는 파일 목록과 tar 파일의 이름이 포함됩니다.

Using ["all"] snapshot configuration...
? Choose a cluster (namespace/name) cluster-admin/admin
Taking snapshots in 10 thread(s)...
  kubectlCommands/anthos-management-center-operator/kubectl_get_updateitems
  kubectlCommands/kubectl_cluster-info
  kubectlCommands/kubectl_version
  kubectlCommands/anthos-management-center/kubectl_logs_git-server-0_--container_git-server_--since_24h0m0s
  kubectlCommands/anthos-management-center/kubectl_get_deployments
  ...
  nodes/10.200.0.5/files/lib/systemd/system/docker.service
  nodes/10.200.0.4/files/lib/systemd/system/docker.service
  ...
  istioCommands/istioctl_bug-report

Snapshot succeeded.
Snapshots saved in "[TAR_FILE_PATH]/[TAR_FILE_NAME].tar.gz".

스냅샷을 기간으로 제한

--log-since 플래그를 사용하여 로그 컬렉션을 최근 기간으로 제한합니다. 예를 들어 지난 2일부터 또는 지난 3시간부터 로그를 수집할 수 있습니다. 기본적으로 diagnose은 지난 24시간부터 로그를 수집합니다. 이 플래그는 kubectl 로그에만 지원됩니다.

로그 수집 기간을 제한하려면 다음을 따르세요.

관리자 클러스터

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --scenario=all \
    --log-since=DURATION

사용자 클러스터

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --scenario=all \
    --log-since=DURATION

DURATION을 2d 또는 3h와 같은 시간 값으로 바꿉니다. 기본 기간은 24h입니다.

스냅샷의 테스트 실행 수행

--dry-run 플래그를 사용하여 수행할 작업과 스냅샷 구성을 표시할 수 있습니다.

클러스터에서 테스트 실행을 수행하려면 다음을 실행합니다.

관리자 클러스터

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --dry-run

사용자 클러스터

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --dry-run

스냅샷 구성 맞춤설정

이 6가지 시나리오가 조직의 요구사항에 맞지 않는 경우 맞춤설정된 스냅샷을 만들 수 있습니다. 구성을 생성한 후 복사하여 새 구성 파일에 붙여넣거나 구성 파일을 처음부터 만들 수 있습니다. 그런 다음 커스텀 구성 파일에서 스냅샷을 만들면 됩니다.

옵션 1: 스냅샷 구성 생성

--scenario 플래그와 --dry-run 플래그를 전달하여 특정 시나리오의 스냅샷 구성을 생성할 수 있습니다. 예를 들어 클러스터의 all(기본값) 시나리오에 대한 스냅샷 구성을 보려면 다음 명령어를 입력합니다.

actl diagnose \
    --scenario=all  \
    --dry-run

다음은 출력의 예시입니다.

ExcludeWords:
- certificateAuthorityData
- password
IstioBugReport:
  Enabled: true
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system
NodeCommands:
- Commands:
  - uptime
  - df --all --inodes
  - ip addr
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1
  - docker info
  - docker ps -a
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  Nodes: []
NodeFiles:
- Files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service
  - /etc/docker/daemon.json
  Nodes: []
NomosBugReport:
  Enabled: true
NumOfParallelThreads: 10

명령줄 인터페이스에서 이 명령어 결과를 복사하여 새로 만든 구성 파일(예: myconfig.yaml)에 붙여넣을 수 있습니다. 다음 값을 수정할 수 있습니다.

  • ExcludeWords: 스냅샷에서 제외할 단어 목록입니다(대소문자를 구분하지 않음). 이러한 단어가 포함된 줄은 스냅샷 결과에서 삭제됩니다. 'password'는 지정해도 항상 제외됩니다.
  • IstioBugReport: istioctl bug-report 스냅샷을 사용 설정하는 플래그입니다.
  • KubectlCommands: 실행할 kubectl 명령어의 목록입니다. 명령어는 해당 네임스페이스에서 실행됩니다. kubectl logs 명령어의 경우 해당 네임스페이스의 모든 포드와 컨테이너가 자동으로 추가됩니다. 네임스페이스 지정에 정규 표현식이 지원됩니다. 네임스페이스를 지정하지 않으면 default 네임스페이스가 가정됩니다.
  • NodeCommands: 해당 노드에서 실행할 명령어 목록입니다. 결과가 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.
  • NodeFiles: 해당 노드에서 수집할 파일 목록입니다. 파일이 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.
  • NomosBugReport: nomos bugreport 스냅샷을 사용 설정하는 플래그입니다.
  • NumOfParallelThreads: 스냅샷을 만드는 데 사용된 동시 스레드 수입니다.

옵션 2: 커스텀 스냅샷 구성 파일 수동 정의

원하는 스냅샷 매개변수를 사용하여 YAML 파일을 만듭니다. 예를 들면 다음과 같습니다.

ExcludeWords:
- certificateAuthorityData
- password
NumOfParallelThreads: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system

커스텀 스냅샷 구성을 사용하여 스냅샷 만들기

--snapshot-config 플래그를 사용하여 커스텀 스냅샷 구성 파일을 전달합니다.

관리자 클러스터

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

사용자 클러스터

actl diagnose \
    --kubeconfig=USER_CLUSTER_KUBECONFIG \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

SNAPSHOT_CONFIG_FILE을 커스텀 스냅샷 구성 파일의 이름(예: myconfig.yaml)으로 바꿉니다.

스냅샷 콘텐츠 검토

tar 파일의 콘텐츠를 검토하려면 다음 명령어를 사용하여 추출합니다.

tar -zxf TAR_FILE_PATHTAR_FILENAME.tar.gz  --directory EXTRACTION_DIRECTORY_NAME

지원팀과 상호작용에 연결하기 전에 tar 파일의 콘텐츠를 검토합니다.

다음 단계