클러스터 이용 가이드

이 가이드에서는 주로 kubectl, helm 명령을 사용합니다. 이 명령을 이용하려면 클러스터를 제어하기 위해 Kubernetes Service 콘솔 화면에서 설정 파일을 다운로드 후 다음 방법 중 하나를 선택하여 사용해야 합니다.

  • $HOME/.kube/config에 설정 파일 추가
  • kubectl, helm 명령 사용 시 --kubeconfig="설정파일" 옵션 추가

kubectl 설치하기

kubectl는 CLI를 통해 클러스터를 제어할 수 있는 기능을 제공합니다.

운영체제별 kubectl 설치하기

kubeconfig 환경변수 설정하기

예시: macOS/Linux $KUBE_CONFIG 환경변수 지정하기

$ export KUBE_CONFIG="${HOME}/Downloads/kubeconfig-1865.yaml"
$ echo $KUBE_CONFIG
/Users/azamara/Downloads/kubeconfig-1865.yaml

$ kubectl --kubeconfig=$KUBE_CONFIG get nodes
NAME                 STATUS   ROLES   AGE   VERSION
nks-pool-1865-w2zy   Ready    node    4d    v1.12.3
nks-pool-1865-w2zz   Ready    node    4d    v1.12.3

예시: Windows Powershell $KUBE_CONFIG 환경변수 지정하기

> $KUBE_CONFIG=$HOME+"\Downloads\kubeconfig-1865.yaml"
> $KUBE_CONFIG
C:\Users\NAVER\Downloads\kubeconfig-1865.yaml
> kubectl --kubeconfig=$KUBE_CONFIG get nodes
NAME                 STATUS   ROLES   AGE    VERSION
nks-pool-1865-w2zy   Ready    node    4d5h   v1.12.3
nks-pool-1865-w2zz   Ready    node    4d5h   v1.12.3

예시: Windows Command Prompt $KUBE_CONFIG 환경변수 지정하기

> SET KUBE_CONFIG=%USERPROFILE%\Downloads\kubeconfig-1865.yaml
> kubectl --kubeconfig=%KUBE_CONFIG% get nodes
NAME                 STATUS   ROLES   AGE    VERSION
nks-pool-1865-w2zy   Ready    node    4d5h   v1.12.3
nks-pool-1865-w2zz   Ready    node    4d5h   v1.12.3

Kubernetes 대시보드 접속하기

Kubernetes 대시보드(Dashboard)는 CLI 대신 GUI를 통해 클러스터 확인 및 제어할 수 있는 기능을 제공합니다.

Kubernetes 대시보드 접속을 위한 토큰 얻기

토큰 정보 확인

$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system get secret | grep kubernetes-dashboard-token
kubernetes-dashboard-token-56h7n                 kubernetes.io/service-account-token   3      2d3h

Secret 목록에서 kubernetes-dashboard-token 이름을 확인하고 다음 명령어를 통해 해당 토큰 정보를 확인할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system describe secret kubernetes-dashboard-token-56h7n
Name:         kubernetes-dashboard-token-56h7n
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: 77036f26-55de-11e9-b757-f220cd3abfc8

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZ...

토큰값만 얻기

다음과 같이 토큰값만 확인할 수 있는 방법은 awk 명령어가 지원되는 경우에만 사용할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG -n kube-system describe secret \
$(kubectl --kubeconfig=$KUBE_CONFIG -n kube-system get secret | awk '/^kubernetes-dashboard-token/{print $1}') | awk '$1=="token:"{print $2}'
eyJhbGciOiJSUzI1NiIsImtpZ...

Kubernetes 대시보드 Proxy 구동하기

$ kubectl --kubeconfig=$KUBE_CONFIG proxy

위 명령을 실행 후 브라우저에서 다음 링크로 접속하면 대시보드 초기 화면을 확인할 수 있습니다.


이전 단계에서 얻은 토큰값(eyJhbGciOiJSUzI1NiIsImtpZ...)을 해당 초기화면에 입력하고, 로그인 버튼을 클릭합니다.

이제 대시보드 화면을 통해서 쉽게 클러스터 확인 및 제어를 할 수 있습니다.

외부도메인을 통한 Kubernetes 대시보드 접속하기

외부 도메인으로 Kubernetes 대시보드 접속을 원하는 경우 'system:anonymous' 권한을 추가해야 합니다.

