본문 바로가기
클라우드 및 인프라/Kubernetes

[Helm] helm 으로 Grafana, Redis 설치하고 Grafana에 Redis 연결하기

by 작은소행성 2023. 4. 28.

Helm 설치하기

helm 설치는 여기를 참고한다. 

 

Redis 설치하기

redis는 Helm repository를 통해서 설치하고자 한다. 

ArtifactHUB에 접속해서 redis 를 검색해 사용하고자 하는 차트를 선택하거나

아래 링크로 접속한다. 

https://artifacthub.io/packages/helm/bitnami/redis

 

Redis Chart 설치하기

repo 를 추가안하면 설치가 안된다. 

공식 문서 내용 그대로 my-release 이름으로 설치해주었다. 이름은 편한대로 설정한다. 

## repo 추가 안하면 설치 안됨
helm repo add my-repo https://charts.bitnami.com/bitnami
## redis 설치하기
helm install my-release my-repo/redis

helm install my-release my-repo/redis
NAME: my-release
LAST DEPLOYED: Thu Apr 20 13:39:44 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis
CHART VERSION: 17.9.5
APP VERSION: 7.0.11

** Please be patient while the chart is being deployed **

Redis® can be accessed on the following DNS names from within your cluster:

    my-release-redis-master.default.svc.cluster.local for read/write operations (port 6379)
    my-release-redis-replicas.default.svc.cluster.local for read-only operations (port 6379)



To get your password run:

    export REDIS_PASSWORD=$(kubectl get secret --namespace default my-release-redis -o jsonpath="{.data.redis-password}" | base64 -d)

To connect to your Redis® server:

1. Run a Redis® pod that you can use as a client:

   kubectl run --namespace default redis-client --restart='Never'  --env REDIS_PASSWORD=$REDIS_PASSWORD  --image docker.io/bitnami/redis:7.0.11-debian-11-r0 --command -- sleep infinity

   Use the following command to attach to the pod:

   kubectl exec --tty -i redis-client \
   --namespace default -- bash

2. Connect using the Redis® CLI:
   REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h my-release-redis-master
   REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h my-release-redis-replicas

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/my-release-redis-master 6379:6379 &
    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379

설치하면 위의 내용이 나온다. 

위의 내용은 redis 설치후 비밀번호나 클러스터 실행까지 필요한 내용이 들어있다. 

 

 

비밀번호 정보

아래 명령어는 환경변수에 Redis 비밀번호를 저장해두는 것이고 

저장하지 않고 비밀번호만 보고싶으면 $() 안에 있는 kubectl 명령어만 입력한다. 

## 환경변수에 비밀번호 저장하기
export REDIS_PASSWORD=$(kubectl get secret --namespace default my-release-redis -o jsonpath="{.data.redis-password}" | base64 -d)
## 저장한 비밀번호 확인하기 
echo $REDIS_PASSWORD

 

Redis 실행시키기

파드 생성하기

Redis 를 실행시키기 위해 아래 명령어로 redis-client 이름으로 레디스를 실행시킨다. 

그럼 파드가 생성된 것을 볼 수 있다. 

redis-client 파드에 bash로 접속하기 

redis 에 접속하기 

redis-client 에 접속한 상태에서 master 나 replicas 로 접속할 수 있고

redis-client 에 접속하지 않고도 redis에 접속할 수 있다. 

-a 뒤에 알파벳에는 본인의 패스워드를 입력하면 된다. 

$ redis-cli -h 127.0.0.1 -p 6379 -a {레디스비밀번호}

-h : host ip address

-p : port number

-a : password

password는 위에  REDIS_PASSWORD 이름으로 저장해둔 곳을 참고하면 된다. 

 

Redis 실행중인지 확인하기

ping 입력했을 때 pong 이 나오면 Running 중인것이다. 

 

Redis 포트포워딩 하기 

nodeport 의 포트를 변경해주었다. 

아래 내용으로 안되면 첫번째 줄에 & 까지만 입력한다. (& 의 뜻은 백그라운드에서 실행한다는 뜻이다)

kubectl port-forward --namespace default svc/my-release-redis-master 6379:6379 &
    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379

위의 명령어 실행으로 포트포워딩 성공 후 url 에 접속해보면 연결되는 것을 확인할 수 있다. 

백그라운드에서 실행 안했을 때
백그라운드에서 실행 했을 때

++ error

6379 포트가 이미 사용중이라면서 포트포워딩이 안되었다. 

이런 경우에는 6379 포트를 삭제했다가 다시 실행시켜주면 된다. 

ps -ef | grep 6379
kill -9 {UID}

 

 

Grafana 설치하기

grafana 도 위에 redis 처럼 ArtifactHUB에서 검색해서 설치한다. 

https://artifacthub.io/packages/helm/grafana/grafana

 

Helm repository 다운받기

grafana 를 다운받고 helm 레포지토리를 업데이트 해준다.

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

 

Helm 으로 Grafana 차트 설치하기 

helm install my-release grafana/grafana

위에서 이미 my-release 이름을 사용하고 있어서 설치가 안됬다. 

이름을 변경해서 다시 설치를 시도했다. 

helm install my-release-grafana grafana/grafana

 helm install my-release-grafana grafana/grafana
