[Kubernetes/CloudSQL] CloudSQL Proxy 사용시 CrashLoopBackOff 에러

구글 클라우드를 사용해서 CloudSQL로 MySQL 을 사용하고 있다.

다만 워낙 DB의 속도가 안나와서 보니, 내가 자꾸만 같은 zone안에 있는데도 public ip를 통해 DB에 접속하곤 하더라. 허허, 이게 왠짓이여.

그래서 우선 DB를 새로 만들어서 같은 zone에 위치하게 한 이후, 로컬연결을 시도해봤다. 본래 container engine을 사용해서 서비스를 돌리므로, kubernetes로  orchestration을 하는 편이다. 그래서 아래와 같은 메뉴얼을 찾음.

https://cloud.google.com/sql/docs/mysql/connect-kubernetes-engine

그런데 이를 따라하다 보니, kubectl apply -f deployment.yaml 같이 하니깐 계속 pod이 죽더라. CrashLoopBackOff에러가 나는데 에러 로그 자체가 없다…

어떻게 할까 하다가 정말 별별 삽질을 다 했다. 우선 cloudsql-proxy의 소스파일인

https://github.com/GoogleCloudPlatform/cloudsql-proxy

이를 다운받고, go로 컴파일 해서 db에 접속 시도해봤는데, 잘된다 응?

그래서 kubectl get secrets로 확인해보니 키도 잘 있다. 뭐지…

결국 찾은 답.

우선 pod이름을 찾는다.

그리고 로그를 보는데, 중요한건 컨테이너 설정을 해서 cloudsql-proxy에 해당하는 로그를 봐야한다는 점.

나의 경우는, 하나의 deployment.yaml파일에 두 개의 컨테이너가 있다.

https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/master/cloudsql/mysql_wordpress_deployment.yaml

구글에서 준 워드프레스 예제인 위와 같은 파일에도 보면, web이랑 cloudsql-proxy의 두 개의 컨테이너가 존재.

그래서 그냥 따라해봤는데 안된다. log를 pod단위로 해보니 (ex. kubectl logs <POD_ID>) 이것도 에러나서 안나온다.

그런데 pod의 container단위로 해보니 로그가 나온다.

kubectl logs <POD_ID> -c cloudsql-proxy

보니깐 구글에서 준 예제에는 /secrets/cloudsq/credentials.json 이 파일로 인증한다 하는데 이 파일을 찾을 수 없다는것!

그래서 보니, kubectl describe secrets 로 확인해보니 내 키 이름이 다른 이름이다.

그래서 yaml파일에 키 이름을 수정해주니 정말 거짓말처럼 엄청나게 잘 작동한다… 물론 이젠 또 jdbc 연결설정이 남았지만 ㅎㅎㅎ

오늘 얻은 교훈: 예제만 믿다 밤샌다.