2020. 9. 27. 21:25ㆍEngineering/Container&Kubernetes
Content
- Metric Server란
- Metric Server Storage
- Metric Server 수동 설치 방법
- Metric Server 자동 설치 적용하기
OKD 플랫폼에서 노드 자원을 모니터링 하기 위한 Metric Server 에 대해 이해하고, 설치하는 방법에 대해 알아봅니다.
1. Metric Server란
Kubernetes 구성요소로 kubelet이 있습니다.
이 kubelet은 클러스터를 구성하는 모든 노드의 자원 정보(metric)을 수집합니다.
OKD 플랫폼의 Metric Server는 Kubelet이 여러 노드들로부터 수집하는 metric 정보들을 하나의 OKD 웹 콘솔에서 통합하여 보여줍니다.
Metric Server가 수집하는 metric으로는 각 노드들의 CPU, 메모리, network 사용량 등이 있습니다.
OKD Metric Server는 기본적으로 Hawkular Metrics 라는 엔진을 사용합니다.
이 Hawkular Metircs 엔진은 수집한 metric 데이터를 Cassandra DB에 저장하는 녀석입니다.
OKD 에서 제공하는 부가적인 기능들 중
Metric Server가 설치 되어야만 사용 가능한 기능들이 있습니다.
대표적으로 아래 2가지 입니다.
- Horizontal Pod Autoscaler (HPA)
: 노드 자원 사용량에 따라 POD 수를 scale in/out 하므로 metric server가 필요합니다. - Prometheus & Grafana
: metric server를 통해 수집된 자원량을 시각화 하고, alert를 자동 발송 등의 기능을 제공하는 컨테이너 모니터링 도구 입니다. Metric server를 기반으로 동작하기 때문에 이 기능 사용을 위해서는metric server 설치가 필수적입니다.
기본적으로 제공되는 OKD 자동설치 Ansible 스크립트에는 Metric Server 설치 옵션이 False로 설정되어 있으므로,
아래 2가지 기능 사용을 위해서는 Metric Server를 수동으로 설치하시거나
OKD 자동 설치 스크립트의 metric server 설치 옵션값을 바꿔 주셔야 합니다.
(수동설치 및 자동설치 방법은 3, 4 장에서 소개드리겠습니다.)
2. Metric Server Storage
Metric Server가 수집하는 데이터들은 어디에 저장될까요?
2가지 옵션이 있습니다.
- POD Volume
- Persistent Storage
입니다.
2-1. POD Volume
POD Volume은 POD가 사용하는 임시 저장 공간입니다.
POD의 생애주기를 따르기 때문에, POD가 삭제되면 POD Volume도 함께 삭제 됩니다.
따라서 Metric Server의 스토리지를 POD Volume으로 설정하는 경우,
Metric Server POD가 삭제되면 metric 데이터들도 함께 삭제됩니다.
*POD Volume을 Metric Server Storage로 사용하는 경우, Cassandra POD가 실행되고 있는 노드의 /var/lib/origin/openshift.local.volumes/pods에 데이터가 저장됩니다.
2-2. Persistent Storage
Persistent volume (PV)에 metric 데이터를 저장하도록 설정할 수 있습니다.
PV는 POD가 삭제되어도 데이터가 삭제되지 않는 저장소 입니다.
따라서 metric 데이터가 날아가지 않도록 유지해야하는 경우,
Persistent Storage(Volume)을 사용하는 것이 권장됩니다.
3. Metric Server 수동 설치 방법
앞서 말씀드렸지만 OKD 기본 설치 스크립트를 사용하신 경우, metric server가 설치되지 않습니다.
이 상황에서 HPA를 사용하시는 경우,
아래와 같이 'Failed Get Resource Metric' 이라는 에러가 발생합니다.
그럼 이제 Metric Server가 설치되어 있지 않은 OKD 클러스터에
Metric Server를 수동으로 설치하는 법을 알려드리겠습니다.
Metric Server 수동설치 또한 Ansible 스크립트로 제공되고 있습니다.
덕분에 아주 손쉽게 ansible 명령 하나로 완료할 수 있습니다.
$ ansible-playbook -i [inventory file] /usr/share/ansible/openshift-ansible/playbooks/metrics-server/config.yaml -e openshift_metrics_server_install=true
명령을 실행하면, 설치 과정에 대한 로그를 출력해주며,
마지막으로 'INSTALLER STATUS'를 보여줍니다.
위 사진 처럼 INSTALLER STATUS가 모두 Complete이면 정상 설치 완료 된 것입니다!
설치가 잘 되었으면, openshift-metrics-server라는 네임스페이스가 새로 생성된 것을 보실 수 있습니다.
그리고 openshift-metrics-server 네임스페이스에 metrics-server라는 POD가 잘 running하고 있다면 설치하신 metrics-server가 정상 동작하고 있다는 뜻입니다!
$ oc get ns
$ oc get pod --namespace=openshift-metrics-server
그럼, 이 metric server가 자원을 잘 수집 하고 있는지도 확인해 볼까요?
아래 명령 수행시, 각 노드 자원 정보가 잘 표기되고 있으면 metric server가 잘 동작하고 있는 것입니다.
$ oc admin top node
4. Metric Server 자동 설치 적용하기
자 그럼, OKD 설치 스크립트에 Metric Server가 자동으로 설치되도록 수정하여 봅시다.
Inventory 파일에 아래 한 줄을 추가 합니다.
[OSEv3:vars]
openshift_metrics_install_metrics=true
그리고, Metric server 스토리지 옵션을 설정 해야합니다.
특별한 설정을 하지 않는 경우 POD Volume의 emptyDir 타입으로 Metric server 볼륨이 설정 됩니다.
Persistent Volume을 Metric server 볼륨으로 사용하고 싶은 경우,
다양한 볼륨 종류에 따라 옵션값들을 설정 해주셔야 합니다.
저는 NFS 볼륨이 특정 노드에 마운트되어 있는 NFS 볼륨을 Metric Server 볼륨으로 사용하는 경우만 설명드리겠습니다.
그 외 Persistent Volume을 설정하는 방법은 공식문서를 참고하시기 바랍니다.
예를 들어, 제가 nfs.example.com 호스트 네임을 갖는 노드에
'/exports/metrics' 경로로 NFS 볼륨을 마운트한 상황을 가정합시다.
그리고 이 NFS 볼륨을 Metric Server 볼륨으로 사용하려면 아래와 같은 옵션들을 설정하면 됩니다.
[OSEv3:vars]
# nfs_directory must conform to DNS-1123 subdomain must consist of lower case
# alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character
openshift_metrics_storage_kind=nfs
openshift_metrics_storage_access_modes=['ReadWriteOnce']
openshift_metrics_storage_host=nfs.example.com
openshift_metrics_storage_nfs_directory=/exports
openshift_metrics_storage_volume_name=metrics
openshift_metrics_storage_volume_size=10Gi
'Engineering > Container&Kubernetes' 카테고리의 다른 글
[Kubernetes] Nginx Ingress Controller 사용하기 (1) | 2020.06.12 |
---|---|
[Kubernetes] 쿠버네티스 서비스(Service)와 인그레스(Ingress) 비교 (2) | 2020.03.10 |
[Docker] 도커 컨테이너로 장고(Django) 패키징 하기 (1) | 2020.01.28 |
[Kubernetes] Volumes (0) | 2020.01.27 |
[Kubernetes-Container Registry] 쿠버네티스 클러스터에 사설 컨테이너 레지스트리 구축하기 (0) | 2020.01.21 |