NAME: my-release-grafana
LAST DEPLOYED: Thu Apr 20 14:14:57 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace default my-release-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:

   my-release-grafana.default.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:
     export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=my-release-grafana" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace default port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin
#################################################################################
######   WARNING: Persistence is disabled!!! You will lose your data when   #####
######            the Grafana pod is terminated.                            #####
#################################################################################

 

pod 생성후 비밀번호 보기 

환경변수에 pod name 저장하기 

환경변수에 Pod name 은 저장하지 않아도 된다. 

 

그라파나 포트포워딩

3000포트로 포트포워딩 시켰다. 

 

접속하기 

email or username : admin

password : 밑에 이미지의 결과에 나온 데이터가 비밀번호이다.

 

 

values.yaml 사용해서 grafana 설치하기

네임스페이스 생성하기 

# 네임스페이스 조회하기 
kubectl get ns
# 네임스페이스 생성하기
kubectl create namespace monitoring

 

 

values.yaml 을 사용하기 위해 git repository 를 가져온다. 

git clone https://github.com/grafana/helm-charts.git

그라파나 파일 위치로 이동한다. 

$ cd helm-charts/charts/grafana

 

values.yaml 파일을 열어서 Web UI에서 사용할 admin 계정의 비밀번호를 설정해줍니다.

$ cd helm-charts/charts/grafana
$ vi values.yaml
## vi 창에서 / 입력 후 원하는 문자열 검색해서 찾기

포트포워딩을 위한  nodePort 포트번호 추가하고 type은 NodePort 로 변경한다. 

service:
  enabled: true
  type: NodePort ## ClusterIP -> NodePort 변경하기
  port: 80
  targetPort: 3000
  nodePort: 31000 ## nodePort 추가
    # targetPort: 4181 To be used with a proxy extraContainer
  ## Service annotations. Can be templated.
  annotations: {}
  labels: {}
  portName: service
  # Adds the appProtocol field to the service. This allows to work with istio protocol selection. Ex: "http" or "tcp"
  appProtocol: ""

포트 번호의 범위는 30000-32767 로 설정해준다.

 

 

위에서 생성한 네임스페이스에 그라파나 설치하기 

helm install grafana grafana/grafana -f values.yaml --namespace monitoring
$ helm install grafana grafana/grafana -f values.yaml --namespace monitoring
NAME: grafana
LAST DEPLOYED: Wed Apr 26 13:15:51 2023
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace monitoring 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.monitoring.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:
     export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace monitoring port-forward $POD_NAME 3000

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

 

 

++ error

만약 helm install 후 다음과 같은 경고가나오면 아래 persistence 에서 enable 값을  false -> true 변경해준다.

WARNING: Persistence is disabled!!! You will lose your data when the Grafana pod is terminated.                       

## vi 창에서 / 입력 후 원하는 문자열 검색해서 찾기

-----------------------------
...

persistence:
  type: pvc
  enabled: true
  
...
-----------------------------

 

helm install 후 values.yaml 의 내용을 변경했으면 helm upgrade 를 해준다.

helm upgrade grafana grafana/grafana -f values.yaml --namespace monitoring
helm upgrade grafana grafana/grafana -f values.yaml --namespace monitoring
Release "grafana" has been upgraded. Happy Helming!
NAME: grafana
LAST DEPLOYED: Wed Apr 26 13:34:19 2023
NAMESPACE: monitoring
STATUS: deployed
REVISION: 3
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace monitoring 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.monitoring.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:
     export NODE_PORT=$(kubectl get --namespace monitoring -o jsonpath="{.spec.ports[0].nodePort}" services grafana)
     export NODE_IP=$(kubectl get nodes --namespace monitoring -o jsonpath="{.items[0].status.addresses[0].address}")
     echo http://$NODE_IP:$NODE_PORT

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

REVISION 에 있는 숫자는 업그레이드를 진행한 숫자이다. 

 

설치 확인하기

설치가 완료되면 pod과 service를 확인한다.

포트포워딩도 잘 되어 있는지 확인한다.

 

아래 명령어를 치면 비밀번호를 확인할 수 있다. 

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

 

nodePort 에 설정한 포트번호로 접속한다. 

 

++ error

values.yaml 에서 비밀번호 변경하고 upgrade 를 해도 변경한 비밀번호가 되지 않았다. 

그래서 helm 에 설치되어 있는 파일을 삭제하고 다시 설치를 진행했다.

 

helm ls 확인 및 파일 삭제

$ helm ls -n monitoring
$ helm delete grafana -n monitoring

 

Grafana 랑 Redis 연결하기 

그라파나는 깡통이라서 datasource 에 redis 를 연결해주어야 한다. 

그 전에 redis 플러그인을 설치한다. 

 

설정 > 플러그인 > redis 검색 > redis 선택 > install 

 

Redis 를 import 시켜준다. 

설정 > data source > Redis > Dashboards > import 클릭

 

DataSource 에 Redis 정보 입력하기 

설정 > data source > Redis > address 정보 입력해주기

address 에는 Redis 설치 시 나오는 정보를 입력해주면 된다. 

 

그럼 아래와 같이 연결된것을 확인할 수 있다. 

 

 

 

반응형