접속 주소 확인하기

아래 명령을 이용해서 kubernetes-dashboard 주소를 확인할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG cluster-info
...
kubernetes-dashboard is running at https://CLUSTER_ID.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
...

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
  • 접속 주소 예시: https://CLUSTER_ID.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

기본적으로 외부 접속이 차단된 상태이기 때문에 다음 단계인 system:anonymous 권한 추가를 수행 후 위 주소로 접속하고, Kubernetes 대시보드 접속을 위한 토큰 얻기 단계에서 토큰을 확인 후 해당 토큰값(eyJhbGciOiJSUzI1NiIsImtpZ...)을 이용해서 로그인 후 Kubernetes 대시보드를 이용할 수 있습니다.

system:anonymous 권한 추가

이 권한을 추가하면 외부 주소를 통해 Kubernetes 대시보드에 접근할 수 있습니다.

$ cat <<EOF | kubectl --kubeconfig=$KUBE_CONFIG apply -f -
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kubernetes-dashboard-anonymous
rules:
- apiGroups: [""]
  resources: ["services/proxy"]
  resourceNames: ["https:kubernetes-dashboard:"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- nonResourceURLs: ["/ui", "/ui/*", "/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/*"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-anonymous
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubernetes-dashboard-anonymous
subjects:
- kind: User
  name: system:anonymous
EOF

system:anonymous 권한 삭제

이 권한을 삭제하면 외부 주소를 통해 Kubernetes 대시보드에 접근할 수 없습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG delete clusterrole kubernetes-dashboard-anonymous
$ kubectl --kubeconfig=$KUBE_CONFIG delete clusterrolebinding kubernetes-dashboard-anonymous

Weavescope 설치하기

Weavescope은 Kubernetes 클러스터의 워커노드, 파드, 컨테이너와 같은 리소스 정보를 한눈에 볼 수 있는 시각화 도구입니다.

Weavescope 설치하기

$ kubectl --kubeconfig=$KUBE_CONFIG apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl --kubeconfig=$KUBE_CONFIG version | base64 | tr -d '\n')"
namespace/weave created
serviceaccount/weave-scope created
clusterrole.rbac.authorization.k8s.io/weave-scope created
clusterrolebinding.rbac.authorization.k8s.io/weave-scope created
deployment.apps/weave-scope-app created
service/weave-scope-app created
daemonset.extensions/weave-scope-agent created

로컬머신에서 Weavescope 접속하기

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods -n weave -l "name=weave-scope-app" -o jsonpath="{.items[0].metadata.name}"); echo $POD_NAME; kubectl --kubeconfig=$KUBE_CONFIG -n weave port-forward $POD_NAME 14040:4040
weave-scope-app-79b7f7b9b6-rx99f
Forwarding from 127.0.0.1:14040 -> 4040
Forwarding from [::1]:14040 -> 4040

위 명령을 실행 후 브라우저에서 다음 링크로 접속하면 Weavescope 화면을 확인할 수 있습니다.

  • http://localhost:14040

Kubernetes의 서비스를 통한 로드밸런서 상품 연동

네이버 클라우드 플랫폼의 Kubernetes Service는 Kubernetes 서비스 생성 시 타입을 LoadBalancer로 지정한 경우, 로드밸런서 인스턴스를 자동으로 생성합니다. 로드밸런서의 설정은 서비스 매니페스트(Manifest)의 어노테이션(Annotation)을 통해 지원합니다.

다음의 로드밸런서 설정을 위한 어노테이션들을 제공합니다.

