Getting Started with NexClipper Cloud

Overview

NexClipper κ΅¬μ„±μš”μ†ŒλŠ” 크게 3κ°€μ§€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. NexClipperλŠ” Kubernetes cluster λ‚΄μ—μ„œ 데λͺ¬μ…‹(DaemonSet)κ³Ό νŒŒλ“œ(Pod), λ””ν”Œλ‘œμ΄λ¨ΌνŠΈ(Deployment)ν˜•νƒœλ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€.
λͺ¨λ“  λ¦¬μ†ŒμŠ€λŠ” 기본적으둜 nex-system, nexclipper λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ κ΅¬λ™λ˜λ©°, ν”„λ‘œλ©”ν…Œμš°μŠ€ κ΄€λ ¨λœ μ—μ½”μ‹œμŠ€ν…œλ“€μ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

κ΅¬μ„±μš”μ†Œλ¦¬μ†ŒμŠ€ νƒ€μž…μ—­ν• 
Klevr AgentDaemonSetNexClipper Manager와 톡신
ProvbeePodProvisioning 및 Task 처리
PrometheusDeploymentλ©”νŠΈλ¦­ 기반 λͺ¨λ‹ˆν„°λ§ 도ꡬ
node-exporterDaemonSetλ¨Έμ‹  λ©”νŠΈλ¦­ μˆ˜μ§‘ Exporter
GrafanaDeploymentμ‹œκ°ν™” λŒ€μ‹œλ³΄λ“œ 도ꡬ
Kube-state-metricsDeploymentν΄λŸ¬μŠ€ν„° λ©”νŠΈλ¦­ μˆ˜μ§‘ 도ꡬ
AlertmanagerDeploymentμ•ŒλžŒ 관리 도ꡬ
pushgatewayDeploymentμ†Œκ·œλͺ¨ 배치 λ©”νŠΈλ¦­ μˆ˜μ§‘ 도ꡬ
PromlensDeploymentPromQL 기반 쿼리 λΉŒλ”
PromscaleDeploymentPrometheus λ©”νŠΈλ¦­ 뢄석 도ꡬ
TimescaleDBStatefulSetμ‹œκ³„μ—΄ 기반 SQL DB
ExporterHub(쀀비쀑)DeploymentExporter νλ ˆμ΄μ…˜ νŽ˜μ΄μ§€
MetricOperator(쀀비쀑)Deploymentλ©”νŠΈλ¦­ μˆ˜μ§‘, 처리, 전솑
note

NexClipper AgentλŠ” Kubernetes κΈ°μ€€ 1.15.12 μ΄μƒμ—μ„œ ν…ŒμŠ€νŠΈ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄ν•˜ λ²„μ „μ—μ„œλŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.


Minimum Requirements

NexClipperλŠ” 기본적으둜 Linux ν™˜κ²½μ—μ„œ λ™μž‘ν•˜λ„λ‘ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  • Operating Systems : Linux(WSL포함), MacOS 10.14+, WSL
  • Software
    • bash or zsh
    • curl
    • ssh-keygen
  • Target Kubernetes Cluster : 1.15.12 이상
  • Firewall : Outbound (Destination : console.nexclipper.io, Port: 80,443,8080,8090)

Installation

μ„€μΉ˜ 방법은 2가지 μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

  1. Remote Kubernetes
    • μ›κ²©μœΌλ‘œ kube-apiserver둜 톡신이 κ°€λŠ₯ν•œ ν™˜κ²½ (kubeconfig ν™˜κ²½)
  2. Local Kubernetes
    • Docker Desktop, Minikube, K3s, MicroK8s λ“± λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜λŠ” 경우

bash λ˜λŠ” zsh을 μ‹€ν–‰ν•  수 μžˆλŠ” ν™˜κ²½μ—μ„œ ν˜„μž¬ μ—°κ²°λœ 클러슀트λ₯Ό ν™•μΈν•˜λŠ” λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€. docker-descktop으둜 kubernetes ν™˜κ²½μ„ κ΅¬μ„±ν–ˆλ‹€λ©΄ λ‹€μŒκ³Ό μœ μ‚¬ν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

$ kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
caution

