ICAM 에서 Kubernetes 클러스터 모니터링하기

본 문서의 설치 스텝은 ICAM 설치 공식 기술 문서와 다름테크에서 작성하신 설치 문서를 기반으로 함을 사전에 밝힙니다.

여러분은 Kubernetes 클러스터를 어떻게 모니터링 하시나요?
특히나 한 대의 클러스터가 아닌, 여러 대인 경우에는 통합 모니터링을 어떻게 하시나요?

IBM Cloud App Mgmt (이하 ICAM) 에서는 여러 타입의 Kubernetes 클러스터를 통합적으로 모니터링할 수 있습니다. – OpenShift, IBM Cloud Private, Vanilla Kubernetes (오픈소스) 지원

Kubernetes 모니터링을 위해서는 일종의 Agent 를 각 클러스터에 설치해야 합니다. 각 클러스터에서 모니터링 데이터를 수집하는 에이전트로, “Data Collector (줄여서 DC)” 라고 명칭합니다.

Kubernetes 모니터링을 위해 DC (Data Collector) 설치하기

본 튜토리얼은 ICAM (모니터링 서버)은 이미 설치되어 있다는 가정 하에, 모니터링 대상 클러스터를 연결하기 위해 대상 클러스터에 DC를 설치하는 내용입니다.
상세한 내용은 다음 공식 기술 문서를 참고하시기 바랍니다.

[그 외 참고 링크]

설치 이미지 및 설정 파일 다운로드

  1. Data Collector 설치 이미지 다운로드 (part number CC47IEN)
    설치 파일을 다운로드하여 준비합니다. (파일명: appMgtDataCollectors_2019.3.0.1.tar.gz)
  2. Data Collector 설정 파일 다운로드
    1. ICAM 관리 콘솔에 로그인하여 Get Started 클릭 후 Administration > Integration 으로 이동
    2. New Integration 버튼 클릭
    3. ICAM Data Collector 클릭 후 Configure 클릭

      Data Collector 로 연결할 대상 이름을 입력 후, 설정 파일 다운로드 (ibm-cloud-apm-dc-configpack.tar)
  3. 다운로드 받은 설치 이미지와 설정 파일을 모니터링 대상 Kubernetes 클러스터로 복사합니다.
    scp <my_path_to_download>/app_mgmt_k8sdc.tar.gz root@my.env.com:/<my_path_to_destination>
    scp <my_path_to_download>/ibm-cloud-apm-dc-configpack.tar root@my.env.com:/<my_path_to_destination>

Kubernetes 클러스터에 Data Collector 설치

  1. 모니터링 대상 Kubernetes 클러스터에 접속하여 클러스터 관리자로 로그인합니다.
  2. Data Collector 를 설치할 Namespace 를 생성합니다. 저는 icam-vanilla 라는 Namespace를 생성했습니다.
    kubectl create namespace icam-vanilla
  3. Helm 을 초기화 합니다.
    helm init --tls
  4. 클러스터에서 사용하는 Docker registry 에 로그인합니다.
    docker login -u my_username -p my_password my_clustername:my_clusterport

    제 환경에서는 다음과 같이 로그인했습니다.

    docker login master.169.56.172.82.nip.io:30500
  5. Kubernetes Data Collector 패키지와 설정 파일의 압축을 풀어줍니다.
    1. 설치 이미지의 패키지 압축 해제
      tar -xvf appMgtDataCollectors_2019.3.0.1.tar.gz
      cd appMgtDataCollectors_2019.3.0.1 
      tar -xvf app_mgmt_k8sdc.tar.gz
      cd app_mgmt_k8sdc
    2. 설정 파일 압축 해제
      tar -xvf ibm-cloud-apm-dc-configpack.tar
  6. 설치 파일의 Docker 이미지를 로드합니다.
    docker load -i appMgtDataCollectors_2019.3.0/app_mgmt_k8sdc/app_mgmt_k8sdc_docker.tar.gz
  7. 이미지 태깅 후 레지스트리에 저장 (Push) 합니다. – 각 Worker Node 에서 컨테이너 실행시 이미지를 가져올 수 있도록 하기 위함임
    docker tag icam-k8-monitor:APM_201909192049 <image-registry-url>:<image-registry-port>/<namespace>/k8-monitor:APM_201909192049
    docker push <image-registry-url>:<image-registry-port>/<namespace>/k8-monitor:APM_201909192049
    제 환경에서는 아래 코드처럼 명령어를 실행했습니다.
    
    docker tag icam-k8-monitor:APM_201909192049 master.169.56.172.82.nip.io:30500/icam-vanilla/k8-monitor:APM_201909192049
    docker push master.169.56.172.82.nip.io:30500/icam-vanilla/k8-monitor:APM_201909192049
  8. 필요한 설정값 및 Secret을 생성합니다. 여기서 말하는 설정값에는 ICAM 서버와의 통신을 위해 필요한 데이터 등이 포함되어 있습니다.
    kubectl -n icam-vanilla create -f ./ibm-cloud-apm-dc-configpack/dc-secret.yaml 
    kubectl -n icam-vanilla create secret generic ibm-agent-https-secret --from-file=./ibm-cloud-apm-dc-configpack/keyfiles/cert.pem --from-file=./ibm-cloud-apm-dc-configpack/keyfiles/ca.pem --from-file=./ibm-cloud-apm-dc-configpack/keyfiles/key.pem

     

  9. Helm Chart 를 설치합니다.
    helm install ./appMgtDataCollectors_2019.3.0/app_mgmt_k8sdc/app_mgmt_k8sdc_helm.tar.gz --name 'icam-cloud-resources' --namespace 'icam-vanilla' --set image.repository='master.169.56.172.82.nip.io:30500' --set clusterName='ksa-k8s' --set imageNamePrefix='icam-vanilla/' --set imageTag='APM_201909192049' --set ibmAgentConfigSecret='dc-secret' --set ibmAgentHTTPSSecret='ibm-agent-https-secret' --tls

    설치 후 상태 확인

    helm status icam-cloud-resources --tls

  10. 모든 PodRunning 인지 확인

    watch kubectl get pods -n <namespace>

    watch kubectl get pods -n icam-vanilla
  11. ICAM 대시보드에서 Kubernetes 리소스가 생겼음을 확인
    메뉴 > Resources > All resource types