설정 값 설명 비고
service.beta.kubernetes.io/ncloud-load-balancer-backend-protocol 로드밸런서 프로토콜.
다음의 값 중 하나 선택 : tcp, http, https, ssl
기본값 tcp
service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol 프록시 프로토콜 활성화 유무.
다음의 값 중 하나 선택 : true/false
로드밸런서 프로토콜의 값이 ssl 혹은 tcp로 선택되어 있을 때 유효함.
service.beta.kubernetes.io/ncloud-load-balancer-internal 사설 네트워크 타입의 로드밸런서 생성 설정.
다음의 값 중 하나 선택 : true/false
기본값 false
service.beta.kubernetes.io/ncloud-load-balancer-ssl-cert 로드밸런서 프로토콜이 https 혹은 ssl일 때 listener 구성을 위한 SSL Certificate 이름 Certificate Manager 상품에 등록되어 있는 인증서 이름을 입력
service.beta.kubernetes.io/ncloud-load-balancer-ssl-ports 로드밸런서 인스턴스가 https 혹은 ssl 프로토콜일 때, 추가적으로 인스턴스에 할당될 포트 입력.
','로 구분하여 입력
입력 예: "443,6443"
service.beta.kubernetes.io/ncloud-load-balancer-l7-healthcheck-path 로드밸런서 프로토콜이 http 혹은 https일 때, L7 Healthcheck를 위한 Path 기본값 "/"
service.beta.kubernetes.io/ncloud-load-balancer-description 생성될 로드밸런서 인스턴스에 대한 메모 입력
service.beta.kubernetes.io/ncloud-load-balancer-algorithm-type 로드밸런싱 알고리즘.
다음의 값 중 하나 선택 : RR(ROUND ROBIN), LC(LEAST_CONNECTION), SIPHS(Source IP Hash)
기본값 RR
service.beta.kubernetes.io/ncloud-load-balancer-termination-protection 타입이 LoadBalancer로 지정된 Service제거 시, 로드밸런서 자동 제거 방지 옵션 기본값 false

Client의 IP를 확인하고자 하는 경우에는 service.beta.kubernetes.io/ncloud-load-balancer-proxy-protocol의 값을 true로 선언합니다. 자세한 내용은 [Ingress 튜토리얼]의 참고사항을 참조하세요.

로드밸런서 인스턴스 생성

Kubernetes의 서비스를 통해 로드밸런서 인스턴스를 생성하려면, 서비스 매니페스트의 타입을 다음과 같이 지정합니다.

"type": "LoadBalancer"

아래는 해당 타입이 적용된 yaml 설정 파일 예제입니다. 사설 네트워크 타입의 로드밸런서 인스턴스를 생성하기 위한 어노테이션이 추가되었음을 확인합니다.

kind: Service
apiVersion: v1
metadata:
  name: example-service
  annotations:
    service.beta.kubernetes.io/ncloud-load-balancer-internal: "true"
spec:
  ports:
  - port: 8765
    targetPort: 9376
  selector:
    app: example
  type: LoadBalancer

위의 내용을 nks-lb.yml로 만들고, kubectl apply -f nks-lb.yml를 통해 배포하면, 네이버 클라우드 플랫폼의 로드밸런서 인스턴스가 자동으로 생성됩니다. 생성에는 수 분이 소요될 수 있습니다.

생성된 로드밸런서 인스턴스의 사설 IP 주소를 확인하기 위해서는 아래의 명령어를 이용합니다. IP 주소는 EXTERNAL-IP 열에서 확인할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG get svc example-service
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE
example-service   LoadBalancer   172.16.101.104   10.39.10.118   8765:30365/TCP   2m11s

kubectl expose 명령을 이용한 로드밸런서 인스턴스 생성

앞서 언급한 방법 외에도, kubectl expose 명령어와 --type=LoadBalancer 플래그를 이용하여 로드밸런서 인스턴스를 생성할 수 있습니다.

로드밸런서 인스턴스 생성 예제를 위해 아래와 같은 명령어를 이용하여, my-nginx 이름을 가지는 Deployment를 배포합니다. 해당 배포를 통해 Nginx 파드를 구동할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG create deployment --image nginx my-nginx

아래의 명령어를 이용하여 로드밸런서 인스턴스를 생성할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG expose deployment my-nginx --port=80 --type=LoadBalancer

로드밸런서 인스턴스 삭제하기

로드밸런서 타입으로 생성된 kubernetes 서비스 리소스는 자동으로 생성된 네이버 클라우드 플랫폼의 로드밸런서(Load Balancer) 인스턴스와 연동됩니다. kerbernetes에서 해당 타입의 서비스를 삭제하는 경우, 자동으로 로드밸런서 인스턴스 또한 제거됩니다.

아래의 명령어들을 통해 생성된 서비스를 확인할 수 있습니다. 서비스들에 대한 타입은 TYPE 열에서 확인할 수 있습니다.

$ kubectl --kubeconfig=$KUBE_CONFIG get service
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
my-nginx     LoadBalancer   172.16.188.167   slb-904582.ncloudslb.com     80:32681/TCP   21s

로드밸런서 타입의 kubernetes 서비스 리소스를 삭제하기 위해 다음의 명령어를 이용합니다.