κΈ°μ‘΄ μš΄μ˜μ€‘μΈ ν”„λ‘œλ©”ν…Œμš°μŠ€ μ˜€νΌλ ˆμ΄ν„°(Operator)와 쀑볡 μ„€μΉ˜λ  κ²½μš°μ— λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. NexClipperλŠ” Helm기반으둜 ν”„λ‘œλ©”ν…Œμš°μŠ€ κ΄€λ ¨ μ—μ½”μ‹œμŠ€ν…œλ“€μ„ 배포, κ΄€λ¦¬ν•©λ‹ˆλ‹€.


Kubernetes

https://nexclipper.github.io/ 둜 μ ‘μ†ν•˜μ—¬ Login 메뉴λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.

img

https://console.nexclipper.io/login 둜그인 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

img

info

ν˜„μž¬λŠ” ꡬ글 인증만 μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. GSuite 계정 포함 Gmail μ•„μ΄λ””λ‘œλ§Œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

Googleκ³„μ •μœΌλ‘œ 둜그인 ν•©λ‹ˆλ‹€.

img

졜초 μ‚¬μš©μžμ˜ 경우 μ•„λž˜μ™€ 같이 Welcome 화면을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

img

NexClipperλŠ” μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°μ™€ μœ μ‚¬ν•˜μ§€λ§Œ λ‹€λ₯Έ κ°œλ…μœΌλ‘œ λ³„λ„μ˜ NexClipper μ œν’ˆκ΅°μ΄ μ„€μΉ˜λ˜λŠ” ClusterλΌλŠ” κ°€μƒμ˜ 논리적 κ·Έλ£Ή 기반으둜 λ™μž‘ν•©λ‹ˆλ‹€. Account에 λ§΅ν•‘λœ API KEY λ°œκΈ‰μ„ μœ„ν•΄ λ‹€μŒ 단계λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

Zone Name을 μž…λ ₯ν•©λ‹ˆλ‹€. Zone Name은 λ¦¬μŠ€νŠΈμ— λ³΄μ—¬μ§€λŠ” κ°’μœΌλ‘œ μ‚¬μš©μžκ°€ Zone λ˜λŠ” Clusterλ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ μž…λ ₯κ°’μž…λ‹ˆλ‹€.

img

ν”„λ‘œλΉ„μ €λ‹ν•  λŒ€μƒ ν΄λŸ¬μŠ€ν„° λ˜λŠ” 인프라λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

info

ν˜„μž¬λŠ” μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°λ§Œ μ§€μ›ν•©λ‹ˆλ‹€. 이후 Baremetal, Instance λ˜λŠ” Laptop ν™˜κ²½ 및 Public Cloud ν™˜κ²½λ„ μ œκ³΅ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

img

μ„ νƒν•œ ν΄λŸ¬μŠ€ν„°μ— μ„€μΉ˜ν•  Bootstrap μŠ€ν¬λ¦½νŠΈκ°€ μƒμ„±λ©λ‹ˆλ‹€.

img

μƒμ„±λœ 슀크립트λ₯Ό zsh, bash ꡬ동이 κ°€λŠ₯ν•œ Bastion λ˜λŠ” Localμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

curl -sL gg.gg/provbee | TAGKLEVR=0.2.0-SNAPSHOT K3S_SET=N K_API_KEY="977b9d295d0f4273be3575cdaeae22b3" K_PLATFORM="kubernetes" K_MANAGER_URL="http://dev.nexclipper.io:8090" K_ZONE_ID="62" bash

Continueλ₯Ό 눌러 λ‹€μŒ λ‹¨κ³„λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

Klevr와 Provbee μ„€μΉ˜κ°€ μ™„λ£Œλ˜κΈ° μ „μ—λŠ” NexClipper Cloud μ„œλ²„μ™€ 톡신이 λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ•„λž˜μ™€ 같은 화면을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ μ„€μΉ˜ 슀크립트λ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œλŠ” λ‹€μŒ ν™”λ©΄μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

img

μ—μ΄μ „νŠΈ μ„€μΉ˜ μƒνƒœλŠ” kubectl을 ν†΅ν•΄μ„œλ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

nex-system λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—λŠ” klevr μ—μ΄μ „νŠΈ 데λͺ¬μ…‹μ™€ provbee νŒŒλ“œκ°€ μƒμ„±λ©λ‹ˆλ‹€.

