티스토리 뷰
[특집 시리즈] Azure Kubernetes Service 워크샵 - 9. 애플리케이션에 대한 모니터링 구성
zerobig-k8s 2021. 5. 31. 06:50Fruit Smoothies 마케팅 캠페인의 성공은 평가 웹 사이트의 지속적인 성능이다. 성능은 클러스터의 성능에 따라 달라지며 애플리케이션의 다양한 구성 요소를 모니터링하고, 로그를 보고, 애플리케이션이 중지되거나 일부 부분에 오류가 발생할 때마다 경고를 받을 수 있는지에 달려 있다. 사용 가능한 도구의 조합으로 애플리케이션의 경고 기능을 설정할 수 있다.
이번 실습에서는 다음을 수행한다.
- Log Analytics 작업 영역 만들기
- AKS 모니터링 추가 기능 사용
- AKS 이벤트 로그 검사 및 클러스터 상태 모니터링
- 라이브 로그 데이터를 사용하도록 Kubernetes RBAC 구성
- 라이브 컨테이너 로그와 AKS 이벤트 보기
Log Analytics 작업 영역 만들기
컨테이너용 Azure Monitor란 Azure Kubernetes Service를 위한 포괄적인 모니터링 솔루션이다. 이 솔루션은 컨트롤러, 노드, 컨테이너에서 메모리 및 프로세서 메트릭을 수집하여 클러스터의 성능에 관한 인사이트를 제공한다.
Azure Monitor의 Log Analytics를 사용하여 AKS 클러스터 및 애플리케이션의 모니터링 데이터, 이벤트, 메트릭을 저장한다. 먼저, 할당된 환경 리소스 그룹에서 Log Analytics 작업 영역을 미리 만든다.
1. 작업 영역에 고유한 이름이 필요하다. Cloud Shell에서 aksworkshop-workspace-12345와 유사한 이름을 생성하려면 아래 명령을 실행한다.
WORKSPACE=aksworkshop-workspace-$RANDOM
2. az resource create 명령을 실행하여 AKS(Azure Kubernetes Service) 클러스터와 동일한 리소스 그룹 및 지역에 작업 영역을 만든다(예: 한국 중부의 aksworkshop).
az resource create --resource-type Microsoft.OperationalInsights/workspaces \
--name $WORKSPACE \
--resource-group $RESOURCE_GROUP \
--location $REGION_NAME \
--properties '{}' -o table
kim@Azure:~$ az resource create --resource-type Microsoft.OperationalInsights/workspaces \
> --name $WORKSPACE \
> --resource-group $RESOURCE_GROUP \
> --location $REGION_NAME \
> --properties '{}' -o table
Location Name ResourceGroup
------------ -------------------------- ---------------
koreacentral aksworkshop-workspace-6533 aksworkshop
작업 영역이 준비되면 Azure Monitor 추가 기능을 통합하고 AKS 클러스터에서 컨테이너 모니터링을 사용하도록 설정할 수 있다.
AKS 모니터링 추가 기능 사용
1. 추가 기능을 활성화하려면 작업 영역의 리소스 ID를 제공해야 한다. 다음 명령을 실행하여 작업 영역 ID를 검색하고 WORKSPACE_ID라는 Bash 변수에 저장한다.
WORKSPACE_ID=$(az resource show --resource-type Microsoft.OperationalInsights/workspaces \
--resource-group $RESOURCE_GROUP \
--name $WORKSPACE \
--query "id" -o tsv)
2. 그런 다음, az aks enable-addons 명령을 실행하여 모니터링 추가 기능을 활성화한다.
az aks enable-addons \
--resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--addons monitoring \
--workspace-resource-id $WORKSPACE_ID
참고
새로 만든 클러스터에 모니터링 데이터 흐름을 만드는 데는 약간의 시간이 걸릴 수 있다. 데이터가 클러스터에 나타나기까지 최소 5~10분 정도 기다린다.
kim@Azure:~$ az aks enable-addons \
> --resource-group $RESOURCE_GROUP \
> --name $AKS_CLUSTER_NAME \
> --addons monitoring \
> --workspace-resource-id $WORKSPACE_ID
AAD role propagation done[############################################] 100.0000%{
"aadProfile": null,
<이하 생략>
Azure Monitor를 사용하여 Azure Portal에서 클러스터에 대한 사용률 보고서와 차트를 볼 수 있다. Azure Monitor는 구독 및 리소스 그룹 전반에 걸쳐 배포된 모든 컨테이너에 대한 전역적인 관점을 제공한다. 여기에서 모니터링되는 컨테이너와 모니터링되지 않는 컨테이너를 추적할 수 있다. 각 컨테이너의 통계를 개별적으로 검사할 수도 있다.
AKS 이벤트 로그 검사 및 클러스터 상태 모니터링
클러스터의 노드 및 Pod 상태에 대한 자세한 보기를 얻기 위해 수행해야 하는 단계를 살펴보겠다.
1. Azure Portal에 로그인한다.
2. Azure Portal의 왼쪽 창에서 Monitor를 선택한다.
3. Insights 섹션에서 Containers를 선택하고 Monitored clusters에서 엑세스 권한이 있는 모든 클러스터 목록을 확인 후 선택한다.
4. Cluster 탭으로 이동되어 다음 화면이 전시된다.
5. 뷰 상단에서 Status 탭을 선택하여 클러스터의 AKS 인프라 서비스가 어떻게 작동하고 있는지 확인한다. (해당 탭은 더 이상 존재하지 않는 것으로 보여진다.)
6. 뷰 상단에서 Nodes 탭을 선택하여 클러스터의 노드 상태와 Pod에 대해 자세하게 확인한다.
라이브 로그 데이터를 사용하도록 Kubernetes RBAC 구성
클러스터 상태에 대한 상위 수준의 개요 외에 특정 컨테이너의 라이브 로그 데이터도 확인할 수 있다.
에이전트에서 데이터를 수집할 수 있도록 활성화하고 권한을 설정하기 위해 먼저 Pod 로그 및 이벤트에 액세스할 수 있는 Role을 만든다. 그런 다음, RoleBinding을 사용하여 사용자에게 권한을 할당한다.
RBAC(역할 기반 액세스 제어)란?
Kubernetes에서는 RBAC(역할 기반 액세스 제어)를 사용하여 조직 내 개별 사용자의 역할에 따라 리소스에 대한 액세스를 규제한다. RBAC 권한 부여는 Kubernetes API에서 관련 경로 집합을 사용하여 정책을 동적으로 구성할 수 있도록 한다. RBAC API는 다음과 같은 네 개의 Kubernetes 개체를 정의한다.
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
Kubernetes Role이란?
RBAC Role 및 ClusterRole 개체를 사용하여 사용 권한 집합을 나타내는 규칙을 설정할 수 있다. Role과 ClusterRole의 주요 차이점은 Role은 특정 네임스페이스의 리소스와 함께 사용되고, ClusterRole은 클러스터에서 비 네임스페이스 리소스와 함께 사용된다는 것이다. 나중 실습에서 ClusterRole을 정의하는 방법에 대해 알아본다.
Kubernetes RoleBinding이란?
역할 바인딩을 사용하여 사용자 또는 사용자 집합에 역할에 정의된 사용 권한을 부여한다. 역할 바인딩에는 사용자, 그룹 또는 서비스 계정 목록과 부여되는 역할에 대한 참조가 포함된다. Role 및 ClusterRole과 마찬가지로 RoleBinding은 특정 네임스페이스 내에서 권한을 부여하고, ClusterRoleBinding은 클러스터에 대한 액세스 권한을 부여한다. ClusterRoleBinding을 사용하여 ClusterRole을 클러스터의 모든 네임스페이스에 바인딩한다.
이 실습에서는 특정 네임스페이스로 제한되지 않는 ClusterRoles와 ClusterRoleBindings를 설정한다. CusterRoles를 구성하여 개별 네임스페이스나 모든 네임스페이스 내에 지정된 네임스페이스된 리소스에 대한 사용 권한을 정의한다. CusterRoles는 클러스터 범위 리소스에 대한 사용 권한을 설명하는 데도 사용된다. 그런 다음 ClusterRoleBindings를 사용하여 전체 클러스터에서 사용 권한을 부여한다.
1. Cloud Shell에서 통합 편집기를 사용하여 logreader-rbac.yaml이라는 이름의 파일을 만든다.
code logreader-rbac.yaml
2. 다음 텍스트를 파일에 붙여넣는다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: containerHealth-log-reader
rules:
- apiGroups: ["", "metrics.k8s.io", "extensions", "apps"]
resources:
- "pods/log"
- "events"
- "nodes"
- "pods"
- "deployments"
- "replicasets"
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: containerHealth-read-logs-global
roleRef:
kind: ClusterRole
name: containerHealth-log-reader
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: User
name: clusterUser
apiGroup: rbac.authorization.k8s.io
3. 파일을 저장하려면 Ctrl+S를 선택합니다. 편집기를 닫으려면 Ctrl+Q를 선택한다.
4. kubectl apply 명령을 사용하여 구성을 적용한다.
kubectl apply \
-f logreader-rbac.yaml
kim@Azure:~$ kubectl apply \
> -f logreader-rbac.yaml
clusterrole.rbac.authorization.k8s.io/containerHealth-log-reader created
clusterrolebinding.rbac.authorization.k8s.io/containerHealth-read-logs-global created
라이브 컨테이너 로그와 AKS 이벤트 보기
1. Azure Portal에서 AKS 클러스터로 다시 전환한다.
2. 왼쪽 메뉴 창의 Insights로 이동한다.
3. Controllers 탭을 선택하고 컨테이너를 선택하여 라이브 로그 또는 이벤트 로그를 확인한다. 예를 들어 ratings-api 컨테이너를 선택한다. 새로운 뷰를 사용하면 컨테이너의 상태를 디버그할 수 있다.
요약
이번 실습에서는 Azure Monitor에 Log Analytics 작업 영역을 만들어서 AKS 클러스터에 대한 모니터링 및 로깅 데이터를 저장했다. AKS 모니터링 추가 기능을 사용하도록 설정하여 데이터 수집을 사용하도록 설정하고 AKS 클러스터 상태를 검사했다. 그런 다음, Kubernetes RBAC를 사용하여 라이브 로깅 데이터 수집을 사용하도록 설정했고 Azure Portal에서 라이브 로그 데이터를 보았다.
다음으로, Fruit Smoothies AKS 클러스터의 크기를 조정하는 방법을 살펴보겠다.
10편에서 계속