Kubernetes 클러스터 모니터링 대시보드

이제 Kubernetes 클러스터를 모니터링할 수 있게 되었습니다. 모니터링시 어떤 정보들을 볼 수 있는지 빠르게 살펴볼까요?

Kubernetes Cluster 클릭 시 제가 모니터링하고자 했던 클러스터 이름이 보입니다.

클러스터 전체 현황이 나옵니다.

  • Events timeline : 이벤트가 발생한 시점이 표시되며 특정 시점의 모니터링 데이터를 확인할 수 있음
  • Deployment topology : 현재 모니터링하고 있는 리소스의 배포 토폴로지 확인. 본 리소스는 클러스터이므로 클러스터를 구성하고 있는 Node 가 표시됨
  • CPU / Top Nodes : 클러스터의 전체 CPU 현황 및 CPU 점유율이 높은 순으로 Node 표시
  • Memory / Top Nodes : 클러스터의 전체 Memory 현황 및 Memory 점유율이 높은 순으로 Node 표시
  • Relates Resources : 본 리소스와 관련된 연계 리소스들을 한 눈에 표시하여, 문제 발생시 원인을 쉽게 파악할 수 있음. 예를 들어, Node1 클릭시 아래 화면과 같이 Node 의 모니터링 현황을 한 눈에 확인할 수 있음. 이렇게 연속적, 단계적으로 Hop 별 모니터링을 할 수 있으므로 Troubleshooting 시 빠르고 정확하게 문제의 원인을 진단 가능
  • File System: 파일 시스템 현황
  • Availability : 전체 DeploymentStatefulSet 의 현황

글을 마치며..

오늘은 이렇게 Kubernetes 클러스터를 모니터링하는 방법을 살펴보았습니다.

ICAM 은 이렇게 다이나믹하게 변화하는 클라우드 리소스를 동적으로 모니터링할 수 있도록 하는 여러 메트릭 및 기능을 제공합니다. 특히나, Kubernetes 의 경우 Stateless 한 특성을 기반으로 하기 때문에 매우 동적으로 리소스가 생기기도, 사라지기도 합니다. 이렇게 복잡한 환경에서 문제가 발생했을 때는 해당 문제의 원인이 내가 모니터링하고 있는 그 리소스에 있지 않고 관련된 다른 곳에 위치하고 있을 수도 있겠지요. 예를 들면, Pod에서 에러가 발생하였으나 그 원인은 Pod가 실행되고 있는 Node 하단의 가상서버에 문제가 있는 경우일 수도 있고요.

이런 경우 ICAM 에서 제공하는 Event timeline 이나 Related ResourceHop 별로 추적하는 기능이 매우 유용하게 사용될 수 있겠습니다.

자세한 데모는 아래 링크에서 확인하실 수 있습니다.
IBM Cloud App Management – Manage Kubernetes environments with speed and precision

오늘은 여기까지 Kubernetes 모니터링 포스팅을 마치고 다음번에는 모니터링/이벤트 관리 관련 포스팅으로 찾아뵙겠습니다.