> kubectl get pod -n nex-system
NAME READY STATUS RESTARTS AGE
klevr-agent-9r5z9 1/1 Running 0 59m
klevr-agent-lcp2j 1/1 Running 0 59m
provbee 1/1 Running 0 59m

μ„€μΉ˜κ°€ μ™„λ£Œλ˜λ©΄ μ•„λž˜μ™€ 같이 Agent μƒνƒœκ°€ Running μ€‘μœΌλ‘œ λ³€κ²½λ©λ‹ˆλ‹€. 그리고, ν”„λ‘œλ©”ν…Œμš°μŠ€ μŠ€νƒμ„ μ„€μΉ˜ν•  수 μžˆλ„λ‘ κΈ°λŠ₯이 ν™œμ„±ν™” λ©λ‹ˆλ‹€.

img

기본적으둜 μ œκ³΅λ˜λŠ” μ„€μΉ˜ μ˜΅μ…˜μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

img

  • Namespace : μŠ€νƒμ΄ μ„€μΉ˜λ  μΏ λ²„λ„€ν‹°μŠ€ λ„€μž„μŠ€νŽ˜μ΄μŠ€(κΈ°λ³Έκ°’: nexclipper)
  • Volume Size(GB): TimescaleDB Volume Size(κΈ°λ³Έκ°’: 10Gi)
  • Replicas: TimescaleDB Cluster Replicas (κΈ°λ³Έκ°’: 1)
  • Storage Class Name: λ³„λ„μ˜ PVμ‚¬μš©μ‹œ μ‚¬μš©ν•  μŠ€ν† λ¦¬μ§€ 클래슀 (κΈ°λ³Έκ°’: LocalVolume)
  • Size of Wal(GB): Prometheus WAL Volume Size(κΈ°λ³Έκ°’: 2Gi)
  • Grafana Admin Password : κ·ΈλΌνŒŒλ‚˜ 초기 νŒ¨μŠ€μ›Œλ“œ(κΈ°λ³Έκ°’: admin)

기본적으둜 nexclipper λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—λŠ” λ‹€μŒ ν”„λ‘œλ©”ν…Œμš°μŠ€ μ—μ½”μ‹œμŠ€ν…œλ“€μ΄ μ„€μΉ˜λ©λ‹ˆλ‹€.

  • prometheus
  • node-exporter
  • kube-state-metrics
  • alertmanager
  • grafana
  • promscale
  • promlens
  • timescaledb
> kubectl get deploy,statefulset -n nexclipper
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nc-grafana 1/1 1 1 106s
deployment.apps/nc-kube-state-metrics 1/1 1 1 106s
deployment.apps/nc-prometheus-alertmanager 1/1 1 1 106s
deployment.apps/nc-prometheus-pushgateway 1/1 1 1 106s
deployment.apps/nc-prometheus-server 1/1 1 1 106s
deployment.apps/nc-promlens 1/1 1 1 106s
deployment.apps/nc-promscale 1/1 1 1 106s
NAME READY AGE
statefulset.apps/nc-timescaledb 1/1 106s

λ‹€μ‹œ μ½˜μ†”λ‘œ λŒμ•„μ™€ ν”„λ‘œλΉ„μ €λ‹λœ Cluster λͺ©λ‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

img

ν•΄λ‹Ή ν΄λŸ¬μŠ€ν„°μ˜ 상세 내역을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • Platform
    • ν˜„μž¬ ν”Œλž«νΌμ˜ μ’…λ₯˜μ™€ μ—μ΄μ „νŠΈ, ν”„λ‘œλ©”ν…Œμš°μŠ€ μƒνƒœλ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.
  • Install Config
    • 초기 μ„€μΉ˜ 슀크립트λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • Tasks
    • NexClipperμ—μ„œ μˆ˜ν–‰λ˜λŠ” λͺ¨λ“  Jobκ³Ό Task μƒνƒœλ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.
  • Cluster Detail
    • Cluster μƒνƒœ μ •λ³΄λ‘œ ν˜„μž¬λŠ” Agentκ°€ 배포된 Node λŒ€μˆ˜μ™€ 버전정보 μ„€μΉ˜λœ μΏ λ²„λ„€ν‹°μŠ€ μ–΄μΉ΄μš΄νŠΈ 정보λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.
  • Prometheus
    • ν˜„μž¬ μ„€μΉ˜λœ μŠ€νƒκ³Ό 버전 정보λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.

