1. Goldpinger란?

https://github.com/bloomberg/goldpinger

골드핑거 : 쿠버네티스 클러스터 시각화

인간은 시각적 동물이다. 그래프와 차트를 보면 큰 그림을 쉽게 이해할 수 있다. 쿠버네티스 클러스터의 범위와 복잡성을 감안하면 가능한 모든 시각적 도움을 얻는 것이 좋다. 블룸버그 기술 사업부가 오픈소스로 공개한 골드핑거(Goldpinger)는 쿠버네티스 클러스터 내에서 실행되면서 노드 간 관계를 인터랙티브한 지도로 표시하는 간단한 툴이다. 정상적인 노드는 녹색, 비정상적인 노드는 빨간색으로 표시된다. 노드를 클릭하면 세부 내용을 볼 수 있다. 스웨거(Swagger)로 API를 맞춤 설정해서 부가적인 보고, 지표를 비롯한 다양한 요소를 통합할 수 있다.

원문보기: https://www.itworld.co.kr/news/229459#csidx52b740d211bc4b2b40af01e5c238e80

 


2. 설치

2개의 YAML만 배포하면 끝난다.

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: goldpinger-serviceaccount
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: goldpinger
  namespace: default
  labels:
    app: goldpinger
spec:
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: goldpinger
  template:
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: '8080'
      labels:
        app: goldpinger
    spec:
      serviceAccount: goldpinger-serviceaccount
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
        fsGroup: 2000
      containers:
        - name: goldpinger
          env:
            - name: HOST
              value: "0.0.0.0"
            - name: PORT
              value: "8080"
            # injecting real hostname will make for easier to understand graphs/metrics
            - name: HOSTNAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            # podIP is used to select a randomized subset of nodes to ping.
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          image: "docker.io/bloomberg/goldpinger:v3.0.0"
          imagePullPolicy: Always
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
          resources:
            limits:
              memory: 80Mi
            requests:
              cpu: 1m
              memory: 40Mi
          ports:
            - containerPort: 8080
              name: http
          readinessProbe:
            httpGet:
              path: /healthz
              port: 8080
            initialDelaySeconds: 20
            periodSeconds: 5
          livenessProbe:
            httpGet:
              path: /healthz
              port: 8080
            initialDelaySeconds: 20
            periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: goldpinger
  namespace: default
  labels:
    app: goldpinger
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30080
      name: http
  selector:
    app: goldpinger
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
  - kind: ServiceAccount
    name: goldpinger-serviceaccount
    namespace: default

3. 접속

위 yaml 는 각 노드에 데몬셋을 실행한다. 그리고 NodePort로 30080 포트를 만든다. 따라서 아무 노드 IP에나 :30080 을 붙여서 접속하면 바로 화면이 뜬다.

테스트는 27개 노드로 진행했다.

 

 

아래 그림은 Heapmap 메뉴에 들어갔을 떄 보이는 내용이다.