$ kubectl --kubeconfig=$KUBE_CONFIG delete service my-nginx
service "my-nginx" deleted

kubernetes 서비스 리소스가 삭제됨과 동시에 로드밸런서 인스턴스 또한 삭제됩니다. 해당 작업에는 수 분이 소요될 수 있습니다.

Helm 설치하기

Helm은 kubernetes Package Manager로 클라이언트인 Helm과 cluster 내에 설치되는 tiller 서버로 구성되어 있습니다. Helm을 사용하기 위해서는 kubectl 설치 및 kubeconfig 설정이 선행돼야 합니다.

Helm 설치는 OS Platform에 맞게 다음 페이지의 안내에 따라 진행합니다.

이 가이드는 Helm v2를 기준으로 작성되었습니다.

예시: macOS

$ brew install kubernetes-helm

Helm를 사용하기 위해서는 tiller 배포를 진행해야 하는데 배포 전에 tiller의 clusterrolebinding 권한을 부여해야 합니다.

Cluster role binding 추가

$ kubectl --kubeconfig=$KUBE_CONFIG create clusterrolebinding tiller-cluster-admin \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:default

clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-admin created

clusterrolebinding 권한을 추가 후 Helm 초기화로 tiller를 배포합니다.

Helm 초기화

$ helm --kubeconfig=$KUBE_CONFIG init
...

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

초기화 명령 실행 후 tiller-deploy Pod가 배포 완료되는 것을 확인할 수 있고 STATUS가 Running 상태이면 Helm을 사용할 수 있는 상태가 됩니다.

tiller-deploy pod 확인하기

$ kubectl --kubeconfig=$KUBE_CONFIG get pods -n kube-system -w
NAME                                            READY   STATUS    RESTARTS   AGE
...
tiller-deploy-845cffcd48-llds2                  1/1     Running   0          18h
...

Helm을 이용한 애플리케이션 설치하기

Helm을 이용하여 Jenkins 애플리케이션 설치 및 접속할 수 있는 방법을 설명합니다.

참고사항

애플리케이션 설치 시 클러스터에 기본으로 설치된 CSI에 의해 PersistentVolume이 생성되며 이에 대한 스토리지 요금이 발생할 수 있습니다.
CSI에 대한 자세한 내용은 [블록 스토리지 CSI 가이드]를 확인해주세요.

Jenkins 설치하기

$ helm --kubeconfig=$KUBE_CONFIG install --name=ci stable/jenkins
NAME:   ci
LAST DEPLOYED: Wed Feb 20 15:38:07 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME              AGE
ci-jenkins        0s
ci-jenkins-tests  0s

==> v1/PersistentVolumeClaim
ci-jenkins  0s

==> v1/Service
ci-jenkins-agent  0s
ci-jenkins        0s

==> v1/Deployment
ci-jenkins  0s

==> v1/Pod(related)

NAME                         READY  STATUS   RESTARTS  AGE
ci-jenkins-7fb57bf7bb-t8dd9  0/1    Pending  0         0s

==> v1/Secret

NAME        AGE
ci-jenkins  0s


NOTES:
1. Get your 'admin' user password by running:
  printf $(kubectl get secret --namespace default ci-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
2. Get the Jenkins URL to visit by running these commands in the same shell:
  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        You can watch the status of by running 'kubectl get svc --namespace default -w ci-jenkins'
  export SERVICE_IP=$(kubectl get svc --namespace default ci-jenkins --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}")
  echo http://$SERVICE_IP:8080/login

3. Login with the password from step 1 and the username: admin

For more information on running Jenkins on Kubernetes, visit:
https://cloud.google.com/solutions/jenkins-on-container-engine
  • 사용자명: admin
  • 비밀번호: secret을 통해 확인

Jenkins 설치가 완료되면 결과 화면에서 계정 정보를 확인할 수 있는 가이드를 제공하고, PV 정보를 확인할 수 있습니다.

PVC, PV 확인하기

$ kubectl --kubeconfig=$KUBE_CONFIG get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
ci-jenkins   Bound    pvc-1548887b-34da-11e9-89a3-f220cd2fe758   10Gi       RWO            nks-block-storage    23s

$ kubectl --kubeconfig=$KUBE_CONFIG get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS      REASON   AGE
pvc-1548887b-34da-11e9-89a3-f220cd2fe758   10Gi       RWO            Delete           Bound    default/ci-jenkins   nks-block-storage          23s

Secret을 통해 Jenkins 접속 계정의 비밀번호 확인하기

$ kubectl --kubeconfig=$KUBE_CONFIG get secret --namespace default ci-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode;echo
Oq307Rj2Yu

이제 로컬머신에서 kubectl 명령 중 port-forward를 이용하여 설치된 Jenkins에 접속할 수 있습니다.

로컬머신에서 Jenkins 접속하기

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods -l "app=ci-jenkins" -o jsonpath="{.items[0].metadata.name}"); echo $POD_NAME; kubectl --kubeconfig=$KUBE_CONFIG port-forward $POD_NAME 18080:8080
Forwarding from [::1]:18080 -> 8080
Forwarding from 127.0.0.1:18080 -> 8080

