본문 바로가기
Back Side/etc

Helm을 이용해서 k8s에 Redis 넣기

by developerBeluga 2023. 12. 21.
728x90
반응형

 

 

Helm으로 k8s에 Redis 추가하기

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm에서 redis repo을 가지고 온다.

 

helm install my-redis bitnami/redis --set auth.password=my-password

이렇게 해주면 비번까지 설정할 수 있다.

redis에 중요한 데이터를 넣지는 않겠지만 그래도 데이터베이스 비번 설정은 중요하니 넣어주자.

 

kubectl exec -it [pod 이름] -- redis-cli

redis에 접속하자.

ping이라도 해보려고 했더니 (error) NOAUTH Authentication required가 나온다.

 

kubectl exec -it [pod 이름] -- redis-cli -a [설정한 비번]

비번을 뒤에 넣어줘야지 ping을 할 수 있다.

 

 

 

 

NodeJS에서 Redis 연결하기

      const client = redis.createClient({
        url: 'redis://[redis service 이름].default.svc.cluster.local:6379',
        password:[비밀번호],
        retry_strategy: function(options) {
          return new Error('No retry, as only one attempt is allowed');
        }
      });

redis를 nodejs에서 사용할 경우 host와 port을 지정해줘야 한다.

mongodb랑 다른 점인데 k8s에서 redis 내부 통신을 해주기 위해서는 [service-name].[namespace-name].svc.cluster.local로 해줘야 한다.

service 이름을 모르겠다면 kubectl get svc 해주면 되고 나처럼 helm으로 했다면 redis-master일거다.

그럼 redis-master.svc.cluster.local을 적어주면 된다 👍

 

그리고 host, port로 했는데 안 되고 url로 해야한다.

 

추가로 retry_strategy에 나와 같이 해주면 연결 실패시 재연결을 시도하지 않는다.

 

 

+) hset을 쓰고 싶다면

Redis는 key-value 이렇게가 한 쌍이기 때문에 여러개를 한 번에 넣고 싶다면 hset을 써야 한다.

 

        client.hset(`code:${id}`, 
        'num', 'ber',  (err, res) => {
          if (err) {
          	...
          } else {
          	...
          }
        });

이렇게 코드를 만들었는데 TypeError: client.hset is not a function가 나왔다.

 

        client.hSet(`code:${id}`, 'num', 'ber');

Redis 공식문서를 참고해서 수정하니 잘 됐다.

https://redis.io/docs/connect/clients/nodejs/

 

잘 들어갔는지 확인하고 싶다면 터미널에서 Redis에 접속하고 HGETALL [key이름]을 넣으면 된다.

 

 

 

 

+) 몇 초 후 자동으로 필드 삭제하고 싶다면

client.expire(`code:${id}`, TTL);

TTL은 Time-To-Live로 300을 넣으면 5분을 의미한다.

60을 넣으면 1분이다.

 

 

 

 

 

 

 

fin.

728x90
반응형

댓글