ν™œμ„±ν™”λœ 쒌츑의 ν”„λ‘œλ©”ν…Œμš°μŠ€ μ•„μ΄μ½˜μ„ ν΄λ¦­ν•˜λ©΄ ν”„λ‘œλ©”ν…Œμš°μŠ€ λŒ€μ‹œλ³΄λ“œλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

img

기본적으둜 λ‹€μŒκ³Ό 같이 ν΄λŸ¬μŠ€ν„°μ˜ 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • Age(Cluster Age): ν΄λŸ¬μŠ€ν„° 생성후 경과된 μ‹œκ°„
  • Cluster Status: ν΄λŸ¬μŠ€ν„° μƒνƒœ
  • Nodes: λ…Έλ“œ 개수
  • Unavaliable Node: 비정상 λ…Έλ“œ 개수
  • Namespaces: λ„€μž„μŠ€νŽ˜μ΄μŠ€ 개수
  • Cluster Pod Usage: ν΄λŸ¬μŠ€ν„° νŒŒλ“œ μ‚¬μš©λŸ‰
  • Cluster CPU Usage: ν΄λŸ¬μŠ€ν„° CPU μ‚¬μš©λŸ‰
  • Cluster Memory Usage: ν΄λŸ¬μŠ€ν„° λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰
  • Cluster Disk Usage: ν΄λŸ¬μŠ€ν„° λ””μŠ€ν¬ μ‚¬μš©λŸ‰
  • Pods: ν™œμ„±ν™”λœ νŒŒλ“œ 개수
  • Restarted Pods(30m): 30λΆ„κ°„ μž¬μ‹œμž‘λœ νŒŒλ“œ 개수
  • Failed Pods: ν˜„μž¬ Failed μƒνƒœμ˜ νŒŒλ“œ 개수
  • Pending Pods: ν˜„μž¬ Pending μƒνƒœμ˜ νŒŒλ“œ 개수
  • PVCs: PersistentVolumeClaim 개수
  • Prometheus Status: ν”„λ‘œλ©”ν…Œμš°μŠ€ ν˜„μž¬ μƒνƒœ
  • Alertmanager Status: Alertmanager ν˜„μž¬ μƒνƒœ
  • API Server Status: ν΄λŸ¬μŠ€ν„° API μ„œλ²„ μƒνƒœ
  • API server total requests code: ν΄λŸ¬μŠ€ν„° API responce μ½”λ“œλ³„ 5λΆ„ 평균

더 μƒμ„Έν•œ λ©”νŠΈλ¦­ 정보λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ κ·ΈλΌνŒŒλ‚˜ μ•„μ΄μ½˜μ„ ν΄λ¦­ν•˜κ²Œ 되면 NodePort둜 expose된 λŒ€μ‹œλ³΄λ“œλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

κΈ°λ³Έ 계정 μ •λ³΄λŠ” μž…λ ₯값이 μ—†μ—ˆλ‹€λ©΄ 아이디, νŒ¨μŠ€μ›Œλ“œ λ™μΌν•˜κ²Œ admin:admin으둜 μ„€μ •λ©λ‹ˆλ‹€.

img

ν”„λ‘œλ©”ν…Œμš°μŠ€ Configuration 메뉴λ₯Ό ν΄λ¦­ν•˜λ©΄ ν˜„μž¬ ν”„λ‘œλΉ„μ €λ‹λœ μƒνƒœμ˜ 섀정을 μˆ˜μ •ν•  수 μžˆλŠ” ν™”λ©΄μž…λ‹ˆλ‹€. 기본적인 yaml의 문법 μ²΄ν¬λŠ” 에디터 ν™”λ©΄μ—μ„œ κ°€λŠ₯ν•˜λ©°, promtool ν…ŒμŠ€νŠΈ κΈ°λŠ₯을 화면에 μ μš©ν•˜μ—¬ 기본적인 ν”„λ‘œλ©”ν…Œμš°μŠ€ 섀정에 λ¬Έμ œμ—¬λΆ€λ₯Ό νŒŒμ•…ν•˜κ³  이상이 μ—†μœΌλ©΄ μ €μž₯ 및 적용이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

img