위 명령을 실행 후 브라우저에서 다음 링크로 접속하면 Jenkins 로그인 화면을 확인할 수 있습니다.

Jenkins 계정 정보를 입력 후 로그인하면 Jenkins 초기 화면에 접속할 수 있습니다.

Helm을 이용한 Prometheus/Grafana 설치 및 클러스터 모니터링하기

이 가이드에서는 모니터링 시스템인 Prometheus와 분석 플랫폼인 Grafana를 연동하여 클러스터를 모니터링하는 방법을 설명합니다. Prometheus와 Grafana에 대한 자세한 내용은 아래 공식홈페이지에서 확인 가능합니다.

참고사항

애플리케이션 설치 시 클러스터에 기본으로 설치된 CSI에 의해 PersistentVolume이 생성되며 이에 대한 스토리지 요금이 발생할 수 있습니다.
CSI에 대한 자세한 내용은 [블록 스토리지 CSI 가이드]를 확인해주세요.

Prometheus 설치

먼저 모니터링을 위한 별도의 Namespace를 생성합니다.

Namespace 생성

$ kubectl --kubeconfig=$KUBE_CONFIG create namespace pg

Helm 명령을 이용하여 Prometheus를 설치합니다.

Helm으로 Prometheus 설치

$ helm --kubeconfig=$KUBE_CONFIG install --name prometheus stable/prometheus --version 6.7.4 --namespace pg
NAME:   prometheus
LAST DEPLOYED: Thu Feb 28 11:24:30 2019
NAMESPACE: pg
STATUS: DEPLOYED

RESOURCES:
==> v1/Pod(related)
NAME                                            READY  STATUS             RESTARTS  AGE
prometheus-node-exporter-pdrq7                  0/1    ContainerCreating  0         1s
prometheus-alertmanager-7b945bb544-87knh        0/2    ContainerCreating  0         1s
prometheus-kube-state-metrics-86996f7fff-tfm92  0/1    Pending            0         1s
prometheus-pushgateway-b9477487f-42bhh          0/1    Pending            0         1s
prometheus-server-6f9d569489-q75mx              0/2    Pending            0         1s

==> v1/PersistentVolumeClaim

NAME                     AGE
prometheus-alertmanager  1s
prometheus-server        1s

==> v1beta1/ClusterRole
prometheus-kube-state-metrics  1s
prometheus-server              1s

==> v1beta1/ClusterRoleBinding
prometheus-kube-state-metrics  1s
prometheus-server              1s

==> v1/Service
prometheus-alertmanager        1s
prometheus-kube-state-metrics  1s
prometheus-node-exporter       1s
prometheus-pushgateway         1s
prometheus-server              1s

==> v1beta1/DaemonSet
prometheus-node-exporter  1s

==> v1/ConfigMap
prometheus-alertmanager  1s
prometheus-server        1s

==> v1/ServiceAccount
prometheus-alertmanager        1s
prometheus-kube-state-metrics  1s
prometheus-node-exporter       1s
prometheus-pushgateway         1s
prometheus-server              1s

==> v1beta1/Deployment
prometheus-alertmanager        1s
prometheus-kube-state-metrics  1s
prometheus-pushgateway         1s
prometheus-server              1s


NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.pg.svc.cluster.local


Get the Prometheus server URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace pg -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace pg port-forward $POD_NAME 9090


The Prometheus alertmanager can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-alertmanager.pg.svc.cluster.local


Get the Alertmanager URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace pg -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace pg port-forward $POD_NAME 9093


The Prometheus PushGateway can be accessed via port 9091 on the following DNS name from within your cluster:
prometheus-pushgateway.pg.svc.cluster.local


Get the PushGateway URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace pg -l "app=prometheus,component=pushgateway" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace pg port-forward $POD_NAME 9091

For more information on running Prometheus, visit:
https://prometheus.io/

로컬머신에서 Prometheus 접속하기

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods --namespace pg -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --kubeconfig=$KUBE_CONFIG --namespace pg port-forward $POD_NAME 9090

위 명령 실행 후 브라우저에서 다음 링크로 Prometheus에 접속할 수 있습니다.

Grafana 설치

Grafana를 설치하기 전에 Prometheus와 연동을 설정하기 위해 아래 values.yml을 먼저 작성합니다. datasources.url의 값은 http://<prometheus-server-name>입니다. 위 가이드대로 진행했다면 <prometheus-server-name>prometheus-server이므로 http://prometheus-server로 설정합니다.

values.yml

persistence:
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: 5Gi

datasources:
 datasources.yaml:
   apiVersion: 1
   datasources:
   - name: Prometheus
     type: prometheus
     url: http://prometheus-server
     access: proxy
     isDefault: true

dashboards:
    kube-dash:
      gnetId: 6663
      revision: 1
      datasource: Prometheus
    kube-official-dash:
      gnetId: 2
      revision: 1
      datasource: Prometheus

dashboardProviders:
  dashboardproviders.yaml:
    apiVersion: 1
    providers:
    - name: 'default'
      orgId: 1
      folder: ''
      type: file
      disableDeletion: false
      editable: true
      options:
        path: /var/lib/grafana/dashboards

위 파일 작성 후 -f values.yml 옵션과 함께 Helm을 이용하여 Grafana를 설치합니다.

Helm으로 Grafana 설치

$ helm --kubeconfig=$KUBE_CONFIG install --name grafana stable/grafana --version 1.11.6 -f values.yml --namespace pg
NAME:   grafana
LAST DEPLOYED: Thu Feb 28 14:38:24 2019
NAMESPACE: pg
STATUS: DEPLOYED

RESOURCES:
==> v1beta1/RoleBinding
NAME     AGE
grafana  0s

==> v1/Service
grafana  0s

==> v1beta2/Deployment
grafana  0s

==> v1/Pod(related)

NAME                      READY  STATUS   RESTARTS  AGE
grafana-76dbd66b77-d2dkl  0/1    Pending  0         0s

==> v1beta1/PodSecurityPolicy

NAME     AGE
grafana  0s

==> v1/Secret
grafana  0s

==> v1/ConfigMap
grafana                  0s
grafana-dashboards-json  0s

==> v1/ClusterRole
grafana-clusterrole  0s

==> v1/PersistentVolumeClaim
grafana  0s

==> v1/ServiceAccount
grafana  0s

==> v1/ClusterRoleBinding
grafana-clusterrolebinding  0s

==> v1beta1/Role
grafana  0s


NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace pg grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:

   grafana.pg.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:

     export POD_NAME=$(kubectl get pods --namespace pg -l "app=grafana,component=" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace pg port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin

Secret을 통해 Grafana 접속 계정의 비밀번호 확인하기

$ kubectl --kubeconfig=$KUBE_CONFIG get secret --namespace pg grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

로컬머신에서 Grafana 접속하기

$ export POD_NAME=$(kubectl --kubeconfig=$KUBE_CONFIG get pods --namespace pg -l "app=grafana" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --kubeconfig=$KUBE_CONFIG --namespace pg port-forward $POD_NAME 3000

위 명령을 실행 후 Secret을 통해 얻은 비밀번호로 아래 링크에서 Grafana 대시보드에 접속할 수 있습니다.

대시보드 추가하기

연동된 Prometheus의 data를 이용해 모니터링하기 위해서는 아래 두 개의 Kubernetes용 대시보드를 추가해주어야합니다.

  1. Grafana의 좌측 메뉴에서 Create > import 버튼을 선택합니다.

  1. 위의 대시보드 링크를 입력 후 Load합니다.

  1. data source를 Prometheus로 선택 후 import 버튼을 선택합니다.

  1. import가 완료되면 위처럼 대시보드를 확인할 수 있습니다.

  2. 다른 대시보드도 동일한 방법으로 추가합니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...